Files
fleet-control-console/README.md
T

4.3 KiB

📡 ARIFVG Fleet Control Console

🌍 Read in English | 🇮🇹 Leggi in Italiano


🇬🇧 English

Fleet Control Console is a professional, real-time command and control (C2) dashboard designed for amateur radio repeater networks (MMDVM). It allows administrators to monitor and manage a "fleet" of remote digital voice nodes (DMR, NXDN, YSF, P25) through a single, elegant web interface.

Dashboard Screenshot

🏗️ System Architecture

The ecosystem consists of three main parts:

  1. The Central Dashboard (app.py): A Flask web server that handles the UI, user permissions (SQLite), and logic.
  2. The Remote Agent (system_monitor.py): A lightweight script running on each repeater (Raspberry Pi/Linux) that monitors hardware and executes commands.
  3. The MQTT Broker: The communication backbone. All data and commands flow through MQTT for near-instant responsiveness.

Features

  • Centralized Telemetry: Real-time CPU, RAM, Temperature, and Disk usage for all nodes.
  • Service Management: Start, Stop, or Restart system daemons (MMDVMHost, DMRGateway, etc.) remotely.
  • Remote Configuration: Built-in web editor for .ini files—no SSH required.
  • Live Transit Log: Unified view of radio traffic across the entire network.
  • Profile Switching: Toggle between different repeater setups (e.g., Profile A/B) with one click.

🚀 Installation & Setup

1. Server Setup (Central Hub)

  • Install dependencies: pip install flask paho-mqtt psutil werkzeug
  • Configure config.json (use config.example.json as template) with your MQTT credentials.
  • Define your repeaters in clients.json.
  • Run: python3 app.py

2. Agent Setup (Remote Nodes)

The system_monitor.py must be installed on every node you wish to monitor.

  • Place system_monitor.py and node_config.json in a folder (e.g., /opt/node_agent/).
  • Edit monitor_config.ini to set the client_id (must match the ID in clients.json) and MQTT credentials.
  • (Recommended) Set up a systemd service to run the agent automatically at boot.

🇮🇹 Italiano

Fleet Control Console è una dashboard di comando e controllo (C2) professionale in tempo reale, progettata per le reti di ripetitori radioamatoriali (MMDVM). Permette ai gestori di monitorare e gestire un'intera "flotta" di nodi digitali (DMR, NXDN, YSF, P25) da un'unica interfaccia web raffinata.

Schermata Dashboard

🏗️ Architettura del Sistema

L'ecosistema si compone di tre parti principali:

  1. Dashboard Centrale (app.py): Un server web Flask che gestisce l'interfaccia, i permessi utenti (SQLite) e la logica di controllo.
  2. Agente Remoto (system_monitor.py): Uno script leggero in esecuzione su ogni ripetitore (Raspberry Pi/Linux) che raccoglie i dati hardware ed esegue i comandi.
  3. Broker MQTT: Il centro nevralgico della comunicazione. Tutti i dati e i comandi viaggiano su MQTT per una reattività istantanea.

Funzionalità

  • Telemetria Centralizzata: Stato in tempo reale di CPU, RAM, Temperatura e Disco di tutti i nodi.
  • Gestione Servizi: Avvio, arresto o riavvio dei demoni di sistema (MMDVMHost, DMRGateway, ecc.) da remoto.
  • Configurazione Remota: Editor web integrato per i file .ini: modifica i parametri senza accedere in SSH.
  • Log Transiti Live: Vista unificata del traffico radio di tutta la rete.
  • Cambio Profilo: Commuta tra diversi assetti del ripetitore (es. Profilo A/B) con un clic.

🚀 Installazione e Configurazione

1. Setup del Server (Hub Centrale)

  • Installa le dipendenze: pip install flask paho-mqtt psutil werkzeug
  • Configura config.json (usa config.example.json come base) con le credenziali MQTT.
  • Definisci i tuoi ripetitori nel file clients.json.
  • Avvia: python3 app.py

2. Setup dell'Agente (Nodi Remoti)

Il file system_monitor.py va installato su ogni nodo che vuoi monitorare.

  • Copia system_monitor.py e node_config.json in una cartella (es. /opt/node_agent/).
  • Modifica monitor_config.ini impostando il client_id (deve corrispondere all'ID in clients.json) e le credenziali MQTT.
  • (Consigliato) Crea un servizio systemd per avviare l'agente automaticamente al boot.

Created by IV3JDV @ ARIFVG - 2026