Skip to content

Conversation

@jkrauska
Copy link

Add Node Database Export Feature

Summary

This PR adds the ability to export the node database to JSON or CSV format, matching functionality available in the Android Meshtastic app. This enables users to backup, analyze, or share their mesh network's node information.

Changes Made

New CLI Command

  • Added --export-nodes FILENAME argument to export node database
  • Format is automatically detected from file extension (.json or .csv)
  • Defaults to JSON format if extension is not recognized

New API Methods

Added to MeshInterface class in meshtastic/mesh_interface.py:

  • exportNodeDb(filename, format) - Main export method
  • _exportNodeDbJson(filename, nodes_data) - JSON export handler
  • _exportNodeDbCsv(filename, nodes_data) - CSV export handler

Data Exported

Each node entry includes:

  • Node identifiers: num, user_id, long_name, short_name
  • Hardware: hw_model, role
  • Location: latitude, longitude, altitude
  • Metrics: snr, hops_away, channel, last_heard
  • Device metrics (if available): battery_level, voltage, channel_utilization, air_util_tx
  • Flags: via_mqtt, is_favorite

Usage Examples

Command Line Interface

# Export as JSON
meshtastic --export-nodes nodes.json

# Export as CSV  
meshtastic --export-nodes nodes.csv

# With specific device connection
meshtastic --port /dev/ttyUSB0 --export-nodes my_mesh.json

Python API

import meshtastic.serial_interface

interface = meshtastic.serial_interface.SerialInterface()
interface.exportNodeDb("nodes.json")  # JSON format
interface.exportNodeDb("nodes.csv", format="csv")  # CSV format

Sample Output

JSON Format

{
  "export_date": "2025-10-09T23:20:00.000000",
  "nodes": [
    {
      "num": 862739652,
      "user_id": "!336db044",
      "long_name": "My Meshtastic Node",
      "short_name": "MSH1",
      "hw_model": "TBEAM",
      "latitude": 37.7749,
      "longitude": -122.4194,
      "altitude": 15,
      "last_heard": 1696882882,
      "snr": 8.5,
      "hops_away": 0,
      "battery_level": 85,
      "voltage": 4.1,
      "channel": 0,
      "via_mqtt": false,
      "is_favorite": false
    }
  ]
}

CSV Format

Exports all fields as columns with headers for easy import into spreadsheet applications.

Implementation Notes

  • Uses existing node database structures from MeshInterface.nodesByNum
  • Filters out raw protobuf data to ensure clean JSON/CSV output
  • Gracefully handles missing fields (e.g., nodes without position data)
  • Follows existing code patterns in the codebase

Testing

Tested with:

  • JSON export with various node configurations
  • CSV export for spreadsheet analysis
  • Syntax validation passes
  • CLI help displays correctly

Related

This feature mirrors functionality available in the Android Meshtastic app's node database download feature.

@CLAassistant
Copy link

CLAassistant commented Oct 10, 2025

CLA assistant check
All committers have signed the CLA.

@jkrauska
Copy link
Author

Signed CLA

Copy link
Contributor

@ianmcorvidae ianmcorvidae left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have any fundamental issues with this, but I'm unable to find what feature in the android app you're mirroring, and I'd like to be harmonized with the other clients if possible. Can you point me to that?


group.add_argument(
"--export-nodes",
help="Export node database to a file. Specify filename with .json or .csv extension to determine format (default: nodes.json)",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This default doesn't appear to be set, and the documentation should use the placeholder as well.

Suggested change
help="Export node database to a file. Specify filename with .json or .csv extension to determine format (default: nodes.json)",
help="Export node database to a file. Specify filename with .json or .csv extension to determine format (default: %(default)s)",
default="nodes.json",

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants