iz1kga
March 29, 2021, 8:16am
1
Hi,
making some experiments wit 1.2.x version I found problems with interface.nodes dict. Sometimes appear a raw key that contains IMHO invalid json and so I can’t dump it.
{‘num’: 2988737488, ‘user’: {‘id’: ‘!b22483d0’, ‘longName’: ‘VillarFocchiardo_83d0’, ‘shortName’: ‘Vil’, ‘macaddr’: ‘rGeyJIPQ’, ‘hwModel’: ‘TBEAM’, ‘raw’: id: “!b22483d0”
long_name: “VillarFocchiardo_83d0”
short_name: “Vil”
macaddr: “\254g\262$\203\320”
hw_model: TBEAM
}, ‘position’: {‘latitudeI’: 451074598, ‘longitudeI’: 72341957, ‘altitude’: 478, ‘latitude’: 45.1074598, ‘longitude’: 7.2341957}}
looking at ‘raw’: there is something strange? Do you agree?
Regards
1 Like
Hmm. ‘raw’ isn’t really json (or a python dictionary), it is the protobuf object itself. Possibly our tostring function isn’t handling that well?
iz1kga
March 29, 2021, 2:02pm
3
I think something similar, if i’m not wrong maybe quote is missing.
I’ll investigate more to give more info.
thanks
1 Like
iz1kga
March 29, 2021, 2:46pm
4
Normally when I print
receivedNodes = copy.deepcopy(interface.nodes)
print(“getNodes() --------->”)
print(receivedNodes)
print("------------------------------")
json.dumps(receivedNodes)
I get
getNodes() --------->
{’!c4fc6a04’: {‘num’: 3304876548, ‘user’: {‘id’: ‘!c4fc6a04’, ‘longName’: ‘KGA1.2_6a04’, ‘shortName’: ‘K12’, ‘macaddr’: ‘JArE/GoE’, ‘hwModel’: ‘HELTEC’}, ‘position’: {‘latitudeI’: 455000000, ‘longitudeI’: 75000000, ‘altitude’: 430, ‘latitude’: 45.5, ‘longitude’: 7.5}, ‘lastHeard’: 1617028537}, ‘!b2248518’: {‘num’: 2988737816, ‘user’: {‘id’: ‘!b2248518’, ‘longName’: ‘TestKga8518’, ‘shortName’: ‘Tst’, ‘macaddr’: ‘rGeyJIUY’, ‘hwModel’: ‘TBEAM’}, ‘position’: {‘latitudeI’: 451073811, ‘longitudeI’: 72335574, ‘altitude’: 422, ‘batteryLevel’: 100, ‘time’: 1617028493, ‘latitude’: 45.1073811, ‘longitude’: 7.2335574}, ‘lastHeard’: 1617028448, ‘snr’: 11.0}, ‘!b22483d0’: {‘num’: 2988737488, ‘user’: {‘id’: ‘!b22483d0’, ‘longName’: ‘VillarFocchiardo_83d0’, ‘shortName’: ‘Vil’, ‘macaddr’: ‘rGeyJIPQ’, ‘hwModel’: ‘TBEAM’}, ‘position’: {‘latitudeI’: 451073729, ‘longitudeI’: 72335785, ‘altitude’: 431, ‘time’: 1617028193, ‘latitude’: 45.1073729, ‘longitude’: 7.233578499999999}, ‘lastHeard’: 1617028165, ‘snr’: 9.25}, ‘!c4fc6d68’: {‘num’: 3304877416, ‘user’: {‘id’: ‘!c4fc6d68’, ‘longName’: ‘TOGEU01_6d68’, ‘shortName’: ‘TG0’, ‘macaddr’: ‘JArE/G1o’, ‘hwModel’: ‘HELTEC’}, ‘lastHeard’: 1617003008, ‘snr’: 10.25}}
Sometimes appears the raw
getNodes() --------->
{’!c4fc6a04’: {‘num’: 3304876548, ‘user’: {‘id’: ‘!c4fc6a04’, ‘longName’: ‘KGA1.2_6a04’, ‘shortName’: ‘K12’, ‘macaddr’: ‘JArE/GoE’, ‘hwModel’: ‘HELTEC’, ‘raw’: id: “!c4fc6a04”
long_name: “KGA1.2_6a04”
short_name: “K12”
macaddr: “\n\304\374j\004"
hw_model: HELTEC
}, 'position': {'latitudeI': 455000000, 'longitudeI': 75000000, 'altitude': 430, 'raw': latitude_i: 455000000
longitude_i: 75000000
altitude: 430
, 'latitude': 45.5, 'longitude': 7.5}, 'lastHeard': 1617028435}, '!b2248518': {'num': 2988737816, 'user': {'id': '!b2248518', 'longName': 'TestKga8518', 'shortName': 'Tst', 'macaddr': 'rGeyJIUY', 'hwModel': 'TBEAM', 'raw': id: "!b2248518"
long_name: "TestKga8518"
short_name: "Tst"
macaddr: "\254g\262 \205\030”
hw_model: TBEAM
}, ‘position’: {‘latitudeI’: 451073991, ‘longitudeI’: 72334075, ‘altitude’: 421, ‘batteryLevel’: 100, ‘time’: 1617028092, ‘raw’: latitude_i: 451073991
longitude_i: 72334075
altitude: 421
battery_level: 100
time: 1617028092
, ‘latitude’: 45.107399099999995, ‘longitude’: 7.233407499999999}, ‘lastHeard’: 1617028424, ‘snr’: 0.75}, ‘!b22483d0’: {‘num’: 2988737488, ‘user’: {‘id’: ‘!b22483d0’, ‘longName’: ‘VillarFocchiardo_83d0’, ‘shortName’: ‘Vil’, ‘macaddr’: ‘rGeyJIPQ’, ‘hwModel’: ‘TBEAM’, ‘raw’: id: “!b22483d0”
long_name: “VillarFocchiardo_83d0”
short_name: “Vil”
macaddr: “\254g\262$\203\320”
hw_model: TBEAM
}, ‘position’: {‘latitudeI’: 451073729, ‘longitudeI’: 72335785, ‘altitude’: 431, ‘time’: 1617028193, ‘raw’: latitude_i: 451073729
longitude_i: 72335785
altitude: 431
time: 1617028193
, ‘latitude’: 45.1073729, ‘longitude’: 7.233578499999999}, ‘lastHeard’: 1617028165, ‘snr’: 9.25}, ‘!c4fc6d68’: {‘num’: 3304877416, ‘user’: {‘id’: ‘!c4fc6d68’, ‘longName’: ‘TOGEU01_6d68’, ‘shortName’: ‘TG0’, ‘macaddr’: ‘JArE/G1o’, ‘hwModel’: ‘HELTEC’}, ‘lastHeard’: 1617003008, ‘snr’: 10.25}}
and then i get: TypeError: Object of type User is not JSON serializable
IMHO the problem is the missing quote in the raw value.
Regards
1 Like
iz1kga
April 7, 2021, 10:48am
5
@geeksville Should I open an issue on GIT?
Regards
1 Like
sachaw
April 12, 2021, 1:18pm
6
Feel free to open an issue if you have a reproducible bit of code, as it may well be a bug
1 Like
iz1kga
April 12, 2021, 6:19pm
7
Thanks.
after some time of execution json.dumps fails.
I’ll Open the Bug.
Regards
import meshtastic
from pubsub import pub
import json
def update(interface, packet):
print("--- --- --- interface.nodes: --- --- ---")
print(interface.nodes)
print("--- --- --- JSON DUMPS --- --- ---")
print(json.dumps(interface.nodes))
if __name__ == '__main__':
interface = meshtastic.SerialInterface()
pub.subscribe(update, "meshtastic.receive")
2 Likes
iz1kga
April 16, 2021, 10:12am
8
I Had time to look into the code, for what I can understand raw protobuf object cannot be direcly serialized with json.dumps().
So how to serialize meshtastic.SerialInterface().nodes easily?
1 Like
Hmm. Strip out the raw property before serializing?
iz1kga
April 16, 2021, 2:32pm
10
I Think so too, as I see the Raw can appear in “User” ad in “Position”. I’ll to search the raw key around the dict or I can assume it’ll appear only in theese positions?
Regards