@seeed-studio/meshtastic 0.1.1 → 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.fr.md ADDED
@@ -0,0 +1,350 @@
1
+ # MeshClaw : Plugin de canal OpenClaw pour Meshtastic
2
+
3
+ <p align="center">
4
+ <a href="https://www.npmjs.com/package/@seeed-studio/meshtastic">
5
+ <img alt="version npm" src="https://img.shields.io/npm/v/@seeed-studio/meshtastic.svg" />
6
+ </a>
7
+ <a href="https://www.npmjs.com/package/@seeed-studio/meshtastic">
8
+ <img alt="licence" src="https://img.shields.io/npm/l/@seeed-studio/meshtastic.svg" />
9
+ </a>
10
+ </p>
11
+
12
+ <!-- LANG_SWITCHER_START -->
13
+ <p align="center">
14
+ <a href="README.md">English</a> | <a href="README.zh-CN.md">中文</a> | <a href="README.ja.md">日本語</a> | <b>Français</b> | <a href="README.pt.md">Português</a> | <a href="README.es.md">Español</a>
15
+ </p>
16
+ <!-- LANG_SWITCHER_END -->
17
+
18
+ MeshClaw est un plugin de canal OpenClaw qui permet à votre passerelle IA d’envoyer et recevoir des messages via Meshtastic — sans internet, sans antennes cellulaires, uniquement par ondes radio. Parlez à votre assistant IA depuis la montagne, l’océan, ou partout où le réseau n’existe pas.
19
+
20
+ ⭐ Mettez-nous une étoile sur GitHub — ça nous motive beaucoup !
21
+
22
+ > [!IMPORTANT]
23
+ > Ceci est un plugin de canal pour la passerelle IA OpenClaw — ce n’est pas une application autonome. Vous avez besoin d’une instance OpenClaw en cours d’exécution (Node.js 22+) pour l’utiliser.
24
+
25
+ [Documentation][docs] · [Guide matériel](#recommended-hardware) · [Signaler un bug][issues] · [Demander une fonctionnalité][issues]
26
+
27
+ ## Table des matières
28
+
29
+ - [Fonctionnement](#fonctionnement)
30
+ - [Matériel recommandé](#matériel-recommandé)
31
+ - [Fonctionnalités](#fonctionnalités)
32
+ - [Capacités et feuille de route](#capacités-et-feuille-de-route)
33
+ - [Démo](#démo)
34
+ - [Démarrage rapide](#démarrage-rapide)
35
+ - [Assistant de configuration](#assistant-de-configuration)
36
+ - [Configuration](#1-transport)
37
+ - [Dépannage](#2-région-lora)
38
+ - [Développement](#3-nom-du-nœud)
39
+ - [Contribuer](#4-accès-aux-canaux-grouppolicy)
40
+
41
+ <a id="how-it-works"></a>
42
+ ## Fonctionnement
43
+
44
+ ```mermaid
45
+ flowchart LR
46
+ subgraph mesh ["📻 LoRa Mesh Network"]
47
+ N["Meshtastic Nodes"]
48
+ end
49
+ subgraph gw ["⚙️ OpenClaw Gateway"]
50
+ P["Meshtastic Plugin"]
51
+ AI["AI Agent"]
52
+ end
53
+ N -- "Serial (USB)" --> P
54
+ N -- "HTTP (WiFi)" --> P
55
+ N -. "MQTT (Broker)" .-> P
56
+ P <--> AI
57
+ ```
58
+
59
+ Le plugin fait le pont entre les appareils LoRa Meshtastic et l’agent IA d’OpenClaw. Il prend en charge trois modes de transport :
60
+
61
+ - Série — connexion USB directe à un appareil Meshtastic local
62
+ - HTTP — connexion à un appareil via WiFi / réseau local
63
+ - MQTT — abonnement à un broker Meshtastic, sans matériel local
64
+
65
+ Les messages entrants passent par un contrôle d’accès (politique de DM, politique de groupe, obligation de mention) avant d’atteindre l’IA. Les réponses sortantes sont dépouillées du formatage Markdown (les appareils LoRa ne peuvent pas l’afficher) et découpées afin de respecter les limites de taille des paquets radio.
66
+
67
+ <a id="recommended-hardware"></a>
68
+ ## Matériel recommandé
69
+
70
+ <p align="center">
71
+ <img src="media/XIAOclaw.png" width="760" alt="Appareil Meshtastic avec module Seeed XIAO" />
72
+ </p>
73
+
74
+ | Appareil | Idéal pour | Lien |
75
+ | ----------------------------- | -------------------------- | ------------------- |
76
+ | Kit XIAO ESP32S3 + Wio-SX1262 | Développement d’entrée de gamme | [Acheter][hw-xiao] |
77
+ | Wio Tracker L1 Pro | Passerelle de terrain portable | [Acheter][hw-wio] |
78
+ | SenseCAP Card Tracker T1000-E | Traceur compact | [Acheter][hw-sensecap] |
79
+
80
+ Pas de matériel ? Le transport MQTT se connecte via un broker — aucun appareil local requis.
81
+
82
+ Tout appareil compatible Meshtastic fonctionne.
83
+
84
+ <a id="features"></a>
85
+ ## Fonctionnalités
86
+
87
+ - Intégration d’agent IA — Fait le pont entre les agents IA OpenClaw et les réseaux maillés LoRa Meshtastic. Permet une communication intelligente sans dépendance au cloud.
88
+
89
+ - Trois modes de transport — Série (USB), HTTP (WiFi) et MQTT
90
+
91
+ - Canaux DM et de groupe avec contrôle d’accès — Prise en charge des deux modes de conversation avec des listes d’autorisation pour DM, des règles de réponse par canal et l’obligation de mention
92
+
93
+ - Prise en charge multi-comptes — Exécutez plusieurs connexions indépendantes simultanément
94
+
95
+ - Communication maillée résiliente — Reconnexion automatique avec tentatives configurables. Gère les coupures de connexion en douceur.
96
+
97
+ <a id="capabilities--roadmap"></a>
98
+ ## Capacités et feuille de route
99
+
100
+ Le plugin traite Meshtastic comme un canal de première classe — au même titre que Telegram ou Discord — permettant des conversations IA et l’invocation de compétences entièrement via la radio LoRa, sans dépendance à internet.
101
+
102
+ | Interroger des informations hors ligne | Passerelle intercanaux : envoyez hors réseau, recevez partout | 🔜 Prochainement : |
103
+ | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
104
+ | <img src="media/image1.png" alt="Interroger des informations hors ligne" /> | <img src="media/image2.png" alt="Passerelle intercanaux" /> | Nous prévoyons d’ingérer les données temps réel des nœuds (position GPS, capteurs environnementaux, état de l’appareil) dans le contexte d’OpenClaw, afin de permettre à l’IA de surveiller la santé du réseau maillé et de diffuser des alertes proactives sans attendre les requêtes des utilisateurs. |
105
+
106
+ <a id="demo"></a>
107
+ ## Démo
108
+
109
+ <div align="center">
110
+
111
+ https://github.com/user-attachments/assets/837062d9-a5bb-4e0a-b7cf-298e4bdf2f7c
112
+
113
+ </div>
114
+
115
+ Alternative : [media/demo.mp4](media/demo.mp4)
116
+
117
+ <a id="quick-start"></a>
118
+ ## Démarrage rapide
119
+
120
+ ```bash
121
+ # 1. Install plugin
122
+ openclaw plugins install @seeed-studio/meshtastic
123
+
124
+ # 2. Guided setup — walks you through transport, region, and access policy
125
+ openclaw onboard
126
+
127
+ # 3. Verify
128
+ openclaw channels status --probe
129
+ ```
130
+
131
+ <p align="center">
132
+ <img src="media/setup-screenshot.png" width="700" alt="Assistant de configuration OpenClaw" />
133
+ </p>
134
+
135
+ <a id="setup-wizard"></a>
136
+ ## Assistant de configuration
137
+
138
+ Lancer `openclaw onboard` ouvre un assistant interactif qui vous guide à chaque étape de configuration. Voici ce que signifie chaque étape et comment choisir.
139
+
140
+ ### 1. Transport
141
+
142
+ La manière dont la passerelle se connecte au réseau maillé Meshtastic :
143
+
144
+ | Option | Description | Prérequis |
145
+ | ----------------- | ------------------------------------------------------------- | ----------------------------------------------- |
146
+ | Série (USB) | Connexion USB directe à un appareil local. Détection automatique des ports disponibles. | Appareil Meshtastic branché en USB |
147
+ | HTTP (WiFi) | Connexion à un appareil via le réseau local. | IP ou nom d’hôte de l’appareil (ex. `meshtastic.local`) |
148
+ | MQTT (broker) | Connexion au réseau via un broker MQTT — aucun matériel local requis. | Adresse du broker, identifiants et sujet d’abonnement |
149
+
150
+ ### 2. Région LoRa
151
+
152
+ > Série et HTTP uniquement. MQTT déduit la région depuis le sujet d’abonnement.
153
+
154
+ Définit la région de fréquence radio sur l’appareil. Doit correspondre à vos réglementations locales et aux autres nœuds du réseau. Choix courants :
155
+
156
+ | Région | Fréquence |
157
+ | -------- | -------------------- |
158
+ | `US` | 902–928 MHz |
159
+ | `EU_868` | 869 MHz |
160
+ | `CN` | 470–510 MHz |
161
+ | `JP` | 920 MHz |
162
+ | `UNSET` | Conserver la valeur par défaut de l’appareil |
163
+
164
+ Voir la documentation Meshtastic sur les régions : https://meshtastic.org/docs/getting-started/initial-config/#lora
165
+
166
+ ### 3. Nom du nœud
167
+
168
+ Le nom affiché de l’appareil sur le réseau. Utilisé aussi comme déclencheur de mention @ dans les canaux de groupe — les autres enverront `@OpenClaw` pour parler à votre bot.
169
+
170
+ - Série / HTTP : optionnel — détecté automatiquement depuis l’appareil connecté si laissé vide.
171
+ - MQTT : requis — il n’y a pas d’appareil physique pour lire le nom.
172
+
173
+ <a id="4-channel-access-grouppolicy"></a>
174
+ ### 4. Accès aux canaux (`groupPolicy`)
175
+
176
+ Contrôle si et comment le bot répond dans les canaux de groupe du réseau (ex. LongFast, Emergency) :
177
+
178
+ | Politique | Comportement |
179
+ | -------------------- | ------------------------------------------------------------ |
180
+ | `disabled` (par défaut) | Ignore tous les messages des canaux de groupe. Seuls les DM sont traités. |
181
+ | `open` | Répond dans tous les canaux du réseau. |
182
+ | `allowlist` | Répond uniquement dans les canaux listés. Vous serez invité à saisir des noms de canaux (séparés par des virgules, ex. `LongFast, Emergency`). Utilisez `*` comme joker pour tout correspondre. |
183
+
184
+ ### 5. Exiger une mention
185
+
186
+ > N’apparaît que lorsque l’accès aux canaux est activé (pas `disabled`).
187
+
188
+ Lorsqu’activé (par défaut : oui), le bot ne répond dans les canaux de groupe que si quelqu’un mentionne son nom de nœud (ex. `@OpenClaw quel temps fait-il ?`). Cela évite que le bot ne réponde à chaque message du canal.
189
+
190
+ Lorsqu’il est désactivé, le bot répond à tous les messages dans les canaux autorisés.
191
+
192
+ <a id="6-dm-access-policy-dmpolicy"></a>
193
+ ### 6. Politique d’accès aux DM (`dmPolicy`)
194
+
195
+ Contrôle qui peut envoyer des messages privés (DM) au bot :
196
+
197
+ | Politique | Comportement |
198
+ | ------------------- | ------------------------------------------------------------- |
199
+ | `pairing` (par défaut) | Les nouveaux expéditeurs déclenchent une demande d’appairage qui doit être approuvée avant de pouvoir discuter. |
200
+ | `open` | N’importe quel nœud du réseau peut envoyer un DM librement. |
201
+ | `allowlist` | Seuls les nœuds listés dans `allowFrom` peuvent envoyer un DM. Les autres sont ignorés. |
202
+
203
+ ### 7. Liste d’autorisation DM (`allowFrom`)
204
+
205
+ > N’apparaît que lorsque `dmPolicy` vaut `allowlist`, ou lorsque l’assistant détermine qu’elle est nécessaire.
206
+
207
+ Une liste d’identifiants utilisateur Meshtastic autorisés à envoyer des messages privés. Format : `!aabbccdd` (ID utilisateur hexadécimal). Plusieurs entrées sont séparées par des virgules.
208
+
209
+ <p align="center">
210
+ <img src="media/image3.jpg" width="400" />
211
+ </p>
212
+
213
+ ### 8. Noms d’affichage des comptes
214
+
215
+ > N’apparaît que pour les configurations multi-comptes. Optionnel.
216
+
217
+ Attribue des noms lisibles aux comptes. Par exemple, un compte avec l’ID `home` peut être affiché comme « Home Station ». Si ignoré, l’ID brut du compte est utilisé. Purement cosmétique, n’affecte pas la fonctionnalité.
218
+
219
+ <a id="configuration"></a>
220
+ ## Configuration
221
+
222
+ La configuration guidée (`openclaw onboard`) couvre tout ce qui suit. Voir l’Assistant de configuration pour un pas-à-pas. Pour une configuration manuelle, éditez avec `openclaw config edit`.
223
+
224
+ ### Série (USB)
225
+
226
+ ```yaml
227
+ channels:
228
+ meshtastic:
229
+ transport: serial
230
+ serialPort: /dev/ttyUSB0
231
+ nodeName: OpenClaw
232
+ ```
233
+
234
+ ### HTTP (WiFi)
235
+
236
+ ```yaml
237
+ channels:
238
+ meshtastic:
239
+ transport: http
240
+ httpAddress: meshtastic.local
241
+ nodeName: OpenClaw
242
+ ```
243
+
244
+ ### MQTT (broker)
245
+
246
+ ```yaml
247
+ channels:
248
+ meshtastic:
249
+ transport: mqtt
250
+ nodeName: OpenClaw
251
+ mqtt:
252
+ broker: mqtt.meshtastic.org
253
+ username: meshdev
254
+ password: large4cats
255
+ topic: "msh/US/2/json/#"
256
+ ```
257
+
258
+ ### Multi-comptes
259
+
260
+ ```yaml
261
+ channels:
262
+ meshtastic:
263
+ accounts:
264
+ home:
265
+ transport: serial
266
+ serialPort: /dev/ttyUSB0
267
+ remote:
268
+ transport: mqtt
269
+ mqtt:
270
+ broker: mqtt.meshtastic.org
271
+ topic: "msh/US/2/json/#"
272
+ ```
273
+
274
+ <details>
275
+ <summary><b>Référence de toutes les options</b></summary>
276
+
277
+ | Clé | Type | Valeur par défaut | Remarques |
278
+ | ------------------- | ------------------------------- | --------------------- | ----------------------------------------------------------- |
279
+ | `transport` | `serial \| http \| mqtt` | `serial` | |
280
+ | `serialPort` | `string` | — | Requis pour le mode série |
281
+ | `httpAddress` | `string` | `meshtastic.local` | Requis pour HTTP |
282
+ | `httpTls` | `boolean` | `false` | |
283
+ | `mqtt.broker` | `string` | `mqtt.meshtastic.org` | |
284
+ | `mqtt.port` | `number` | `1883` | |
285
+ | `mqtt.username` | `string` | `meshdev` | |
286
+ | `mqtt.password` | `string` | `large4cats` | |
287
+ | `mqtt.topic` | `string` | `msh/US/2/json/#` | Sujet d’abonnement |
288
+ | `mqtt.publishTopic` | `string` | dérivé | |
289
+ | `mqtt.tls` | `boolean` | `false` | |
290
+ | `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`. Série/HTTP uniquement. |
291
+ | `nodeName` | `string` | auto-détection | Nom d’affichage et déclencheur @mention. Requis pour MQTT. |
292
+ | `dmPolicy` | `open \| pairing \| allowlist` | `pairing` | Qui peut envoyer des messages privés. Voir Politique d’accès aux DM. |
293
+ | `allowFrom` | `string[]` | — | IDs de nœuds pour la liste d’autorisation DM, ex. `["!aabbccdd"]` |
294
+ | `groupPolicy` | `open \| allowlist \| disabled` | `disabled` | Politique de réponse dans les canaux de groupe. Voir Accès aux canaux. |
295
+ | `channels` | `Record<string, object>` | — | Surcharges par canal : `requireMention`, `allowFrom`, `tools` |
296
+
297
+ </details>
298
+
299
+ <details>
300
+ <summary><b>Substitutions par variables d’environnement</b></summary>
301
+
302
+ Ces variables substituent la configuration du compte par défaut (le YAML a priorité pour les comptes nommés) :
303
+
304
+ | Variable | Clé de configuration équivalente |
305
+ | ------------------------- | -------------------------------- |
306
+ | `MESHTASTIC_TRANSPORT` | `transport` |
307
+ | `MESHTASTIC_SERIAL_PORT` | `serialPort` |
308
+ | `MESHTASTIC_HTTP_ADDRESS` | `httpAddress` |
309
+ | `MESHTASTIC_MQTT_BROKER` | `mqtt.broker` |
310
+ | `MESHTASTIC_MQTT_TOPIC` | `mqtt.topic` |
311
+
312
+ </details>
313
+
314
+ <a id="troubleshooting"></a>
315
+ ## Dépannage
316
+
317
+ | Symptôme | Vérifier |
318
+ | -------------------- | ------------------------------------------------------------ |
319
+ | La liaison série ne se connecte pas | Chemin de l’appareil correct ? Permissions sur l’hôte ? |
320
+ | La connexion HTTP échoue | `httpAddress` joignable ? `httpTls` correspond à l’appareil ? |
321
+ | MQTT ne reçoit rien | Région correcte dans `mqtt.topic` ? Identifiants du broker valides ? |
322
+ | Pas de réponses en DM | `dmPolicy` et `allowFrom` configurés ? Voir Politique d’accès aux DM. |
323
+ | Pas de réponses en groupe | `groupPolicy` activé ? Canal dans la liste autorisée ? Mention requise ? Voir Accès aux canaux. |
324
+
325
+ Vous avez trouvé un bug ? [Ouvrez un ticket][issues] en indiquant le type de transport, la configuration (masquez les secrets) et la sortie de `openclaw channels status --probe`.
326
+
327
+ <a id="development"></a>
328
+ ## Développement
329
+
330
+ ```bash
331
+ git clone https://github.com/Seeed-Solution/MeshClaw.git
332
+ cd MeshClaw
333
+ npm install
334
+ openclaw plugins install -l ./MeshClaw
335
+ ```
336
+
337
+ Pas d’étape de build — OpenClaw charge directement le code source TypeScript. Utilisez `openclaw channels status --probe` pour vérifier.
338
+
339
+ <a id="contributing"></a>
340
+ ## Contribuer
341
+
342
+ - [Ouvrez un ticket][issues] pour les bugs ou les demandes de fonctionnalités
343
+ - Les pull requests sont les bienvenues — alignez le code sur les conventions TypeScript existantes
344
+
345
+ <!-- Liens de référence -->
346
+ [docs]: https://meshtastic.org/docs/
347
+ [issues]: https://github.com/Seeed-Solution/MeshClaw/issues
348
+ [hw-xiao]: https://www.seeedstudio.com/Wio-SX1262-with-XIAO-ESP32S3-p-5982.html
349
+ [hw-wio]: https://www.seeedstudio.com/Wio-Tracker-L1-Pro-p-6454.html
350
+ [hw-sensecap]: https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-E-for-Meshtastic-p-5913.html