August 23, 2025·2 min read
Introduction
Meshtastic makes off-grid communication possible by linking LoRa radios into a self-healing mesh. But once you connect nodes to MQTT, the game changes — your local mesh can bridge into a global one, with all messages and positions flowing through a central broker.
This inspired the Memphis Meshview project, where I set up a dashboard to visualize Meshtastic activity around Memphis. The goal was twofold:
- Map the nodes reporting in via MQTT.
- Persist chat logs for historical reference.
Together, this creates a living snapshot of the mesh — a community map where you can see who’s online, where they are, and what messages are flowing.
MQTT as the Backbone
Meshtastic nodes normally just talk directly over LoRa. But when a node has internet access, it can publish messages to an MQTT broker (and subscribe back).
In our case:
- The broker connects to the Memphis namespace (
msh/US/memphisme.sh). - Every node that has MQTT enabled forwards its messages there.
- Other MQTT-connected nodes receive the same traffic, even if they’re physically too far apart to hear each other over radio.
This creates a virtual backbone that ties together distant or isolated clusters.
Building the Live Map
The map piece uses:
- Node coordinates: Many Meshtastic devices can report GPS location.
- Frontend visualization: A Leaflet.js-based map hosted at meshview.chrishouse.io/map.
- Backend logic: MQTT subscriptions feed updates into a datastore, which then updates the map markers.
Each node shows up as a point, with metadata like:
- Callsign or device name
- Last seen time
- Altitude (when reported)
- Whether it came in via radio or via MQTT
This lets the community quickly see coverage holes and hotspots.
Persistent Chat Logs
Beyond mapping, I wanted conversation history. Normally, Meshtastic messages are ephemeral — if you miss them live, they’re gone.
To fix that:
- I subscribed to the MQTT chat topics.
- Messages were written into a database with timestamps, user IDs, and message content.
- A simple web front-end at meshview.chrishouse.io/chat lets you scroll back through the conversation log.
This made the mesh feel more like a living community, not just random bursts of radio packets.
Lessons Learned
-
MQTT is a Force Multiplier
Even if your local radio range is small, MQTT bridges make the mesh global. One solar node in Memphis can trade messages with a handheld in Colorado. -
Data Normalization Matters
Different nodes send different fields. Some send GPS reliably, others don’t. Building a clean map means handling messy input gracefully. -
Persistence Changes Behavior
Once people knew there was a persistent chat log, conversations became more thoughtful — it shifted from ephemeral pings to community discussions. -
Visualization Inspires Growth
The map encouraged others to light up their nodes, just to “see themselves” show up in Memphis Meshview. A visible network drives participation.
Closing Thoughts
Meshtastic’s beauty lies in its simplicity: radios talking to each other with no infrastructure. But once you add MQTT, you unlock a shared digital layer that lets local meshes become part of a bigger story.
The Memphis Meshview project is one example — a mix of mapping, chat logging, and visualization that makes the invisible mesh visible. And in a world where off-grid communication matters more every year, seeing the network grow in real time is as inspiring as it is useful.
Enjoyed this post? Give it a clap!
Comments