@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.es.md ADDED
@@ -0,0 +1,337 @@
1
+ # MeshClaw: Plugin de canal Meshtastic para OpenClaw
2
+
3
+ <p align="center">
4
+ <a href="https://www.npmjs.com/package/@seeed-studio/meshtastic">
5
+ <img alt="versión de 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="licencia" 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> | <a href="README.fr.md">Français</a> | <a href="README.pt.md">Português</a> | <b>Español</b>
15
+ </p>
16
+ <!-- LANG_SWITCHER_END -->
17
+
18
+ MeshClaw es un plugin de canal para OpenClaw que permite a tu gateway de IA enviar y recibir mensajes a través de Meshtastic, sin internet ni torres celulares: solo ondas de radio. Habla con tu asistente de IA desde la montaña, el océano o cualquier lugar fuera de la red.
19
+
20
+ ⭐ Danos una estrella en GitHub: ¡nos motiva muchísimo!
21
+
22
+ > [!IMPORTANT]
23
+ > Este es un plugin de canal para el gateway de IA [OpenClaw](https://github.com/openclaw/openclaw), no una aplicación independiente. Necesitas una instancia de OpenClaw en ejecución (Node.js 22+) para usarlo.
24
+
25
+ [Documentación][docs] · [Guía de hardware](#hardware-recomendado) · [Reportar error][issues] · [Solicitar función][issues]
26
+
27
+ ## Tabla de contenidos
28
+
29
+ - [Cómo funciona](#cómo-funciona)
30
+ - [Hardware recomendado](#hardware-recomendado)
31
+ - [Características](#características)
32
+ - [Capacidades y hoja de ruta](#capacidades-y-hoja-de-ruta)
33
+ - [Demostración](#demostración)
34
+ - [Inicio rápido](#inicio-rápido)
35
+ - [Asistente de configuración](#asistente-de-configuración)
36
+ - [Configuración](#1-transporte)
37
+ - [Solución de problemas](#2-región-lora)
38
+ - [Desarrollo](#3-nombre-del-nodo)
39
+ - [Contribuir](#4-acceso-a-canales-grouppolicy)
40
+
41
+ ## Cómo funciona
42
+
43
+ ```mermaid
44
+ flowchart LR
45
+ subgraph mesh ["📻 LoRa Mesh Network"]
46
+ N["Meshtastic Nodes"]
47
+ end
48
+ subgraph gw ["⚙️ OpenClaw Gateway"]
49
+ P["Meshtastic Plugin"]
50
+ AI["AI Agent"]
51
+ end
52
+ N -- "Serial (USB)" --> P
53
+ N -- "HTTP (WiFi)" --> P
54
+ N -. "MQTT (Broker)" .-> P
55
+ P <--> AI
56
+ ```
57
+
58
+ El plugin actúa como puente entre dispositivos LoRa Meshtastic y el agente de IA de OpenClaw. Soporta tres modos de transporte:
59
+
60
+ - Serial: conexión USB directa a un dispositivo Meshtastic local
61
+ - HTTP: conexión a un dispositivo por WiFi / red local
62
+ - MQTT: suscripción a un broker MQTT de Meshtastic, sin hardware local
63
+
64
+ Los mensajes entrantes pasan por control de acceso (política de DM, política de grupo, requisito de mención) antes de llegar a la IA. Las respuestas salientes se despojan del formato Markdown (los dispositivos LoRa no pueden renderizarlo) y se fragmentan para ajustarse a los límites de tamaño de los paquetes de radio.
65
+
66
+ ## Hardware recomendado
67
+
68
+ <p align="center">
69
+ <img src="media/XIAOclaw.png" width="760" alt="Dispositivo Meshtastic con módulo Seeed XIAO" />
70
+ </p>
71
+
72
+ | Dispositivo | Ideal para | Enlace |
73
+ | ----------------------------- | ------------------------ | ----------------- |
74
+ | XIAO ESP32S3 + Wio-SX1262 kit | Desarrollo inicial | [Comprar][hw-xiao] |
75
+ | Wio Tracker L1 Pro | Gateway de campo portátil| [Comprar][hw-wio] |
76
+ | SenseCAP Card Tracker T1000-E | Rastreador compacto | [Comprar][hw-sensecap] |
77
+
78
+ ¿Sin hardware? El transporte por MQTT se conecta vía broker: no se requiere dispositivo local.
79
+
80
+ Cualquier dispositivo compatible con Meshtastic funciona.
81
+
82
+ ## Características
83
+
84
+ - Integración con agente de IA: conecta los agentes de IA de OpenClaw con redes de malla LoRa Meshtastic. Habilita comunicación inteligente sin depender de la nube.
85
+
86
+ - Tres modos de transporte: Serial (USB), HTTP (WiFi) y MQTT
87
+
88
+ - Canales de DM y de grupo con control de acceso: soporta ambos modos de conversación con listas de permitidos de DM, reglas de respuesta por canal y requisito de mención
89
+
90
+ - Soporte para múltiples cuentas: ejecuta varias conexiones independientes simultáneamente
91
+
92
+ - Comunicación de malla resiliente: reconexión automática con reintentos configurables. Maneja caídas de conexión de forma robusta.
93
+
94
+ ## Capacidades y hoja de ruta
95
+
96
+ El plugin trata Meshtastic como un canal de primera clase —al igual que Telegram o Discord— permitiendo conversaciones con IA e invocación de herramientas completamente por radio LoRa, sin dependencia de internet.
97
+
98
+ | Consultar información sin conexión | Puente entre canales: envía fuera de la red, recibe en cualquier lugar | 🔜 Qué sigue: |
99
+ | --------------------------------------------------------- | ---------------------------------------------------------------------- | ------------- |
100
+ | <img src="media/image1.png" alt="Consultar información sin conexión" /> | <img src="media/image2.png" alt="Puente entre canales" /> | Planeamos incorporar datos en tiempo real de los nodos (ubicación GPS, sensores ambientales, estado del dispositivo) en el contexto de OpenClaw, permitiendo que la IA supervise la salud de la red de malla y emita alertas proactivas sin esperar consultas de usuarios. |
101
+
102
+ ## Demostración
103
+
104
+ <div align="center">
105
+
106
+ https://github.com/user-attachments/assets/837062d9-a5bb-4e0a-b7cf-298e4bdf2f7c
107
+
108
+ </div>
109
+
110
+ Alternativa: [media/demo.mp4](media/demo.mp4)
111
+
112
+ ## Inicio rápido
113
+
114
+ ```bash
115
+ # 1. Install plugin
116
+ openclaw plugins install @seeed-studio/meshtastic
117
+
118
+ # 2. Guided setup — walks you through transport, region, and access policy
119
+ openclaw onboard
120
+
121
+ # 3. Verify
122
+ openclaw channels status --probe
123
+ ```
124
+
125
+ <p align="center">
126
+ <img src="media/setup-screenshot.png" width="700" alt="Asistente de configuración de OpenClaw" />
127
+ </p>
128
+
129
+ ## Asistente de configuración
130
+
131
+ Ejecutar `openclaw onboard` inicia un asistente interactivo que te guía por cada paso de configuración. Abajo explicamos qué significa cada paso y cómo elegir.
132
+
133
+ ### 1. Transporte
134
+
135
+ Cómo se conecta el gateway a la malla Meshtastic:
136
+
137
+ | Opción | Descripción | Requiere |
138
+ | ------------------ | -------------------------------------------------------------- | ----------------------------------------------- |
139
+ | Serial (USB) | Conexión USB directa a un dispositivo local. Autodetecta puertos disponibles. | Dispositivo Meshtastic conectado por USB |
140
+ | HTTP (WiFi) | Conexión a un dispositivo en la red local. | IP o hostname del dispositivo (p. ej. `meshtastic.local`) |
141
+ | MQTT (broker) | Conexión a la malla vía un broker MQTT — no requiere hardware local. | Dirección del broker, credenciales y tema de suscripción |
142
+
143
+ ### 2. Región LoRa
144
+
145
+ > Solo Serial y HTTP. MQTT deriva la región del tema de suscripción.
146
+
147
+ Configura la región de frecuencia de radio en el dispositivo. Debe coincidir con tus normativas locales y con otros nodos de la malla. Opciones comunes:
148
+
149
+ | Región | Frecuencia |
150
+ | -------- | ----------------- |
151
+ | US | 902–928 MHz |
152
+ | EU_868 | 869 MHz |
153
+ | CN | 470–510 MHz |
154
+ | JP | 920 MHz |
155
+ | UNSET | Mantener la predeterminada del dispositivo |
156
+
157
+ Consulta la documentación de regiones de Meshtastic: https://meshtastic.org/docs/getting-started/initial-config/#lora
158
+
159
+ ### 3. Nombre del nodo
160
+
161
+ El nombre visible del dispositivo en la malla. También se usa como el disparador de @mención en canales de grupo: otros usuarios envían `@OpenClaw` para hablar con tu bot.
162
+
163
+ - Serial / HTTP: opcional — se detecta automáticamente del dispositivo conectado si se deja en blanco.
164
+ - MQTT: obligatorio — no hay un dispositivo físico del cual leer el nombre.
165
+
166
+ ### 4. Acceso a canales (`groupPolicy`)
167
+
168
+ Controla si y cómo el bot responde en canales de grupo de la malla (p. ej., LongFast, Emergency):
169
+
170
+ | Política | Comportamiento |
171
+ | -------------------- | ------------------------------------------------------------ |
172
+ | `disabled` (pred.) | Ignora todos los mensajes en canales de grupo. Solo se procesan DMs. |
173
+ | `open` | Responde en todos los canales de la malla. |
174
+ | `allowlist` | Responde solo en los canales listados. Se te pedirá ingresar nombres de canal (separados por comas, p. ej. `LongFast, Emergency`). Usa `*` como comodín para coincidir con todos. |
175
+
176
+ ### 5. Requerir mención
177
+
178
+ > Solo aparece cuando el acceso a canales está habilitado (no `disabled`).
179
+
180
+ Cuando está activado (predeterminado: sí), el bot solo responde en canales de grupo cuando alguien menciona su nombre de nodo (p. ej., `@OpenClaw ¿cómo está el clima?`). Esto evita que el bot responda a cada mensaje del canal.
181
+
182
+ Si está desactivado, el bot responde a todos los mensajes en los canales permitidos.
183
+
184
+ ### 6. Política de acceso por DM (`dmPolicy`)
185
+
186
+ Controla quién puede enviar mensajes directos (DM) al bot:
187
+
188
+ | Política | Comportamiento |
189
+ | ------------------- | ------------------------------------------------------------ |
190
+ | `pairing` (pred.) | Nuevos remitentes activan una solicitud de emparejamiento que debe aprobarse antes de poder chatear. |
191
+ | `open` | Cualquiera en la malla puede enviar DMs al bot libremente. |
192
+ | `allowlist` | Solo los nodos listados en `allowFrom` pueden enviar DM. Los demás se ignoran. |
193
+
194
+ ### 7. Lista de permitidos para DM (`allowFrom`)
195
+
196
+ > Solo aparece cuando `dmPolicy` es `allowlist`, o cuando el asistente determina que se necesita.
197
+
198
+ Una lista de IDs de usuario Meshtastic autorizados a enviar mensajes directos. Formato: `!aabbccdd` (ID de usuario en hex). Varias entradas se separan por comas.
199
+
200
+ <p align="center">
201
+ <img src="media/image3.jpg" width="400" />
202
+ </p>
203
+
204
+ ### 8. Nombres visibles de cuentas
205
+
206
+ > Solo aparece para configuraciones de múltiples cuentas. Opcional.
207
+
208
+ Asigna nombres legibles a tus cuentas. Por ejemplo, una cuenta con ID `home` podría mostrarse como "Estación Hogar". Si se omite, se usa el ID de cuenta tal cual. Es puramente cosmético y no afecta la funcionalidad.
209
+
210
+ ## Configuración
211
+
212
+ La configuración guiada (`openclaw onboard`) cubre todo lo siguiente. Consulta el Asistente de configuración para un recorrido paso a paso. Para configurar manualmente, edita con `openclaw config edit`.
213
+
214
+ ### Serial (USB)
215
+
216
+ ```yaml
217
+ channels:
218
+ meshtastic:
219
+ transport: serial
220
+ serialPort: /dev/ttyUSB0
221
+ nodeName: OpenClaw
222
+ ```
223
+
224
+ ### HTTP (WiFi)
225
+
226
+ ```yaml
227
+ channels:
228
+ meshtastic:
229
+ transport: http
230
+ httpAddress: meshtastic.local
231
+ nodeName: OpenClaw
232
+ ```
233
+
234
+ ### MQTT (broker)
235
+
236
+ ```yaml
237
+ channels:
238
+ meshtastic:
239
+ transport: mqtt
240
+ nodeName: OpenClaw
241
+ mqtt:
242
+ broker: mqtt.meshtastic.org
243
+ username: meshdev
244
+ password: large4cats
245
+ topic: "msh/US/2/json/#"
246
+ ```
247
+
248
+ ### Múltiples cuentas
249
+
250
+ ```yaml
251
+ channels:
252
+ meshtastic:
253
+ accounts:
254
+ home:
255
+ transport: serial
256
+ serialPort: /dev/ttyUSB0
257
+ remote:
258
+ transport: mqtt
259
+ mqtt:
260
+ broker: mqtt.meshtastic.org
261
+ topic: "msh/US/2/json/#"
262
+ ```
263
+
264
+ <details>
265
+ <summary><b>Referencia de todas las opciones</b></summary>
266
+
267
+ | Clave | Tipo | Predeterminado | Notas |
268
+ | ------------------- | ------------------------------- | --------------------- | ------------------------------------------------------------ |
269
+ | `transport` | `serial \| http \| mqtt` | `serial` | |
270
+ | `serialPort` | `string` | — | Requerido para serial |
271
+ | `httpAddress` | `string` | `meshtastic.local` | Requerido para HTTP |
272
+ | `httpTls` | `boolean` | `false` | |
273
+ | `mqtt.broker` | `string` | `mqtt.meshtastic.org` | |
274
+ | `mqtt.port` | `number` | `1883` | |
275
+ | `mqtt.username` | `string` | `meshdev` | |
276
+ | `mqtt.password` | `string` | `large4cats` | |
277
+ | `mqtt.topic` | `string` | `msh/US/2/json/#` | Tema de suscripción |
278
+ | `mqtt.publishTopic` | `string` | derivado | |
279
+ | `mqtt.tls` | `boolean` | `false` | |
280
+ | `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`. Solo Serial/HTTP. |
281
+ | `nodeName` | `string` | auto-detect | Nombre visible y disparador de @mención. Requerido para MQTT. |
282
+ | `dmPolicy` | `open \| pairing \| allowlist` | `pairing` | Quién puede enviar mensajes directos. Ver [Política de acceso por DM](#6-politica-de-acceso-por-dm-dmpolicy). |
283
+ | `allowFrom` | `string[]` | — | IDs de nodo para la lista de permitidos de DM, p. ej. `["!aabbccdd"]` |
284
+ | `groupPolicy` | `open \| allowlist \| disabled` | `disabled` | Política de respuesta en canales de grupo. Ver [Acceso a canales](#4-acceso-a-canales-grouppolicy). |
285
+ | `channels` | `Record<string, object>` | — | Anulaciones por canal: `requireMention`, `allowFrom`, `tools` |
286
+
287
+ </details>
288
+
289
+ <details>
290
+ <summary><b>Sobrescritura por variables de entorno</b></summary>
291
+
292
+ Estas variables sobrescriben la configuración de la cuenta predeterminada (YAML tiene prioridad para cuentas con nombre):
293
+
294
+ | Variable | Clave de config equivalente |
295
+ | -------------------------- | --------------------------- |
296
+ | `MESHTASTIC_TRANSPORT` | `transport` |
297
+ | `MESHTASTIC_SERIAL_PORT` | `serialPort` |
298
+ | `MESHTASTIC_HTTP_ADDRESS` | `httpAddress` |
299
+ | `MESHTASTIC_MQTT_BROKER` | `mqtt.broker` |
300
+ | `MESHTASTIC_MQTT_TOPIC` | `mqtt.topic` |
301
+
302
+ </details>
303
+
304
+ ## Solución de problemas
305
+
306
+ | Síntoma | Verificar |
307
+ | -------------------- | ------------------------------------------------------------ |
308
+ | No conecta por Serial | ¿Ruta del dispositivo correcta? ¿El host tiene permisos? |
309
+ | No conecta por HTTP | ¿`httpAddress` es alcanzable? ¿`httpTls` coincide con el dispositivo? |
310
+ | MQTT no recibe nada | ¿La región en `mqtt.topic` es correcta? ¿Credenciales del broker válidas? |
311
+ | Sin respuestas por DM | ¿`dmPolicy` y `allowFrom` configurados? Ver [Política de acceso por DM](#6-politica-de-acceso-por-dm-dmpolicy). |
312
+ | Sin respuestas en grupo | ¿`groupPolicy` habilitada? ¿El canal está en la lista permitida? ¿Se requiere mención? Ver [Acceso a canales](#4-acceso-a-canales-grouppolicy). |
313
+
314
+ ¿Encontraste un bug? [Abre un issue][issues] con el tipo de transporte, configuración (oculta secretos) y la salida de `openclaw channels status --probe`.
315
+
316
+ ## Desarrollo
317
+
318
+ ```bash
319
+ git clone https://github.com/Seeed-Solution/MeshClaw.git
320
+ cd MeshClaw
321
+ npm install
322
+ openclaw plugins install -l ./MeshClaw
323
+ ```
324
+
325
+ Sin paso de build: OpenClaw carga directamente el código fuente TypeScript. Usa `openclaw channels status --probe` para verificar.
326
+
327
+ ## Contribuir
328
+
329
+ - [Abre un issue][issues] para bugs o solicitudes de funciones
330
+ - Pull requests bienvenidos — mantén el código alineado con las convenciones existentes de TypeScript
331
+
332
+ <!-- Enlaces de referencia -->
333
+ [docs]: https://meshtastic.org/docs/
334
+ [issues]: https://github.com/Seeed-Solution/MeshClaw/issues
335
+ [hw-xiao]: https://www.seeedstudio.com/Wio-SX1262-with-XIAO-ESP32S3-p-5982.html
336
+ [hw-wio]: https://www.seeedstudio.com/Wio-Tracker-L1-Pro-p-6454.html
337
+ [hw-sensecap]: https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-E-for-Meshtastic-p-5913.html