- Added a comprehensive troubleshooting section for accessing the web viewer on devices like Orange Pi and SBCs, detailing configuration checks, process verification, log inspection, firewall settings, and standalone run instructions. - Updated installation commands to include necessary dependencies for Flask and flask-socketio, improving clarity on setup requirements. - Revised port conflict resolution steps to include updated commands for checking active ports.
8.3 KiB
MeshCore Bot Data Viewer
A web-based interface for viewing and analyzing data from your MeshCore Bot.
Features
- Dashboard: Overview of database statistics and bot status
- Repeater Contacts: View active repeater contacts with location and status information
- Contact Tracking: Complete history of all heard contacts with signal strength and routing data
- Cache Data: View cached geocoding and API responses
- Purging Log: Audit trail of contact purging operations
- Real-time Updates: Auto-refreshes every 30 seconds
- API Endpoints: JSON API for programmatic access
Quick Start
Option 1: Standalone Mode
# Install Flask if not already installed
pip3 install flask
# Start the web viewer (reads config from config.ini)
python3 -m modules.web_viewer.app
# Or use the restart script for standalone mode
./restart_viewer.sh
# Override configuration with command line arguments
python3 -m modules.web_viewer.app --port 8080 --host 0.0.0.0
Option 2: Integrated with Bot
-
Edit
config.iniand set:[Web_Viewer] enabled = true auto_start = true host = 127.0.0.1 port = 5000 -
The web viewer will start automatically with the bot
Configuration
The web viewer can be configured in the [Web_Viewer] section of config.ini:
[Web_Viewer]
# Enable or disable the web data viewer
enabled = true
# Web viewer host address
# 127.0.0.1: Only accessible from localhost
# 0.0.0.0: Accessible from any network interface
host = 127.0.0.1
# Web viewer port
port = 5000
# Enable debug mode for the web viewer
debug = false
# Auto-start web viewer with bot
auto_start = false
Accessing the Viewer
Once started, open your web browser and navigate to:
- Local access: http://localhost:5005 (or your configured port)
- Network access: http://YOUR_BOT_IP:5005 (if host is set to 0.0.0.0)
Pages Overview
Dashboard
- Database status and statistics
- Contact counts and cache information
- Quick navigation to other sections
Repeater Contacts
- Active repeater contacts
- Location information (city/coordinates)
- Device types and status
- First/last seen timestamps
- Purge count tracking
Contact Tracking
- Complete history of all heard contacts
- Signal strength indicators
- Hop count and routing information
- Advertisement data
- Currently tracked status
Cache Data
- Geocoding cache entries
- Generic cache entries (weather, sports, etc.)
- Expiration status
- Cache value previews
Purging Log
- Audit trail of contact purging operations
- Timestamps and reasons
- Contact names and public keys
API Endpoints
The viewer also provides JSON API endpoints:
GET /api/stats- Database statisticsGET /api/contacts- Repeater contacts dataGET /api/tracking- Contact tracking data
Example usage:
curl http://localhost:5000/api/stats
Database Requirements
The viewer uses the same database as the bot by default ([Bot] db_path, typically meshcore_bot.db). That single file holds repeater contacts, mesh graph, packet stream, and other data so the viewer can show everything.
Migrating from a separate web viewer database
If you previously had the web viewer using a separate database (e.g. [Web_Viewer] db_path = bot_data.db), you can switch to the shared database so the viewer shows repeater/graph data and uses one file.
-
Stop the bot and web viewer so neither has the databases open.
-
Optionally preserve packet stream history from the old viewer DB into the main DB:
- From the project root, run:
Use your actual paths if they differ (e.g. full paths or different filenames). The script copies the
python3 migrate_webviewer_db.py bot_data.db meshcore_bot.dbpacket_streamtable from the first file into the second and skips rows that would duplicate IDs. - If you don’t care about old packet stream data, skip this step; the viewer will create a new
packet_streamtable in the main DB.
- From the project root, run:
-
Point the viewer at the main database in
config.ini:[Web_Viewer] db_path = meshcore_bot.db(Or the same value as
[Bot] db_pathif you use a different path.) -
Start the bot (and viewer as usual). The viewer will now read and write to the same database as the bot.
You can keep or remove the old bot_data.db file after verifying the viewer works with the shared DB.
Troubleshooting
Web viewer not accessible (e.g. Orange Pi / SBC)
If the viewer does not load from another device (e.g. from your phone or PC while the bot runs on an Orange Pi), work through these steps on the Pi.
-
Confirm config
- In
config.iniunder[Web_Viewer]:enabled = trueauto_start = true(if you want it to start with the bot)host = 0.0.0.0(required for access from other devices;127.0.0.1is localhost only)port = 8080(or another port 1024–65535)
- Restart the bot after changing config.
- In
-
Check that the viewer process is running
# From project root on the Pi ss -tlnp | grep 8080 # or netstat -tlnp | grep 8080If nothing listens on your port, the viewer did not start or has exited.
-
Inspect viewer logs
- When run by the bot, the viewer writes to:
logs/web_viewer_stdout.loglogs/web_viewer_stderr.log
- Look for Python tracebacks, "Address already in use", or missing dependencies (e.g. Flask, flask-socketio).
- Optional: run the viewer manually to see errors in the terminal:
cd /path/to/meshcore-bot python3 modules/web_viewer/app.py --config config.ini --host 0.0.0.0 --port 8080
- When run by the bot, the viewer writes to:
-
Check integration startup
- Bot logs may show:
Web viewer integration failed: ...orWeb viewer integration initialized. - If integration failed, the viewer subprocess is never started; fix the error shown (e.g. invalid
hostorportin config).
- Bot logs may show:
-
Firewall
- Many SBC images (e.g. Orange Pi, Armbian minimal) do not ship with a firewall; if
curlto localhost works andhost = 0.0.0.0, the blocker may be network (Wi‑Fi client isolation, different subnet, or router). Check from a device on the same LAN usinghttp://<PI_IP>:8080. - If your system uses ufw:
sudo ufw status sudo ufw allow 8080/tcp sudo ufw reload - If
ufwis not installed (e.g.sudo: ufw: command not found), you may have no host firewall—that’s common on embedded images. To allow the port with iptables (often available when ufw is not):(Rules may not persist across reboots unless you use a persistence method for your distro.)sudo iptables -I INPUT -p tcp --dport 8080 -j ACCEPT - If you prefer ufw, install it (e.g.
sudo apt install ufw) and use the ufw commands above.
- Many SBC images (e.g. Orange Pi, Armbian minimal) do not ship with a firewall; if
-
Test from the Pi first
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/If this returns
200, the viewer is running and the issue is binding or firewall. If you usehost = 0.0.0.0, then try from another device:http://<PI_IP>:8080. -
Standalone run (no bot)
- To rule out bot integration issues, start the viewer by itself (same config path so it finds the DB):
python3 modules/web_viewer/app.py --config config.ini --host 0.0.0.0 --port 8080 - If
restart_viewer.shis used, note it binds to127.0.0.1by default; for network access run the command above with--host 0.0.0.0or edit the script.
- To rule out bot integration issues, start the viewer by itself (same config path so it finds the DB):
Flask Not Found
pip3 install flask flask-socketio
Database Not Found
- Ensure the bot has been run at least once to create the databases
- Check file permissions on database files
Port Already in Use
- Change the port in
config.inior stop the conflicting service - Use
ss -tlnp | grep 8080orlsof -i :8080(if available) to find what's using the port
Permission Denied
chmod +x restart_viewer.sh
Security Notes
- The web viewer is designed for local network use
- Set
host = 127.0.0.1for localhost-only access - Set
host = 0.0.0.0for network access (use with caution) - No authentication is implemented - consider firewall rules for production use
Future Enhancements
- Live packet streaming
- Real-time message monitoring
- Interactive contact management
- Export functionality
- Authentication system
- Mobile-responsive design improvements