Python PyQt graphical desktop app to interface with a Meshtastic node using a TCP, Bluetooth or serial connection. Possibility to subscribe to MQTT servers and retrieve nodes, messages,... Objective is to use an already configured Meshtastic device, and be able to inspect messages, packets, metrics,...
Initial work based on original repository of "Meshtastic Chat Desktop"
Main framework used is PyQt6. Linux compatible, debian based tested (should work on Windows, compatibility not ensured).
Connection | Serial | TCP | Bluetooth |
---|---|---|---|
Availability | ✅ | ✅ | ✅ |
Feature | Using local device | Using MQTT |
---|---|---|
Display nodes configuration (PK, hopsaway,...) | ✅ | ✅ |
Display map of nodes | ✅ | ✅ |
Display messages | ✅ | ✅ |
Display packets | ✅ | ✅ |
Send messages with acknowledgment | ✅ | ❌ |
Perform traceroute (with SNR) | ✅ | ❌ |
Export nodes (json) | ✅ | ✅ |
Export messages and packets (json) | ✅ | ✅ |
Export telemetry metrics (json) | ✅ | ✅ |
Export mqtt logs | - | ✅ |
Export radio serial console | ✅ | - |
Nodes telemetry metrics plotting (CHutil, power,...) | ✅ | ✅ |
Packets RF metrics plotting (RSSI, SNR,...) | ✅ | ✅ |
Custom tiles server | ✅ | ✅ |
For path analysis and RF experimentation, the Packets
tab provides filters to inspect precisely the following categories:
- Radio vs MQTT packets
- Source node
- Detected
PORT_NUM
- Relay node (one byte) that requires
2.6.X
firmware on relayers. This is particularly helpful when debugging RF links. The average value is updated accordingly.
$ git clone https://github.com/antlas0/meshtastic_visualizer.git
$ git checkout v1.8
uv is used to manage dependencies, venv and packaging. To install dependencies and run on your computer:
$ uv run meshtastic_visualizer
Note: If you rely on Wayland, you may experience Qt event not properly managed. To fall back on a X11
session, provide the following environment variable when launching the application: XDG_SESSION_TYPE=x11
.
Otherwise, you can try QT_QPA_PLATFORM=xcb
, by having previously installed libxcb-cursor0
package.
Based on X11, build the dockerfile and run the docker container. This example assumes your node is accessible at /dev/ttyACM0
.
$ export DISPLAY=:0.0
$ xhost +local:docker
$ docker build . -t meshtastic_visualizer:latest
$ docker run -it \
--env="DISPLAY=$DISPLAY" \
--privileged \
--volume="/var/run/dbus/:/var/run/dbus/" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--device=/dev/ttyACM0 \
meshtastic_visualizer:latest
To setup a local tiles server, one solution is to use Docker to run a server and point to it from the application.
To import and setup the server, we can rely on openstreetmap-tile-server. Globally we will:
- Download the needed tiles in
.pbf
format along with the polylines in.poly
format, from https://download.geofabrik.de. Here is an example for all France. - Import them in a Docker volume
$ docker volume create osm-data
$ docker run \
-v /absolute/path/to/france.osm.pbf:/data/region.osm.pbf \
-v /absolute/path/to/france.poly:/data/region.poly \
-v osm-data:/data/database/ \
overv/openstreetmap-tile-server \
import
- Run the tiles server with this volume, in this case it will be bound to
0.0.0.0:8080
$ docker run \
-p 8080:80 \
-v osm-data:/data/database/ \
-d overv/openstreetmap-tile-server \
run
I would appreciate providing this, but this is currently off the roadmap as folium
package does not provide this feature.
Worth to mention that the offline_folium
package is intented to overcome this, but only partially at the moment (not all map widgets are supported). Based on that, next steps would be to iterate over all map widgets used in the application, submit a PR to offline_folium
to support them (other choice would be to insource this package).
Then implement the dedicated procedure to download locally JS and CSS files. Adding this feature in the application in this context would imply rethinking a bit the distribution due to the offline_folium
pre-run steps.
This is not a technical issue, as even with more complexity the feature could become available, but rather an energy / time spent issue. This may change in the future.
A lot ! Please fill an issue to add ideas or raise bugs.
Here is a list of things it could be intetesting to work on:
- Code factorisation
- Decode environment metrics
- Custom tile server
-
Offline map - Theming
- Quick node actions (shutdown,... TBD)
- Traceroute results: review graphical display as not optimal
- Map: add layer for only "online" nodes
- Map: review "relay node" layer as not easily scalable
- Automate non-regression build
- Add backend unitary testing
- Make Docker image available without having to build it
Please open a Pull Request.