diff --git a/service.py b/service.py index 4e3093a..0150a9d 100644 --- a/service.py +++ b/service.py @@ -10,8 +10,7 @@ import copy 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_device import MeshtDevice, USER_SCHEMA 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 * @@ -186,26 +185,17 @@ 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 - try: - v["decoded_payload_object"] = pb.decode(v["payload"], NODEINFO_SCHEMA) - except: - v["decoded_payload_object"] = pb.decode(v["payload"], NODE_INFO_LITE_SCHEME) - + v["decoded_payload_object"] = pb.decode(v["payload"], USER_SCHEMA) + else: + self.tryParseProtobuf(v) + if "decoded_payload_object" in v: print(v["decoded_payload_object"]) except: + logger.error("Cannot decode protobuf: " + v.get("portnum", 0)) + self.tryParseProtobuf(v) traceback.print_exc() - try: - if v.get("portnum", 0) in []: - pass - else: - to_parse = ' '.join(f'{byte:02x}' for byte in v["payload"]) - res = Parser().parse(to_parse) - logger.debug(res.to_dict()) - except: - pass - if "user" in v: v.update(v["user"]) del v["user"] @@ -213,6 +203,17 @@ class MongoDriver(MeshArgsParse): v["device_uuid"] = from_radio["device_uuid"] await self.dbStore[k].insert_one(v) + def tryParseProtobuf(v): + try: + if v.get("portnum", 0) in []: + pass + else: + to_parse = ' '.join(f'{byte:02x}' for byte in v["payload"]) + res = Parser().parse(to_parse) + logger.debug(v["portnum"], res.to_dict()) + except: + pass + class MeshCenter(MeshMultiListener, MeshApi, MongoDriver, MeshArgsParse): queue: asyncio.Queue = asyncio.Queue()