From 25a5bd568ad8893c484b016e05c3fe3214a34a25 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Wed, 14 Dec 2022 09:51:33 -0800 Subject: [PATCH] Fix entity-filter handling of numeric states for == and != operators. (#14726) Co-authored-by: Bram Kragten fixes undefined --- src/panels/lovelace/common/evaluate-filter.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/panels/lovelace/common/evaluate-filter.ts b/src/panels/lovelace/common/evaluate-filter.ts index 70a9837c77..9bc190e494 100644 --- a/src/panels/lovelace/common/evaluate-filter.ts +++ b/src/panels/lovelace/common/evaluate-filter.ts @@ -2,11 +2,24 @@ import { HassEntity } from "home-assistant-js-websocket"; export const evaluateFilter = (stateObj: HassEntity, filter: any): boolean => { const operator = filter.operator || "=="; - const value = filter.value ?? filter; - const state = filter.attribute + let value = filter.value ?? filter; + let state = filter.attribute ? stateObj.attributes[filter.attribute] : stateObj.state; + if (operator === "==" || operator === "!=") { + const valueIsNumeric = + typeof value === "number" || + (typeof value === "string" && value.trim() && !isNaN(Number(value))); + const stateIsNumeric = + typeof state === "number" || + (typeof state === "string" && state.trim() && !isNaN(Number(state))); + if (valueIsNumeric && stateIsNumeric) { + value = Number(value); + state = Number(state); + } + } + switch (operator) { case "==": return state === value;