Add support for Telemetry app #20

Closed
opened 2026-10-04 22:57:11 +02:00 by adam · 4 comments
Owner

Add support for Telemetry app meshtastic modules broadcasting over LoRa

TELEMETRY_APP → 114 packets

Mostly device metrics: battery, voltage, channel utilization, airUtilTx, uptime.

Some extended with:

localStats (5 packets): network-wide info like numPacketsTx, numPacketsRx, heap stats, node counts.

environmentMetrics (2 packets): extra sensor values (e.g., temperature, humidity, etc.).

Telemetry:

Common: battery, voltage, utilization, uptime.

Rare extras: localStats (mesh-wide health), environmentMetrics (sensor data).

This shows some nodes are just radios, others also gateways or weather stations.

Add support for Telemetry app meshtastic modules broadcasting over LoRa TELEMETRY_APP → 114 packets Mostly device metrics: battery, voltage, channel utilization, airUtilTx, uptime. Some extended with: localStats (5 packets): network-wide info like numPacketsTx, numPacketsRx, heap stats, node counts. environmentMetrics (2 packets): extra sensor values (e.g., temperature, humidity, etc.). Telemetry: Common: battery, voltage, utilization, uptime. Rare extras: localStats (mesh-wide health), environmentMetrics (sensor data). This shows some nodes are just radios, others also gateways or weather stations. <!-- github-sync-id:3433400371 -->
adam closed this issue 2026-10-04 22:57:11 +02:00
Author
Owner

TELEMETRY_APP

[summary] 2660618080 → 4294967295 port=TELEMETRY_APP (no text)
{
  "from": 2660618080,
  "to": 4294967295,
  "decoded": {
    "portnum": "TELEMETRY_APP",
    "payload": {
      "__bytes_b64__": "DTVr0mgSFQhlFQIrh0AdJb8YPyXYFSA9KJTPEg=="
    },
    "telemetry": {
      "time": 1758620469,
      "deviceMetrics": {
        "batteryLevel": 101,
        "voltage": 4.224,
        "channelUtilization": 0.59666663,
        "airUtilTx": 0.03908333,
        "uptimeSeconds": 305044
      },
      "raw": {
        "time": 1758620469,
        "device_metrics": {
          "battery_level": 101,
          "voltage": 4.224,
          "channel_utilization": 0.59666663,
          "air_util_tx": 0.03908333,
          "uptime_seconds": 305044
        }
      }
    }
  },
  "id": 1256091342,
  "rxTime": 1758620469,
  "hopLimit": 7,
  "priority": "BACKGROUND",
  "raw": {
    "from": 2660618080,
    "to": 4294967295,
    "decoded": {
      "portnum": "TELEMETRY_APP",
      "payload": "DTVr0mgSFQhlFQIrh0AdJb8YPyXYFSA9KJTPEg=="
    },
    "id": 1256091342,
    "rx_time": 1758620469,
    "hop_limit": 7,
    "priority": "BACKGROUND"
  },
  "fromId": "!9e95cf60",
  "toId": "^all"
}
TELEMETRY_APP ``` [summary] 2660618080 → 4294967295 port=TELEMETRY_APP (no text) { "from": 2660618080, "to": 4294967295, "decoded": { "portnum": "TELEMETRY_APP", "payload": { "__bytes_b64__": "DTVr0mgSFQhlFQIrh0AdJb8YPyXYFSA9KJTPEg==" }, "telemetry": { "time": 1758620469, "deviceMetrics": { "batteryLevel": 101, "voltage": 4.224, "channelUtilization": 0.59666663, "airUtilTx": 0.03908333, "uptimeSeconds": 305044 }, "raw": { "time": 1758620469, "device_metrics": { "battery_level": 101, "voltage": 4.224, "channel_utilization": 0.59666663, "air_util_tx": 0.03908333, "uptime_seconds": 305044 } } } }, "id": 1256091342, "rxTime": 1758620469, "hopLimit": 7, "priority": "BACKGROUND", "raw": { "from": 2660618080, "to": 4294967295, "decoded": { "portnum": "TELEMETRY_APP", "payload": "DTVr0mgSFQhlFQIrh0AdJb8YPyXYFSA9KJTPEg==" }, "id": 1256091342, "rx_time": 1758620469, "hop_limit": 7, "priority": "BACKGROUND" }, "fromId": "!9e95cf60", "toId": "^all" } ``` <!-- github-comment-id:3323180454 -->
Author
Owner

POSITION_APP

[summary] 2660618080 → 4294967295 port=POSITION_APP (no text)
{
  "from": 2660618080,
  "to": 4294967295,
  "decoded": {
    "portnum": "POSITION_APP",
    "payload": {
      "__bytes_b64__": "DQAATB8VAAAECBhMJQhr0mgoAljrBXgBgAEAmAEIuAEN"
    },
    "bitfield": 1,
    "position": {
      "latitudeI": 525074432,
      "longitudeI": 134479872,
      "altitude": 76,
      "time": 1758620424,
      "locationSource": "LOC_INTERNAL",
      "PDOP": 747,
      "groundSpeed": 1,
      "groundTrack": 0,
      "satsInView": 8,
      "precisionBits": 13,
      "raw": {
        "latitude_i": 525074432,
        "longitude_i": 134479872,
        "altitude": 76,
        "time": 1758620424,
        "location_source": "LOC_INTERNAL",
        "PDOP": 747,
        "ground_speed": 1,
        "ground_track": 0,
        "sats_in_view": 8,
        "precision_bits": 13
      },
      "latitude": 52.5074432,
      "longitude": 13.4479872
    }
  },
  "id": 1070771917,
  "rxTime": 1758620424,
  "hopLimit": 7,
  "priority": "BACKGROUND",
  "hopStart": 7,
  "relayNode": 96,
  "raw": {
    "from": 2660618080,
    "to": 4294967295,
    "decoded": {
      "portnum": "POSITION_APP",
      "payload": "DQAATB8VAAAECBhMJQhr0mgoAljrBXgBgAEAmAEIuAEN",
      "bitfield": 1
    },
    "id": 1070771917,
    "rx_time": 1758620424,
    "hop_limit": 7,
    "priority": "BACKGROUND",
    "hop_start": 7,
    "relay_node": 96
  },
  "fromId": "!9e95cf60",
  "toId": "^all"
}
POSITION_APP ``` [summary] 2660618080 → 4294967295 port=POSITION_APP (no text) { "from": 2660618080, "to": 4294967295, "decoded": { "portnum": "POSITION_APP", "payload": { "__bytes_b64__": "DQAATB8VAAAECBhMJQhr0mgoAljrBXgBgAEAmAEIuAEN" }, "bitfield": 1, "position": { "latitudeI": 525074432, "longitudeI": 134479872, "altitude": 76, "time": 1758620424, "locationSource": "LOC_INTERNAL", "PDOP": 747, "groundSpeed": 1, "groundTrack": 0, "satsInView": 8, "precisionBits": 13, "raw": { "latitude_i": 525074432, "longitude_i": 134479872, "altitude": 76, "time": 1758620424, "location_source": "LOC_INTERNAL", "PDOP": 747, "ground_speed": 1, "ground_track": 0, "sats_in_view": 8, "precision_bits": 13 }, "latitude": 52.5074432, "longitude": 13.4479872 } }, "id": 1070771917, "rxTime": 1758620424, "hopLimit": 7, "priority": "BACKGROUND", "hopStart": 7, "relayNode": 96, "raw": { "from": 2660618080, "to": 4294967295, "decoded": { "portnum": "POSITION_APP", "payload": "DQAATB8VAAAECBhMJQhr0mgoAljrBXgBgAEAmAEIuAEN", "bitfield": 1 }, "id": 1070771917, "rx_time": 1758620424, "hop_limit": 7, "priority": "BACKGROUND", "hop_start": 7, "relay_node": 96 }, "fromId": "!9e95cf60", "toId": "^all" } ``` <!-- github-comment-id:3323181706 -->
Author
Owner

NODEINFO_APP

[summary] 1819480556 → 4294967295 port=NODEINFO_APP (no text)
{
  "from": 1819480556,
  "to": 4294967295,
  "decoded": {
    "portnum": "NODEINFO_APP",
    "payload": {
      "__bytes_b64__": "CgkhNmM3MzExZWMSElRlZ2VsZXIgU2VlIE5vZGUgMhoDdHMyIgag3WxzEewoBEIgsF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhxIAA=="
    },
    "bitfield": 1,
    "user": {
      "id": "!6c7311ec",
      "longName": "Tegeler See Node 2",
      "shortName": "ts2",
      "macaddr": "oN1scxHs",
      "hwModel": "TBEAM",
      "publicKey": "sF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhw=",
      "isUnmessagable": false,
      "raw": {
        "id": "!6c7311ec",
        "long_name": "Tegeler See Node 2",
        "short_name": "ts2",
        "macaddr": "oN1scxHs",
        "hw_model": "TBEAM",
        "public_key": "sF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhw=",
        "is_unmessagable": false
      }
    }
  },
  "id": 2445060732,
  "rxTime": 1758620743,
  "rxSnr": -12.75,
  "rxRssi": -109,
  "hopStart": 7,
  "relayNode": 231,
  "raw": {
    "from": 1819480556,
    "to": 4294967295,
    "decoded": {
      "portnum": "NODEINFO_APP",
      "payload": "CgkhNmM3MzExZWMSElRlZ2VsZXIgU2VlIE5vZGUgMhoDdHMyIgag3WxzEewoBEIgsF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhxIAA==",
      "bitfield": 1
    },
    "id": 2445060732,
    "rx_time": 1758620743,
    "rx_snr": -12.75,
    "rx_rssi": -109,
    "hop_start": 7,
    "relay_node": 231
  },
  "fromId": null,
  "toId": "^all"
}
NODEINFO_APP ``` [summary] 1819480556 → 4294967295 port=NODEINFO_APP (no text) { "from": 1819480556, "to": 4294967295, "decoded": { "portnum": "NODEINFO_APP", "payload": { "__bytes_b64__": "CgkhNmM3MzExZWMSElRlZ2VsZXIgU2VlIE5vZGUgMhoDdHMyIgag3WxzEewoBEIgsF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhxIAA==" }, "bitfield": 1, "user": { "id": "!6c7311ec", "longName": "Tegeler See Node 2", "shortName": "ts2", "macaddr": "oN1scxHs", "hwModel": "TBEAM", "publicKey": "sF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhw=", "isUnmessagable": false, "raw": { "id": "!6c7311ec", "long_name": "Tegeler See Node 2", "short_name": "ts2", "macaddr": "oN1scxHs", "hw_model": "TBEAM", "public_key": "sF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhw=", "is_unmessagable": false } } }, "id": 2445060732, "rxTime": 1758620743, "rxSnr": -12.75, "rxRssi": -109, "hopStart": 7, "relayNode": 231, "raw": { "from": 1819480556, "to": 4294967295, "decoded": { "portnum": "NODEINFO_APP", "payload": "CgkhNmM3MzExZWMSElRlZ2VsZXIgU2VlIE5vZGUgMhoDdHMyIgag3WxzEewoBEIgsF/NNk1i21zJM6w052ojJi0zFPfI0+cvZ28bUOlWxhxIAA==", "bitfield": 1 }, "id": 2445060732, "rx_time": 1758620743, "rx_snr": -12.75, "rx_rssi": -109, "hop_start": 7, "relay_node": 231 }, "fromId": null, "toId": "^all" } ``` <!-- github-comment-id:3323190967 -->
Author
Owner

Telemetry with environmental sensors


{
  "from": 3698627780,
  "to": 4294967295,
  "decoded": {
    "portnum": "TELEMETRY_APP",
    "payload": {
      "__bytes_b64__": "DW550mgaDw0K169BFQDnHUIddnV+RA=="
    },
    "bitfield": 1,
    "telemetry": {
      "time": 1758624110,
      "environmentMetrics": {
        "temperature": 21.98,
        "relativeHumidity": 39.475586,
        "barometricPressure": 1017.8353
      },
      "raw": {
        "time": 1758624110,
        "environment_metrics": {
          "temperature": 21.98,
          "relative_humidity": 39.475586,
          "barometric_pressure": 1017.8353
        }
      }
    }
  },
  "id": 2817720548,
  "rxTime": 1758624111,
  "rxSnr": -12.75,
  "rxRssi": -106,
  "hopStart": 7,
  "relayNode": 231,
  "raw": {
    "from": 3698627780,
    "to": 4294967295,
    "decoded": {
      "portnum": "TELEMETRY_APP",
      "payload": "DW550mgaDw0K169BFQDnHUIddnV+RA==",
      "bitfield": 1
    },
    "id": 2817720548,
    "rx_time": 1758624111,
    "rx_snr": -12.75,
    "rx_rssi": -106,
    "hop_start": 7,
    "relay_node": 231
  },
  "fromId": null,
  "toId": "^all"
},
Telemetry with environmental sensors ``` { "from": 3698627780, "to": 4294967295, "decoded": { "portnum": "TELEMETRY_APP", "payload": { "__bytes_b64__": "DW550mgaDw0K169BFQDnHUIddnV+RA==" }, "bitfield": 1, "telemetry": { "time": 1758624110, "environmentMetrics": { "temperature": 21.98, "relativeHumidity": 39.475586, "barometricPressure": 1017.8353 }, "raw": { "time": 1758624110, "environment_metrics": { "temperature": 21.98, "relative_humidity": 39.475586, "barometric_pressure": 1017.8353 } } } }, "id": 2817720548, "rxTime": 1758624111, "rxSnr": -12.75, "rxRssi": -106, "hopStart": 7, "relayNode": 231, "raw": { "from": 3698627780, "to": 4294967295, "decoded": { "portnum": "TELEMETRY_APP", "payload": "DW550mgaDw0K169BFQDnHUIddnV+RA==", "bitfield": 1 }, "id": 2817720548, "rx_time": 1758624111, "rx_snr": -12.75, "rx_rssi": -106, "hop_start": 7, "relay_node": 231 }, "fromId": null, "toId": "^all" }, ``` <!-- github-comment-id:3323571861 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/potato-mesh#20