From efdabfc8a49b972327610c38fd4fcd31cc645aaa Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Tue, 12 Mar 2024 17:53:54 +0100 Subject: [PATCH] Update card is entity in condition change --- .../lovelace/badges/hui-entity-filter-badge.ts | 17 +++++++++++++++++ .../lovelace/cards/hui-entity-filter-card.ts | 18 ++++++++++++++++++ .../lovelace/common/validate-condition.ts | 17 +++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/src/panels/lovelace/badges/hui-entity-filter-badge.ts b/src/panels/lovelace/badges/hui-entity-filter-badge.ts index 8f76c99a1e..e6a889febe 100644 --- a/src/panels/lovelace/badges/hui-entity-filter-badge.ts +++ b/src/panels/lovelace/badges/hui-entity-filter-badge.ts @@ -6,6 +6,7 @@ import { processConfigEntities } from "../common/process-config-entities"; import { addEntityToCondition, checkConditionsMet, + extractConditionEntityIds, } from "../common/validate-condition"; import { createBadgeElement } from "../create-element/create-badge-element"; import { EntityFilterEntityConfig } from "../entity-rows/types"; @@ -155,8 +156,24 @@ export class HuiEntityFilterBadge if (this.hass.states[config.entity] !== oldHass.states[config.entity]) { return true; } + if (config.conditions) { + const entityIds = extractConditionEntityIds(config.conditions); + for (const entityId of entityIds) { + if (this.hass.states[entityId] !== oldHass.states[entityId]) { + return true; + } + } + } } + if (this._config?.conditions) { + const entityIds = extractConditionEntityIds(this._config?.conditions); + for (const entityId of entityIds) { + if (this.hass.states[entityId] !== oldHass.states[entityId]) { + return true; + } + } + } return false; } } diff --git a/src/panels/lovelace/cards/hui-entity-filter-card.ts b/src/panels/lovelace/cards/hui-entity-filter-card.ts index eb1f63dab9..0e0426a3b7 100644 --- a/src/panels/lovelace/cards/hui-entity-filter-card.ts +++ b/src/panels/lovelace/cards/hui-entity-filter-card.ts @@ -9,6 +9,7 @@ import { processConfigEntities } from "../common/process-config-entities"; import { addEntityToCondition, checkConditionsMet, + extractConditionEntityIds, } from "../common/validate-condition"; import { createCardElement } from "../create-element/create-card-element"; import { EntityFilterEntityConfig } from "../entity-rows/types"; @@ -212,6 +213,23 @@ export class HuiEntityFilterCard if (this.hass.states[config.entity] !== oldHass.states[config.entity]) { return true; } + if (config.conditions) { + const entityIds = extractConditionEntityIds(config.conditions); + for (const entityId of entityIds) { + if (this.hass.states[entityId] !== oldHass.states[entityId]) { + return true; + } + } + } + } + + if (this._config?.conditions) { + const entityIds = extractConditionEntityIds(this._config?.conditions); + for (const entityId of entityIds) { + if (this.hass.states[entityId] !== oldHass.states[entityId]) { + return true; + } + } } return false; diff --git a/src/panels/lovelace/common/validate-condition.ts b/src/panels/lovelace/common/validate-condition.ts index 87c2b5759e..f4de7793ca 100644 --- a/src/panels/lovelace/common/validate-condition.ts +++ b/src/panels/lovelace/common/validate-condition.ts @@ -180,6 +180,23 @@ export function checkConditionsMet( }); } +export function extractConditionEntityIds(conditions: Condition[]): string[] { + const entityIds: string[] = []; + for (const condition of conditions) { + if (condition.condition === "numeric_state") { + if (typeof condition.above === "string") { + entityIds.push(condition.above); + } + if (typeof condition.below === "string") { + entityIds.push(condition.below); + } + } else if ("conditions" in condition && condition.conditions) { + entityIds.push(...extractConditionEntityIds(condition.conditions)); + } + } + return entityIds; +} + function validateStateCondition(condition: StateCondition | LegacyCondition) { return ( condition.entity != null &&