Skip to content

Commit

Permalink
Merge pull request #64 from abn/add-consumptionDetails
Browse files Browse the repository at this point in the history
api: add support for /consumptionDetails endpoint
  • Loading branch information
mattdavis90 authored Oct 26, 2024
2 parents cd21838 + 11d415d commit edf6b61
Show file tree
Hide file tree
Showing 8 changed files with 688 additions and 1 deletion.
6 changes: 6 additions & 0 deletions build/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
Country,
DefaultOverlay,
Device,
EnergyIQConsumptionDetails,
EnergyIQMeterReadings,
EnergyIQOverview,
EnergyIQTariff,
Expand Down Expand Up @@ -188,6 +189,11 @@ export declare class Tado {
setChildlock(serial_no: string, child_lock: boolean): Promise<void>;
getAirComfort(home_id: number): Promise<AirComfort>;
getAirComfortDetailed(home_id: number): Promise<AirComfortDetailed>;
EnergyIQConsumptionDetails(
home_id: number,
month: number,
year: number,
): Promise<EnergyIQConsumptionDetails>;
getEnergyIQOverview(home_id: number, month: number, year: number): Promise<EnergyIQOverview>;
getEnergyIQTariff(home_id: number): Promise<EnergyIQTariff>;
addEnergyIQTariff(
Expand Down
6 changes: 6 additions & 0 deletions build/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion build/index.js.map

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions build/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -531,6 +531,24 @@ export type EnergyIQOverview = {
};
ecogaz: unknown;
};
export type EnergyIQConsumptionDetailsSummary = {
costInCents: number;
costForecastInCents: number;
averageDailyCostInCents: number;
consumption: number;
consumptionForecast: number;
averageDailyConsumption: number;
unit: IQUnit;
tariff: {
unit: IQUnit;
unitPriceInCents: number;
};
};
export type EnergyIQConsumptionDetails = {
isInPreferredUnit: boolean;
summary: EnergyIQConsumptionDetailsSummary;
graphConsumption: EnergyIQOverview;
};
export type EnergyIQMeterReading = {
id: string;
homeId: number;
Expand Down
12 changes: 12 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
DeepPartial,
DefaultOverlay,
Device,
EnergyIQConsumptionDetails,
EnergyIQMeterReadings,
EnergyIQOverview,
EnergyIQTariff,
Expand Down Expand Up @@ -662,6 +663,17 @@ export class Tado {
return this.apiCall(`https://acme.tado.com/v1/homes/${home_id}/airComfort?${location}`);
}

async EnergyIQConsumptionDetails(
home_id: number,
month: number,
year: number,
): Promise<EnergyIQConsumptionDetails> {
const date = `${year}-${month.toString().padStart(2, "0")}`;
return this.apiCall(
`https://energy-insights.tado.com/api/homes/${home_id}/consumptionDetails?month=${date}`,
);
}

async getEnergyIQOverview(
home_id: number,
month: number,
Expand Down
17 changes: 17 additions & 0 deletions src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,23 @@ export type EnergyIQOverview = {
ecogaz: unknown;
};

export type EnergyIQConsumptionDetailsSummary = {
costInCents: number;
costForecastInCents: number;
averageDailyCostInCents: number;
consumption: number;
consumptionForecast: number;
averageDailyConsumption: number;
unit: IQUnit;
tariff: { unit: IQUnit; unitPriceInCents: number };
};

export type EnergyIQConsumptionDetails = {
isInPreferredUnit: boolean;
summary: EnergyIQConsumptionDetailsSummary;
graphConsumption: EnergyIQOverview;
};

export type EnergyIQMeterReading = {
id: string;
homeId: number;
Expand Down
17 changes: 17 additions & 0 deletions test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const away_configuration_response = require("./response.away");
const timetable_response = require("./response.timetable");
const zone_overlay_response = require("./response.zone.overlay");
const eneryIQOverview_response = require("./response.energyIQOverview");
const eneryIQConsumptionDetails_response = require("./response.energyIQConsumptionDetails");
const eneryIQ_tariff_response = require("./response.eneryIQ.tariff");
const eneryIQ_meter_readings_response = require("./response.eneryIQ.meterReadings");
const eneryIQ_savings_response = require("./response.eneryIQ.savings");
Expand Down Expand Up @@ -613,6 +614,22 @@ describe("High-level API tests", () => {
.catch(done);
});

it("Should get getEnergyIQConsumptionDetails", (done) => {
nock("https://energy-insights.tado.com")
.get("/api/homes/1907/consumptionDetails?month=2024-10")
.reply(200, eneryIQConsumptionDetails_response);

tado
.EnergyIQConsumptionDetails("1907", 10, 2024)
.then((response) => {
expect(typeof response).to.equal("object");
expect(response.summary.averageDailyCostInCents).to.equal(164.7665);
expect(response.graphConsumption).to.deep.equal(eneryIQOverview_response);
done();
})
.catch(done);
});

it("Should get energyIQ Tariff", (done) => {
nock("https://energy-insights.tado.com")
.get("/api/homes/1907/tariffs")
Expand Down
Loading

0 comments on commit edf6b61

Please sign in to comment.