Skip to content

Commit 34b787f

Browse files
authored
Merge pull request #253 from plugwise/energy-update
Improvements
2 parents f7276eb + 4a3d210 commit 34b787f

File tree

4 files changed

+47
-57
lines changed

4 files changed

+47
-57
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## v0.42.1
4+
5+
- Implement code improvements, extend debug message [#253](https://github.com/plugwise/python-plugwise-usb/pull/247)
6+
37
## v0.42.0
48

59
- Implement resetting of energy logs

plugwise_usb/nodes/circle.py

Lines changed: 40 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -302,46 +302,39 @@ async def power_update(self) -> PowerStatistics | None:
302302
)
303303
return self._power
304304

305+
def _log_no_energy_stats_update(self) -> None:
306+
"""Return log-message based on conditions."""
307+
if (
308+
self._initialization_delay_expired is not None
309+
and datetime.now(tz=UTC) < self._initialization_delay_expired
310+
):
311+
_LOGGER.info(
312+
"Unable to return energy statistics for %s during initialization, because it is not responding",
313+
self.name,
314+
)
315+
else:
316+
_LOGGER.warning(
317+
"Unable to return energy statistics for %s, because it is not responding",
318+
self.name,
319+
)
320+
321+
305322
@raise_not_loaded
306323
@raise_calibration_missing
307324
async def energy_update(self) -> EnergyStatistics | None:
308325
"""Return updated energy usage statistics."""
309326
if self._current_log_address is None:
310327
_LOGGER.debug(
311-
"Unable to update energy logs for node %s because last_log_address is unknown.",
328+
"Unable to update energy logs for node %s because the current log address is unknown.",
312329
self._mac_in_str,
313330
)
314331
if await self.node_info_update() is None:
315-
if (
316-
self._initialization_delay_expired is not None
317-
and datetime.now(tz=UTC) < self._initialization_delay_expired
318-
):
319-
_LOGGER.info(
320-
"Unable to return energy statistics for %s during initialization, because it is not responding",
321-
self.name,
322-
)
323-
else:
324-
_LOGGER.warning(
325-
"Unable to return energy statistics for %s, because it is not responding",
326-
self.name,
327-
)
332+
self._log_no_energy_stats_update()
328333
return None
329-
# request node info update every 30 minutes.
334+
# Request node info update every 30 minutes.
330335
elif not self.skip_update(self._node_info, 1800):
331336
if await self.node_info_update() is None:
332-
if (
333-
self._initialization_delay_expired is not None
334-
and datetime.now(tz=UTC) < self._initialization_delay_expired
335-
):
336-
_LOGGER.info(
337-
"Unable to return energy statistics for %s during initialization, because it is not responding",
338-
self.name,
339-
)
340-
else:
341-
_LOGGER.warning(
342-
"Unable to return energy statistics for %s, because it is not responding",
343-
self.name,
344-
)
337+
self._log_no_energy_stats_update()
345338
return None
346339

347340
# Always request last energy log records at initial startup
@@ -351,24 +344,23 @@ async def energy_update(self) -> EnergyStatistics | None:
351344
)
352345

353346
if self._energy_counters.log_rollover:
347+
# Try updating node_info
354348
if await self.node_info_update() is None:
355349
_LOGGER.debug(
356350
"async_energy_update | %s | Log rollover | node_info_update failed",
357351
self._mac_in_str,
358352
)
359353
return None
360354

355+
# Try collecting energy-stats for _current_log_address
361356
if not await self.energy_log_update(self._current_log_address):
362357
_LOGGER.debug(
363358
"async_energy_update | %s | Log rollover | energy_log_update failed",
364359
self._mac_in_str,
365360
)
366361
return None
367362

368-
if (
369-
self._energy_counters.log_rollover
370-
and self._current_log_address is not None
371-
):
363+
if self._current_log_address is not None:
372364
# Retry with previous log address as Circle node pointer to self._current_log_address
373365
# could be rolled over while the last log is at previous address/slot
374366
_prev_log_address, _ = calc_log_address(
@@ -392,6 +384,7 @@ async def energy_update(self) -> EnergyStatistics | None:
392384
self._mac_in_str,
393385
)
394386
return self._energy_counters.energy_statistics
387+
395388
if len(missing_addresses) == 1:
396389
if await self.energy_log_update(missing_addresses[0]):
397390
await self.power_update()
@@ -414,11 +407,7 @@ async def energy_update(self) -> EnergyStatistics | None:
414407
self._retrieve_energy_logs_task = create_task(
415408
self.get_missing_energy_logs()
416409
)
417-
else:
418-
_LOGGER.debug(
419-
"Skip creating task to update energy logs for node %s",
420-
self._mac_in_str,
421-
)
410+
422411
if (
423412
self._initialization_delay_expired is not None
424413
and datetime.now(tz=UTC) < self._initialization_delay_expired
@@ -441,7 +430,7 @@ async def get_missing_energy_logs(self) -> None:
441430
if self._current_log_address is None:
442431
return None
443432

444-
if self._energy_counters.log_addresses_missing is None:
433+
if (missing_addresses := self._energy_counters.log_addresses_missing) is None:
445434
_LOGGER.debug(
446435
"Start with initial energy request for the last 10 log addresses for node %s.",
447436
self._mac_in_str,
@@ -459,23 +448,19 @@ async def get_missing_energy_logs(self) -> None:
459448
return
460449

461450
_LOGGER.debug("Task created to get missing logs of %s", self._mac_in_str)
462-
if (
463-
missing_addresses := self._energy_counters.log_addresses_missing
464-
) is not None:
465-
_LOGGER.debug(
466-
"Task Request %s missing energy logs for node %s | %s",
467-
str(len(missing_addresses)),
468-
self._mac_in_str,
469-
str(missing_addresses),
470-
)
471-
472-
missing_addresses = sorted(missing_addresses, reverse=True)
473-
tasks = [
474-
create_task(self.energy_log_update(address))
475-
for address in missing_addresses
476-
]
477-
for task in tasks:
478-
await task
451+
_LOGGER.debug(
452+
"Task Request %s missing energy logs for node %s | %s",
453+
str(len(missing_addresses)),
454+
self._mac_in_str,
455+
str(missing_addresses),
456+
)
457+
missing_addresses = sorted(missing_addresses, reverse=True)
458+
tasks = [
459+
create_task(self.energy_log_update(address))
460+
for address in missing_addresses
461+
]
462+
for task in tasks:
463+
await task
479464

480465
if self._cache_enabled:
481466
await self._energy_log_records_save_to_cache()

plugwise_usb/nodes/helpers/pulses.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -850,10 +850,11 @@ def _logs_missing(self, from_timestamp: datetime) -> list[int] | None:
850850

851851
missing = []
852852
_LOGGER.debug(
853-
"_logs_missing | %s | first_address=%s, last_address=%s",
853+
"_logs_missing | %s | first_address=%s, last_address=%s, from_timestamp=%s",
854854
self._mac,
855855
first_address,
856856
last_address,
857+
from_timestamp,
857858
)
858859

859860
# When higher addresses contain outdated data

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "plugwise_usb"
7-
version = "0.42.0"
7+
version = "0.42.1"
88
license = "MIT"
99
keywords = ["home", "automation", "plugwise", "module", "usb"]
1010
classifiers = [

0 commit comments

Comments
 (0)