Skip to content

Commit cb0dafd

Browse files
committed
Bring _update_rollover() back?
1 parent cacfbe3 commit cb0dafd

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

plugwise_usb/nodes/helpers/pulses.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,83 @@ def update_pulse_counter(
272272
self._pulses_consumption = pulses_consumed
273273
self._pulses_production = pulses_produced
274274

275+
def update_pulse_counter(
276+
self, pulses_consumed: int, pulses_produced: int, timestamp: datetime
277+
) -> None:
278+
"""Update pulse counter."""
279+
self._pulses_timestamp = timestamp
280+
self._update_rollover()
281+
if not (self._rollover_consumption or self._rollover_production):
282+
# No rollover based on time, check rollover based on counter reset
283+
# Required for special cases like nodes which have been power off for several days
284+
if (
285+
self._pulses_consumption is not None
286+
and self._pulses_consumption > pulses_consumed
287+
):
288+
self._rollover_consumption = True
289+
if (
290+
self._pulses_production is not None
291+
and self._pulses_production > pulses_produced
292+
):
293+
self._rollover_production = True
294+
self._pulses_consumption = pulses_consumed
295+
self._pulses_production = pulses_produced
296+
297+
######### still to finish
298+
def _update_rollover(self) -> None:
299+
"""Update rollover states. Returns True if rollover is applicable."""
300+
if self._log_addresses_missing is not None and self._log_addresses_missing:
301+
return
302+
303+
if (
304+
self._pulses_timestamp is None
305+
or self._last_log_timestamp is None
306+
):
307+
# Unable to determine rollover
308+
return
309+
310+
if self._pulses_timestamp > self._next_log_timestamp:
311+
if CONSUMPTION: # TODO
312+
self._rollover_consumption = True
313+
_LOGGER.debug(
314+
"_update_rollover | %s | set consumption rollover => pulses newer",
315+
self._mac,
316+
)
317+
if PRODUCTION: # TODO
318+
self._rollover_production = True
319+
_LOGGER.debug(
320+
"_update_rollover | %s | set production rollover => pulses newer",
321+
self._mac,
322+
)
323+
elif self._pulses_timestamp < self._last_log_timestamp:
324+
if CONSUMPTION: # TODO
325+
self._rollover_consumption = True
326+
_LOGGER.debug(
327+
"_update_rollover | %s | set consumption rollover => log newer",
328+
self._mac,
329+
)
330+
if PRODUCTION: # TODO
331+
self._rollover_production = True
332+
_LOGGER.debug(
333+
"_update_rollover | %s | reset production rollover => log newer",
334+
self._mac,
335+
)
336+
elif (
337+
self._last_log_timestamp
338+
< self._pulses_timestamp
339+
< self._next_log_timestamp
340+
):
341+
if CONSUMPTION: # TODO
342+
if self._rollover_consumption:
343+
_LOGGER.debug("_update_rollover | %s | reset consumption", self._mac)
344+
self._rollover_consumption = False
345+
if PRODUCTION: # TODO
346+
if self._rollover_production:
347+
_LOGGER.debug("_update_rollover | %s | reset production", self._mac)
348+
self._rollover_production = False
349+
else:
350+
_LOGGER.debug("_update_rollover | %s | unexpected consumption/production", self._mac)
351+
275352
def add_empty_log(self, address: int, slot: int) -> None:
276353
"""Add empty energy log record to mark any start of beginning of energy log collection."""
277354
recalculate = False

0 commit comments

Comments
 (0)