python icon indicating copy to clipboard operation
python copied to clipboard

Add cli option to export nodes

Open jkrauska opened this issue 2 months ago • 2 comments

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.

jkrauska avatar Oct 10 '25 06:10 jkrauska

CLA assistant check
All committers have signed the CLA.

CLAassistant avatar Oct 10 '25 06:10 CLAassistant

Signed CLA

jkrauska avatar Oct 10 '25 06:10 jkrauska