| rangetest.py | ||
| README.md | ||
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
rnprobetool - A Reticulum node with
respond_to_probes = truein .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
- Enter your destination node hash (the node you're testing range to that has already enabled probes requests in the reticulum config)
- 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)
- 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!
- 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
- Verify destination hash is correct
- Check target node has
respond_to_probes = trueand use the given hash addres from rnsd or look for it in rnstatus. - Confirm you're within range (start close!)
- 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! 📡🗺️