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

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.

2 participants