@@ -219,24 +219,16 @@ def _collect_pulses_from_logs(
219219 if self ._logs is None :
220220 _LOGGER .debug ("_collect_pulses_from_logs | %s | self._logs=None" , self ._mac )
221221 return None
222- if is_consumption :
223- if self ._last_log_consumption_timestamp is None :
224- _LOGGER .debug (
225- "_collect_pulses_from_logs | %s | self._last_log_consumption_timestamp=None" ,
226- self ._mac ,
227- )
228- return None
229- if from_timestamp > self ._last_log_consumption_timestamp :
230- return 0
231- else :
232- if self ._last_log_production_timestamp is None :
233- _LOGGER .debug (
234- "_collect_pulses_from_logs | %s | self._last_log_production_timestamp=None" ,
235- self ._mac ,
236- )
237- return None
238- if from_timestamp > self ._last_log_production_timestamp :
239- return 0
222+
223+ if self ._last_log_timestamp is None :
224+ _LOGGER .debug (
225+ "_collect_pulses_from_logs | %s | self._last_log_timestamp=None" ,
226+ self ._mac ,
227+ )
228+ return None
229+
230+ if from_timestamp > self ._last_log_timestamp :
231+ return 0
240232
241233 missing_logs = self ._logs_missing (from_timestamp )
242234 if missing_logs is None or missing_logs :
@@ -256,112 +248,38 @@ def _collect_pulses_from_logs(
256248 and slot_item .timestamp > from_timestamp
257249 ):
258250 log_pulses += slot_item .pulses
251+
259252 return log_pulses
260253
261254 def update_pulse_counter (
262255 self , pulses_consumed : int , pulses_produced : int , timestamp : datetime
263256 ) -> None :
264- """Update pulse counter."""
257+ """Update pulse counter, checking for rollover based on counter reset ."""
265258 self ._pulses_timestamp = timestamp
266- self ._update_rollover ()
267- if not (self ._rollover_consumption or self ._rollover_production ):
268- # No rollover based on time, check rollover based on counter reset
269- # Required for special cases like nodes which have been power off for several days
270- if (
271- self ._pulses_consumption is not None
272- and self ._pulses_consumption > pulses_consumed
273- ):
274- self ._rollover_consumption = True
275- _LOGGER .debug (
276- "_rollover_consumption | self._pulses_consumption=%s > pulses_consumed=%s" ,
277- self ._pulses_consumption ,
278- pulses_consumed ,
279- )
280-
281- if (
282- self ._pulses_production is not None
283- and self ._pulses_production < pulses_produced
284- ):
285- self ._rollover_production = True
286- _LOGGER .debug (
287- "_rollover_production | self._pulses_production=%s < pulses_produced=%s" ,
288- self ._pulses_production ,
289- pulses_produced ,
290- )
291-
292- self ._pulses_consumption = pulses_consumed
293- self ._pulses_production = pulses_produced
294-
295- def _update_rollover (self ) -> None :
296- """Update rollover states. Returns True if rollover is applicable."""
297- if self ._log_addresses_missing is not None and self ._log_addresses_missing :
298- return
299259 if (
300- self ._pulses_timestamp is None
301- or self ._last_log_consumption_timestamp is None
302- or self ._next_log_consumption_timestamp is None
260+ self ._pulses_consumption is not None
261+ and self ._pulses_consumption > pulses_consumed
303262 ):
304- # Unable to determine rollover
305- return
306-
307- if self ._pulses_timestamp > self ._next_log_consumption_timestamp :
308- self ._rollover_consumption = True
309- _LOGGER .debug (
310- "_update_rollover | %s | set consumption rollover => pulses newer" ,
311- self ._mac ,
312- )
313- elif self ._pulses_timestamp < self ._last_log_consumption_timestamp :
314263 self ._rollover_consumption = True
315264 _LOGGER .debug (
316- "_update_rollover | %s | set consumption rollover => log newer" ,
317- self ._mac ,
265+ "_rollover_consumption | self._pulses_consumption=%s > pulses_consumed=%s" ,
266+ self ._pulses_consumption ,
267+ pulses_consumed ,
318268 )
319- elif (
320- self ._last_log_consumption_timestamp
321- < self ._pulses_timestamp
322- < self ._next_log_consumption_timestamp
323- ):
324- if self ._rollover_consumption :
325- _LOGGER .debug ("_update_rollover | %s | reset consumption" , self ._mac )
326- self ._rollover_consumption = False
327- else :
328- _LOGGER .debug ("_update_rollover | %s | unexpected consumption" , self ._mac )
329-
330- if not self ._log_production :
331- return
332269
333270 if (
334- self ._last_log_production_timestamp is None
335- or self ._next_log_production_timestamp is None
271+ self ._pulses_production is not None
272+ and self ._pulses_production < pulses_produced
336273 ):
337- # Unable to determine rollover
338- return
339-
340- if not self ._log_production :
341- return
342-
343- if self ._pulses_timestamp > self ._next_log_production_timestamp :
344- self ._rollover_production = True
345- _LOGGER .debug (
346- "_update_rollover | %s | set production rollover => pulses newer" ,
347- self ._mac ,
348- )
349- elif self ._pulses_timestamp < self ._last_log_production_timestamp :
350274 self ._rollover_production = True
351275 _LOGGER .debug (
352- "_update_rollover | %s | reset production rollover => log newer" ,
353- self ._mac ,
276+ "_rollover_production | self._pulses_production=%s < pulses_produced=%s" ,
277+ self ._pulses_production ,
278+ pulses_produced ,
354279 )
355- elif (
356- self ._last_log_production_timestamp
357- < self ._pulses_timestamp
358- < self ._next_log_production_timestamp
359- ):
360- if self ._rollover_production :
361- _LOGGER .debug ("_update_rollover | %s | reset production" , self ._mac )
362- self ._rollover_production = False
363- else :
364- _LOGGER .debug ("_update_rollover | %s | unexpected production" , self ._mac )
280+
281+ self ._pulses_consumption = pulses_consumed
282+ self ._pulses_production = pulses_produced
365283
366284 def add_empty_log (self , address : int , slot : int ) -> None :
367285 """Add empty energy log record to mark any start of beginning of energy log collection."""
@@ -426,7 +344,6 @@ def add_log(
426344 return False
427345 self ._update_log_references (address , slot )
428346 self ._update_log_interval ()
429- self ._update_rollover ()
430347 if not import_only :
431348 self .recalculate_missing_log_addresses ()
432349 return True
@@ -554,17 +471,13 @@ def _log_exists(self, address: int, slot: int) -> bool:
554471 return True
555472
556473 def _update_last_log_reference (
557- self , address : int , slot : int , timestamp : datetime , is_consumption : bool
474+ self , address : int , slot : int , timestamp : datetime
558475 ) -> None :
559476 """Update references to last (most recent) log record."""
560477 if self ._last_log_timestamp is None or self ._last_log_timestamp < timestamp :
561478 self ._last_log_address = address
562479 self ._last_log_slot = slot
563480 self ._last_log_timestamp = timestamp
564- elif self ._last_log_timestamp == timestamp and not is_consumption :
565- self ._last_log_address = address
566- self ._last_log_slot = slot
567- self ._last_log_timestamp = timestamp
568481
569482 def _update_last_consumption_log_reference (
570483 self , address : int , slot : int , timestamp : datetime
@@ -683,8 +596,8 @@ def _update_log_references(self, address: int, slot: int) -> None:
683596 is_consumption = self ._logs [address ][slot ].is_consumption
684597
685598 # Update log references
686- self ._update_first_log_reference (address , slot , log_time_stamp , is_consumption )
687- self ._update_last_log_reference (address , slot , log_time_stamp , is_consumption )
599+ self ._update_first_log_reference (address , slot , log_time_stamp )
600+ self ._update_last_log_reference (address , slot , log_time_stamp )
688601
689602 if is_consumption :
690603 self ._update_first_consumption_log_reference (address , slot , log_time_stamp )
@@ -698,32 +611,13 @@ def log_addresses_missing(self) -> list[int] | None:
698611 """Return the addresses of missing logs."""
699612 return self ._log_addresses_missing
700613
701- def _last_log_reference (
702- self , is_consumption : bool | None = None
703- ) -> tuple [int | None , int | None ]:
614+ def _last_log_reference (self ) -> tuple [int | None , int | None ]:
704615 """Address and slot of last log."""
705- if is_consumption is None :
706- return (self ._last_log_address , self ._last_log_slot )
616+ return (self ._last_log_address , self ._last_log_slot )
707617
708- if is_consumption :
709- return (self ._last_log_consumption_address , self ._last_log_consumption_slot )
710-
711- return (self ._last_log_production_address , self ._last_log_production_slot )
712-
713- def _first_log_reference (
714- self , is_consumption : bool | None = None
715- ) -> tuple [int | None , int | None ]:
618+ def _first_log_reference (self ) -> tuple [int | None , int | None ]:
716619 """Address and slot of first log."""
717- if is_consumption is None :
718- return (self ._first_log_address , self ._first_log_slot )
719-
720- if is_consumption :
721- return (
722- self ._first_log_consumption_address ,
723- self ._first_log_consumption_slot ,
724- )
725-
726- return (self ._first_log_production_address , self ._first_log_production_slot )
620+ return (self ._first_log_address , self ._first_log_slot )
727621
728622 def _logs_missing (self , from_timestamp : datetime ) -> list [int ] | None :
729623 """Calculate list of missing log addresses."""
0 commit comments