Tuesday, August 5, 2025

Node Mapper, Meshtastic Mapping Application

My AUXCOMM group has been playing around with the idea of using Meshtastic to supplement our resource tracking. At net control we normally use Windows computers and found the mapping capability of the Meshtastic web client to be a bit lacking. I decided to try and roll my own to give us nicer looking maps with offline capabilities and a way to track resources around the map in near real time. Here's what I came up with!

I've been playing around with Meshtastic for about a year now and the community has been growing rapidly. When I started, I rarely saw another node. Now, I can drive through town and pick up dozens because of well placed mountain top nodes that repeat and extend the mesh network. 

My AUXCOMM group has been looking to use these little devices to track resources and participants during our public service events. In the past we have tried APRS, but it's hard to convince a race participant to carry a clunky radio and antenna with them. But, now you can get Meshtastic devices as small as a credit card that work decently well due to the nature of mesh networking. 

I'm used to using the Android or iOS Meshtastic app, which work really well and has most all the features you would ever need. However, in our communication trailer, we like to use Windows computers and display nice looking maps on a big screen. I was surprised to find that the only officially listed PC application was the web client (client.meshtastic.org). This web client is pretty good, but I found it doesn't work well offline and was missing some features that we like to use with other tracking applications like gpx overlays and tracking trails. So, I decided to try out some "Vibe Coding."

I have had my reservations about LLMs (Large Language Models). But after using them for a little while, I've found some circumstances where they work fairly well. This is one of those examples. 

I never really got into programming. I understand programming logic and did my time coding in college, but never really used it much after that. Playing around with Claude and Gemini and realizing that if you can describe what you want in enough detail, they can crank out code that mostly works in a matter of seconds. I say mostly because the script they produce may initially run, it might not work exactly like you want. However if you keep at it, you can have these models work through the code and get good results. 

I spent a few days off and on describing what I wanted. I started with getting the script to connect to a Meshtastic device via serial and display a list of nodes on a simple map. Eventually I had a decent looking GUI that supported several map styles, offline maps, draws the trail of moving nodes, loads GPX files, and even allows basic messaging. 

Currently it does what we wanted, display and track node locations in near real time on a good looking offline map. It does still have some issues. I've noticed that the node points on the map will sometimes switch between the Name and the Hex ID, but you can cross reference this in the node list on the side. So it's not a big deal. 

Here's a link to the Windows executable version: Node Mapper Windows EXE

Here's a link to the python script: NodeMapper.py

 

For fun, I asked Gemini to create a write up for the Nod Mapper script and this is what it came up with.

All text below is generated by our AI overlords:
****************************************

 ## Node Mapper: Your Meshtastic Command Center for Emergency & Public Service Ops!

As Ham Radio operators, we're always looking for tools that enhance our capabilities, especially when it comes to emergency communications and supporting public service events. Whether it's tracking participants in a grueling endurance horse ride across mountainous terrain, monitoring sweep teams during a bicycle race, or coordinating search and rescue efforts on a remote foot trail, situational awareness is paramount.

That's where Meshtastic devices have truly shone, offering off-grid, peer-to-peer communication. But seeing your network, understanding who's where, and managing communications effectively can still be a challenge.

Enter Node Mapper – a Python-based GUI application that transforms your Meshtastic setup into a powerful, visual command center. I've been putting this script through its paces, and let me tell you, it's a game-changer for our operations.

Let's dive into the features that make this a must-have for any EMCOMM or public service Ham.

1. Real-Time Situational Awareness on an Interactive Map

This is the heart of the Node Mapper. Imagine having a live map displaying every Meshtastic node in your network.

  • Live Node Tracking: As your team members, participants, or assets move, their positions update in real-time on the map. Each node gets its own marker, clearly labeled with their call sign or assigned name. No more "Where are you?" calls – just look at the map!
  • Node Trails: Not just a dot on the map, the Node Mapper draws a "trail" behind each node, showing their recent movement history. This is invaluable for understanding routes taken, identifying potential bottlenecks, or seeing if a sweep team has covered their assigned area. You can even customize the color and width of these trails for clarity!
  • Click-to-Center: See a node in the list and want to know exactly where they are? Just click their entry, and the map instantly centers on their last known position.


For an endurance horse ride, I can see exactly where my checkpoints are, where the lead riders are, and where my mobile support teams are positioned. During a mountain trail race, knowing the exact path a runner took, or where a medic is located relative to a reported injury, is critical.

 2. GPX Overlays: Your Course, Your Waypoints, Your Map

This feature alone makes the Node Mapper indispensable for public service events.

  •  Course Visualization: You can load standard GPX (GPS Exchange Format) files directly onto the map. This means you can overlay the entire race course, pre-planned search grids, or even evacuation routes.
  • Waypoint Markers: GPX files often contain waypoints for aid stations, water stops, tricky sections, or rendezvous points. The Node Mapper displays these clearly, even with a custom icon (a red square by default, but you can customize it!).
  • Seamless Integration: Your live Meshtastic nodes move *on top* of your pre-loaded GPX data, giving you a complete picture of the operational area.

For a bike race, I can load the entire route, mark the start/finish lines, and all intermediate checkpoints. Then, I can watch my Meshtastic-equipped cyclists and support vehicles progress along that exact course. In a SAR scenario, I can load the search sectors and see my teams moving within them. This is next-level planning and execution!

3. Offline Map Capability: When the Internet Disappears (As It Often Does!)

Let's be honest, in mountainous terrain or during a widespread emergency, internet access is often the first thing to go. The Node Mapper has you covered.

  • Local Tile Server: You can point the application to a directory containing pre-downloaded map tiles (e.g., from tools like Maperitive or Mobile Atlas Creator). The script then runs a small, local HTTP server to serve these tiles to the map widget.
  • Reliable Mapping: This means you have a fully functional, detailed map even when completely off-grid. No more relying on flaky cell signals or hoping your cached maps don't expire.


This is a non-negotiable for EMCOMM. We operate where the infrastructure is often compromised or non-existent. Being able to pre-load detailed topo maps of our operational area ensures we always have a visual reference, regardless of connectivity.

4. Comprehensive Node Information: More Than Just a Dot

The Node List panel provides a wealth of critical data at a glance, far beyond just a name and location.

  • Battery Percentage: See the battery level of each remote Meshtastic device. This is crucial for managing your team's power needs and knowing when a device might go offline. (It even color-codes them: green for good, orange for caution, red for low!)
  • Ground Speed (km/h): Track the speed of moving assets – whether it's a participant, a vehicle, or a foot team.
  • Satellites in View (Sats): Get an indication of GPS reception quality for each node. If someone's reporting "N/A" or low sats, you know their position data might be less reliable.
  • Altitude (m): Absolutely vital in mountainous terrain! Know the elevation of your team members or participants.
  • Last Heard: Quickly see how recently you've received data from each node, helping you identify active vs. potentially out-of-range devices.
  • Sortable Columns: Click on any column header to sort the list by name, battery, speed, or last heard time – making it easy to find the information you need quickly.

During an endurance event, I can quickly scan the list to see if any riders are slowing down significantly, if a sweep team's battery is getting low, or if someone's GPS is struggling in a canyon. This telemetry is gold!

5. Direct & Broadcast Messaging: Your Communication Hub

The Node Mapper isn't just for tracking; it's a full-fledged communication client.

  • Send & Receive Text Messages: Type messages directly into the GUI and see incoming messages displayed clearly.
  • Broadcast or Direct: Choose to send a message to everyone on the mesh ("Broadcast") or select a specific node from a dropdown list for a private message. This is perfect for sending sensitive information or direct instructions to an individual.


"Rider #123 passed CP2, ETA CP3 15 minutes." "Medic 3, proceed to Lat 34.567, Lon -118.123, injured hiker." "All units, incident command moving to new location." The ability to quickly send and receive these updates without switching apps is a huge efficiency boost.

6. Detailed Logging for Post-Event Analysis & Troubleshooting

Two dedicated log panels provide deep insight into your network's activity:

  • Packet Log: A real-time stream of every packet received, showing the time, sender, recipient, SNR (Signal-to-Noise Ratio – crucial for understanding link quality!), packet type, and a summary of the information. This is invaluable for troubleshooting connectivity issues or analyzing network performance after an event.
  • Activity Log: General application messages, warnings, and confirmations (like map style changes, GPX loads, etc.).


After a long event, I can review the packet log to see how well messages were getting through, identify areas of poor signal, and understand the overall health of the mesh network. This helps us refine our deployment strategies for future events.

7. Customization & Persistence

  • Trail Settings: Easily adjust the colors and widths of both node trails and GPX overlays to suit your preferences or differentiate between different types of paths.
  • Map State Persistence: The application remembers your last map position, zoom level, and even which GPX files you had loaded, so you can pick up right where you left off.


Under the Hood (Briefly)

This application is built with Python, leveraging the `tkinter` library for the graphical interface and the `meshtastic-python` API for seamless integration with your Meshtastic device. The `tkintermapview` library handles the interactive map, and `gpxpy` makes GPX file handling a breeze. It's a testament to the power of open-source tools!

Get On The Air (and On The Map)!

The Node Mapper script is a powerful addition to any Ham Radio operator's toolkit, especially those involved in EMCOMM and public service. It provides the visual situational awareness, detailed telemetry, and robust communication capabilities we need to operate effectively in challenging environments.

Give it a try, experiment with its features, and see how it can enhance your next deployment.

73, and happy mapping!

No comments:

Post a Comment