# MeshClaw:OpenClaw Meshtastic 频道插件

npm 版本 许可证

English | 中文 | 日本語 | Français | Português | Español

MeshClaw 是一个 OpenClaw 频道插件,让你的 AI 网关通过 Meshtastic 发送和接收消息——无需互联网、无需蜂窝网络,只靠电波。在山里、海上,或任何不在电网覆盖范围的地方,都能与 AI 助手沟通。 ⭐ 欢迎在 GitHub 上为我们点 Star——这对我们很有激励! > [!IMPORTANT] > 这是用于 [OpenClaw](https://github.com/openclaw/openclaw) AI 网关的“频道插件”,并非独立应用。使用前需要一个已运行的 OpenClaw 实例(Node.js 22+)。 [文档][docs] · [硬件指南](#recommended-hardware) · [提交 Bug][issues] · [功能请求][issues] ## 目录 - [工作原理](#工作原理) - [推荐硬件](#推荐硬件) - [功能](#功能) - [能力与路线图](#能力与路线图) - [演示](#演示) - [快速开始](#快速开始) - [设置向导](#设置向导) - [配置](#1-传输方式) - [故障排查](#2-lora-区域) - [开发](#3-节点名称) - [贡献](#4-频道访问grouppolicy) ## 工作原理 ```mermaid flowchart LR subgraph mesh ["📻 LoRa Mesh Network"] N["Meshtastic Nodes"] end subgraph gw ["⚙️ OpenClaw Gateway"] P["Meshtastic Plugin"] AI["AI Agent"] end N -- "Serial (USB)" --> P N -- "HTTP (WiFi)" --> P N -. "MQTT (Broker)" .-> P P <--> AI ``` 该插件在 Meshtastic LoRa 设备与 OpenClaw AI 代理之间建立桥接。支持三种传输模式: - 串口(Serial)——通过 USB 直连本地 Meshtastic 设备 - HTTP ——通过 WiFi/局域网连接设备 - MQTT ——订阅 Meshtastic MQTT 代理,无需本地硬件 入站消息会经过访问控制(私信策略、群组策略、@提及门槛)后再交给 AI。出站回复会移除 Markdown 格式(LoRa 设备无法渲染),并按无线电数据包大小限制进行分片发送。 ## 推荐硬件

搭载 Seeed XIAO 模组的 Meshtastic 设备

| 设备 | 最佳用途 | 链接 | | ---------------------------- | ---------------------- | ------------------ | | XIAO ESP32S3 + Wio-SX1262 套件 | 入门级开发 | [购买][hw-xiao] | | Wio Tracker L1 Pro | 便携式现场网关 | [购买][hw-wio] | | SenseCAP Card Tracker T1000-E | 小型追踪器 | [购买][hw-sensecap] | > **网关主机:[reComputer R1024][hw-r1024]** — 不需要 Mac Mini。reComputer R1024(约 $189,约 5 W)是一台无风扇工业级边缘计算机,可全天候运行 OpenClaw。支持 PoE 供电、DIN 导轨安装,配备双 Ethernet 接口及可选 LoRa/4G 模块——非常适合作为现场常驻网关。[入门指南 →][wiki-openclaw-recomputer] 没有硬件?可使用 MQTT 传输通过代理连接——无需本地设备。 任何兼容 Meshtastic 的设备都可以使用。 ## 功能 - AI 代理集成——将 OpenClaw AI 代理与 Meshtastic LoRa Mesh 网络桥接,实现无云依赖的智能通信。 - 三种传输模式——支持串口(USB)、HTTP(WiFi)与 MQTT - 私信与群组频道的访问控制——支持两种会话模式,提供私信白名单、频道响应规则与@提及门槛 - 多账号支持——可同时运行多个独立连接 - 稳健的 Mesh 通信——可配置自动重连与重试,优雅应对掉线与中断 ## 能力与路线图 该插件将 Meshtastic 视为一等公民的通讯渠道——就像 Telegram 或 Discord 一样——使 AI 对话与工具调用完全通过 LoRa 无线电进行,无需依赖互联网。 | 离线查询信息 | 跨渠道桥接:离网发送,任意处接收 | 🔜 接下来: | | ------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------- | | 离线查询信息 | 跨渠道桥接 | 我们计划将实时节点数据(GPS 位置、环境传感、设备状态)注入 OpenClaw 上下文,让 AI 能监控 Mesh 网络健康状况,并主动广播告警,而无需等待用户发问。 | ## 演示
https://github.com/user-attachments/assets/837062d9-a5bb-4e0a-b7cf-298e4bdf2f7c
备用视频: [media/demo.mp4](media/demo.mp4) ## 快速开始 ```bash # 1. Install plugin openclaw plugins install @seeed-studio/meshtastic # 2. Guided setup — walks you through transport, region, and access policy openclaw onboard # 3. Verify openclaw channels status --probe ```

OpenClaw 设置向导

## 设置向导 运行 `openclaw onboard` 会启动交互式向导,引导你完成每一步配置。下面解释每一步的含义与选择建议。 ### 1. 传输方式 网关如何连接到 Meshtastic Mesh: | 选项 | 说明 | 要求 | | ------------------ | ------------------------------------------------------------- | ---------------------------------------------- | | 串口(Serial,USB) | 通过 USB 直连本地设备。可自动检测可用端口。 | 通过 USB 连接的 Meshtastic 设备 | | HTTP(WiFi) | 通过局域网连接设备。 | 设备 IP 或主机名(如 `meshtastic.local`) | | MQTT(代理) | 通过 MQTT 代理接入 Mesh——无需本地硬件。 | 代理地址、凭据与订阅主题 | ### 2. LoRa 区域 > 仅适用于串口与 HTTP。MQTT 会根据订阅主题推导区域。 设置设备的无线频段区域。必须符合当地法规,并与 Mesh 上其他节点一致。常见选项: | 区域 | 频段 | | -------- | ------------------ | | `US` | 902–928 MHz | | `EU_868` | 869 MHz | | `CN` | 470–510 MHz | | `JP` | 920 MHz | | `UNSET` | 保持设备默认 | 完整列表参见 [Meshtastic 区域文档](https://meshtastic.org/docs/getting-started/initial-config/#lora)。 ### 3. 节点名称 设备在 Mesh 上的显示名称。也作为群组频道中的“@提及触发词”——其他用户发送 `@OpenClaw` 与机器人对话。 - 串口/HTTP:可选——若留空,将自动从连接的设备读取名称。 - MQTT:必填——因为没有实体设备可读取名称。 ### 4. 频道访问(groupPolicy) 控制机器人在“Mesh 群组频道”(如 LongFast、Emergency)中的响应策略: | 策略 | 行为说明 | | -------------------- | ------------------------------------------------------------ | | `disabled`(默认) | 忽略所有群组频道消息。仅处理私信。 | | `open` | 在 Mesh 上的“所有”频道中响应。 | | `allowlist` | 仅在“列出的”频道中响应。会提示输入频道名(逗号分隔,如 `LongFast, Emergency`)。使用 `*` 作为通配符匹配全部。 | ### 5. 需要 @提及 > 仅当频道访问已启用(非 `disabled`)时出现。 启用时(默认:是),机器人只在群组频道里被@到其节点名时才回应(例如 `@OpenClaw 天气怎么样?`)。这可避免机器人对频道中每一条消息都做出回复。 若关闭,则机器人会在允许的频道中对“所有”消息回复。 ### 6. 私信访问策略(dmPolicy) 控制谁可以给机器人发送“私信”: | 策略 | 行为说明 | | -------------------- | ------------------------------------------------------------ | | `pairing`(默认) | 新发送者会触发配对请求,需先批准后才能聊天。 | | `open` | Mesh 上任何人都可以自由私信机器人。 | | `allowlist` | 只有 `allowFrom` 列表中的节点可以私信。其他一律忽略。 | ### 7. 私信白名单(allowFrom) > 仅当 `dmPolicy` 为 `allowlist`,或向导判定需要时出现。 允许发送私信的 Meshtastic 用户 ID 列表。格式:`!aabbccdd`(16 进制用户 ID)。多个条目用逗号分隔。

### 8. 账号显示名称 > 仅对多账号配置显示。可选。 为你的账号分配易读的显示名称。比如,将 ID 为 `home` 的账号显示为 “Home Station”。若跳过,将直接使用原始账号 ID。仅用于显示,不影响功能。 ## 配置 引导式设置(`openclaw onboard`)已覆盖以下所有内容。详见[设置向导](#setup-wizard)。若需手动配置,可用 `openclaw config edit` 编辑。 ### 串口(USB) ```yaml channels: meshtastic: transport: serial serialPort: /dev/ttyUSB0 nodeName: OpenClaw ``` ### HTTP(WiFi) ```yaml channels: meshtastic: transport: http httpAddress: meshtastic.local nodeName: OpenClaw ``` ### MQTT(代理) ```yaml channels: meshtastic: transport: mqtt nodeName: OpenClaw mqtt: broker: mqtt.meshtastic.org username: meshdev password: large4cats topic: "msh/US/2/json/#" ``` ### 多账号 ```yaml channels: meshtastic: accounts: home: transport: serial serialPort: /dev/ttyUSB0 remote: transport: mqtt mqtt: broker: mqtt.meshtastic.org topic: "msh/US/2/json/#" ```
所有选项参考 | 键 | 类型 | 默认值 | 说明 | | -------------------- | -------------------------------- | -------------------- | ------------------------------------------------------------ | | `transport` | `serial \| http \| mqtt` | `serial` | | | `serialPort` | `string` | — | 串口模式必填 | | `httpAddress` | `string` | `meshtastic.local` | HTTP 模式必填 | | `httpTls` | `boolean` | `false` | | | `mqtt.broker` | `string` | `mqtt.meshtastic.org`| | | `mqtt.port` | `number` | `1883` | | | `mqtt.username` | `string` | `meshdev` | | | `mqtt.password` | `string` | `large4cats` | | | `mqtt.topic` | `string` | `msh/US/2/json/#` | 订阅主题 | | `mqtt.publishTopic` | `string` | derived | | | `mqtt.tls` | `boolean` | `false` | | | `region` | enum | `UNSET` | `US`, `EU_868`, `CN`, `JP`, `ANZ`, `KR`, `TW`, `RU`, `IN`, `NZ_865`, `TH`, `EU_433`, `UA_433`, `UA_868`, `MY_433`, `MY_919`, `SG_923`, `LORA_24`。仅串口/HTTP。 | | `nodeName` | `string` | auto-detect | 显示名与 @提及触发词。MQTT 必填。 | | `dmPolicy` | `open \| pairing \| allowlist` | `pairing` | 谁可以发送私信。见[私信访问策略](#6-私信访问策略-dmpolicy)。 | | `allowFrom` | `string[]` | — | 私信白名单节点 ID,例如 `["!aabbccdd"]` | | `groupPolicy` | `open \| allowlist \| disabled` | `disabled` | 群组频道响应策略。见[频道访问](#4-频道访问-grouppolicy)。 | | `channels` | `Record` | — | 按频道覆盖:`requireMention`、`allowFrom`、`tools` |
环境变量覆盖 这些环境变量会覆盖“默认账号”的配置(对命名账号,以 YAML 配置为准): | 变量名 | 等效配置键 | | --------------------------- | ------------------ | | `MESHTASTIC_TRANSPORT` | `transport` | | `MESHTASTIC_SERIAL_PORT` | `serialPort` | | `MESHTASTIC_HTTP_ADDRESS` | `httpAddress` | | `MESHTASTIC_MQTT_BROKER` | `mqtt.broker` | | `MESHTASTIC_MQTT_TOPIC` | `mqtt.topic` |
## 故障排查 | 现象 | 检查点 | | --------------------- | ----------------------------------------------------------- | | 串口无法连接 | 设备路径是否正确?主机是否有访问权限? | | HTTP 无法连接 | `httpAddress` 是否可达?`httpTls` 是否与设备设置匹配? | | MQTT 没有收到消息 | `mqtt.topic` 中的区域是否正确?代理凭据是否有效? | | 私信没响应 | `dmPolicy` 与 `allowFrom` 是否配置?见[私信访问策略](#6-私信访问策略-dmpolicy)。 | | 群组无回复 | `groupPolicy` 是否启用?频道是否在白名单?是否需要 @提及?见[频道访问](#4-频道访问-grouppolicy)。 | 发现 Bug?请[提交 Issue][issues],并附上传输类型、配置(注意去除敏感信息)以及 `openclaw channels status --probe` 的输出。 ## 开发 ```bash git clone https://github.com/Seeed-Solution/MeshClaw.git cd MeshClaw npm install openclaw plugins install -l ./MeshClaw ``` 无需构建步骤——OpenClaw 会直接加载 TypeScript 源码。使用 `openclaw channels status --probe` 进行验证。 ## 贡献 - 发现问题或需要新功能,请[提交 Issue][issues] - 欢迎提交 PR——请保持代码风格与现有 TypeScript 约定一致 [docs]: https://meshtastic.org/docs/ [issues]: https://github.com/Seeed-Solution/MeshClaw/issues [hw-xiao]: https://www.seeedstudio.com/Wio-SX1262-with-XIAO-ESP32S3-p-5982.html [hw-wio]: https://www.seeedstudio.com/Wio-Tracker-L1-Pro-p-6454.html [hw-sensecap]: https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-E-for-Meshtastic-p-5913.html [hw-r1024]: https://www.seeedstudio.com/reComputer-R1024-10-p-5923.html [wiki-openclaw-recomputer]: https://wiki.seeedstudio.com/getting_started_with_openclaw_on_recomputer/