From bd1a9f2cb05823ef078986bc8a7defebdaa99885 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 27 Oct 2021 08:15:57 +0200 Subject: [PATCH] Add support for external stats (#10411) --- src/components/entity/ha-statistic-picker.ts | 12 ++++++++++-- src/data/history.ts | 2 ++ .../dialogs/dialog-energy-battery-settings.ts | 2 -- .../energy/dialogs/dialog-energy-device-settings.ts | 1 - .../energy/dialogs/dialog-energy-gas-settings.ts | 1 - .../dialogs/dialog-energy-grid-flow-settings.ts | 1 - .../energy/dialogs/dialog-energy-solar-settings.ts | 1 - .../statistics/developer-tools-statistics.ts | 13 ++++++++++--- .../lovelace/cards/hui-statistics-graph-card.ts | 2 +- src/panels/lovelace/common/has-changed.ts | 2 +- .../lovelace/common/process-config-entities.ts | 5 +++-- .../hui-statistics-graph-card-editor.ts | 2 +- 12 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/components/entity/ha-statistic-picker.ts b/src/components/entity/ha-statistic-picker.ts index 7cc6be7542..080a78a252 100644 --- a/src/components/entity/ha-statistic-picker.ts +++ b/src/components/entity/ha-statistic-picker.ts @@ -102,7 +102,12 @@ export class HaStatisticPicker extends LitElement { - + ${item.state + ? html`` + : ""} ${item.name} @@ -85,7 +84,6 @@ export class DialogEnergyBatterySettings .label=${this.hass.localize( "ui.panel.config.energy.battery.dialog.energy_out_of_battery" )} - entities-only @value-changed=${this._statisticFromChanged} > diff --git a/src/panels/config/energy/dialogs/dialog-energy-device-settings.ts b/src/panels/config/energy/dialogs/dialog-energy-device-settings.ts index 4a7002a8e3..e0ac123065 100644 --- a/src/panels/config/energy/dialogs/dialog-energy-device-settings.ts +++ b/src/panels/config/energy/dialogs/dialog-energy-device-settings.ts @@ -74,7 +74,6 @@ export class DialogEnergyDeviceSettings .label=${this.hass.localize( "ui.panel.config.energy.device_consumption.dialog.device_consumption_energy" )} - entities-only @value-changed=${this._statisticChanged} > diff --git a/src/panels/config/energy/dialogs/dialog-energy-gas-settings.ts b/src/panels/config/energy/dialogs/dialog-energy-gas-settings.ts index e4a4bf98ce..fa5c9062f7 100644 --- a/src/panels/config/energy/dialogs/dialog-energy-gas-settings.ts +++ b/src/panels/config/energy/dialogs/dialog-energy-gas-settings.ts @@ -106,7 +106,6 @@ export class DialogEnergyGasSettings ? "kWh" : "m³" })`} - entities-only @value-changed=${this._statisticChanged} > diff --git a/src/panels/config/energy/dialogs/dialog-energy-grid-flow-settings.ts b/src/panels/config/energy/dialogs/dialog-energy-grid-flow-settings.ts index 822470debe..0bb1ebf34e 100644 --- a/src/panels/config/energy/dialogs/dialog-energy-grid-flow-settings.ts +++ b/src/panels/config/energy/dialogs/dialog-energy-grid-flow-settings.ts @@ -103,7 +103,6 @@ export class DialogEnergyGridFlowSettings .label=${this.hass.localize( `ui.panel.config.energy.grid.flow_dialog.${this._params.direction}.energy_stat` )} - entities-only @value-changed=${this._statisticChanged} > diff --git a/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts b/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts index bcb5786097..320f94b1c0 100644 --- a/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts +++ b/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts @@ -85,7 +85,6 @@ export class DialogEnergySolarSettings .label=${this.hass.localize( "ui.panel.config.energy.solar.dialog.solar_production_energy" )} - entities-only @value-changed=${this._statisticChanged} > diff --git a/src/panels/developer-tools/statistics/developer-tools-statistics.ts b/src/panels/developer-tools/statistics/developer-tools-statistics.ts index 71963bfe6e..9c056b0fa5 100644 --- a/src/panels/developer-tools/statistics/developer-tools-statistics.ts +++ b/src/panels/developer-tools/statistics/developer-tools-statistics.ts @@ -50,21 +50,21 @@ class HaPanelDevStatistics extends LitElement { private _columns = memoizeOne( (localize): DataTableColumnContainer => ({ state: { - title: "Entity", + title: "Name", sortable: true, filterable: true, grows: true, template: (entityState, data: any) => html`${entityState ? computeStateName(entityState) - : data.statistic_id}`, + : data.name || data.statistic_id}`, }, statistic_id: { title: "Statistic id", sortable: true, filterable: true, hidden: this.narrow, - width: "30%", + width: "20%", }, unit_of_measurement: { title: "Unit", @@ -72,6 +72,12 @@ class HaPanelDevStatistics extends LitElement { filterable: true, width: "10%", }, + source: { + title: "Source", + sortable: true, + filterable: true, + width: "10%", + }, issues: { title: "Issue", sortable: true, @@ -146,6 +152,7 @@ class HaPanelDevStatistics extends LitElement { this._data.push({ statistic_id: statisticId, unit_of_measurement: "", + source: "", state: this.hass.states[statisticId], issues: issues[statisticId], }); diff --git a/src/panels/lovelace/cards/hui-statistics-graph-card.ts b/src/panels/lovelace/cards/hui-statistics-graph-card.ts index 01ac71e297..f82b650394 100644 --- a/src/panels/lovelace/cards/hui-statistics-graph-card.ts +++ b/src/panels/lovelace/cards/hui-statistics-graph-card.ts @@ -78,7 +78,7 @@ export class HuiStatisticsGraphCard extends LitElement implements LovelaceCard { } const configEntities = config.entities - ? processConfigEntities(config.entities) + ? processConfigEntities(config.entities, false) : []; this._entities = []; diff --git a/src/panels/lovelace/common/has-changed.ts b/src/panels/lovelace/common/has-changed.ts index 1675f49e20..a9d5fab797 100644 --- a/src/panels/lovelace/common/has-changed.ts +++ b/src/panels/lovelace/common/has-changed.ts @@ -52,7 +52,7 @@ export function hasConfigOrEntitiesChanged( const oldHass = changedProps.get("hass") as HomeAssistant; - const entities = processConfigEntities(element._config!.entities); + const entities = processConfigEntities(element._config!.entities, false); return entities.some( (entity) => diff --git a/src/panels/lovelace/common/process-config-entities.ts b/src/panels/lovelace/common/process-config-entities.ts index f17e2799d0..2dfa9a92a7 100644 --- a/src/panels/lovelace/common/process-config-entities.ts +++ b/src/panels/lovelace/common/process-config-entities.ts @@ -5,7 +5,8 @@ import { EntityConfig, LovelaceRowConfig } from "../entity-rows/types"; export const processConfigEntities = < T extends EntityConfig | LovelaceRowConfig >( - entities: Array + entities: Array, + checkEntityId = true ): T[] => { if (!entities || !Array.isArray(entities)) { throw new Error("Entities need to be an array"); @@ -35,7 +36,7 @@ export const processConfigEntities = < throw new Error(`Invalid entity specified at position ${index}.`); } - if (!isValidEntityId((config as EntityConfig).entity!)) { + if (checkEntityId && !isValidEntityId((config as EntityConfig).entity!)) { throw new Error( `Invalid entity ID at position ${index}: ${ (config as EntityConfig).entity 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 9eab0ed1d7..962d548981 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 @@ -61,7 +61,7 @@ export class HuiStatisticsGraphCardEditor assert(config, cardConfigStruct); this._config = config; this._configEntities = config.entities - ? processConfigEntities(config.entities).map((cfg) => cfg.entity) + ? processConfigEntities(config.entities, false).map((cfg) => cfg.entity) : []; }