diff --git a/src/data/recorder.ts b/src/data/recorder.ts index f98c5b75a8..42f9ad5342 100644 --- a/src/data/recorder.ts +++ b/src/data/recorder.ts @@ -1,7 +1,7 @@ import { computeStateName } from "../common/entity/compute_state_name"; import { HomeAssistant } from "../types"; -export type StatisticType = "sum" | "min" | "max" | "mean"; +export type StatisticType = "state" | "sum" | "min" | "max" | "mean"; export interface Statistics { [statisticId: string]: StatisticValue[]; diff --git a/src/panels/lovelace/cards/hui-statistics-graph-card.ts b/src/panels/lovelace/cards/hui-statistics-graph-card.ts index e1410e6511..47f737927a 100644 --- a/src/panels/lovelace/cards/hui-statistics-graph-card.ts +++ b/src/panels/lovelace/cards/hui-statistics-graph-card.ts @@ -90,7 +90,10 @@ export class HuiStatisticsGraphCard extends LitElement implements LovelaceCard { if (typeof config.stat_types === "string") { this._config = { ...config, stat_types: [config.stat_types] }; } else if (!config.stat_types) { - this._config = { ...config, stat_types: ["sum", "min", "max", "mean"] }; + this._config = { + ...config, + stat_types: ["state", "sum", "min", "max", "mean"], + }; } else { this._config = config; } diff --git a/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts index 19ae4fe15f..606b1d2166 100644 --- a/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts @@ -37,6 +37,7 @@ import { } from "../../../../data/recorder"; import { deepEqual } from "../../../../common/util/deep-equal"; import { statTypeMap } from "../../../../components/chart/statistics-chart"; +import { ensureArray } from "../../../../common/ensure-array"; const statTypeStruct = union([ literal("state"), @@ -192,7 +193,11 @@ export class HuiStatisticsGraphCardEditor ? Array.isArray(this._config!.stat_types) ? this._config!.stat_types : [this._config!.stat_types] - : stat_types; + : stat_types.filter((stat_type) => + this._metaDatas?.every((metaData) => + statisticsMetaHasType(metaData, statTypeMap[stat_type]) + ) + ); const data = { chart_type: "line", period: "hour", @@ -232,7 +237,7 @@ export class HuiStatisticsGraphCardEditor fireEvent(this, "config-changed", { config: ev.detail.value }); } - private _entitiesChanged(ev: CustomEvent): void { + private async _entitiesChanged(ev: CustomEvent): Promise { const config = { ...this._config!, entities: ev.detail.value }; if ( config.entities?.some((statistic_id) => statistic_id.includes(":")) && @@ -240,6 +245,17 @@ export class HuiStatisticsGraphCardEditor ) { delete config.period; } + if (config.stat_types && config.entities.length) { + const metadata = await getStatisticMetadata(this.hass!, config.entities); + config.stat_types = ensureArray(config.stat_types).filter((stat_type) => + metadata.every((metaData) => + statisticsMetaHasType(metaData, statTypeMap[stat_type]) + ) + ); + if (!config.stat_types.length) { + delete config.stat_types; + } + } fireEvent(this, "config-changed", { config, });