Integração do Meshtastic para Node-RED
Este node permite enviar e receber pacotes de/para uma rede Meshtastic utilizando um dispositivo conectado através de HTTP. É baseado na biblioteca Meshtastic.js .
Destaques
- Envia e recebe mensagens de/para qualquer dispositivo na Mesh
- Supervisão e monitoramento do status do dispositivo conectado
- Assinar e receber qualquer tipo de evento suportado pela biblioteca Meshtastic.js (exemplos: Atak, Posição, Teste de alcance, mapas, armazenar/enviar, etc...)
- Enviar pacotes para qualquer Meshtastic APP (port num)
- Plug and Play: não requer servidores adicionais, containers, Python, CLI ou arquivos binários
- Suporte indireto ao MQTT através de canais uplink/downlink
Limitações
- Conectar através de servidor MQTT: esta função não é suportada pela biblioteca Meshtastic.js
- Conectar ao dispositivo através de porta serial (USB) ou Bluetooth: função ainda não implementada
Instalação - processo automático (recommendado)
- Buscar o pacote
@danpeig/node-red-meshtastic-msg
na biblioteca comunitária do Node-RED ou no NPM e adicionar.
Instalação manual
- Incluir todos os arquivos do projeto em uma pasta chamada
node-red-meshtastic-msg
dentro do diretório raíz do Node-RED (pasta com o arquivosettings.js
) - Executar
npm install ./node-red-meshtastic-msg
- Editar
meshtastic-msg.js
e alterar o endereço do Meshtastic.js para a estrutura criada pelo npm. Exemplo:importSync("../node_modules/@meshtastic/js/dist/index.js")
.
Para desinstalar, executar npm remove @danpeig/node-red-meshtastic-msg
a partir do mesmo diretório.
Problemas conhecidos
A biblioteca Meshtastic.js possui bugs e pode travar o servidor Node-RED nos seguintes cenários:
- Conexão interrompida durante a inicialização pode causar um loop infinito.
- Enviar um pacote com a propriedade
wantResponse
definida comotrue
- Dependendo do método de instalação, pode ser necessário editar o arquivo
meshtastic-msg.js
e alterar o endereço na linha ImportSync para apontar para o caminho correto da biblioteca Meshtastic.js. Examplo:importSync("../../@meshtastic/js/dist/index.js")
.
Exemplos
Um exemplo de todos os flows pode ser encontrado no sub-diretório examples
.
Bonus
O arquivo experiments_meshtastic.js
ilustra como usar a biblioteca Meshtastic.js a partir de puro Javascript (Sem TypeScript, sem React, sem compilar).
Licença
Este software foi criado por Daniel BP e está disponível segundo a licença MIT.
Histórico de versões
-
1.3 (30/07/2024)
- Adicionado o node para log
-
1.2 (29/07/2024)
- Melhora na documentação
- Identidade visual Meshtastic
- Melhoria das descrições NPM
-
1.1 (28/07/2024)
- Corrigido o caminho para a Meshtastic.js quando instalado a partir do NPM
-
1.0 (28/07/2024)
- Versão inicial
Guia de referência do node
Esta informação pode ser encontrada nas páginas de ajuda, diretamente a partir da interface do Node-RED.
Node para envio de texto
Envia uma mensagem de texto a partir do dispositivo conectado
Entradas
-
msg.payload
(string) : mensagem de texto a ser enviada para a rede -
[msg.channel]
(integer): o canal do dispositivo Meshtastic. Padrão é 0 (primary) -
[msg.destination]
(integer): o número do node de destino, broadcast ou self. Padrão broadcast -
[msg.wantAck]
(boolean): se o dispositivo destino deve reportar o recebimento. Padrão true
[] = campos opcionais
Node para recebimento de texto
Recebe uma mensagem de texto a partir do dispositivo conectado
Saídas
-
msg
(json) : objeto com todo o pacote -
msg.payload
(string): texto da mensagem
Node para status
Monitora o código de status do dispositivo Meshtastic
Saídas
-
msg.payload
(integer): código de status do dispositivo
Node para recebimento de eventos
Este node vai monitorar um evento pré-definido e encaminhar o pacote recebido
Tipicamente a saída é um campo JSON porém alguns eventos reportam números e outros strings de texto.
A lista de eventos pode ser encontrada em Mesthastic.js Event System Class
Configurações
-
event
(string): evento para monitorar
Saídas
-
msg
(json): dados do evento
Node para envio de pacote genérico
Envia um pacote genérico ao dispositivo conectado.
O pacote de entrada pode estar na forma de uma string (msg.payload) ou no formato Uint8Array (msg.byteData).
Entradas
-
msg.payload
(string): Será convertido automaticamente para Uint8Array e utilizado em caso do byteData não definido. Se byteData estiver definido, é ignorado. -
[msg.byteData]
(json) : Dados codificados no formato Uint8Array. Se definido, será utilizado no lugar do payload. Exemplo [72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33] -
[msg.portNum]
(integer): Número do aplicativo. Padrão 1 (text messsage app). -
[msg.destination]
(integer string): Número do node de destino, broadcast ou self. Padrão: broadcast -
[msg.channel]
(integer): Número do canal, padrão 0 (canal primário) -
[msg.wantAck]
(boolean): Confirmação, padrão true -
[msg.wantResponse]
(boolean): Padrão false -
[msg.echoResponse]
(boolean): Padrão false -
[msg.replyId]
(integer): Padrão null -
[msg.emoji]
(integer): Padrão null
[] = campos opcionais
Node para leitura do log do Meshtastic.js
Exibe o log da biblioteca Mesthastic.js. Útil para identificar erros ou monitorar o status.
Notas: Este não é o log do Node-RED ou do rádio Lora.
Saídas
-
msg
(json) : objeto com todas as propriedades da mensagem -
msg.payload
(string): texto contando apenas a descrição (campos [0] e [1] concatenados)
Node para configuração do dispositivo
Este node permite configurar o dispositivo a ser conectado.
O protocolo de conexão é HTTP (ou HTTPS). Serial (USB), Bluetooth ou MQTT não são suportados.
Opções
-
IP or hostname
(string) : Endereço IP address ou hostname do dispositivo Meshtastic a ser conectado. Exemplos: 192.168.0.15, meshtastic.local -
Use TLS
(boolean): Se true, a conexão é realizada através de TLS (criptografada). Padrão é false pois a maior parte dos dispositivos não está configurada para este modo. -
Fetch interval
(integer): Intervalo para atualização do dispositivo. Padrão é 5000ms.