No description
Find a file
2026-01-26 19:10:19 +01:00
rangetest.py Update rangetest.py 2026-01-26 18:48:33 +01:00
README.md Update README.md 2026-01-26 19:10:19 +01:00

LoRa Range Test

A standalone local Web App for conducting Reticulum Network range tests using RNS internal tool: rnprobe. Test your LoRa mesh network coverage with real-time GPS mapping and comprehensive data export options. Optimized for termux and android phones screen layout.

Features

  • 📡 Automated Range Testing - Send multiple timed probe requests to Reticulum nodes with respond_to_probes enabled.
  • 🗺️ Real-time GPS Mapping - Live visualization of successful probes on Leaflet / OpenStreetMap
  • 📊 Rich Metrics - RSSI, SNR, RTT, and GPS coordinates for each probe (if available)
  • 💾 Multi-format Export - CSV, JSON, GeoJSON, KML, and HTML map exports
  • 📱 Mobile-Optimized - Fullscreen mode with auto GPS tracking
  • 🔄 Offline Storage - Quick Save destination hashes for easy reuse

Requirements

  • Python 3.6+
  • Flask (pip install flask)
  • Reticulum Network Stack (RNS) with rnprobe tool
  • A Reticulum node with respond_to_probes = true in .reticulum/config
  • GPS-enabled device (or manual coordinate entry if GPS is unavailable)

Quick Start

1. Install Dependencies

pip install flask

2. Start the Server

python3 rangetest.py

3. Access on Mobile Device


# On phone browser:
# Open http://localhost:8080
# or:
# http://YOUR_IP:8080

4. Configure Test

  1. Enter your destination node hash (the node you're testing range to that has already enabled probes requests in the reticulum config)
  2. Set probe parameters:
    • Number of Probes - How many test packets to send
    • Probe Size - Packet size in bytes (default: 16)
    • Wait Between Probes - Delay in seconds (default: 5)
  3. Wait for GPS lock (or enter coordinates manually) Trick for termux and android: before launching the script, use an app called "GPSLock" from f-droid to keep GPS always active and reachable in termux, then start the sript, open the browser and start your range tests!
  4. Tap ▶ Start Test

5. During Testing

  • Map automatically shows your current position with crosshair marker
  • Successful probes appear as green markers
  • Failed probes update status bar but don't clutter the map
  • View real-time RSSI and SNR if possible (not available using the script in termux through a tcp hop!), and RTT data
  • Use fullscreen mode (⛶) for better visibility while mobile

6. Export Results

Tap the 💾 button to export in multiple formats:

  • CSV - Import to Excel, Google Sheets
  • JSON - Full data for further processing
  • GeoJSON - QGIS, Mapbox, ArcGIS
  • KML - Google Earth
  • HTML Map - Standalone webpage with interactive map

All files export to /sdcard/Download/ on Android.

Target Home Base Node Setup:

Your destination node must have probe responses enabled. Add to ~/.reticulum/config:

transport_enabled = yes
respond_to_probes = true  # Enable this!

Restart Reticulum after config changes:

rnsd --config ~/.reticulum

Usage Tips

Saving Destination Hashes

  • Click 💾 next to hash input to save frequently used destinations
  • Click 📋 to load from saved hashes
  • Perfect for testing multiple base stations

GPS Accuracy

  • Wait for GPS accuracy, 30s before starting
  • Manual entry available if auto GPS fails
  • App uses GPS coordinates at the moment each probe is sent

Test Planning

  • Start close to base station, verify connectivity
  • Move incrementally away (100m, 200m, 500m, etc.)
  • Test in different directions to map coverage
  • Note obstacles (buildings, terrain) in export data

Analyzing Results

  • GeoJSON - Best for GIS analysis and heatmaps
  • CSV - Best for statistical analysis and graphs
  • HTML - Best for quick visual review and sharing
  • KML - Best for 3D terrain visualization

Data Format

Each successful probe records:

{
  "timestamp": "2025-01-26T14:30:45.123Z",
  "destination": "abc123def456...",
  "gps": {
    "latitude": 40.7128,
    "longitude": -74.0060,
    "accuracy": 12.5
  },
  "success": true,
  "rssi": -95.5,
  "snr": 8.2,
  "rtt": 0.458
}

Troubleshooting

"No GPS" Message

  • Enable location permissions for your browser
  • Use manual GPS entry if outdoors with poor signal
  • Check browser supports Geolocation API
  • Wait some seconds to get the gps fixed and readable in termux.

rnprobe Not Found

# Verify Reticulum installation:
which rnprobe

# Should return path like:
# /usr/local/bin/rnprobe

# to install:
# pip install rns

No Probe Responses

  1. Verify destination hash is correct
  2. Check target node has respond_to_probes = true and use the given hash addres from rnsd or look for it in rnstatus.
  3. Confirm you're within range (start close!)
  4. Check target node's Reticulum is running

Failed Probes

  • Check signal strength (start closer)
  • Increase probe timeout if needed
  • Verify LoRa settings match on both nodes
  • Check for interference on your frequency

Advanced Usage

Custom rnprobe Flags

The app uses these rnprobe parameters:

  • -n 1 - One probe per request (app loops for multiple)
  • -s SIZE - Configurable packet size
  • Destination is last argument

File Management

# View exports on Android:
ls /sdcard/Download/rangetest_*

# Copy to PC via USB:
adb pull /sdcard/Download/rangetest_20250126_143045.csv

Contributing

Found a bug or have a feature request? Please open an issue on GitHub!

License

MIT License - Feel free to use and modify for your range testing needs.

Credits

Built with love for the Reticulum Network Community. Uses Leaflet for mapping and OpenStreetMap tiles.


Happy Range Testing! 📡🗺️