@@ -87,6 +87,7 @@ def __init__(self, mac: str) -> None:
8787 self ._rollover_consumption = False
8888 self ._rollover_production = False
8989
90+ self ._hourly_reset = False
9091 self ._logs : dict [int , dict [int , PulseLogRecord ]] | None = None
9192 self ._log_addresses_missing : list [int ] | None = None
9293 self ._log_production : bool | None = None
@@ -174,7 +175,7 @@ def collected_pulses(
174175 return (None , None )
175176
176177 if (
177- log_pulses := self ._collect_pulses_from_logs (from_timestamp , is_consumption )
178+ log_pulses , reset := self ._collect_pulses_from_logs (from_timestamp , is_consumption )
178179 ) is None :
179180 _LOGGER .debug ("collected_pulses | %s | log_pulses:None" , self ._mac )
180181 return (None , None )
@@ -188,18 +189,24 @@ def collected_pulses(
188189 delta_cons_pulses = self ._pulses_consumption - self ._prev_pulses_consumption
189190 pulses = self ._prev_pulses_consumption + delta_cons_pulses
190191 self ._prev_pulses_consumption = pulses
191- if self ._pulsecounter_reset :
192- pulses = self . _pulses_consumption
192+ if self ._hourly_reset :
193+ pulses = delta_cons_pulses
193194 self ._prev_pulses_consumption = 0
195+ if self ._pulsecounter_reset :
196+ pulses = self ._pulses_consumption + self ._prev_pulses_consumption
197+ self ._prev_pulses_consumption = pulses
194198
195199 if not is_consumption and self ._pulses_production is not None :
196200 timestamp = self ._pulses_timestamp
197201 delta_prod_pulses = self ._pulses_production - self ._prev_pulses_production
198202 pulses = self ._prev_pulses_production + delta_prod_pulses
199203 self ._prev_pulses_production = pulses
200- if self ._pulsecounter_reset :
201- pulses = self . _pulses_production
204+ if self ._hourly_reset :
205+ pulses = delta_prod_pulses
202206 self ._prev_pulses_production = 0
207+ if self ._pulsecounter_reset :
208+ pulses = self ._prev_pulses_production + self ._prev_pulses_production
209+ self ._prev_pulses_production = pulses
203210
204211 if pulses is None :
205212 _LOGGER .debug (
@@ -222,8 +229,11 @@ def collected_pulses(
222229
223230 def _collect_pulses_from_logs (
224231 self , from_timestamp : datetime , is_consumption : bool
225- ) -> int | None :
226- """Collect all pulses from logs."""
232+ ) -> tuple [int , bool ] | None :
233+ """Collect all pulses from logs.
234+
235+ And return True when the from_timestamp rolls over to the next log_interval.
236+ """
227237 if self ._logs is None :
228238 _LOGGER .debug ("_collect_pulses_from_logs | %s | self._logs=None" , self ._mac )
229239 return None
@@ -236,14 +246,6 @@ def _collect_pulses_from_logs(
236246 self ._mac ,
237247 )
238248 return None
239-
240- timestamp = self ._last_log_consumption_timestamp
241- if (
242- from_timestamp > timestamp
243- and self ._pulsecounter_reset
244- ):
245- _LOGGER .debug ("_collect_pulses_from_logs | resetting log_pulses to 0" )
246- return 0
247249 else :
248250 if self ._last_log_production_timestamp is None :
249251 _LOGGER .debug (
@@ -252,14 +254,6 @@ def _collect_pulses_from_logs(
252254 )
253255 return None
254256
255- timestamp = self ._last_log_production_timestamp
256- if (
257- from_timestamp > timestamp
258- and self ._pulsecounter_reset
259- ):
260- _LOGGER .debug ("_collect_pulses_from_logs | resetting log_pulses to 0" )
261- return 0
262-
263257 missing_logs = self ._logs_missing (from_timestamp )
264258 if missing_logs is None or missing_logs :
265259 _LOGGER .debug (
@@ -278,13 +272,10 @@ def _collect_pulses_from_logs(
278272 ):
279273 log_pulses += slot_item .pulses
280274
281- _LOGGER .debug (
282- "_collect_pulses_from_logs | log_pulses=%s | is_consumption=%s | from %s to %s" ,
283- log_pulses ,
284- is_consumption ,
285- from_timestamp ,
286- timestamp ,
287- )
275+ self ._hourly_reset = False
276+ if from_timestamp > self ._last_log_consumption_timestamp or from_timestamp > self ._last_log_production_timestamp :
277+ self ._hourly_reset = True
278+
288279 return log_pulses
289280
290281 def update_pulse_counter (
0 commit comments