Skip to content

Commit 5c703af

Browse files
authored
Merge pull request #591 from ianmcorvidae/device-metadata-resp
Wait for response with --device-metadata. Fixes #527
2 parents 890557f + 5441266 commit 5c703af

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

meshtastic/node.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -608,9 +608,10 @@ def getMetadata(self):
608608
p.get_device_metadata_request = True
609609
logging.info(f"Requesting device metadata")
610610

611-
return self._sendAdmin(
611+
self._sendAdmin(
612612
p, wantResponse=True, onResponse=self.onRequestGetMetadata
613613
)
614+
self.iface.waitForAckNak()
614615

615616
def factoryReset(self):
616617
"""Tell the node to factory reset."""
@@ -713,24 +714,30 @@ def onRequestGetMetadata(self, p):
713714
"""Handle the response packet for requesting device metadata getMetadata()"""
714715
logging.debug(f"onRequestGetMetadata() p:{p}")
715716

716-
if p["decoded"]["portnum"] == portnums_pb2.PortNum.Name(
717-
portnums_pb2.PortNum.ROUTING_APP
718-
):
717+
if "routing" in p["decoded"]:
719718
if p["decoded"]["routing"]["errorReason"] != "NONE":
720-
logging.warning(
721-
f'Metadata request failed, error reason: {p["decoded"]["routing"]["errorReason"]}'
722-
)
723-
self._timeout.expireTime = time.time() # Do not wait any longer
724-
return # Don't try to parse this routing message
725-
logging.debug(f"Retrying metadata request.")
726-
self.getMetadata()
727-
return
719+
print(f'Error on response: {p["decoded"]["routing"]["errorReason"]}')
720+
self.iface._acknowledgment.receivedNak = True
721+
else:
722+
self.iface._acknowledgment.receivedAck = True
723+
if p["decoded"]["portnum"] == portnums_pb2.PortNum.Name(
724+
portnums_pb2.PortNum.ROUTING_APP
725+
):
726+
if p["decoded"]["routing"]["errorReason"] != "NONE":
727+
logging.warning(
728+
f'Metadata request failed, error reason: {p["decoded"]["routing"]["errorReason"]}'
729+
)
730+
self._timeout.expireTime = time.time() # Do not wait any longer
731+
return # Don't try to parse this routing message
732+
logging.debug(f"Retrying metadata request.")
733+
self.getMetadata()
734+
return
728735

729-
c = p["decoded"]["admin"]["raw"].get_device_metadata_response
730-
self._timeout.reset() # We made forward progress
731-
logging.debug(f"Received metadata {stripnl(c)}")
732-
print(f"\nfirmware_version: {c.firmware_version}")
733-
print(f"device_state_version: {c.device_state_version}")
736+
c = p["decoded"]["admin"]["raw"].get_device_metadata_response
737+
self._timeout.reset() # We made forward progress
738+
logging.debug(f"Received metadata {stripnl(c)}")
739+
print(f"\nfirmware_version: {c.firmware_version}")
740+
print(f"device_state_version: {c.device_state_version}")
734741

735742
def onResponseRequestChannel(self, p):
736743
"""Handle the response packet for requesting a channel _requestChannel()"""

0 commit comments

Comments
 (0)