Skip to content

Commit 11d415d

Browse files
committed
api: add support for /consumptionDetails endpoint
1 parent cd21838 commit 11d415d

8 files changed

+688
-1
lines changed

build/index.d.ts

+6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
Country,
99
DefaultOverlay,
1010
Device,
11+
EnergyIQConsumptionDetails,
1112
EnergyIQMeterReadings,
1213
EnergyIQOverview,
1314
EnergyIQTariff,
@@ -188,6 +189,11 @@ export declare class Tado {
188189
setChildlock(serial_no: string, child_lock: boolean): Promise<void>;
189190
getAirComfort(home_id: number): Promise<AirComfort>;
190191
getAirComfortDetailed(home_id: number): Promise<AirComfortDetailed>;
192+
EnergyIQConsumptionDetails(
193+
home_id: number,
194+
month: number,
195+
year: number,
196+
): Promise<EnergyIQConsumptionDetails>;
191197
getEnergyIQOverview(home_id: number, month: number, year: number): Promise<EnergyIQOverview>;
192198
getEnergyIQTariff(home_id: number): Promise<EnergyIQTariff>;
193199
addEnergyIQTariff(

build/index.js

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/index.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/types/index.d.ts

+18
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,24 @@ export type EnergyIQOverview = {
531531
};
532532
ecogaz: unknown;
533533
};
534+
export type EnergyIQConsumptionDetailsSummary = {
535+
costInCents: number;
536+
costForecastInCents: number;
537+
averageDailyCostInCents: number;
538+
consumption: number;
539+
consumptionForecast: number;
540+
averageDailyConsumption: number;
541+
unit: IQUnit;
542+
tariff: {
543+
unit: IQUnit;
544+
unitPriceInCents: number;
545+
};
546+
};
547+
export type EnergyIQConsumptionDetails = {
548+
isInPreferredUnit: boolean;
549+
summary: EnergyIQConsumptionDetailsSummary;
550+
graphConsumption: EnergyIQOverview;
551+
};
534552
export type EnergyIQMeterReading = {
535553
id: string;
536554
homeId: number;

src/index.ts

+12
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
DeepPartial,
1212
DefaultOverlay,
1313
Device,
14+
EnergyIQConsumptionDetails,
1415
EnergyIQMeterReadings,
1516
EnergyIQOverview,
1617
EnergyIQTariff,
@@ -662,6 +663,17 @@ export class Tado {
662663
return this.apiCall(`https://acme.tado.com/v1/homes/${home_id}/airComfort?${location}`);
663664
}
664665

666+
async EnergyIQConsumptionDetails(
667+
home_id: number,
668+
month: number,
669+
year: number,
670+
): Promise<EnergyIQConsumptionDetails> {
671+
const date = `${year}-${month.toString().padStart(2, "0")}`;
672+
return this.apiCall(
673+
`https://energy-insights.tado.com/api/homes/${home_id}/consumptionDetails?month=${date}`,
674+
);
675+
}
676+
665677
async getEnergyIQOverview(
666678
home_id: number,
667679
month: number,

src/types/index.ts

+17
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,23 @@ export type EnergyIQOverview = {
592592
ecogaz: unknown;
593593
};
594594

595+
export type EnergyIQConsumptionDetailsSummary = {
596+
costInCents: number;
597+
costForecastInCents: number;
598+
averageDailyCostInCents: number;
599+
consumption: number;
600+
consumptionForecast: number;
601+
averageDailyConsumption: number;
602+
unit: IQUnit;
603+
tariff: { unit: IQUnit; unitPriceInCents: number };
604+
};
605+
606+
export type EnergyIQConsumptionDetails = {
607+
isInPreferredUnit: boolean;
608+
summary: EnergyIQConsumptionDetailsSummary;
609+
graphConsumption: EnergyIQOverview;
610+
};
611+
595612
export type EnergyIQMeterReading = {
596613
id: string;
597614
homeId: number;

test/index.test.js

+17
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const away_configuration_response = require("./response.away");
2323
const timetable_response = require("./response.timetable");
2424
const zone_overlay_response = require("./response.zone.overlay");
2525
const eneryIQOverview_response = require("./response.energyIQOverview");
26+
const eneryIQConsumptionDetails_response = require("./response.energyIQConsumptionDetails");
2627
const eneryIQ_tariff_response = require("./response.eneryIQ.tariff");
2728
const eneryIQ_meter_readings_response = require("./response.eneryIQ.meterReadings");
2829
const eneryIQ_savings_response = require("./response.eneryIQ.savings");
@@ -613,6 +614,22 @@ describe("High-level API tests", () => {
613614
.catch(done);
614615
});
615616

617+
it("Should get getEnergyIQConsumptionDetails", (done) => {
618+
nock("https://energy-insights.tado.com")
619+
.get("/api/homes/1907/consumptionDetails?month=2024-10")
620+
.reply(200, eneryIQConsumptionDetails_response);
621+
622+
tado
623+
.EnergyIQConsumptionDetails("1907", 10, 2024)
624+
.then((response) => {
625+
expect(typeof response).to.equal("object");
626+
expect(response.summary.averageDailyCostInCents).to.equal(164.7665);
627+
expect(response.graphConsumption).to.deep.equal(eneryIQOverview_response);
628+
done();
629+
})
630+
.catch(done);
631+
});
632+
616633
it("Should get energyIQ Tariff", (done) => {
617634
nock("https://energy-insights.tado.com")
618635
.get("/api/homes/1907/tariffs")

0 commit comments

Comments
 (0)