From 2f4301151468db3e7b7a68b2c24045f94d523d35 Mon Sep 17 00:00:00 2001 From: duhow Date: Sun, 10 Mar 2024 22:03:21 +0100 Subject: [PATCH] fix show sum in energy statistics --- custom_components/aigues_barcelona/sensor.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/custom_components/aigues_barcelona/sensor.py b/custom_components/aigues_barcelona/sensor.py index 6929a76..3a73c1e 100644 --- a/custom_components/aigues_barcelona/sensor.py +++ b/custom_components/aigues_barcelona/sensor.py @@ -189,16 +189,28 @@ async def _clear_statistics(self) -> None: ) async def _async_import_statistics(self, consumptions) -> None: + # force sort by datetime + consumptions = sorted( + consumptions, key=lambda x: datetime.fromisoformat(x["datetime"]) + ) + + # TODO: Hay que cargar datos historicos para actualizar sum_total desde el primer registro. + # Conforme tengamos más datos para representar, aparecerá el fallo para depurar. + stats = list() + sum_total = 0.0 for metric in consumptions: start_ts = datetime.fromisoformat(metric["datetime"]) start_ts = start_ts.replace(minute=0, second=0, microsecond=0) # required + # round: fixes decimal with 20 digits precision + sum_total = round(sum_total + metric["deltaConsumption"], 4) stats.append( { "start": start_ts, "state": metric["accumulatedConsumption"], - # required to show in historic/recorder - "sum": metric["deltaConsumption"], + # -- required to show in historic/recorder + "sum": sum_total, + # "last_reset": start_ts, } ) metadata = { @@ -226,7 +238,7 @@ def __init__(self, coordinator) -> None: self._attr_has_entity_name = True self._attr_should_poll = False self._attr_device_class = SensorDeviceClass.WATER - self._attr_state_class = SensorStateClass.TOTAL_INCREASING + self._attr_state_class = SensorStateClass.TOTAL self._attr_native_unit_of_measurement = UnitOfVolume.CUBIC_METERS @property