From c11fc76e7e5d2d47f81b4375a508bd8e8d250413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Stormwall?= Date: Mon, 27 Jul 2026 19:12:58 +0200 Subject: [PATCH] fix: state-to-watts conversion in case of non-w sensor --- .../easee_solar_charging/coordinator.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/custom_components/easee_solar_charging/coordinator.py b/custom_components/easee_solar_charging/coordinator.py index 0b2b3da..af3755d 100644 --- a/custom_components/easee_solar_charging/coordinator.py +++ b/custom_components/easee_solar_charging/coordinator.py @@ -75,6 +75,17 @@ class EaseeSolarCoordinator(DataUpdateCoordinator): ) self._setup_state_listeners() + @staticmethod + def _state_to_watts(state) -> float | None: + """Parse a power sensor state, converting kW → W when the unit says so.""" + try: + value = float(state.state) + except (ValueError, TypeError): + return None + if state.attributes.get("unit_of_measurement", "").upper() == "KW": + value *= 1000 + return value + def _setup_state_listeners(self) -> None: @callback def _on_state_change(event) -> None: @@ -82,9 +93,8 @@ class EaseeSolarCoordinator(DataUpdateCoordinator): new_state = event.data.get("new_state") if new_state is None or new_state.state in ("unknown", "unavailable"): return - try: - value = float(new_state.state) - except ValueError: + value = self._state_to_watts(new_state) + if value is None: return samples = self._samples[entity_id] samples.append((datetime.now(timezone.utc), value)) @@ -105,10 +115,7 @@ class EaseeSolarCoordinator(DataUpdateCoordinator): state = self.hass.states.get(entity_id) if state is None or state.state in ("unknown", "unavailable"): return None - try: - return float(state.state) - except ValueError: - return None + return self._state_to_watts(state) @property def _stop_grace(self) -> timedelta: