python
python copied to clipboard
Add cli option to export nodes
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 FILENAMEargument 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.
Signed CLA