Skip to content

Commit 95879c7

Browse files
committed
Ongoing improvement
1 parent f90fd87 commit 95879c7

File tree

2 files changed

+37
-24
lines changed

2 files changed

+37
-24
lines changed

plugwise_usb/nodes/helpers/pulses.py

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

scripts/tests_and_coverage.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ set +u
2323

2424
if [ -z "${GITHUB_ACTIONS}" ] || [ "$1" == "test_and_coverage" ] ; then
2525
# Python tests (rerun with debug if failures)
26-
PYTHONPATH=$(pwd) pytest -qx tests/ --cov='.' --no-cov-on-fail --cov-report term-missing || PYTHONPATH=$(pwd) pytest -xrpP --log-level debug tests/
26+
#PYTHONPATH=$(pwd) pytest -qx tests/ --cov='.' --no-cov-on-fail --cov-report term-missing ||
27+
PYTHONPATH=$(pwd) pytest -xrpvP --log-level debug tests/
2728
fi
2829

2930
if [ -z "${GITHUB_ACTIONS}" ] || [ "$1" == "linting" ] ; then

0 commit comments

Comments
 (0)