fix: state-to-watts conversion in case of non-w sensor
This commit is contained in:
@@ -75,6 +75,17 @@ class EaseeSolarCoordinator(DataUpdateCoordinator):
|
|||||||
)
|
)
|
||||||
self._setup_state_listeners()
|
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:
|
def _setup_state_listeners(self) -> None:
|
||||||
@callback
|
@callback
|
||||||
def _on_state_change(event) -> None:
|
def _on_state_change(event) -> None:
|
||||||
@@ -82,9 +93,8 @@ class EaseeSolarCoordinator(DataUpdateCoordinator):
|
|||||||
new_state = event.data.get("new_state")
|
new_state = event.data.get("new_state")
|
||||||
if new_state is None or new_state.state in ("unknown", "unavailable"):
|
if new_state is None or new_state.state in ("unknown", "unavailable"):
|
||||||
return
|
return
|
||||||
try:
|
value = self._state_to_watts(new_state)
|
||||||
value = float(new_state.state)
|
if value is None:
|
||||||
except ValueError:
|
|
||||||
return
|
return
|
||||||
samples = self._samples[entity_id]
|
samples = self._samples[entity_id]
|
||||||
samples.append((datetime.now(timezone.utc), value))
|
samples.append((datetime.now(timezone.utc), value))
|
||||||
@@ -105,10 +115,7 @@ class EaseeSolarCoordinator(DataUpdateCoordinator):
|
|||||||
state = self.hass.states.get(entity_id)
|
state = self.hass.states.get(entity_id)
|
||||||
if state is None or state.state in ("unknown", "unavailable"):
|
if state is None or state.state in ("unknown", "unavailable"):
|
||||||
return None
|
return None
|
||||||
try:
|
return self._state_to_watts(state)
|
||||||
return float(state.state)
|
|
||||||
except ValueError:
|
|
||||||
return None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _stop_grace(self) -> timedelta:
|
def _stop_grace(self) -> timedelta:
|
||||||
|
|||||||
Reference in New Issue
Block a user