@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/.github/scripts/translate_readme.py +632 -0
- package/.github/translate/do-not-translate.md +6 -0
- package/.github/translate/glossary/es.md +23 -0
- package/.github/translate/glossary/fr.md +23 -0
- package/.github/translate/glossary/ja.md +23 -0
- package/.github/translate/glossary/pt.md +23 -0
- package/.github/translate/glossary/zh-CN.md +23 -0
- package/.github/translate/languages.json +37 -0
- package/.github/translate/prompts/es.md +16 -0
- package/.github/translate/prompts/fr.md +16 -0
- package/.github/translate/prompts/ja.md +17 -0
- package/.github/translate/prompts/pt.md +16 -0
- package/.github/translate/prompts/zh-CN.md +15 -0
- package/.github/workflows/readme-translate.yml +166 -0
- package/AGENTS.md +172 -0
- package/README.es.md +337 -0
- package/README.fr.md +350 -0
- package/README.ja.md +344 -0
- package/README.md +139 -101
- package/README.pt.md +337 -0
- package/README.zh-CN.md +183 -152
- package/package.json +4 -3
- package/src/channel.ts +3 -3
- package/src/config-schema.ts +1 -1
- package/src/inbound.ts +2 -2
- package/src/monitor.ts +3 -3
- package/src/onboarding.ts +9 -5
- package/src/send.ts +2 -2
- package/src/types.ts +2 -2
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
|