diff --git a/mesht_device.py b/mesht_device.py index 788c140..431a7f6 100644 --- a/mesht_device.py +++ b/mesht_device.py @@ -4,6 +4,7 @@ import pb import logging logger = logging.getLogger(__name__) from mesht_models import * +from mesht_protobuf_extra import * DATA_SCHEMA = [ @@ -40,6 +41,7 @@ MESHPACKET_SCHEMA = [ ("uint32", "next_hop", 18), ("uint32", "relay_node", 19), ("uint32", "tx_after", 20), + ("int32", "transport_mechanism", 21) ] CHANNEL_SETTINGS_SCHEMA = [ @@ -70,6 +72,12 @@ DEVICEMETRICS_SCHEMA = [ MYNODEINFO_SCHEMA = [ ("uint32", "my_node_num", 1), + ("uint32", "reboot_count", 8), + ("uint32", "min_app_version", 11), + ("bytes", "device_id", 12), + ("string", "pio_env", 13), + #firware edition + ("uint32", "nodedb_count", 15) ] NODEINFO_SCHEMA = [ @@ -93,6 +101,7 @@ CONFIG_SCHEMA = [ ]), ] +#mesh.proto:2050 FROMRADIO_SCHEMA = [ ("uint32", "id", 1), ("oneof", "payload_variant", [ @@ -100,8 +109,18 @@ FROMRADIO_SCHEMA = [ (MYNODEINFO_SCHEMA, "my_info", 3), (NODEINFO_SCHEMA, "node_info", 4), (CONFIG_SCHEMA, "config", 5), + (LOG_RECORD, "log_record", 6), ("uint32", "config_complete_id", 7), + ("bool", "rebooted", 8), + #(moduleConfig, 9)* (CHANNEL_SCHEMA, "channel", 10), + (QUEUE_STATUS, "queueStatus", 11), + #(xmodem, 12) + (DEVICE_METADATA, 13), + #(mqttproxy, 14) + (FILE_INFO, 15), + #(clientnotifi, 16) + #(deviceui, 17)* ]), ] diff --git a/mesht_protobuf_extra.py b/mesht_protobuf_extra.py new file mode 100644 index 0000000..08d6a3b --- /dev/null +++ b/mesht_protobuf_extra.py @@ -0,0 +1,52 @@ +LOG_RECORD = [ + ("string", "message", 1), + ("fixed32", "time", 2), + ("string", "source", 3), + ("int32", "level", 4)#LogRecordLevel +] + +LOG_RECORD_LEVEL = { + 0: "UNSET", + 50: "CRITICAL", + 40: "ERROR", + 30: "WARNING", + 20: "INFO", + 10: "DEBUG", + 5: "TRACE" +} + +####### + +QUEUE_STATUS = [ + ("int32", "res", 1), + ("uint32", "free", 2), + ("uint32", "maxlen", 3), + ("uint32", "mesh_packet_id", 4) +] + +####### +DEVICE_METADATA = [ + ("string", "firmware_version", 1), + ("uint32", "device_state_version", 2), + ("bool", "canShutdown", 3), + ("bool", "hasWifi", 4), + ("bool", "hasBluetooth", 5), + ("bool", "hasEthernet", 6), + ("int32", "role", 7),# + ("uint32", "position_flags", 8), + ("int32", "hw_model", 9),# + ("bool", "hasRemoteHardware", 10), + ("bool", "hasPKC", 11), + ("uint32", "excluded_modules", 12) +] + +######## +FILE_INFO = [ + ("string", "file_name", 1), + ("uint32", "size_bytes", 2) +] + +######### +TELEMETRY_SCHEME = [ + ("fixed32", "time", 1) +] \ No newline at end of file diff --git a/service.py b/service.py index 0f567e8..2894670 100644 --- a/service.py +++ b/service.py @@ -13,6 +13,8 @@ from logger import logger from mesht_device import MeshtDevice from mesht_models import _wait_for_config_complete, PUB_CH from mesht_models import NOT_CONNECTED, WAIT_CONFIG, AVAILABLE, ERR, RECONNECT +from mesht_protobuf_extra import * +import pb #fs imports from fastapi import FastAPI, HTTPException, WebSocket @@ -146,7 +148,12 @@ class MongoDriver(MeshArgsParse): try: v["decoded_payload"] = v["payload"].decode() except: - pass + try: + if v.get("portnum", 0) == 67: + print(pb.decode(v["payload"], TELEMETRY_SCHEME)) + except: + traceback.print_exc() + pass if "user" in v: v.update(v["user"])