2026-06-03 00:26:25 +08:00
2026-06-03 00:04:05 +08:00
2026-06-02 23:12:42 +08:00
2026-06-03 00:04:05 +08:00
2026-06-03 00:04:05 +08:00
2026-06-03 00:26:25 +08:00
2026-06-03 00:26:25 +08:00

Meshtastic MQTT Server

这是一个 Meshtastic MQTT 订阅工具,用 Go 实现 py/mqtt_nodeinfo_subscriber.py 的主要功能。

程序会连接 Meshtastic MQTT broker,订阅指定 topic,解析 ServiceEnvelope / MeshPacket,并将重点数据包以 JSONL 形式输出到控制台。

运行

go run .

默认连接:

  • brokermqtt.meshtastic.org:1883
  • usernamemeshdev
  • passwordlarge4cats
  • topicmsh/US/#
  • PSKAQ==

也可以指定 topic

go run . --topic 'msh/US/#'

多个 topic 可重复传入:

go run . --topic 'msh/US/#' --topic 'msh/EU_868/#'

参数

--host       MQTT broker hostname
--port       MQTT broker port
--username   MQTT username
--password   MQTT password
--psk        Base64 channel PSK used to try decrypting encrypted packets
--topic      Topic to subscribe; may be repeated
--qos        MQTT subscription QoS: 0, 1, or 2
--client-id  MQTT client id

控制台颜色说明

程序会按数据包类型使用不同背景色,方便快速区分消息类型。

背景色 type portnum 含义
绿色 nodeinfo NODEINFO_APP 节点信息包,包含节点 ID、长名称、短名称、硬件型号、角色、公钥等
蓝色 map_report MAP_REPORT_APP 地图报告包,包含节点名称、硬件、固件版本、区域、调制预设、位置等地图信息
紫色 text_message TEXT_MESSAGE_APP 聊天文本消息
青色 position POSITION_APP 位置包,表示节点位置相关数据;当前只标记类型,不展开解析 payload
黄色 telemetry TELEMETRY_APP 遥测包,表示电池、信道、设备或环境传感器相关数据;当前只标记类型,不展开解析 payload
灰色 routing ROUTING_APP 路由控制包,常见于 ACK、NAK、路由错误等控制信息
灰色 traceroute TRACEROUTE_APP 路径追踪包,用于 mesh 网络路径探测
红色 error record - protobuf 解析失败、payload 解码失败或其他处理错误
无颜色 encrypted_packet - 加密包但当前 PSK/频道 hash 无法解密;这不一定是错误
无颜色 decoded_packet 其他 portnum 已解码/已解密,但程序尚未细分的其他应用包

过滤规则

程序默认不显示 empty_packet

empty_packetMeshPacket 中没有 decodedencrypted payload 的包,只包含类似 fromtoidvia_mqtt 等包头信息。根据固件源码分析,这类包通常不是普通业务数据,更多是 MQTT 回显/隐式 ACK 相关的元信息,对查看节点信息、地图报告和聊天内容价值较低。

输出示例

节点信息包:

{"type":"nodeinfo","portnum":"NODEINFO_APP","from":"!a8dfd867","long_name":"Kabi Matrix 🖥️","short_name":"KaMX","hw_model":"PRIVATE_HW","role":"CLIENT_MUTE"}

地图报告包:

{"type":"map_report","portnum":"MAP_REPORT_APP","from":"!675c9803","long_name":"PaulHome","latitude":42.51043,"longitude":-83.08624999999999,"hw_model":"PORTDUINO"}

聊天消息包:

{"type":"text_message","portnum":"TEXT_MESSAGE_APP","from":"!12345678","text":"hello mesh"}

解密失败的加密包:

{"type":"encrypted_packet","decrypt_success":false,"decrypt_status":"channel hash mismatch","encrypted_len":43}
S
Description
No description provided
Readme MIT
841 KiB
Languages
Go 58%
Vue 31.8%
TypeScript 4%
CSS 3.7%
Python 2%
Other 0.4%