76 lines
3.4 KiB
Markdown
76 lines
3.4 KiB
Markdown
# Meshtastic Map
|
|
|
|
A map of all Meshtastic nodes heard via MQTT.
|
|
|
|
## How does it work?
|
|
|
|
- An [mqtt client](./src/mqtt.js) is persistently connected to `mqtt.meshtastic.org` and subscribed to the `#` topic.
|
|
- All messages received are attempted to be decoded as [ServiceEnvelope](https://buf.build/meshtastic/protobufs/docs/main:meshtastic#meshtastic.ServiceEnvelope) packets.
|
|
- If a packet is encrypted, it attempts to decrypt it with the default `AQ==` key.
|
|
- If a packet can't be decoded as a `ServiceEnvelope`, it is ignored.
|
|
- `NODEINFO_APP` packets add a node to the database.
|
|
- `POSITION_APP` packets update the position of a node in the database.
|
|
- `NEIGHBORINFO_APP` packets log neighbours heard by a node to the database.
|
|
- `TELEMETRY_APP` packets update battery and voltage metrics for a node in the database.
|
|
- `TRACEROUTE_APP` packets log all trace routes performed by a node to the database.
|
|
- `MAP_REPORT_APP` packets are stored in the database, but are not widely adopted, so are not used yet.
|
|
- The database is a MySQL server, and a nodejs express server is running an API to serve data to the map interface.
|
|
|
|
## Features
|
|
|
|
- [x] Connects to mqtt.meshtastic.org to collect nodes and metrics.
|
|
- [x] Shows nodes on the map if they have reported a valid position.
|
|
- [x] Hover over nodes on the map to see basic information and a preview image.
|
|
- [x] Click nodes on the map to show a sidebar with more info such as graphs of historical telemetry.
|
|
- [x] Ability to share a direct link to a node. The map will auto navigate to it.
|
|
- [x] Ability to search for a node by ID and Hex ID. The map will auto navigate to it.
|
|
- [x] Device list. To see which hardware models are most popular.
|
|
- [x] Mobile optimised layout.
|
|
|
|
## Beta Features
|
|
|
|
- [x] "Neighbours" map layer. Shows blue connection lines between nodes that heard the other node.
|
|
- This information is taken from the `NEIGHBORINFO_APP`, but I feel like some of the neighbours weren't heard?? Maybe I am wrong.
|
|
|
|
## Planned Features
|
|
|
|
- Login/Register to manually add nodes to the map, and manage their details.
|
|
- Collect all `ServiceEnvelope` packets and provide a UI to filter and view them.
|
|
- Real-Time message UI to view `TEXT_MESSAGE_APP` packets as they come in.
|
|
- Map Filters
|
|
- Filter out "Neighbours" based on max distance setting. Eg no greater than 200km.
|
|
- Filter by Hardware Model
|
|
- Filter by Frequency (we don't have this information yet)
|
|
- Filter by Last Updated (ie, only show nodes heard in the last 1hr, 24hr, etc)
|
|
|
|
## Ideas
|
|
|
|
- Maybe a way to "claim" nodes, by sending a custom message from the node.
|
|
- Set other information, such as frequency, antenna info.
|
|
- Could allow you to upload your own photos of the node to show on the map.
|
|
|
|
## TODO
|
|
|
|
- dedupe packets to prevent spamming database
|
|
- track gateway id and channel for packets
|
|
|
|
- show frequency
|
|
- welcome modal
|
|
- not affiliated with meshtastic info
|
|
- donate link
|
|
- login/register to add nodes to the map manually
|
|
- need to prevent spam
|
|
- captcha for reg
|
|
- limit how many nodes can be added from an account
|
|
|
|
- show connection lines between nodes and the neighbours they have heard directly
|
|
- ui to view realtime events from specific nodes
|
|
- ui to view text messages log
|
|
- store x days worth of historical logs
|
|
- be able to go back in time and see how the mesh evolved
|
|
|
|
## References
|
|
|
|
- https://meshtastic.org/docs/software/integrations/mqtt/
|
|
- https://buf.build/meshtastic/protobufs/docs/main:meshtastic
|