@seeed-studio/meshtastic 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,51 +1,50 @@
1
- # OpenClaw Meshtastic Plugin
1
+ <p align="center">
2
+ <img src="media/GoMeshClaw.png" width="700" alt="Meshtastic LoRa hardware" />
3
+ </p>
4
+
5
+ # MeshClaw: OpenClaw Meshtastic Channel Plugin
6
+
7
+ <p align="center">
8
+ <a href="https://www.npmjs.com/package/@seeed-studio/meshtastic">
9
+ <img alt="npm version" src="https://img.shields.io/npm/v/@seeed-studio/meshtastic.svg" />
10
+ </a>
11
+ <a href="https://www.npmjs.com/package/@seeed-studio/meshtastic">
12
+ <img alt="license" src="https://img.shields.io/npm/l/@seeed-studio/meshtastic.svg" />
13
+ </a>
14
+ <a href="https://github.com/openclaw/openclaw">
15
+ <img alt="openclaw compat" src="https://img.shields.io/badge/OpenClaw-2026.3.x-blue" />
16
+ </a>
17
+ </p>
2
18
 
3
- [![npm version](https://img.shields.io/npm/v/@seeed-studio/meshtastic.svg)](https://www.npmjs.com/package/@seeed-studio/meshtastic)
4
- [![license](https://img.shields.io/npm/l/@seeed-studio/meshtastic.svg)](https://www.npmjs.com/package/@seeed-studio/meshtastic)
19
+ <!-- LANG_SWITCHER_START -->
20
+ <p align="center">
21
+ <b>English</b> | <a href="README.zh-CN.md">中文</a> | <a href="README.ja.md">日本語</a> | <a href="README.fr.md">Français</a> | <a href="README.pt.md">Português</a> | <a href="README.es.md">Español</a>
22
+ </p>
23
+ <!-- LANG_SWITCHER_END -->
5
24
 
6
- **[English](README.md)** | [中文](README.zh-CN.md)
25
+ **MeshClaw** is an OpenClaw channel plugin that lets your AI gateway send and receive messages over Meshtastic — no internet, no cell towers, just radio waves. Talk to your AI assistant from the mountains, the ocean, or anywhere the grid doesn't reach.
7
26
 
8
- [OpenClaw](https://github.com/openclaw/openclaw) channel plugin for [Meshtastic](https://meshtastic.org/) LoRa mesh networks. Connect your AI gateway to the mesh over USB serial, HTTP, or MQTT — no cloud required.
27
+ Star us on GitHub it motivates us a lot!
9
28
 
10
29
  > [!IMPORTANT]
11
30
  > This is a **channel plugin** for the [OpenClaw](https://github.com/openclaw/openclaw) AI gateway — not a standalone application. You need a running OpenClaw instance (Node.js 22+) to use it.
12
31
 
13
32
  [Documentation][docs] · [Hardware Guide](#recommended-hardware) · [Report Bug][issues] · [Request Feature][issues]
14
33
 
15
- <p align="center">
16
- <img src="media/hardware.jpg" width="420" alt="Meshtastic LoRa hardware" />
17
- </p>
18
-
19
34
  ## Table of Contents
20
35
 
21
- - [Quick Start](#quick-start)
22
36
  - [How It Works](#how-it-works)
23
37
  - [Recommended Hardware](#recommended-hardware)
24
- - [Demo](#demo)
25
38
  - [Features](#features)
39
+ - [Capabilities & Roadmap](#capabilities--roadmap)
40
+ - [Demo](#demo)
41
+ - [Quick Start](#quick-start)
26
42
  - [Setup Wizard](#setup-wizard)
27
43
  - [Configuration](#configuration)
28
44
  - [Troubleshooting](#troubleshooting)
29
45
  - [Development](#development)
30
46
  - [Contributing](#contributing)
31
47
 
32
- ## Quick Start
33
-
34
- ```bash
35
- # 1. Install plugin
36
- openclaw plugins install @seeed-studio/meshtastic
37
-
38
- # 2. Guided setup — walks you through transport, region, and access policy
39
- openclaw setup
40
-
41
- # 3. Verify
42
- openclaw channels status --probe
43
- ```
44
-
45
- <p align="center">
46
- <img src="media/setup-screenshot.png" width="700" alt="OpenClaw setup wizard" />
47
- </p>
48
-
49
48
  ## How It Works
50
49
 
51
50
  ```mermaid
@@ -77,40 +76,75 @@ Inbound messages go through access control (DM policy, group policy, mention gat
77
76
  <img src="media/XIAOclaw.png" width="760" alt="Meshtastic device with Seeed XIAO module" />
78
77
  </p>
79
78
 
80
- | Device | Best for | Link |
81
- |---|---|---|
82
- | XIAO ESP32S3 + Wio-SX1262 kit | Budget off-grid node | [Buy][hw-xiao] |
83
- | Wio Tracker L1 Pro | Ready-to-deploy gateway | [Buy][hw-wio] |
84
- | SenseCAP Card Tracker T1000-E | Compact field tracker | [Buy][hw-sensecap] |
79
+ | Device | Best for | Link |
80
+ | ----------------------------- | ----------------------- | ------------------ |
81
+ | XIAO ESP32S3 + Wio-SX1262 kit | Entry-level development | [Buy][hw-xiao] |
82
+ | Wio Tracker L1 Pro | Portable field gateway | [Buy][hw-wio] |
83
+ | SenseCAP Card Tracker T1000-E | Compact tracker | [Buy][hw-sensecap] |
85
84
 
86
- Any Meshtastic-compatible device works. Serial and HTTP transports connect directly; MQTT requires no local hardware at all.
85
+ No hardware? MQTT transport connects via broker no local device required.
86
+
87
+ Any Meshtastic-compatible device works.
88
+
89
+ ## Features
90
+
91
+ - **AI Agent Integration** — Bridges OpenClaw AI agents with Meshtastic LoRa mesh networks. Enables intelligent communication without cloud dependency.
92
+
93
+ - **Three Transport Modes** — Serial (USB), HTTP (WiFi), and MQTT support
94
+
95
+ - **DM & Group Channels with Access Control** — Supports both conversation modes with DM allowlists, channel response rules, and mention-gating
96
+
97
+ - **Multi-Account Support** — Run multiple independent connections simultaneously
98
+
99
+ - **Resilient Mesh Communication** — Auto-reconnect with configurable retries. Handles connection drops gracefully.
100
+
101
+ ## Capabilities & Roadmap
102
+
103
+ The plugin treats Meshtastic as a first-class channel — just like Telegram or Discord — enabling AI conversations and skill invocation entirely over LoRa radio, without internet dependency.
104
+
105
+ | Query Information Offline | Cross-Channel Bridge: Send from off-grid, receive anywhere | 🔜 What's next: |
106
+ | ------------------------------------------------------------ | ---------------------------------------------------------- | ------------------------------------------------------------ |
107
+ | <img src="media/image1.png" alt="Query Information Offline" /> | <img src="media/image2.png" alt="Cross-Channel Bridge" /> | We plan to ingest real-time node data (GPS location, environmental sensors, device status) into OpenClaw's context, enabling the AI to monitor mesh network health and broadcast proactive alerts without waiting for user queries. |
87
108
 
88
109
  ## Demo
89
110
 
90
- https://github.com/user-attachments/assets/a3e46e9d-cf5a-4743-9830-f671a1998ca0
111
+ <div align="center">
112
+
113
+ https://github.com/user-attachments/assets/837062d9-a5bb-4e0a-b7cf-298e4bdf2f7c
114
+
115
+ </div>
91
116
 
92
117
  Fallback: [media/demo.mp4](media/demo.mp4)
93
118
 
94
- ## Features
119
+ ## Quick Start
95
120
 
96
- - **Direct messages and mesh channels** with per-channel rules
97
- - **Access control** — DM policy (`open` / `pairing` / `allowlist`), group policy (`open` / `allowlist` / `disabled`), mention-gating, per-channel allowlists
98
- - **Multi-account** run independent serial, HTTP, and MQTT connections side by side
99
- - **Region-aware** — sets device region on connect and derives MQTT topic defaults
100
- - **Auto-reconnect** with resilient retry handling
121
+ ```bash
122
+ # 1. Install plugin
123
+ openclaw plugins install @seeed-studio/meshtastic
124
+
125
+ # 2. Guided setup walks you through transport, region, and access policy
126
+ openclaw onboard
127
+
128
+ # 3. Verify
129
+ openclaw channels status --probe
130
+ ```
131
+
132
+ <p align="center">
133
+ <img src="media/setup-screenshot.png" width="700" alt="OpenClaw setup wizard" />
134
+ </p>
101
135
 
102
136
  ## Setup Wizard
103
137
 
104
- Running `openclaw setup` launches an interactive wizard that walks you through each configuration step. Below is what each step means and how to choose.
138
+ Running `openclaw onboard` launches an interactive wizard that walks you through each configuration step. Below is what each step means and how to choose.
105
139
 
106
140
  ### 1. Transport
107
141
 
108
142
  How the gateway connects to the Meshtastic mesh:
109
143
 
110
- | Option | Description | Requires |
111
- |---|---|---|
112
- | **Serial** (USB) | Direct USB connection to a local device. Auto-detects available ports. | Meshtastic device plugged in via USB |
113
- | **HTTP** (WiFi) | Connects to a device over the local network. | Device IP or hostname (e.g. `meshtastic.local`) |
144
+ | Option | Description | Requires |
145
+ | ----------------- | ------------------------------------------------------------ | ------------------------------------------------ |
146
+ | **Serial** (USB) | Direct USB connection to a local device. Auto-detects available ports. | Meshtastic device plugged in via USB |
147
+ | **HTTP** (WiFi) | Connects to a device over the local network. | Device IP or hostname (e.g. `meshtastic.local`) |
114
148
  | **MQTT** (broker) | Connects to the mesh via an MQTT broker — no local hardware needed. | Broker address, credentials, and subscribe topic |
115
149
 
116
150
  ### 2. LoRa Region
@@ -119,13 +153,13 @@ How the gateway connects to the Meshtastic mesh:
119
153
 
120
154
  Sets the radio frequency region on the device. Must match your local regulations and other nodes on the mesh. Common choices:
121
155
 
122
- | Region | Frequency |
123
- |---|---|
124
- | `US` | 902–928 MHz |
125
- | `EU_868` | 869 MHz |
126
- | `CN` | 470–510 MHz |
127
- | `JP` | 920 MHz |
128
- | `UNSET` | Keep device default |
156
+ | Region | Frequency |
157
+ | -------- | ------------------- |
158
+ | `US` | 902–928 MHz |
159
+ | `EU_868` | 869 MHz |
160
+ | `CN` | 470–510 MHz |
161
+ | `JP` | 920 MHz |
162
+ | `UNSET` | Keep device default |
129
163
 
130
164
  See [Meshtastic region docs](https://meshtastic.org/docs/getting-started/initial-config/#lora) for the full list.
131
165
 
@@ -140,11 +174,11 @@ The device's display name on the mesh. Also used as the **@mention trigger** in
140
174
 
141
175
  Controls whether and how the bot responds in **mesh group channels** (e.g. LongFast, Emergency):
142
176
 
143
- | Policy | Behavior |
144
- |---|---|
145
- | `disabled` (default) | Ignores all group channel messages. Only DMs are processed. |
146
- | `open` | Responds in **every** channel on the mesh. |
147
- | `allowlist` | Responds only in **listed** channels. You will be prompted to enter channel names (comma-separated, e.g. `LongFast, Emergency`). Use `*` as a wildcard to match all. |
177
+ | Policy | Behavior |
178
+ | -------------------- | ------------------------------------------------------------ |
179
+ | `disabled` (default) | Ignores all group channel messages. Only DMs are processed. |
180
+ | `open` | Responds in **every** channel on the mesh. |
181
+ | `allowlist` | Responds only in **listed** channels. You will be prompted to enter channel names (comma-separated, e.g. `LongFast, Emergency`). Use `*` as a wildcard to match all. |
148
182
 
149
183
  ### 5. Require Mention
150
184
 
@@ -158,17 +192,21 @@ When disabled, the bot responds to **all** messages in allowed channels.
158
192
 
159
193
  Controls who can send **direct messages** to the bot:
160
194
 
161
- | Policy | Behavior |
162
- |---|---|
195
+ | Policy | Behavior |
196
+ | ------------------- | ------------------------------------------------------------ |
163
197
  | `pairing` (default) | New senders trigger a pairing request that must be approved before they can chat. |
164
- | `open` | Anyone on the mesh can DM the bot freely. |
165
- | `allowlist` | Only nodes listed in `allowFrom` can DM. All others are ignored. |
198
+ | `open` | Anyone on the mesh can DM the bot freely. |
199
+ | `allowlist` | Only nodes listed in `allowFrom` can DM. All others are ignored. |
166
200
 
167
201
  ### 7. DM Allowlist (`allowFrom`)
168
202
 
169
203
  > Only appears when `dmPolicy` is `allowlist`, or when the wizard determines one is needed.
170
204
 
171
- A list of Meshtastic node IDs allowed to send direct messages. Format: `!aabbccdd` (hex node ID). Multiple entries are comma-separated.
205
+ A list of Meshtastic User IDs allowed to send direct messages. Format: `!aabbccdd` (hex User ID). Multiple entries are comma-separated.
206
+
207
+ <p align="center">
208
+ <img src="media/image3.jpg" width="400" />
209
+ </p>
172
210
 
173
211
  ### 8. Account Display Names
174
212
 
@@ -178,7 +216,7 @@ Assigns human-readable display names to your accounts. For example, an account w
178
216
 
179
217
  ## Configuration
180
218
 
181
- The guided setup (`openclaw setup`) covers everything below. See [Setup Wizard](#setup-wizard) for a step-by-step walkthrough. For manual config, edit with `openclaw config edit`.
219
+ The guided setup (`openclaw onboard`) covers everything below. See [Setup Wizard](#setup-wizard) for a step-by-step walkthrough. For manual config, edit with `openclaw config edit`.
182
220
 
183
221
  ### Serial (USB)
184
222
 
@@ -233,25 +271,25 @@ channels:
233
271
  <details>
234
272
  <summary><b>All Options Reference</b></summary>
235
273
 
236
- | Key | Type | Default | Notes |
237
- |---|---|---|---|
238
- | `transport` | `serial \| http \| mqtt` | `serial` | |
239
- | `serialPort` | `string` | — | Required for serial |
240
- | `httpAddress` | `string` | `meshtastic.local` | Required for HTTP |
241
- | `httpTls` | `boolean` | `false` | |
242
- | `mqtt.broker` | `string` | `mqtt.meshtastic.org` | |
243
- | `mqtt.port` | `number` | `1883` | |
244
- | `mqtt.username` | `string` | `meshdev` | |
245
- | `mqtt.password` | `string` | `large4cats` | |
246
- | `mqtt.topic` | `string` | `msh/US/2/json/#` | Subscribe topic |
247
- | `mqtt.publishTopic` | `string` | derived | |
248
- | `mqtt.tls` | `boolean` | `false` | |
249
- | `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`. Serial/HTTP only. |
250
- | `nodeName` | `string` | auto-detect | Display name and @mention trigger. Required for MQTT. |
251
- | `dmPolicy` | `open \| pairing \| allowlist` | `pairing` | Who can send direct messages. See [DM Access Policy](#6-dm-access-policy-dmpolicy). |
252
- | `allowFrom` | `string[]` | — | Node IDs for DM allowlist, e.g. `["!aabbccdd"]` |
253
- | `groupPolicy` | `open \| allowlist \| disabled` | `disabled` | Group channel response policy. See [Channel Access](#4-channel-access-grouppolicy). |
254
- | `channels` | `Record<string, object>` | — | Per-channel overrides: `requireMention`, `allowFrom`, `tools` |
274
+ | Key | Type | Default | Notes |
275
+ | ------------------- | ------------------------------- | --------------------- | ------------------------------------------------------------ |
276
+ | `transport` | `serial \| http \| mqtt` | `serial` | |
277
+ | `serialPort` | `string` | — | Required for serial |
278
+ | `httpAddress` | `string` | `meshtastic.local` | Required for HTTP |
279
+ | `httpTls` | `boolean` | `false` | |
280
+ | `mqtt.broker` | `string` | `mqtt.meshtastic.org` | |
281
+ | `mqtt.port` | `number` | `1883` | |
282
+ | `mqtt.username` | `string` | `meshdev` | |
283
+ | `mqtt.password` | `string` | `large4cats` | |
284
+ | `mqtt.topic` | `string` | `msh/US/2/json/#` | Subscribe topic |
285
+ | `mqtt.publishTopic` | `string` | derived | |
286
+ | `mqtt.tls` | `boolean` | `false` | |
287
+ | `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`. Serial/HTTP only. |
288
+ | `nodeName` | `string` | auto-detect | Display name and @mention trigger. Required for MQTT. |
289
+ | `dmPolicy` | `open \| pairing \| allowlist` | `pairing` | Who can send direct messages. See [DM Access Policy](#6-dm-access-policy-dmpolicy). |
290
+ | `allowFrom` | `string[]` | — | Node IDs for DM allowlist, e.g. `["!aabbccdd"]` |
291
+ | `groupPolicy` | `open \| allowlist \| disabled` | `disabled` | Group channel response policy. See [Channel Access](#4-channel-access-grouppolicy). |
292
+ | `channels` | `Record<string, object>` | — | Per-channel overrides: `requireMention`, `allowFrom`, `tools` |
255
293
 
256
294
  </details>
257
295
 
@@ -260,35 +298,35 @@ channels:
260
298
 
261
299
  These override the default account's config (YAML takes precedence for named accounts):
262
300
 
263
- | Variable | Equivalent config key |
264
- |---|---|
265
- | `MESHTASTIC_TRANSPORT` | `transport` |
266
- | `MESHTASTIC_SERIAL_PORT` | `serialPort` |
267
- | `MESHTASTIC_HTTP_ADDRESS` | `httpAddress` |
268
- | `MESHTASTIC_MQTT_BROKER` | `mqtt.broker` |
269
- | `MESHTASTIC_MQTT_TOPIC` | `mqtt.topic` |
301
+ | Variable | Equivalent config key |
302
+ | ------------------------- | --------------------- |
303
+ | `MESHTASTIC_TRANSPORT` | `transport` |
304
+ | `MESHTASTIC_SERIAL_PORT` | `serialPort` |
305
+ | `MESHTASTIC_HTTP_ADDRESS` | `httpAddress` |
306
+ | `MESHTASTIC_MQTT_BROKER` | `mqtt.broker` |
307
+ | `MESHTASTIC_MQTT_TOPIC` | `mqtt.topic` |
270
308
 
271
309
  </details>
272
310
 
273
311
  ## Troubleshooting
274
312
 
275
- | Symptom | Check |
276
- |---|---|
277
- | Serial won't connect | Device path correct? Host has permission? |
278
- | HTTP won't connect | `httpAddress` reachable? `httpTls` matches device? |
279
- | MQTT receives nothing | Region in `mqtt.topic` correct? Broker credentials valid? |
280
- | No DM responses | `dmPolicy` and `allowFrom` configured? See [DM Access Policy](#6-dm-access-policy-dmpolicy). |
281
- | No group replies | `groupPolicy` enabled? Channel in allowlist? Mention required? See [Channel Access](#4-channel-access-grouppolicy). |
313
+ | Symptom | Check |
314
+ | --------------------- | ------------------------------------------------------------ |
315
+ | Serial won't connect | Device path correct? Host has permission? |
316
+ | HTTP won't connect | `httpAddress` reachable? `httpTls` matches device? |
317
+ | MQTT receives nothing | Region in `mqtt.topic` correct? Broker credentials valid? |
318
+ | No DM responses | `dmPolicy` and `allowFrom` configured? See [DM Access Policy](#6-dm-access-policy-dmpolicy). |
319
+ | No group replies | `groupPolicy` enabled? Channel in allowlist? Mention required? See [Channel Access](#4-channel-access-grouppolicy). |
282
320
 
283
321
  Found a bug? [Open an issue][issues] with transport type, config (redact secrets), and `openclaw channels status --probe` output.
284
322
 
285
323
  ## Development
286
324
 
287
325
  ```bash
288
- git clone https://github.com/Seeed-Solution/openclaw-meshtastic.git
289
- cd openclaw-meshtastic
326
+ git clone https://github.com/Seeed-Solution/MeshClaw.git
327
+ cd MeshClaw
290
328
  npm install
291
- openclaw plugins install -l ./openclaw-meshtastic
329
+ openclaw plugins install -l ./MeshClaw
292
330
  ```
293
331
 
294
332
  No build step — OpenClaw loads TypeScript source directly. Use `openclaw channels status --probe` to verify.
@@ -300,7 +338,7 @@ No build step — OpenClaw loads TypeScript source directly. Use `openclaw chann
300
338
 
301
339
  <!-- Reference-style links -->
302
340
  [docs]: https://meshtastic.org/docs/
303
- [issues]: https://github.com/Seeed-Solution/openclaw-meshtastic/issues
341
+ [issues]: https://github.com/Seeed-Solution/MeshClaw/issues
304
342
  [hw-xiao]: https://www.seeedstudio.com/Wio-SX1262-with-XIAO-ESP32S3-p-5982.html
305
343
  [hw-wio]: https://www.seeedstudio.com/Wio-Tracker-L1-Pro-p-6454.html
306
344
  [hw-sensecap]: https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-E-for-Meshtastic-p-5913.html