Table of Contents
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
MeshCore Dashboard
Ein webbasiertes Interface für MeshCore-Daten und Konfiguration.
Features
- Dashboard: Overview of database statistics and bot status
- Real-time Packet Stream: Live packet monitor on
/realtimewith client-side packet decoding - Repeater Contacts: Active repeater contacts with location and status information
- Mesh Graph: Network visualization of all heard nodes and edges
- Radio: Heard nodes, channel list with scope assignments
- Message Analytics: Per-channel message statistics, timeline, top senders (
/stats) - Telemetry: Repeater battery/environment telemetry monitoring
- Cache Data: Geocoding and API response cache
- Greeter: Configure automatic greetings for new contacts
- Feed Manager: RSS and webhook subscriptions per channel
- Scheduler: Schedule recurring channel messages
- Settings: Companion-node connection, GPS, channel management, commands, MQTT, NINA, users
- Real-time Updates: WebSocket (Socket.IO) for live data
- Authentication: Three-tier role system (Admin / Trusted / Guest)
- Dark Theme: Full dark mode support
Quick Start
Integrated with Bot (default)
The web viewer starts automatically with the bot when configured in config.ini:
[Web_Viewer]
enabled = true
auto_start = true
host = 0.0.0.0 # 0.0.0.0 = accessible from LAN; 127.0.0.1 = localhost only
port = 8080
Docker
# Build with version tag embedded in the footer
MESHCORE_BOT_VERSION=$(git describe --tags) docker compose up -d --build
# View logs
docker compose logs -f
Standalone Mode
pip3 install flask flask-socketio
python3 modules/web_viewer/app.py --config config.ini --host 0.0.0.0 --port 8080
Accessing the Viewer
- Public: https://dashboard.meshdresden.eu
- Local:
http://localhost:8080 - Network:
http://<BOT_IP>:8080(requireshost = 0.0.0.0)
Pages Overview
| URL | Description |
|---|---|
/ |
Dashboard – contact counts, bot status, quick stats |
/realtime |
Live packet feed with decoding, SNR/RSSI, channel decryption |
/contacts |
Repeater contacts – location, device type, first/last seen |
/mesh |
Network graph – nodes and edges visualized |
/radio |
Heard nodes list; Channels & Scope tab |
/stats |
Message analytics – per-channel activity, timeline, top senders |
/telemetry |
Battery/environment telemetry per repeater; poll history; webhooks |
/cache |
Geocoding cache and generic API cache entries |
/greeter |
Configure greeter messages for new contacts |
/feeds |
Feed-Manager: RSS and webhook subscriptions per channel |
/scheduler |
Schedule recurring messages to channels |
/settings/companion |
Node connection, GPS position, advertising, channel management |
/settings/bot |
Bot behavior: rate limits, DMs, contact management |
/settings/commands |
Enable/configure bot commands |
/settings/mqtt |
MQTT broker connection |
/settings/nina |
NINA emergency alert service |
/settings/users |
User management (Admin only) |
/settings/admin |
Admin settings (Admin only) |
/about |
Version info, feature overview, page index |
/changelog |
Release history |
Configuration
[Web_Viewer]
enabled = true
# 127.0.0.1 = localhost only; 0.0.0.0 = all interfaces (LAN accessible)
host = 0.0.0.0
port = 8080
debug = false
auto_start = true
# Flask secret key (auto-generated if empty)
secret_key =
# Site name shown in the header
site_name = MeshCore Dashboard
# Default role for new registrations
registration_default_role = guest
# SMTP for registration e-mails
smtp_host = localhost
smtp_port = 587
smtp_user =
smtp_password =
smtp_from = meshcore-bot@localhost
smtp_tls = true
smtp_ssl = false
Authentication
The viewer uses a three-tier role system:
| Role | Capabilities |
|---|---|
| Guest | Read-only access to all pages |
| Trusted | Read + access to settings pages |
| Admin | Full access including user management, channel add/remove, config changes |
See Authentifizierung for user management, registration, and SMTP setup.
Channel Management
Channels are managed in Settings → Companion-Node → Node-Channels (Admin only):
- View: All roles can see the channel list (index, name, type, key)
- Add: Hashtag channels (
#name) require no key; custom channels require a 32-character hex key - Remove: Removes the channel from the MeshCore node
- Operations are queued in the database; the bot sends them to the node asynchronously
API Endpoints
| Endpoint | Description |
|---|---|
GET /api/stats |
Database statistics |
GET /api/contacts |
Repeater contacts |
GET /api/tracking |
Contact tracking data |
GET /api/channels |
Configured channels |
GET /api/message_stats/overview |
Message count overview |
GET /api/message_stats/channels?days=7 |
Per-channel activity |
GET /api/message_stats/timeline?channel=X&days=7 |
Hourly message timeline |
GET /api/message_stats/senders?channel=X&days=7 |
Top senders |
GET /api/message_stats/messages?channel=X&days=1 |
Recent message log |
Version Display
The current git tag is embedded at build time and shown in the footer and on /about.
Docker build with version:
MESHCORE_BOT_VERSION=$(git describe --tags) docker compose up -d --build
Troubleshooting
Web viewer not accessible (SBC / Orange Pi)
-
Check config:
host = 0.0.0.0,enabled = true,auto_start = true, restart bot after changes. -
Check process:
ss -tlnp | grep 8080 -
Check logs:
# Docker docker compose logs -f # Standalone (logs written by bot subprocess) tail -f logs/web_viewer_stdout.log tail -f logs/web_viewer_stderr.log -
Test locally on the bot host:
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/ -
Firewall (if ufw is active):
sudo ufw allow 8080/tcp && sudo ufw reload
Flask Not Found
pip3 install flask flask-socketio
Port Already in Use
ss -tlnp | grep 8080
# Change port in config.ini or stop the conflicting service
Security Notes
- Designed for local network use
- Set
host = 127.0.0.1for localhost-only access - Set
host = 0.0.0.0for LAN access (authentication required) - Admin-only operations (channel management, user management, config changes) return HTTP 403 for lower roles
Navigation
Einstieg
Konfiguration
Web Viewer
Bot-Befehle
Service Plugins
Weitere