diff --git a/protobufs_extra/node_info_lite_proto.py b/protobufs_extra/node_info_lite_proto.py new file mode 100644 index 0000000..570a120 --- /dev/null +++ b/protobufs_extra/node_info_lite_proto.py @@ -0,0 +1,36 @@ +from telemetry_proto import DEVICE_METRICS_SCHEME + +USER_LITE_SCHEME = [ + ("bytes", "macaddr", 1), + ("string", "long_name", 2), + ("string", "short_name", 3), + ("int32", "hw_model", 4), + ("bool", "is_licensed", 5), + ("int32", "role", 6), + ("bytes", "public_key", 7), + ("scalar", "is_unmessagable", 9, "bool") +] + +POSITION_LITE_SCHEME = [ + ("sfixed32", "latitude_i", 1), + ("sfixed32", "longitude_i", 2), + ("int32", "altitude", 3), + ("fixed32", "time", 4), + ("int32", "location_source", 5) +] + +NODE_INFO_LITE_SCHEME = [ + ("uint32", "num", 1), + (USER_LITE_SCHEME, "user", 2), + (POSITION_LITE_SCHEME, "position", 3), + ("float", "snr", 4), + ("fixed32", "last_heard", 5), + (DEVICE_METRICS_SCHEME, "device_metrics", 6), + ("uint32", "channel", 7), + ("bool", "via_mqtt", 8), + ("scalar", "hops_away", 9, "uint32"), + ("bool", "is_favorite", 10), + ("bool", "is_ignored", 11), + ("uint32", "next_hop", 12), + ("uint32", "bitfield", 13) +] diff --git a/service.py b/service.py index 1623808..c02d491 100644 --- a/service.py +++ b/service.py @@ -11,6 +11,7 @@ from logger import logger #mesh from mesht_device import MeshtDevice, NODEINFO_SCHEMA +from protobufs_extra.node_info_lite_proto import NODE_INFO_LITE_SCHEME from mesht_models import _wait_for_config_complete, PUB_CH from mesht_models import NOT_CONNECTED, WAIT_CONFIG, AVAILABLE, ERR, RECONNECT from protobufs_extra.telemetry_proto import * @@ -184,7 +185,10 @@ class MongoDriver(MeshArgsParse): elif v.get("portnum", 0) == 70: #traceroute v["decoded_payload_object"] = pb.decode(v["payload"], ROUTE_DISCOVERY_SCHEME) elif v.get("portnum", 0) == 4: #nodeinfo - v["decoded_payload_object"] = pb.decode(v["payload"], NODEINFO_SCHEMA) + try: + v["decoded_payload_object"] = pb.decode(v["payload"], NODEINFO_SCHEMA) + except: + v["decoded_payload_object"] = pb.decode(v["payload"], NODE_INFO_LITE_SCHEME) if "decoded_payload_object" in v: print(v["decoded_payload_object"])