Files
HBlink4/dashboard
cort 31fe38b6dd Release v1.3: Documentation audit and config restructure
Major changes:
- Comprehensive documentation audit completed
- Config restructure: dashboard moved from global to top-level
- Dual-stack IPv6: bind_ipv4/bind_ipv6 with port_ipv4/port_ipv6
- Dashboard transport: host_ipv4/host_ipv6 with disable_ipv6 flag
- Fixed corrupted dashboard/server.py imports
- Updated all documentation to match actual implementation
- Removed duplication, established single source of truth

Documentation updates:
- docs/configuration.md: Complete overhaul with accurate field definitions
- docs/dashboard_transport.md: Updated transport configuration guide
- docs/integration.md: Dual-stack integration examples
- dashboard/README.md: Clarified dashboard configuration requirements
- DASHBOARD_INTEGRATION.md: Streamlined integration summary
- All config examples now use correct field names

Configuration changes:
- dashboard section moved to top-level (not nested under global)
- IPv6 settings: disable_ipv6 flag replaces ipv6 boolean
- Separate bind addresses and ports for IPv4 and IPv6
- Dashboard uses host_ipv4/host_ipv6 instead of single host field

Bug fixes:
- Fixed syntax error in dashboard/server.py (corrupted imports)
- All JSON configs validate successfully
- All 39 tests passing

See DOCUMENTATION_AUDIT.md for complete audit report.
2025-10-05 10:32:09 -05:00
..

HBlink4 Web Dashboard

Real-time monitoring dashboard for HBlink4 DMR server with modern look and feel.

Features

  • Real-time Updates: WebSocket-based live updates every second (no page refreshes required)
  • Repeater Monitoring: See all connected repeaters with their configurations and connection health
  • Active Streams: Monitor ongoing DMR transmissions in real-time with duration counters
  • Last Heard Tracking: View the 10 most recent users with alias display
    • 10-minute user cache with configurable timeout
    • View full cache (up to 50 users) in modal dialog
    • Shows radio ID, callsign/alias, repeater, slot, talkgroup, and time
  • On-Air Event Log: Track stream starts and ends for user-focused activity monitoring
  • Connection Monitoring: Visual warnings for repeaters with missed keepalives
  • Statistics: View total streams, packets, and activity metrics
  • Clean Design: Dark theme with responsive layout that works on desktop and mobile
  • Configurable Branding: Customize server name and dashboard title

Configuration

The dashboard has two configuration files:

1. HBlink4 Config (config/config.json)

This configures how HBlink4 sends events to the dashboard:

{
    "dashboard": {
        "enabled": true,
        "disable_ipv6": false,
        "transport": "unix",
        "host_ipv4": "127.0.0.1",
        "host_ipv6": "::1",
        "port": 8765,
        "unix_socket": "/tmp/hblink4.sock",
        "buffer_size": 65536
    }
}

2. Dashboard Config (dashboard/config.json)

This configures the dashboard application itself and how it receives events:

{
    "server_name": "My HBlink4 Server",
    "server_description": "Amateur Radio DMR Network",
    "dashboard_title": "HBlink4 Dashboard",
    "refresh_interval": 1000,
    "max_events": 50,
    "event_receiver": {
        "disable_ipv6": false,
        "transport": "unix",
        "host_ipv4": "127.0.0.1",
        "host_ipv6": "::1",
        "port": 8765,
        "unix_socket": "/tmp/hblink4.sock",
        "buffer_size": 65536
    }
}

Dashboard Display Options:

  • server_name: Displayed below the dashboard title (e.g., "KD0ABC Repeater Network")
  • server_description: Reserved for future use
  • dashboard_title: Main page title and browser tab text
  • refresh_interval: WebSocket update interval in milliseconds (default: 1000)
  • max_events: Maximum events to retain in event log (default: 50)

Event Receiver Options:

  • disable_ipv6: Disable IPv6 (must match HBlink4 config)
  • transport: Transport type: "unix" or "tcp" (must match HBlink4 config)
  • host_ipv4: IPv4 address to listen on (for TCP transport)
  • host_ipv6: IPv6 address to listen on (for TCP transport)
  • port: Port number (for TCP transport)
  • unix_socket: Unix socket path (for Unix transport)
  • buffer_size: Socket receive buffer size (default: 65536)

CRITICAL: Both config files must use the same transport type and connection details, or the dashboard won't receive events from HBlink4.

Transport Selection

Unix Socket ("unix") - Recommended for local deployment:

// Both configs:
"transport": "unix",
"unix_socket": "/tmp/hblink4.sock"

TCP ("tcp") - Required for remote dashboard:

// Both configs:
"transport": "tcp",
"host_ipv4": "127.0.0.1",  // Use dashboard server's IP in HBlink4 config
"host_ipv6": "::1",        // Optional IPv6 address
"port": 8765

The config file is created automatically with defaults on first run. Edit dashboard/config.json and restart the dashboard to apply changes.

Installation

Install dashboard dependencies:

pip install -r requirements-dashboard.txt

Dependencies:

  • fastapi>=0.104.0 - Modern async web framework
  • uvicorn[standard]>=0.24.0 - ASGI server with WebSocket support
  • websockets>=12.0 - WebSocket protocol support

Usage

Start Dashboard Only

python3 run_dashboard.py [host] [port]

# Examples:
python3 run_dashboard.py                    # Default: 0.0.0.0:8080
python3 run_dashboard.py 127.0.0.1 8080    # Localhost only
python3 run_dashboard.py 0.0.0.0 3000      # Custom port
./run_all.sh

This script starts both HBlink4 and the dashboard in the background.

Access the Dashboard

Open your browser and navigate to:

The dashboard will automatically connect via WebSocket and start displaying real-time data.

Dashboard Components

Statistics Cards

Top row displays key metrics:

  • Connected repeaters count
  • Active streams count
  • Total streams processed
  • Total packets received

Last Heard Table

Shows the 10 most recent users:

  • Radio ID
  • Callsign/Alias (or "-" if not available)
  • Repeater ID
  • Slot (1 or 2)
  • Talkgroup
  • Time (e.g., "2 minutes ago")

Click "View Full Cache" to see up to 50 users with cache statistics.

Active Streams

Real-time view of ongoing transmissions:

  • Stream ID
  • Radio ID
  • Repeater ID
  • Slot and Talkgroup
  • Duration counter (updates every second)
  • Packet count

Connected Repeaters

List of all connected repeaters:

  • Repeater ID and callsign
  • IP address
  • Connected duration
  • Last keepalive time
  • Configuration (mode, slots, colorcode)
  • Warning indicator if keepalives are being missed

Recent Events

User-focused activity log showing:

  • Stream starts (user keyed up)
  • Stream ends (user unkeyed)
  • Excludes system events like keepalives and cache updates

API Endpoints

The dashboard provides REST API endpoints:

GET /api/config

Returns dashboard configuration

GET /api/repeaters

Returns list of all connected repeaters

GET /api/streams

Returns list of active and recently ended streams

GET /api/events?limit=50

Returns recent events (default limit: 100)

GET /api/stats

Returns aggregate statistics

WebSocket /ws

Real-time updates via WebSocket

Troubleshooting

Dashboard shows "Disconnected"

  • Check if HBlink4 is running
  • Verify WebSocket connection in browser console

No events appearing

  • Verify HBlink4 is running and repeaters are connected
  • Check browser console for errors

WebSocket connection fails

  • Verify uvicorn is running with WebSocket support
  • Try a different browser

License

Same as HBlink4: GNU GPLv3