@@ -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