diff --git a/src/data/energy.ts b/src/data/energy.ts index d562dc9bbf..154ba72cd5 100644 --- a/src/data/energy.ts +++ b/src/data/energy.ts @@ -240,15 +240,23 @@ export interface EnergyCollection extends Collection { export const getEnergyDataCollection = ( hass: HomeAssistant, - prefs?: EnergyPreferences + options: { prefs?: EnergyPreferences; key?: string } = {} ): EnergyCollection => { - if ((hass.connection as any)._energy) { - return (hass.connection as any)._energy; + let key = "_energy"; + if (options.key) { + if (!options.key.startsWith("energy_")) { + throw new Error("Key need to start with energy_"); + } + key = `_${options.key}`; + } + + if ((hass.connection as any)[key]) { + return (hass.connection as any)[key]; } const collection = getCollection( hass.connection, - "_energy", + key, async () => { if (!collection.prefs) { // This will raise if not found. @@ -304,7 +312,7 @@ export const getEnergyDataCollection = ( }; collection._active = 0; - collection.prefs = prefs; + collection.prefs = options.prefs; const now = new Date(); // Set start to start of today if we have data for today, otherwise yesterday collection.start = now.getHours() > 0 ? startOfToday() : startOfYesterday(); diff --git a/src/panels/energy/strategies/energy-strategy.ts b/src/panels/energy/strategies/energy-strategy.ts index ff033d1b25..c303c2bdbb 100644 --- a/src/panels/energy/strategies/energy-strategy.ts +++ b/src/panels/energy/strategies/energy-strategy.ts @@ -52,10 +52,11 @@ export class EnergyStrategy { (source) => source.type === "solar" ); - getEnergyDataCollection(hass, prefs); + getEnergyDataCollection(hass, { prefs, key: "energy_dashboard" }); view.cards!.push({ type: "energy-date-selection", + collection_key: "energy_dashboard", }); // Only include if we have a grid source. @@ -63,6 +64,7 @@ export class EnergyStrategy { view.cards!.push({ title: "Energy usage", type: "energy-usage-graph", + collection_key: "energy_dashboard", }); } @@ -71,6 +73,7 @@ export class EnergyStrategy { view.cards!.push({ title: "Solar production", type: "energy-solar-graph", + collection_key: "energy_dashboard", }); } @@ -80,6 +83,7 @@ export class EnergyStrategy { title: "Energy distribution", type: "energy-distribution", view_layout: { position: "sidebar" }, + collection_key: "energy_dashboard", }); } @@ -87,6 +91,7 @@ export class EnergyStrategy { view.cards!.push({ title: "Sources", type: "energy-sources-table", + collection_key: "energy_dashboard", }); } @@ -95,6 +100,7 @@ export class EnergyStrategy { view.cards!.push({ type: "energy-grid-neutrality-gauge", view_layout: { position: "sidebar" }, + collection_key: "energy_dashboard", }); } @@ -103,6 +109,7 @@ export class EnergyStrategy { view.cards!.push({ type: "energy-solar-consumed-gauge", view_layout: { position: "sidebar" }, + collection_key: "energy_dashboard", }); } @@ -111,6 +118,7 @@ export class EnergyStrategy { view.cards!.push({ type: "energy-carbon-consumed-gauge", view_layout: { position: "sidebar" }, + collection_key: "energy_dashboard", }); } @@ -119,6 +127,7 @@ export class EnergyStrategy { view.cards!.push({ title: "Monitor individual devices", type: "energy-devices-graph", + collection_key: "energy_dashboard", }); } diff --git a/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts b/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts index 3072fecf02..2752e867dc 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts @@ -45,7 +45,9 @@ class HuiEnergyCarbonGaugeCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass).subscribe((data) => { + getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }).subscribe((data) => { this._data = data; }), ]; diff --git a/src/panels/lovelace/cards/energy/hui-energy-date-selection-card.ts b/src/panels/lovelace/cards/energy/hui-energy-date-selection-card.ts index bde7487152..b58506988d 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-date-selection-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-date-selection-card.ts @@ -37,9 +37,9 @@ export class HuiEnergyDateSelectionCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass).subscribe((data) => - this._updateDates(data) - ), + getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }).subscribe((data) => this._updateDates(data)), ]; } @@ -103,7 +103,9 @@ export class HuiEnergyDateSelectionCard ) { return; } - const energyCollection = getEnergyDataCollection(this.hass); + const energyCollection = getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }); energyCollection.setPeriod(ev.detail.startDate, ev.detail.endDate); energyCollection.refresh(); } 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 61688949c9..372f61e60c 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 @@ -45,9 +45,9 @@ export class HuiEnergyDevicesGraphCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass).subscribe((data) => - this._getStatistics(data) - ), + getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }).subscribe((data) => this._getStatistics(data)), ]; } diff --git a/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts b/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts index 2f5ac887eb..2e0fe1b368 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts @@ -47,7 +47,9 @@ class HuiEnergyDistrubutionCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass).subscribe((data) => { + getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }).subscribe((data) => { this._data = data; }), ]; diff --git a/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts b/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts index 76fa9a9ae5..dd68c567ea 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts @@ -38,7 +38,9 @@ class HuiEnergyGridGaugeCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass!).subscribe((data) => { + getEnergyDataCollection(this.hass!, { + key: this._config?.collection_key, + }).subscribe((data) => { this._data = data; }), ]; diff --git a/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts b/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts index 42642a871e..3b3fca3bef 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts @@ -32,7 +32,9 @@ class HuiEnergySolarGaugeCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass!).subscribe((data) => { + getEnergyDataCollection(this.hass!, { + key: this._config?.collection_key, + }).subscribe((data) => { this._data = data; }), ]; diff --git a/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts index ce2a5d253f..8c066ec48b 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts @@ -58,9 +58,9 @@ export class HuiEnergySolarGraphCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass).subscribe((data) => - this._getStatistics(data) - ), + getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }).subscribe((data) => this._getStatistics(data)), ]; } diff --git a/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts b/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts index 68c1615ac6..7df70cce72 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts @@ -46,7 +46,9 @@ export class HuiEnergySourcesTableCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass).subscribe((data) => { + getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }).subscribe((data) => { this._data = data; }), ]; diff --git a/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts index 0045879545..ca64a24d6e 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts @@ -46,9 +46,9 @@ export class HuiEnergyUsageGraphCard public hassSubscribe(): UnsubscribeFunc[] { return [ - getEnergyDataCollection(this.hass).subscribe((data) => - this._getStatistics(data) - ), + getEnergyDataCollection(this.hass, { + key: this._config?.collection_key, + }).subscribe((data) => this._getStatistics(data)), ]; } diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts index f1b5ff096b..ad600bab67 100644 --- a/src/panels/lovelace/cards/types.ts +++ b/src/panels/lovelace/cards/types.ts @@ -92,45 +92,54 @@ export interface ButtonCardConfig extends LovelaceCardConfig { export interface EnergySummaryCardConfig extends LovelaceCardConfig { type: "energy-summary"; title?: string; + collection_key?: string; } export interface EnergyDistributionCardConfig extends LovelaceCardConfig { type: "energy-distribution"; title?: string; + collection_key?: string; } export interface EnergyUsageGraphCardConfig extends LovelaceCardConfig { type: "energy-summary-graph"; title?: string; + collection_key?: string; } export interface EnergySolarGraphCardConfig extends LovelaceCardConfig { type: "energy-solar-graph"; title?: string; + collection_key?: string; } export interface EnergyDevicesGraphCardConfig extends LovelaceCardConfig { type: "energy-devices-graph"; title?: string; + collection_key?: string; } export interface EnergySourcesTableCardConfig extends LovelaceCardConfig { type: "energy-sources-table"; title?: string; + collection_key?: string; } export interface EnergySolarGaugeCardConfig extends LovelaceCardConfig { type: "energy-solar-consumed-gauge"; title?: string; + collection_key?: string; } export interface EnergyGridGaugeCardConfig extends LovelaceCardConfig { type: "energy-grid-result-gauge"; title?: string; + collection_key?: string; } export interface EnergyCarbonGaugeCardConfig extends LovelaceCardConfig { type: "energy-carbon-consumed-gauge"; title?: string; + collection_key?: string; } export interface EntityFilterCardConfig extends LovelaceCardConfig {