5 Web Viewer
ppfeiffer edited this page 2026-04-19 18:32:42 +02:00
This file contains ambiguous Unicode characters

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 /realtime with 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

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)

  1. Check config: host = 0.0.0.0, enabled = true, auto_start = true, restart bot after changes.

  2. Check process:

    ss -tlnp | grep 8080
    
  3. 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
    
  4. Test locally on the bot host:

    curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/
    
  5. 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.1 for localhost-only access
  • Set host = 0.0.0.0 for LAN access (authentication required)
  • Admin-only operations (channel management, user management, config changes) return HTTP 403 for lower roles