Skip to content

Commit fc7b47a

Browse files
brefrabouwew
authored andcommitted
Guard for sending counter requests
Prevent sending request for fully known memory addresses
1 parent 66a5734 commit fc7b47a

File tree

1 file changed

+40
-14
lines changed

1 file changed

+40
-14
lines changed

plugwise/nodes/circle.py

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def __init__(self, mac, address, message_sender):
6666
self._energy_consumption_today_reset = datetime.now().replace(
6767
hour=0, minute=0, second=0, microsecond=0
6868
)
69+
self._energy_memory = {}
6970
self._energy_history_collecting = False
7071
self._energy_history_collecting_timestamp = datetime.now()
7172
self._energy_history = {}
@@ -634,12 +635,19 @@ def request_energy_counters(self, log_address=None, callback=None):
634635
self._request_info(self.request_energy_counters)
635636
else:
636637
# Request new energy counters
637-
self.message_sender(
638-
CircleEnergyCountersRequest(self._mac, log_address),
639-
None,
640-
0,
641-
PRIORITY_LOW,
642-
)
638+
if self._energy_memory.get(log_address, 0) < 4:
639+
self.message_sender(
640+
CircleEnergyCountersRequest(self._mac, log_address),
641+
None,
642+
0,
643+
PRIORITY_LOW,
644+
)
645+
else:
646+
_LOGGER.info(
647+
"Drop known request_energy_counters for %s of address %s",
648+
self.mac,
649+
str(log_address),
650+
)
643651
else:
644652
# Collect energy counters of today and yesterday
645653
# Each request contains will return 4 hours, except last request
@@ -648,18 +656,32 @@ def request_energy_counters(self, log_address=None, callback=None):
648656
self._energy_history_collecting = True
649657
self._energy_history_collecting_timestamp = datetime.now()
650658
for req_log_address in range(log_address - 13, log_address):
659+
if self._energy_memory.get(req_log_address, 0) < 4:
660+
self.message_sender(
661+
CircleEnergyCountersRequest(self._mac, req_log_address),
662+
None,
663+
0,
664+
PRIORITY_LOW,
665+
)
666+
else:
667+
_LOGGER.info(
668+
"Drop known request_energy_counters at collecting for %s of address %s",
669+
self.mac,
670+
str(log_address),
671+
)
672+
if self._energy_memory.get(log_address, 0) < 4:
651673
self.message_sender(
652-
CircleEnergyCountersRequest(self._mac, req_log_address),
653-
None,
674+
CircleEnergyCountersRequest(self._mac, log_address),
675+
callback,
654676
0,
655677
PRIORITY_LOW,
656678
)
657-
self.message_sender(
658-
CircleEnergyCountersRequest(self._mac, log_address),
659-
callback,
660-
0,
661-
PRIORITY_LOW,
662-
)
679+
else:
680+
_LOGGER.info(
681+
"Drop known request_energy_counters at collecting end for %s of address %s",
682+
self.mac,
683+
str(log_address),
684+
)
663685

664686
def _response_energy_counters(self, message: CircleEnergyCountersResponse):
665687
"""
@@ -688,6 +710,10 @@ def _response_energy_counters(self, message: CircleEnergyCountersResponse):
688710
_log_timestamp := getattr(message, "logdate%d" % (_slot,)).value
689711
) is None:
690712
break
713+
# Register collected history memory
714+
if _slot > self._energy_memory.get(message.logaddr.value, 0):
715+
self._energy_memory[message.logaddr.value] = _slot
716+
691717
self._energy_history[_log_timestamp] = getattr(
692718
message, "pulses%d" % (_slot,)
693719
).value

0 commit comments

Comments
 (0)