Skip to content

Commit e6ae4c7

Browse files
committed
Improve logic and summing covering the log_interval resets
1 parent ae9def3 commit e6ae4c7

File tree

1 file changed

+21
-30
lines changed

1 file changed

+21
-30
lines changed

plugwise_usb/nodes/helpers/pulses.py

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)