Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion meshtastic/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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",
)

Expand Down
19 changes: 19 additions & 0 deletions meshtastic/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
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,
Expand Down Expand Up @@ -603,6 +605,23 @@ def factoryReset(self):
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()
Expand Down