Un mapa de todos los nodos malvados escuchados a través de MQTT.
Mi versión del mapa está disponible en https://meshtastic.liamcottle.net
Echa un vistazo a mi nuevo cliente web Meshtastic: Meshtxt

mqtt.meshtastic.org y se suscribe al tema msh/# .AQ== predeterminada.ServiceEnvelope , se ignora.NODEINFO_APP agregan un nodo a la base de datos.POSITION_APP actualizar la posición de un nodo en la base de datos.NEIGHBORINFO_APP registran vecinos escuchados por un nodo a la base de datos.TELEMETRY_APP actualizan las métricas de batería y voltaje para un nodo en la base de datos.TRACEROUTE_APP registran todas las rutas de seguimiento realizadas por un nodo a la base de datos.MAP_REPORT_APP se almacenan en la base de datos, pero no se adoptan ampliamente, por lo que aún no se usan.TEXT_MESSAGE_APP a medida que entran. NEIGHBORINFO_APP .Clon el repositorio del proyecto.
git clone https://github.com/liamcottle/meshtastic-map
cd meshtastic-map
Instalar dependencias de NodeJS
npm install
Cree un archivo de entorno .env .
touch .env
Agregue una cadena de conexión de la base de datos para prisma al archivo .env .
DATABASE_URL="mysql://root@localhost:3306/meshtastic-map?connection_limit=100"
Nota: Algunas consultas son específicas de MySQL. Otros proveedores de DB no han sido probados.
Migrar la base de datos.
npx prisma migrate dev
Ejecute el oyente MQTT para guardar los paquetes en la base de datos.
node src/mqtt.js
Ejecute el servidor Express, para servir la UI /api y MAP.
node src/index.js
# Server running at http://127.0.0.1:8080
Nota: También puede usar un puerto personalizado con
--port 8123
Ejecute los siguientes comandos desde el interior del repositorio meshtastic-map .
# update repo
git fetch && git pull
# migrate database
npx prisma migrate dev
Ahora necesitará reiniciar los scripts index.js y mqtt.js
De forma predeterminada, el colector MQTT se conecta al servidor Public Meshtastic MQTT. Alternativamente, puede proporcionar las opciones relevantes que se muestran en la sección de ayuda a continuación para conectarse a su propio servidor MQTT junto con sus propias claves de descifrado.
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 conectarse a su propio servidor MQTT, puede hacer algo como lo siguiente;
node src/mqtt.js --mqtt-broker-url mqtt://mqtt.example.com --mqtt-username username --mqtt-password password --decryption-keys 1PG7OiApB1nwvP+rz05pAQ==
TODO: Actualice esta sección ya que esta información ahora está desactualizada. El estado de MQTT se determina en función de una marca de tiempo que actualizamos cuando ese nodo se encuentra en MQTT.
El mapa muestra un icono de color diferente para los nodos basados en su estado de conexión a MQTT.
Green : en línea (conectado a MQTT)Blue : fuera de línea (desconectado de MQTT) Esto funciona escuchando temas de /stat/!ID en el servidor MQTT.
Cuando un nodo se conecta a MQTT, se publica online al tema, y cuando el servidor MQTT detecta que el cliente ha desconectado (a través de un LWT) publica offline al tema.
El firmware Meshtastic configura un LWT (último testamento y testamento), que el servidor MQTT publica sobre la desconexión del cliente.
Después de que un nodo arranca, hay un retraso de ~ 30 segundos antes de que se publique el estado online . Después de que un nodo se desconecta de MQTT, hay un retraso de ~ 30 segundos antes de que se publique el estado offline .
Sin embargo, esto funciona bien cuando su nodo se conecta a MQTT a través de WiFi, cuando se usa la función MQTT Client Proxy , su nodo envía/recibe paquetes a/desde su dispositivo Android/iOS, y luego su dispositivo se conecta a MQTT y proxies los mensajes.
Meshtastic Node <-> Android/iOS <-> MQTT
Desafortunadamente, cuando use esa función, sus estados online / offline no funcionarán como se esperaba.
Al momento de escribir estos documentos, los dispositivos móviles no configuran correctamente el LWT para el nodo que se está proxizando y, por lo tanto, no publican el estado offline para el nodo, por lo que no puede detectar si su nodo desconectado de MQTT.
Su nodo permanecerá "atascado" en el estado online en el servidor MQTT.
Un Docker-Compose.yml está disponible. Puede ejecutar el siguiente comando para iniciar todo;
docker compose up
Esto lo hará:
Para ejecutar pruebas unitarias, ejecute lo siguiente;
npm run test
Si tiene una solicitud de función o encuentra un error, abra un problema aquí en GitHub.
MIT
Este proyecto no está afiliado o respaldado por el proyecto Meshtastic.
El logotipo de Meshtastic es la marca registrada de Meshtastic LLC.