@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.pt.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="versão do 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="licença" 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> | <b>Português</b> | <a href="README.es.md">Español</a>
15
+ </p>
16
+ <!-- LANG_SWITCHER_END -->
17
+
18
+ O MeshClaw é um plugin de canal do OpenClaw que permite ao seu gateway de IA enviar e receber mensagens via Meshtastic — sem internet, sem torres de celular, apenas ondas de rádio. Converse com seu assistente de IA das montanhas, do oceano ou de qualquer lugar onde a rede não chega.
19
+
20
+ ⭐ Dê uma estrela no GitHub — isso nos motiva muito!
21
+
22
+ > [!IMPORTANT]
23
+ > Este é um plugin de canal para o gateway de IA [OpenClaw](https://github.com/openclaw/openclaw) — não é um aplicativo independente. Você precisa de uma instância do OpenClaw em execução (Node.js 22+) para usá-lo.
24
+
25
+ [Documentação][docs] · [Guia de Hardware](#hardware-recomendado) · [Reportar Problema][issues] · [Solicitar Recurso][issues]
26
+
27
+ ## Sumário
28
+
29
+ - [Como Funciona](#como-funciona)
30
+ - [Hardware Recomendado](#hardware-recomendado)
31
+ - [Recursos](#recursos)
32
+ - [Capacidades e Roteiro](#capacidades-e-roteiro)
33
+ - [Demonstração](#demonstração)
34
+ - [Início Rápido](#início-rápido)
35
+ - [Assistente de Configuração](#assistente-de-configuração)
36
+ - [Configuração](#1-transporte)
37
+ - [Solução de Problemas](#2-região-lora)
38
+ - [Desenvolvimento](#3-nome-do-nó)
39
+ - [Contribuindo](#4-acesso-a-canais-grouppolicy)
40
+
41
+ ## Como 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
+ O plugin faz a ponte entre dispositivos LoRa Meshtastic e o agente de IA do OpenClaw. Ele suporta três modos de transporte:
59
+
60
+ - Serial — conexão USB direta com um dispositivo Meshtastic local
61
+ - HTTP — conecta-se a um dispositivo via Wi-Fi / rede local
62
+ - MQTT — assina um broker MQTT do Meshtastic, sem necessidade de hardware local
63
+
64
+ Mensagens de entrada passam por controle de acesso (política de DM, política de grupo, exigência de menção) antes de chegar à IA. As respostas de saída têm a formatação Markdown removida (os dispositivos LoRa não a renderizam) e são fragmentadas para caber nos limites de tamanho dos pacotes de rádio.
65
+
66
+ ## Hardware Recomendado
67
+
68
+ <p align="center">
69
+ <img src="media/XIAOclaw.png" width="760" alt="Dispositivo Meshtastic com módulo Seeed XIAO" />
70
+ </p>
71
+
72
+ | Dispositivo | Melhor para | Link |
73
+ | ----------------------------- | ------------------------ | --------------- |
74
+ | XIAO ESP32S3 + Wio-SX1262 kit | Desenvolvimento 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
+ Sem hardware? O transporte via MQTT conecta-se através do broker — nenhum dispositivo local é necessário.
79
+
80
+ Qualquer dispositivo compatível com Meshtastic funciona.
81
+
82
+ ## Recursos
83
+
84
+ - Integração com Agente de IA — Faz a ponte entre agentes de IA do OpenClaw e redes de malha LoRa Meshtastic. Habilita comunicação inteligente sem dependência da nuvem.
85
+
86
+ - Três Modos de Transporte — Suporte a Serial (USB), HTTP (Wi-Fi) e MQTT
87
+
88
+ - Canais de DM e Grupo com Controle de Acesso — Suporta ambos os modos de conversa com listas de permissão para DMs, regras de resposta por canal e exigência de menção
89
+
90
+ - Suporte a Múltiplas Contas — Execute várias conexões independentes simultaneamente
91
+
92
+ - Comunicação Resiliente na Malha — Reconexão automática com tentativas configuráveis. Lida bem com quedas de conexão.
93
+
94
+ ## Capacidades e Roteiro
95
+
96
+ O plugin trata o Meshtastic como um canal de primeira classe — como Telegram ou Discord — permitindo conversas com IA e invocação de habilidades inteiramente via rádio LoRa, sem dependência de internet.
97
+
98
+ | Consultar Informações Offline | Ponte entre Canais: Envie fora da rede, receba em qualquer lugar | 🔜 Próximos passos: |
99
+ | ----------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------- |
100
+ | <img src="media/image1.png" alt="Consultar Informações Offline" /> | <img src="media/image2.png" alt="Ponte entre Canais" /> | Planejamos ingerir dados em tempo real dos nós (localização GPS, sensores ambientais, status do dispositivo) no contexto do OpenClaw, permitindo que a IA monitore a saúde da rede de malha e transmita alertas proativos sem esperar por perguntas dos usuários. |
101
+
102
+ ## Demonstração
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
+ ## Início 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="Assistente de configuração do OpenClaw" />
127
+ </p>
128
+
129
+ ## Assistente de Configuração
130
+
131
+ Executar `openclaw onboard` inicia um assistente interativo que guia você por cada etapa de configuração. Abaixo está o significado de cada etapa e como escolher.
132
+
133
+ ### 1. Transporte
134
+
135
+ Como o gateway se conecta à malha Meshtastic:
136
+
137
+ | Opção | Descrição | Requisitos |
138
+ | ----------------- | ------------------------------------------------------------- | ------------------------------------------------- |
139
+ | Serial (USB) | Conexão USB direta a um dispositivo local. Detecta portas automaticamente. | Dispositivo Meshtastic conectado via USB |
140
+ | HTTP (Wi-Fi) | Conecta a um dispositivo na rede local. | IP ou hostname do dispositivo (ex.: `meshtastic.local`) |
141
+ | MQTT (broker) | Conecta à malha via um broker MQTT — sem necessidade de hardware local. | Endereço do broker, credenciais e tópico de assinatura |
142
+
143
+ ### 2. Região LoRa
144
+
145
+ > Somente Serial e HTTP. O MQTT obtém a região a partir do tópico de assinatura.
146
+
147
+ Define a região de frequência de rádio no dispositivo. Deve corresponder às regulamentações locais e aos outros nós da malha. Opções comuns:
148
+
149
+ | Região | Frequência |
150
+ | -------- | ------------------- |
151
+ | US | 902–928 MHz |
152
+ | EU_868 | 869 MHz |
153
+ | CN | 470–510 MHz |
154
+ | JP | 920 MHz |
155
+ | UNSET | Manter padrão do dispositivo |
156
+
157
+ Veja a [documentação de regiões do Meshtastic](https://meshtastic.org/docs/getting-started/initial-config/#lora) para a lista completa.
158
+
159
+ ### 3. Nome do Nó
160
+
161
+ O nome de exibição do dispositivo na malha. Também é usado como o gatilho de @menção em canais de grupo — outros usuários enviam `@OpenClaw` para falar com seu bot.
162
+
163
+ - Serial / HTTP: opcional — detecta automaticamente do dispositivo conectado se deixar em branco.
164
+ - MQTT: obrigatório — não há dispositivo físico do qual ler o nome.
165
+
166
+ ### 4. Acesso a Canais (groupPolicy)
167
+
168
+ Controla se e como o bot responde em canais de grupo da malha (por exemplo, LongFast, Emergency):
169
+
170
+ | Política | Comportamento |
171
+ | ------------------- | ------------------------------------------------------------ |
172
+ | `disabled` (padrão) | Ignora todas as mensagens de canais de grupo. Somente DMs são processadas. |
173
+ | `open` | Responde em todos os canais da malha. |
174
+ | `allowlist` | Responde apenas nos canais listados. Você será solicitado a informar os nomes dos canais (separados por vírgulas, ex.: `LongFast, Emergency`). Use `*` como curinga para corresponder a todos. |
175
+
176
+ ### 5. Exigir Menção
177
+
178
+ > Aparece apenas quando o acesso a canais está habilitado (não `disabled`).
179
+
180
+ Quando habilitado (padrão: sim), o bot só responde em canais de grupo quando alguém menciona seu nome de nó (ex.: `@OpenClaw como está o tempo?`). Isso evita que o bot responda a todas as mensagens do canal.
181
+
182
+ Quando desabilitado, o bot responde a todas as mensagens nos canais permitidos.
183
+
184
+ ### 6. Política de Acesso a DM (dmPolicy)
185
+
186
+ Controla quem pode enviar mensagens diretas ao bot:
187
+
188
+ | Política | Comportamento |
189
+ | ------------------ | ------------------------------------------------------------- |
190
+ | `pairing` (padrão) | Novos remetentes disparam um pedido de pareamento que deve ser aprovado antes de poderem conversar. |
191
+ | `open` | Qualquer pessoa na malha pode enviar DMs livremente. |
192
+ | `allowlist` | Somente nós listados em `allowFrom` podem enviar DM. Todos os outros são ignorados. |
193
+
194
+ ### 7. Lista de Permissões de DM (allowFrom)
195
+
196
+ > Aparece apenas quando `dmPolicy` é `allowlist`, ou quando o assistente determina que é necessário.
197
+
198
+ Uma lista de IDs de Usuário Meshtastic autorizados a enviar mensagens diretas. Formato: `!aabbccdd` (ID de usuário em hex). Entradas múltiplas são separadas por vírgulas.
199
+
200
+ <p align="center">
201
+ <img src="media/image3.jpg" width="400" />
202
+ </p>
203
+
204
+ ### 8. Nomes de Exibição das Contas
205
+
206
+ > Aparece apenas para configurações com várias contas. Opcional.
207
+
208
+ Atribui nomes amigáveis às suas contas. Por exemplo, uma conta com ID `home` pode ser exibida como "Estação Casa". Se ignorado, o ID bruto da conta é usado como está. Isso é puramente cosmético e não afeta a funcionalidade.
209
+
210
+ ## Configuração
211
+
212
+ A configuração guiada (`openclaw onboard`) cobre tudo abaixo. Veja o [Assistente de Configuração](#assistente-de-configuração) para um passo a passo. Para configurar manualmente, edite com `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 (Wi-Fi)
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
+ ### Várias contas
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>Referência de Todas as Opções</b></summary>
266
+
267
+ | Chave | Tipo | Padrão | Observações |
268
+ | ------------------- | ------------------------------ | -------------------- | ---------------------------------------------------------- |
269
+ | `transport` | `serial \| http \| mqtt` | `serial` | |
270
+ | `serialPort` | `string` | — | Obrigatório para serial |
271
+ | `httpAddress` | `string` | `meshtastic.local` | Obrigatório 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/#` | Tópico de assinatura |
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`. Apenas Serial/HTTP. |
281
+ | `nodeName` | `string` | auto-detect | Nome de exibição e gatilho de @menção. Obrigatório para MQTT. |
282
+ | `dmPolicy` | `open \| pairing \| allowlist` | `pairing` | Quem pode enviar mensagens diretas. Veja [Política de Acesso a DM](#6-política-de-acesso-a-dm-dmpolicy). |
283
+ | `allowFrom` | `string[]` | — | IDs de nós para a lista de permissões de DM, ex.: `["!aabbccdd"]` |
284
+ | `groupPolicy` | `open \| allowlist \| disabled`| `disabled` | Política de resposta em canais de grupo. Veja [Acesso a Canais](#4-acesso-a-canais-grouppolicy). |
285
+ | `channels` | `Record<string, object>` | — | Substituições por canal: `requireMention`, `allowFrom`, `tools` |
286
+
287
+ </details>
288
+
289
+ <details>
290
+ <summary><b>Substituições por Variáveis de Ambiente</b></summary>
291
+
292
+ Estas substituem a configuração da conta padrão (o YAML tem precedência para contas nomeadas):
293
+
294
+ | Variável | Chave 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
+ ## Solução de Problemas
305
+
306
+ | Sintoma | Verifique |
307
+ | -------------------- | ------------------------------------------------------------ |
308
+ | Serial não conecta | Caminho do dispositivo correto? O host tem permissão? |
309
+ | HTTP não conecta | `httpAddress` acessível? `httpTls` corresponde ao do dispositivo? |
310
+ | MQTT não recebe nada | Região em `mqtt.topic` correta? Credenciais do broker válidas? |
311
+ | Sem respostas em DM | `dmPolicy` e `allowFrom` configurados? Veja [Política de Acesso a DM](#6-política-de-acesso-a-dm-dmpolicy). |
312
+ | Sem respostas em grupo | `groupPolicy` habilitada? Canal na lista de permissões? Menção exigida? Veja [Acesso a Canais](#4-acesso-a-canais-grouppolicy). |
313
+
314
+ Encontrou um bug? [Abra uma issue][issues] com o tipo de transporte, configuração (redija segredos) e a saída de `openclaw channels status --probe`.
315
+
316
+ ## Desenvolvimento
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
+ Sem etapa de build — o OpenClaw carrega o código-fonte TypeScript diretamente. Use `openclaw channels status --probe` para verificar.
326
+
327
+ ## Contribuindo
328
+
329
+ - [Abra uma issue][issues] para bugs ou pedidos de recursos
330
+ - Pull requests são bem-vindos — mantenha o código alinhado com as convenções existentes de TypeScript
331
+
332
+ <!-- Links em estilo de referência -->
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