Merge pull request #541 from ianmcorvidae/removenode

Add --remove-node (fixes #514)
This commit is contained in:
Ian McEwen
2024-04-08 15:05:11 -07:00
committed by GitHub
2 changed files with 29 additions and 1 deletions

View File

@@ -365,6 +365,11 @@ def onConnected(interface):
waitForAckNak = True
interface.getNode(args.dest, False).factoryReset()
if args.remove_node:
closeNow = True
waitForAckNak = True
interface.getNode(args.dest, False).removeNode(args.remove_node)
if args.reset_nodedb:
closeNow = True
waitForAckNak = True
@@ -1332,9 +1337,13 @@ def initParser():
action="store_true",
)
group.add_argument(
"--remove-node",
help="Tell the destination node to remove a specific node from its DB, by node number or ID"
)
group.add_argument(
"--reset-nodedb",
help="Tell the destination node clear its list of nodes",
help="Tell the destination node to clear its list of nodes",
action="store_true",
)

View File

@@ -5,6 +5,8 @@ import base64
import logging
import time
from typing import Union
from meshtastic import admin_pb2, apponly_pb2, channel_pb2, localonly_pb2, portnums_pb2
from meshtastic.util import (
Timeout,
@@ -603,6 +605,23 @@ class Node:
onResponse = self.onAckNak
return self._sendAdmin(p, onResponse=onResponse)
def removeNode(self, nodeId: Union[int, str]):
"""Tell the node to remove a specific node by ID"""
if isinstance(nodeId, str):
if nodeId.startswith("!"):
nodeId = int(nodeId[1:], 16)
else:
nodeId = int(nodeId)
p = admin_pb2.AdminMessage()
p.remove_by_nodenum = nodeId
if self == self.iface.localNode:
onResponse = None
else:
onResponse = self.onAckNak
return self._sendAdmin(p, onResponse=onResponse)
def resetNodeDb(self):
"""Tell the node to reset its list of nodes."""
p = admin_pb2.AdminMessage()