Skip to content

Commit a397f5c

Browse files
FrancoLocovalleedelisle
authored andcommitted
Fixes pour compteurs individuels et cache arrays
J'ai un peu fouillé dans le code et je crois avoir réussi à mettre la méthode d'intégration left pour les compteurs d'énergie au lieu de trapezoidal qui était là actuellement, pour régler les problèmes de compteurs individuels surestimés. Pour ce qui est du unknown energy meter je crois que ca décale un peu car parfois le calcul est soit surestimé ou sous-estimé à cause des grandes variations du smart energy meter (à preuve ca tombe parfois dans le négatif). Bref j'ai trouvé un ajustement pour pouvoir faire en sorte que le compteur puisse redescendre quand c'est dans le négatif, ca devrait aider à être plus près de la vraie moyenne je crois. Et en fouillant dans ces bouts de code je suis tombé sur les bouts utilisés pour les prochains événements et aussi les récompenses qui se retrouvaient parfois avec des arrays vides, j'ai donc ajouté une petite gestion pour garder l'état précédent si quelque chose se passe mal, je crois que c'est ce qui arrive présentement, genre il doit y avoir un timeout ou un blocage hilo qui embarque parfois... comme on vidait le array dès le début de l'update on restait alors avec vide jusqu'au prochain update réussi... Bref ca roule de mon bord avec ces 4 petites modifs depuis hier et ca semble bien aller. fixes #80
1 parent 81644a2 commit a397f5c

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

custom_components/hilo/sensor.py

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33

44
from datetime import timedelta
55

6-
from homeassistant.components.integration.sensor import (
7-
TRAPEZOIDAL_METHOD,
8-
IntegrationSensor,
9-
)
6+
from homeassistant.components.integration.sensor import LEFT_METHOD, IntegrationSensor
107
from homeassistant.components.sensor import (
118
STATE_CLASS_MEASUREMENT,
129
STATE_CLASS_TOTAL_INCREASING,
@@ -252,6 +249,7 @@ def __init__(self, device):
252249
self._attr_name = f"hilo_energy_{slugify(device.name)}"
253250
self._unit_of_measurement = ENERGY_WATT_HOUR
254251
self._unit_prefix = None
252+
self._net_consumption = True
255253
if device.type == "Meter":
256254
self._attr_name = HILO_ENERGY_TOTAL
257255
self._unit_of_measurement = ENERGY_KILO_WATT_HOUR
@@ -268,7 +266,7 @@ def __init__(self, device):
268266
self._unit_prefix,
269267
"h",
270268
self._unit_of_measurement,
271-
TRAPEZOIDAL_METHOD,
269+
LEFT_METHOD,
272270
)
273271
self._state = 0
274272
self._last_period = 0
@@ -517,19 +515,22 @@ async def async_added_to_hass(self):
517515
self._state = last_state.state
518516

519517
async def _async_update(self):
520-
self._history = []
521518
seasons = await self._hilo._api.get_seasons(self._hilo.devices.location_id)
522-
for idx, season in enumerate(seasons):
523-
if idx == 0:
524-
self._state = season.get("totalReward", 0)
525-
events = []
526-
for raw_event in season.get("events", []):
527-
details = await self._hilo._api.get_gd_events(
528-
self._hilo.devices.location_id, event_id=raw_event["id"]
529-
)
530-
events.append(Event(**details).as_dict())
531-
season["events"] = events
532-
self._history.append(season)
519+
if seasons:
520+
new_history = []
521+
for idx, season in enumerate(seasons):
522+
if idx == 0:
523+
self._state = season.get("totalReward", 0)
524+
events = []
525+
for raw_event in season.get("events", []):
526+
details = await self._hilo._api.get_gd_events(
527+
self._hilo.devices.location_id, event_id=raw_event["id"]
528+
)
529+
events.append(Event(**details).as_dict())
530+
season["events"] = events
531+
new_history.append(season)
532+
self._history = []
533+
self._history = new_history
533534

534535

535536
class HiloChallengeSensor(HiloEntity, RestoreEntity, SensorEntity):
@@ -597,7 +598,7 @@ async def async_added_to_hass(self):
597598
self._next_events = last_state.attributes.get("next_events", [])
598599

599600
async def _async_update(self):
600-
self._next_events = []
601+
new_events = []
601602
events = await self._hilo._api.get_gd_events(self._hilo.devices.location_id)
602603
LOG.debug(f"Events received from Hilo: {events}")
603604
for raw_event in events:
@@ -607,10 +608,14 @@ async def _async_update(self):
607608
event = Event(**details)
608609
if self._hilo.appreciation > 0:
609610
event.appreciation(self._hilo.appreciation)
610-
self._next_events.append(event.as_dict())
611-
self._state = "off"
612-
if len(self._next_events):
613-
self._state = self._next_events[0]["state"]
611+
new_events.append(event.as_dict())
612+
if len(new_events):
613+
self._state = new_events[0]["state"]
614+
self._next_events = []
615+
self._next_events = new_events
616+
else:
617+
self._state = "off"
618+
self._next_events = []
614619

615620

616621
class DeviceSensor(HiloEntity, SensorEntity):

0 commit comments

Comments
 (0)