Skip to content

Commit 93e9c1c

Browse files
committed
Initialize unknown nodes more in line with meshtastic/design#16
1 parent 8e641b3 commit 93e9c1c

3 files changed

Lines changed: 21 additions & 8 deletions

File tree

meshtastic/mesh_interface.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ def getTimeAgo(ts) -> Optional[str]:
166166
if not includeSelf and node["num"] == self.localNode.nodeNum:
167167
continue
168168

169-
row = {"N": 0, "User": f"UNK: {node['num']}", "ID": f"!{node['num']:08x}"}
169+
presumptive_id = f"!{node['num']:08x}"
170+
row = {"N": 0, "User": f"Meshtastic {presumptive_id[-4:]}", "ID": presumptive_id}
170171

171172
user = node.get("user")
172173
if user:
@@ -175,6 +176,7 @@ def getTimeAgo(ts) -> Optional[str]:
175176
"User": user.get("longName", "N/A"),
176177
"AKA": user.get("shortName", "N/A"),
177178
"ID": user["id"],
179+
"Hardware": user.get("hwModel", "UNSET")
178180
}
179181
)
180182

@@ -844,16 +846,18 @@ def _handleFromRadio(self, fromRadioBytes):
844846
logging.debug(f"Received device metadata: {stripnl(fromRadio.metadata)}")
845847

846848
elif fromRadio.HasField("node_info"):
847-
node = asDict["nodeInfo"]
849+
logging.debug(f"Received nodeinfo: {asDict['nodeInfo']}")
850+
851+
node = self._getOrCreateByNum(asDict["nodeInfo"]["num"])
852+
node.update(asDict["nodeInfo"])
848853
try:
849854
newpos = self._fixupPosition(node["position"])
850855
node["position"] = newpos
851856
except:
852857
logging.debug("Node without position")
853858

854-
logging.debug(f"Received nodeinfo: {node}")
855-
856-
self.nodesByNum[node["num"]] = node
859+
# no longer necessary since we're mutating directly in nodesByNum via _getOrCreateByNum
860+
#self.nodesByNum[node["num"]] = node
857861
if "user" in node: # Some nodes might not have user/ids assigned yet
858862
if "id" in node["user"]:
859863
self.nodes[node["user"]["id"]] = node
@@ -1005,7 +1009,16 @@ def _getOrCreateByNum(self, nodeNum):
10051009
if nodeNum in self.nodesByNum:
10061010
return self.nodesByNum[nodeNum]
10071011
else:
1008-
n = {"num": nodeNum} # Create a minimal node db entry
1012+
presumptive_id = f"!{nodeNum:08x}"
1013+
n = {
1014+
"num": nodeNum,
1015+
"user": {
1016+
"id": presumptive_id,
1017+
"longName": f"Meshtastic {presumptive_id[-4:]}",
1018+
"shortName": f"{presumptive_id[-4:]}",
1019+
"hwModel": "UNSET"
1020+
}
1021+
} # Create a minimal node db entry
10091022
self.nodesByNum[nodeNum] = n
10101023
return n
10111024

meshtastic/tests/test_init.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def test_init_onNodeInfoReceive(caplog, iface_with_nodes):
4444
iface = iface_with_nodes
4545
iface.myInfo.my_node_num = 2475227164
4646
packet = {
47-
"from": "foo",
47+
"from": 4808675309,
4848
"decoded": {
4949
"user": {
5050
"id": "bar",

meshtastic/tests/test_mesh_interface.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ def test_getOrCreateByNum_minimal(iface_with_nodes):
588588
iface = iface_with_nodes
589589
iface.myInfo.my_node_num = 2475227164
590590
tmp = iface._getOrCreateByNum(123)
591-
assert tmp == {"num": 123}
591+
assert tmp == {"num": 123, "user": {"hwModel": "UNSET", "id": "!0000007b", "shortName": "007b", "longName": "Meshtastic 007b"}}
592592

593593

594594
@pytest.mark.unit

0 commit comments

Comments
 (0)