@@ -88,6 +88,7 @@ def __init__(self, mac: str) -> None:
8888 self ._rollover_production = False
8989
9090 self ._hourly_reset = False
91+ self ._hourly_reset_passed = False
9192 self ._logs : dict [int , dict [int , PulseLogRecord ]] | None = None
9293 self ._log_addresses_missing : list [int ] | None = None
9394 self ._log_production : bool | None = None
@@ -187,28 +188,37 @@ def collected_pulses(
187188 if is_consumption and self ._pulses_consumption is not None :
188189 timestamp = self ._pulses_timestamp
189190 delta_cons_pulses = self ._pulses_consumption - self ._prev_pulses_consumption
190- pulses = self ._prev_pulses_consumption + delta_cons_pulses
191- self . _prev_pulses_consumption = pulses
192- if self ._hourly_reset :
191+ if self ._hourly_reset_passed :
192+ pulses = delta_cons_pulses + self . _prev_pulses_consumption
193+ elif self ._hourly_reset :
193194 pulses = delta_cons_pulses
194- 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
198195 self ._hourly_reset = False
196+ self ._hourly_reset_passed = True
197+ elif self ._pulsecounter_reset :
198+ pulses = self ._pulses_consumption + self ._prev_pulses_consumption
199+ self ._pulsecounter_reset = False
200+ else :
201+ pulses = self ._prev_pulses_consumption + delta_cons_pulses
202+
203+ self ._prev_pulses_consumption = pulses
204+
199205
200206 if not is_consumption and self ._pulses_production is not None :
201207 timestamp = self ._pulses_timestamp
202208 delta_prod_pulses = self ._pulses_production - self ._prev_pulses_production
203- pulses = self ._prev_pulses_production + delta_prod_pulses
204- self . _prev_pulses_production = pulses
205- if self ._hourly_reset :
209+ if self ._hourly_reset_passed :
210+ pulses = delta_prod_pulses + self . _prev_pulses_production
211+ elif self ._hourly_reset :
206212 pulses = delta_prod_pulses
207- self ._prev_pulses_production = 0
208- if self ._pulsecounter_reset :
209- pulses = self ._prev_pulses_production + self ._prev_pulses_production
210- self ._prev_pulses_production = pulses
211213 self ._hourly_reset = False
214+ self ._hourly_reset_passed = True
215+ elif self ._pulsecounter_reset :
216+ pulses = self ._pulses_consumption + self ._prev_pulses_production
217+ self ._pulsecounter_reset = False
218+ else :
219+ pulses = delta_prod_pulses + self ._prev_pulses_production
220+
221+ self ._prev_pulses_production = pulses
212222
213223 if pulses is None :
214224 _LOGGER .debug (
@@ -219,8 +229,8 @@ def collected_pulses(
219229 return (None , None )
220230
221231 _LOGGER .debug (
222- "_collect_pulses_from_logs | log_pulses =%s | is_consumption=%s | from %s to %s" ,
223- log_pulses ,
232+ "_collect_pulses_from_logs | pulses =%s | is_consumption=%s | from %s to %s" ,
233+ pulses ,
224234 is_consumption ,
225235 from_timestamp ,
226236 timestamp ,
@@ -241,22 +251,28 @@ def _collect_pulses_from_logs(
241251
242252 timestamp : datetime | None = None
243253 if is_consumption :
244- timestamp = self ._last_log_consumption_timestamp
245254 if self ._last_log_consumption_timestamp is None :
246255 _LOGGER .debug (
247256 "_collect_pulses_from_logs | %s | self._last_log_consumption_timestamp=None" ,
248257 self ._mac ,
249258 )
250259 return None
260+
261+ timestamp = self ._last_log_consumption_timestamp
262+ if from_timestamp > timestamp :
263+ self ._hourly_reset = True
251264 else :
252- timestamp = self ._last_log_production_timestamp
253265 if self ._last_log_production_timestamp is None :
254266 _LOGGER .debug (
255267 "_collect_pulses_from_logs | %s | self._last_log_production_timestamp=None" ,
256268 self ._mac ,
257269 )
258270 return None
259271
272+ timestamp = self ._last_log_production_timestamp
273+ if from_timestamp > timestamp :
274+ self ._hourly_reset = True
275+
260276 missing_logs = self ._logs_missing (from_timestamp )
261277 if missing_logs is None or missing_logs :
262278 _LOGGER .debug (
@@ -275,9 +291,6 @@ def _collect_pulses_from_logs(
275291 ):
276292 log_pulses += slot_item .pulses
277293
278- if from_timestamp > self ._last_log_consumption_timestamp or from_timestamp > self ._last_log_production_timestamp :
279- self ._hourly_reset = True
280-
281294 _LOGGER .debug (
282295 "_collect_pulses_from_logs | log_pulses=%s | is_consumption=%s | from %s to %s" ,
283296 log_pulses ,
@@ -314,8 +327,7 @@ def update_pulse_counter(
314327
315328 if cons_pulsecounter_reset or prod_pulsecounter_reset :
316329 self ._pulsecounter_reset = True
317- else :
318- self ._pulsecounter_reset = False
330+ self ._hourly_reset_passed = False
319331
320332 # No rollover based on time, check rollover based on counter reset
321333 # Required for special cases like nodes which have been powered off for several days
0 commit comments