diff --git a/src/data/energy.ts b/src/data/energy.ts index 4c9f4f962d..0d73a9994a 100644 --- a/src/data/energy.ts +++ b/src/data/energy.ts @@ -20,6 +20,7 @@ import { getStatisticMetadata, Statistics, StatisticsMetaData, + StatisticsUnitConfiguration, } from "./recorder"; const energyCollectionKeys: (string | undefined)[] = []; @@ -358,12 +359,19 @@ const getEnergyData = async ( // Subtract 1 hour from start to get starting point data const startMinHour = addHours(start, -1); + const lengthUnit = hass.config.unit_system.length || ""; + const units: StatisticsUnitConfiguration = { + energy: "kWh", + volume: lengthUnit === "km" ? "m³" : "ft³", + }; + const stats = await fetchStatistics( hass!, startMinHour, end, statIDs, - period + period, + units ); let statsCompare; @@ -385,7 +393,8 @@ const getEnergyData = async ( compareStartMinHour, endCompare, statIDs, - period + period, + units ); } diff --git a/src/data/recorder.ts b/src/data/recorder.ts index 22d1557c8e..f98c5b75a8 100644 --- a/src/data/recorder.ts +++ b/src/data/recorder.ts @@ -73,6 +73,23 @@ export interface StatisticsValidationResultUnsupportedUnitMetadata { }; } +export interface StatisticsUnitConfiguration { + energy?: "Wh" | "kWh" | "MWh"; + power?: "W" | "kW"; + pressure?: + | "Pa" + | "hPa" + | "kPa" + | "bar" + | "cbar" + | "mbar" + | "inHg" + | "psi" + | "mmHg"; + temperature?: "°C" | "°F" | "K"; + volume?: "ft³" | "m³"; +} + export interface StatisticsValidationResultUnsupportedUnitState { type: "unsupported_unit_state"; data: { statistic_id: string; device_class: string; metadata_unit: string }; @@ -105,7 +122,8 @@ export const fetchStatistics = ( startTime: Date, endTime?: Date, statistic_ids?: string[], - period: "5minute" | "hour" | "day" | "month" = "hour" + period: "5minute" | "hour" | "day" | "month" = "hour", + units?: StatisticsUnitConfiguration ) => hass.callWS({ type: "recorder/statistics_during_period", @@ -113,6 +131,7 @@ export const fetchStatistics = ( end_time: endTime?.toISOString(), statistic_ids, period, + units, }); export const validateStatistics = (hass: HomeAssistant) => @@ -204,13 +223,15 @@ export const adjustStatisticsSum = ( hass: HomeAssistant, statistic_id: string, start_time: string, - adjustment: number + adjustment: number, + display_unit: string ): Promise => hass.callWS({ type: "recorder/adjust_sum_statistics", statistic_id, start_time, adjustment, + display_unit, }); export const getStatisticLabel = ( diff --git a/src/panels/developer-tools/statistics/dialog-statistics-adjust-sum.ts b/src/panels/developer-tools/statistics/dialog-statistics-adjust-sum.ts index b9c54f3f6a..8598bf54f1 100644 --- a/src/panels/developer-tools/statistics/dialog-statistics-adjust-sum.ts +++ b/src/panels/developer-tools/statistics/dialog-statistics-adjust-sum.ts @@ -305,7 +305,8 @@ export class DialogStatisticsFixUnsupportedUnitMetadata extends LitElement { this.hass, this._params!.statistic.statistic_id, this._chosenStat!.start, - this._amount! - this._origAmount! + this._amount! - this._origAmount!, + this._params!.statistic.display_unit_of_measurement ); } catch (err: any) { this._busy = false; diff --git a/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts index 10cab6c299..a83e9ca54c 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts @@ -27,6 +27,7 @@ import { fetchStatistics, getStatisticLabel, Statistics, + StatisticsUnitConfiguration, } from "../../../../data/recorder"; import { FrontendLocaleData } from "../../../../data/translation"; import { SubscribeMixin } from "../../../../mixins/subscribe-mixin"; @@ -181,12 +182,19 @@ export class HuiEnergyDevicesGraphCard const startMinHour = addHours(energyData.start, -1); + const lengthUnit = this.hass.config.unit_system.length || ""; + const units: StatisticsUnitConfiguration = { + energy: "kWh", + volume: lengthUnit === "km" ? "m³" : "ft³", + }; + const data = await fetchStatistics( this.hass, startMinHour, energyData.end, devices, - period + period, + units ); Object.values(data).forEach((stat) => { @@ -211,7 +219,8 @@ export class HuiEnergyDevicesGraphCard startCompareMinHour, energyData.endCompare, devices, - period + period, + units ); Object.values(compareData).forEach((stat) => {