From 9949d144a1e4ff0fb247796ba8607df9d8e850cf Mon Sep 17 00:00:00 2001 From: DJ Holt Date: Thu, 19 Sep 2024 02:22:04 -0600 Subject: [PATCH] Enable setting and removing fixed position via remote admin --- meshtastic/__main__.py | 15 +++++---------- meshtastic/node.py | 16 +++++++++++----- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index 8eb04eb..686d207 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -286,19 +286,14 @@ def onConnected(interface): print("Connected to radio") if args.remove_position: - if args.dest != BROADCAST_ADDR: - print("Setting positions of remote nodes is not supported.") - return closeNow = True + waitForAckNak = True + print("Removing fixed position and disabling fixed position setting") - interface.localNode.removeFixedPosition() + interface.getNode(args.dest, False, **getNode_kwargs).removeFixedPosition() elif args.setlat or args.setlon or args.setalt: - if args.dest != BROADCAST_ADDR: - print( - "Setting latitude, longitude, and altitude of remote nodes is not supported." - ) - return closeNow = True + waitForAckNak = True alt = 0 lat = 0 @@ -321,7 +316,7 @@ def onConnected(interface): print("Setting device position and enabling fixed position setting") # can include lat/long/alt etc: latitude = 37.5, longitude = -122.1 - interface.localNode.setFixedPosition(lat, lon, alt) + interface.getNode(args.dest, False, **getNode_kwargs).setFixedPosition(lat, lon, alt) if args.set_owner or args.set_owner_short: closeNow = True diff --git a/meshtastic/node.py b/meshtastic/node.py index 278ea8a..bef632e 100644 --- a/meshtastic/node.py +++ b/meshtastic/node.py @@ -685,9 +685,6 @@ class Node: def setFixedPosition(self, lat: Union[int, float], lon: Union[int, float], alt: int): """Tell the node to set fixed position to the provided value and enable the fixed position setting""" self.ensureSessionKey() - if self != self.iface.localNode: - logging.error("Setting position of remote nodes is not supported.") - return None p = mesh_pb2.Position() if isinstance(lat, float) and lat != 0.0: @@ -705,7 +702,12 @@ class Node: a = admin_pb2.AdminMessage() a.set_fixed_position.CopyFrom(p) - return self._sendAdmin(a) + + if self == self.iface.localNode: + onResponse = None + else: + onResponse = self.onAckNak + return self._sendAdmin(a, onResponse=onResponse) def removeFixedPosition(self): """Tell the node to remove the fixed position and set the fixed position setting to false""" @@ -714,7 +716,11 @@ class Node: p.remove_fixed_position = True logging.info(f"Telling node to remove fixed position") - return self._sendAdmin(p) + if self == self.iface.localNode: + onResponse = None + else: + onResponse = self.onAckNak + return self._sendAdmin(p, onResponse=onResponse) def _fixupChannels(self): """Fixup indexes and add disabled channels as needed"""