@@ -92,6 +92,7 @@ def __init__(self, xbee, cluster_id, receive_cluster_id, configure_ao, timeout):
9292 self ._lock = threading .Event ()
9393 self ._received_status = False
9494 self ._received_answer = False
95+ self ._data_parsed = False
9596
9697 self ._current_transaction_id = self .__class__ .__global_transaction_id
9798 self .__class__ .__global_transaction_id = self .__class__ .__global_transaction_id + 1
@@ -162,6 +163,7 @@ def _send_zdo(self, zdo_callback=None):
162163 self ._error = None
163164 self ._received_status = False
164165 self ._received_answer = False
166+ self ._data_parsed = False
165167 self ._lock .clear ()
166168
167169 if not self ._xbee .is_remote ():
@@ -338,7 +340,10 @@ def _zdo_packet_callback(self, frame):
338340 self ._error = "Error executing ZDO command (status: %d)" % int (frame .rf_data [1 ])
339341 self .stop ()
340342 return
341- if self ._parse_data (frame .rf_data [2 :]):
343+
344+ self ._data_parsed = self ._parse_data (frame .rf_data [2 :])
345+
346+ if self ._data_parsed and self ._received_status :
342347 self .stop ()
343348 elif frame .get_frame_type () == ApiFrameType .TRANSMIT_STATUS :
344349 self ._logger .debug ("Received 'ZDO' status frame: %s"
@@ -353,6 +358,9 @@ def _zdo_packet_callback(self, frame):
353358 self ._error = "Error sending ZDO command: %s" % frame .transmit_status .description
354359 self .stop ()
355360
361+ if self ._data_parsed :
362+ self .stop ()
363+
356364
357365class NodeDescriptorReader (__ZDOCommand ):
358366 """
0 commit comments