@@ -672,24 +672,26 @@ def receive_message(self, msg):
672
672
_LOGGER .debug ('DA queue: %s' ,
673
673
self ._sent_msg_wait_for_directACK )
674
674
_LOGGER .debug ('Message ACK with no callback' )
675
- if (hasattr (msg , 'flags' ) and
676
- hasattr (msg .flags , 'isDirectACK' ) and
677
- msg .flags .isDirectACK ):
678
- _LOGGER .debug ('Got Direct ACK message. Already in queue: %d, '
679
- 'Queueing %s:%s' ,
680
- self ._directACK_received_queue .qsize (), id (msg ), msg )
681
- if self ._send_msg_lock .locked ():
682
- self ._directACK_received_queue .put_nowait (msg )
683
- else :
684
- _LOGGER .debug ('But Direct ACK not expected' )
675
+
676
+
685
677
if not self ._is_duplicate (msg ):
678
+ if (hasattr (msg , 'flags' ) and
679
+ hasattr (msg .flags , 'isDirectACK' ) and
680
+ msg .flags .isDirectACK ):
681
+ _LOGGER .debug ('Got Direct ACK message. Already in queue: %d, '
682
+ 'Queueing %s:%s' , self ._directACK_received_queue .qsize (),
683
+ id (msg ), msg )
684
+ if self ._send_msg_lock .locked ():
685
+ self ._directACK_received_queue .put_nowait (msg )
686
+ else :
687
+ _LOGGER .debug ('But Direct ACK not expected' )
688
+
686
689
callbacks = self ._message_callbacks .get_callbacks_from_message (msg )
687
690
for callback in callbacks :
688
691
_LOGGER .debug ('Scheduling msg callback: %s' , callback )
689
692
self ._plm .loop .call_soon (callback , msg )
690
693
else :
691
- _LOGGER .debug ('msg is duplicate' )
692
- _LOGGER .debug (msg )
694
+ _LOGGER .debug ('msg is duplicate: %s' , id (msg ))
693
695
self ._last_communication_received = datetime .datetime .now ()
694
696
_LOGGER .debug ('Ending Device.receive_message' )
695
697
@@ -706,36 +708,19 @@ def _is_duplicate(self, msg):
706
708
if msg_received >= (datetime .datetime .now () -
707
709
datetime .timedelta (0 , 0 , 500000 )):
708
710
recent_messages .append (recent_message )
709
- if not recent_messages :
710
- self ._save_recent_message (msg )
711
- return False
712
711
712
+ ret_val = False
713
713
for recent_message in recent_messages :
714
714
prev_msg = recent_message .get ('msg' )
715
715
self ._recent_messages .put_nowait (recent_message )
716
- prev_cmd1 = prev_msg .cmd1
717
- if prev_msg .flags .isAllLinkBroadcast :
718
- prev_group = prev_msg .target .bytes [2 ]
719
- elif prev_msg .flags .isAllLinkCleanup :
720
- prev_group = prev_msg .cmd2
721
-
722
- if msg .flags .isAllLinkCleanup or msg .flags .isAllLinkBroadcast :
723
- cmd1 = msg .cmd1
724
- if msg .flags .isAllLinkBroadcast :
725
- group = msg .target .bytes [2 ]
726
- else :
727
- group = msg .cmd2
728
- if prev_cmd1 == cmd1 and prev_group == group :
729
- return True
730
- self ._save_recent_message (msg )
731
- else :
732
- self ._save_recent_message (msg )
733
- return False
734
-
735
- def _save_recent_message (self , msg ):
736
- recent_message = {"msg" : msg ,
737
- "received" : datetime .datetime .now ()}
738
- self ._recent_messages .put_nowait (recent_message )
716
+ if msg .matches_pattern (prev_msg ):
717
+ ret_val = True
718
+
719
+ self ._recent_messages .put_nowait (
720
+ {"msg" : msg ,
721
+ "received" : datetime .datetime .now ()
722
+ })
723
+ return ret_val
739
724
740
725
def _send_msg (self , msg , callback = None , on_timeout = False ):
741
726
_LOGGER .debug ('Starting %s Device._send_msg: Queuing message' ,
0 commit comments