@@ -67,6 +67,7 @@ def __init__(self, mac, address, message_sender):
6767 hour = 0 , minute = 0 , second = 0 , microsecond = 0
6868 )
6969 self ._energy_history_collecting = False
70+ self ._energy_history_collecting_timestamp = datetime .now ()
7071 self ._energy_history = {}
7172 self ._energy_last_collected_timestamp = datetime (2000 , 1 , 1 )
7273 self ._energy_last_rollover_timestamp = datetime (2000 , 1 , 1 )
@@ -613,7 +614,16 @@ def request_energy_counters(self, log_address=None, callback=None):
613614 if log_address is None :
614615 log_address = self ._last_log_address
615616 if log_address is not None :
616- if len (self ._energy_history ) > 48 or self ._energy_history_collecting :
617+ if self ._energy_history_collecting and (
618+ self ._energy_history_collecting_timestamp
619+ < datetime .now () - timedelta (minutes = 15 )
620+ ):
621+ _LOGGER .debug (
622+ "Skip request_energy_counters for %s of address %s" ,
623+ self .mac ,
624+ str (log_address ),
625+ )
626+ elif len (self ._energy_history ) > 48 :
617627 # Energy history already collected
618628 if (
619629 log_address == self ._last_log_address
@@ -636,6 +646,7 @@ def request_energy_counters(self, log_address=None, callback=None):
636646
637647 # TODO: validate range of log_addresses
638648 self ._energy_history_collecting = True
649+ self ._energy_history_collecting_timestamp = datetime .now ()
639650 for req_log_address in range (log_address - 13 , log_address ):
640651 self .message_sender (
641652 CircleEnergyCountersRequest (self ._mac , req_log_address ),
0 commit comments