From 8b99d4678f54c439435137c19fec6e7ea354f8de Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Sat, 12 Aug 2023 09:10:25 +0200 Subject: [PATCH] Correct checks for non-finite numbers in ESPHome (#98102) --- homeassistant/components/esphome/entity.py | 4 ++-- homeassistant/components/esphome/number.py | 2 +- homeassistant/components/esphome/sensor.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/esphome/entity.py b/homeassistant/components/esphome/entity.py index 57ae33beb15..8b69d011804 100644 --- a/homeassistant/components/esphome/entity.py +++ b/homeassistant/components/esphome/entity.py @@ -105,8 +105,8 @@ def esphome_state_property( if not self._has_state: return None val = func(self) - if isinstance(val, float) and math.isnan(val): - # Home Assistant doesn't use NAN values in state machine + if isinstance(val, float) and not math.isfinite(val): + # Home Assistant doesn't use NaN or inf values in state machine # (not JSON serializable) return None return val diff --git a/homeassistant/components/esphome/number.py b/homeassistant/components/esphome/number.py index 4f3109f5a83..bc694ec39cf 100644 --- a/homeassistant/components/esphome/number.py +++ b/homeassistant/components/esphome/number.py @@ -73,7 +73,7 @@ class EsphomeNumber(EsphomeEntity[NumberInfo, NumberState], NumberEntity): def native_value(self) -> float | None: """Return the state of the entity.""" state = self._state - if state.missing_state or math.isnan(state.state): + if state.missing_state or not math.isfinite(state.state): return None return state.state diff --git a/homeassistant/components/esphome/sensor.py b/homeassistant/components/esphome/sensor.py index af873565fc3..efc77ff53b8 100644 --- a/homeassistant/components/esphome/sensor.py +++ b/homeassistant/components/esphome/sensor.py @@ -96,7 +96,7 @@ class EsphomeSensor(EsphomeEntity[SensorInfo, SensorState], SensorEntity): def native_value(self) -> datetime | str | None: """Return the state of the entity.""" state = self._state - if math.isnan(state.state) or state.missing_state: + if state.missing_state or not math.isfinite(state.state): return None if self._attr_device_class == SensorDeviceClass.TIMESTAMP: return dt_util.utc_from_timestamp(state.state)