Um mapa de todos os nós mehtastic ouvidos via MQTT.
Minha versão do mapa está disponível em https://meshtastic.liamcottle.net
Confira meu novo cliente Web Meshtastic: Meshtxt

mqtt.meshtastic.org e assinado ao tópico msh/# .AQ== padrão.ServiceEnvelope , ele será ignorado.NODEINFO_APP Adicione um nó ao banco de dados.POSITION_APP Atualize a posição de um nó no banco de dados.NEIGHBORINFO_APP Pacotes Log Os vizinhos ouvidos por um nó no banco de dados.TELEMETRY_APP Atualize as métricas de bateria e tensão para um nó no banco de dados.TRACEROUTE_APP Log todas as rotas de rastreamento executadas por um nó no banco de dados.MAP_REPORT_APP são armazenados no banco de dados, mas não são amplamente adotados, portanto ainda não são usados.TEXT_MESSAGE_APP quando eles entram. NEIGHBORINFO_APP .Clone o repo do projeto.
git clone https://github.com/liamcottle/meshtastic-map
cd meshtastic-map
Instale as dependências do NodeJS
npm install
Crie um arquivo de ambiente .env .
touch .env
Adicione uma string de conexão do banco de dados para o arquivo PRISMA ao .env .
DATABASE_URL="mysql://root@localhost:3306/meshtastic-map?connection_limit=100"
Nota: Algumas consultas são específicas do MySQL. Outros provedores de banco de dados não foram testados.
Migrar o banco de dados.
npx prisma migrate dev
Execute o ouvinte MQTT, para salvar pacotes no banco de dados.
node src/mqtt.js
Execute o servidor Express, para servir a /api e mapear a interface do usuário.
node src/index.js
# Server running at http://127.0.0.1:8080
Nota: Você também pode usar uma porta personalizada com
--port 8123
Execute os seguintes comandos de dentro do repo meshtastic-map .
# update repo
git fetch && git pull
# migrate database
npx prisma migrate dev
Agora você precisará reiniciar os scripts index.js e mqtt.js
Por padrão, o coletor MQTT se conecta ao servidor MQTT MQTT público. Como alternativa, você pode fornecer as opções relevantes mostradas na seção de ajuda abaixo para se conectar ao seu próprio servidor MQTT, juntamente com suas próprias teclas de descriptografia.
node src/mqtt.js --help
Meshtastic MQTT Collector
Collects and processes service envelopes from a Meshtastic MQTT server.
Options
-h, --help Display this usage guide.
--mqtt-broker-url string MQTT Broker URL (e.g: mqtt://mqtt.meshtastic.org)
--mqtt-username string MQTT Username (e.g: meshdev)
--mqtt-password string MQTT Password (e.g: large4cats)
--mqtt-topic MQTT Topic to subscribe to (e.g: msh/#)
--collect-service-envelopes This option will save all received service envelopes to the database.
--collect-text-messages This option will save all received text messages to the database.
--collect-waypoints This option will save all received waypoints to the database.
--collect-neighbour-info This option will save all received neighbour infos to the database.
--collect-map-reports This option will save all received map reports to the database.
--decryption-keys <base64DecryptionKey> ... Decryption keys encoded in base64 to use when decrypting service envelopes.
--purge-interval-seconds number How long to wait between each automatic database purge.
--purge-nodes-unheard-for-seconds number Nodes that haven't been heard from in this many seconds will be purged from the database.
Para se conectar ao seu próprio servidor MQTT, você pode fazer algo como o seguinte;
node src/mqtt.js --mqtt-broker-url mqtt://mqtt.example.com --mqtt-username username --mqtt-password password --decryption-keys 1PG7OiApB1nwvP+rz05pAQ==
TODO: Atualize esta seção, pois esta informação está desatualizada. O status MQTT é determinado com base em um registro de data e hora que atualizamos quando um pacote é fechado para MQTT por esse nó.
O mapa mostra um ícone colorido diferente para nós com base em seu estado de conexão com o MQTT.
Green : Online (conectado ao MQTT)Blue : offline (desconectado do MQTT) Isso funciona ouvindo os tópicos /stat/!ID no servidor MQTT.
Quando um nó se conecta ao MQTT, ele publica online ao tópico e, quando o servidor MQTT detecta o cliente desconectado (através de um LWT), ele publica offline no tópico.
O firmware Meshtastic configura um LWT (Last Will and Testament), que o servidor MQTT publica na desconexão do cliente.
Após um nó inicializa, há um atraso de ~ 30 segundos antes que o estado online seja publicado. Após um nó se desconecta do MQTT, há um atraso de ~ 30 segundos antes que o estado offline seja publicado.
Isso funciona bem quando o seu nó se conecta ao MQTT sobre o WiFi, no entanto, ao usar o recurso MQTT Client Proxy , seu nó envia/recebe pacotes de/para o seu dispositivo Android/iOS e, em seguida, seu dispositivo se conecta ao MQTT e proxies as mensagens.
Meshtastic Node <-> Android/iOS <-> MQTT
Infelizmente, ao usar esse recurso, seus estados online / offline não funcionarão conforme o esperado.
No momento da redação desses documentos, os dispositivos móveis não configuram corretamente o LWT para o nó que está sendo proxado e, portanto, não publica o estado offline para o nó; portanto, você não pode detectar se o seu nó desconectado do MQTT.
Seu nó ficará "preso" no estado online no servidor MQTT.
Um docker-compose.yml está disponível. Você pode executar o seguinte comando para iniciar tudo;
docker compose up
Isso irá:
Para executar testes de unidade, execute o seguinte;
npm run test
Se você tiver uma solicitação de recurso ou encontrar um bug, abra um problema aqui no GitHub.
Mit
Este projeto não é afiliado ou endossado pelo projeto Meshtastic.
O logotipo Meshtastic é a marca registrada da Meshtastic LLC.