Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Add cli option to export nodes #836

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
jkrauska wants to merge 1 commit into meshtastic:master
base: master
Choose a base branch
Loading
from jkrauska:exportNodes

Conversation

@jkrauska
Copy link

@jkrauska jkrauska commented Oct 10, 2025

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月09日T23: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.

Novusvetus, xuv, and bricewge reacted with thumbs up emoji
Copy link

CLAassistant commented Oct 10, 2025
edited
Loading

CLA assistant check
All committers have signed the CLA.

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

@ianmcorvidae ianmcorvidae Nov 6, 2025

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

Reviewers

@ianmcorvidae ianmcorvidae ianmcorvidae left review comments

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /