Da quando è stata resa disponibile la distribuzione radioamatoriale Pi-Direct, molti radioamatori (non sperimentatori) ci hanno chiesto subito di poter attivare gli schermi OLED e/o Nextion, funzionanti con le comuni distribuzioni pistar, o avere una dashboard web, per visualizzare i QSO.

Dalle informazioni che trovate presenti nei miei  precedenti articoli, saprete che dal lato utilizzatore (sysop) la gestione del sistema viene effettuata tramite un menu di tipo bash shell whiptail (approfondite su internet, per capire meglio di che si tratta), utilizzabile tramite una connessione privata in SSH.

 

Premessa

Abbiamo preferito far passare un po’ do tempo, pere far si che gli utilizzatori si abituassero ad utilizzare il menu in modalità SSH, ma mi ero ripromesso di fare qualche prova e provare ad installare una dashboard grafica locale.
In questi due ultimi mesi siamo stati contattati spesso (in privato ma anche sul canale Telegram del pi-direct), dove ci è stato chiesto di poter aggiungere alla distribuzione una dashboard ad hoc, con la quale poter visualizzare il traffico effettuato dall’hotspot.
La maggior parte del gruppo di lavoro non era d’accordo ad assecondare questa richiesta, in quanto questa distribuzione è stata creata per altri scopi, e anche perché sul display della radio C4FM vengono già visualizzati tutti i dati necessari.

Abbiamo già visto che a pieno regime standard di funzionamento (con il solo protocollo YSF attivato), si può notare dalla seguente immagine che con la configurazione standard del sistema, sia la CPU che la la RAM restano abbondantemente disponibili, anche con la mia configurazione (che è un po’ più complessa da quella standard)!

Nei mesi scorsi, facendo quattro chiacchiere in radio con Tony IS0HHA, abbiamo trovato facilmente una risposta a quella specifica richiesta. L’installazione è proponibile… ma non so quante risorse porterà via al sistema di un piccolo Raspberry Pi 0 W, con il suo funzionamento continuo.
Chi utilizza un Raspberry più evoluto (modello 0 2 W, o superiori..), può provare a cimentarsi in questa nuova sperimentazione. Chi usa ancora un piccolo Raspberry Pi 0 W, lo invito a desistere da questa installazione aggiuntiva!

 

Come installare la dashboard web sul vostro sistema Pi-Direct

Approfondendo l’argomento in privato con Tony IS0HHA, mi ha consigliato di provare ad installare questa versione leggera di websocket board, realizzata originariamente nata per un sistema che utilizza il servizio MMDVMHost.
NOTA: Tony l’ha già installata e la sta già testando da diverso tempo, con successo; ma lo sta facendo su un Raspberry Pi 3 B+, dove sicuramente non avrà problemi di appesantire e rallentare il funzionamento della distribuzione Pi-Direct.

NOTA: Io ho effettuato questa installazione su un sistema che utilizza un Raspberry Pi 0 2 W, con una scheda modem MMDVM simplex. Se a voi l’installazione non andrà a buon fine, mal che vada sarete costretti a riscriverete da capo la vostra memoria SD con il software della distribuzione Pi-Direct originale!
Ricordate che se installate del software aggiuntivo a quello fornito, se modificate la configurazione corrente, questo potrebbe andare ad influire sul normale uso del sistema Pi-Direct… e poi sarebbe difficile per noi darvi assistenza sul canale Telegram previsto.

ATTENZIONE: La distribuzione originale del pi-direct è stata realizzata per funzionare bene (in configurazione standard) anche con un Raspberry Pi 0 W, senza stressare troppo sia la CPU che la RAM. Più sarà il carico di lavoro che gli farete eseguire in aggiunta (come l’attivazione di questa dashboard), e meno il sistema potrà seguire i compiti principali dei Gateway e degli altri servizi che deve gestire!

Trovate tutte le informazioni su questa dashboard, leggendo la pagina del progetto GitHub di DG9VH, selezionando la seguente immagine.

Questa è la dashboard connessa al mio pi-direct

Questa è una primissima versione di sviluppo della nuova MMDVM Dashboard che utilizza la tecnologia websocket per eliminare il carico elevato su i Raspberry Pi e altri piccoli sistemi, anche per mantenere bassa la temperatura di funzionamento del dispositivo.

Caratteristiche principali di questa dashboard

  • Uso del sistema Websocket per ridurre il carico CPU sull’hotspot/ripetitore
  • Visualizza la trasmissione su tutti gli Slot
  • Elenco degli ultimi QSO ascoltati
  • QSO-net-management
  • Lista ascoltata in locale (Last Heard RF)
  • Messaggi DAPNET con decodifica di messaggi Skyper, rubriche e messaggi METAR
  • Pannello System-Info, per visualizzare lo stato di salute del sistema
  • Rilevamento automatico del fuso orario dei client per la visualizzazione di timestamp nel fuso orario locale
  • Personalizzazione più facile delle pagine html, perché la parte client persiste nei file html e javascript

 

Trovate descritte tutte le altre informazioni (in inglese) nella pagina GitHub segnalata qui sopra, e più precisamente nel file README.md, che per praticità vi tradurrò in italiano qui di seguito.

 

Dettagli tecnici

La Dashboard consiste nel dettaglio in 3 componenti: due lato server (Hotspot/Ripetitore) e uno lato browser.

I due componenti lato server sono logtailer.py (che comunica tramite websocket con il vostro browser e trasmette i log ad esso per l’elaborazione) e il componente webserver di python3 (che fornisce l’infrastruttura html e javascript necessaria al tuo browser).

Il componente basato sul client funziona in javascript; elabora le righe di registro in streaming e riempie le tabelle.

 

Porte utilizzate

Per impostazione predefinita, per l’esecuzione della dashboard vengono utilizzate le seguenti porte:

  • 8000 TCP: servizio web
  • 5678 TCP: connessione dati del WebSocket

NOTA: Ricordatevi queste porte, quando vorrete esporre la vostra dashboard in Internet, per renderla disponibile a tutti i Radioamatori.

 

Procedura di installazione

La procedura descritta di seguito è molto articolata, e prevede due Step principali  di installazione:

  1. Installazione e configurazione generale del software;
  2. Modifica per il funzionamento con il pi-direct e personalizzazione dei servizi.

Procediamo con la parte UNO.

Dovrete installare diversi moduli di python3. Troverete un elenco dettagliato più avanti. Installate i seguenti moduli, utilizzando i relativi comandi da terminale:

websockets:
sudo apt install python3-websockets

ansi2html:
sudo pip3 install ansi2html

gpiozero:
sudo apt install python3-gpiozero

psutil:
sudo apt install python3-psutil

pyserial:
sudo apt-get install python3-serial

 

Raccomandazioni

  • Fate attenzione a impostare il valore di Loglevel per FileLevel = 2 nel vostro file MMDVM.ini;
  • Impostate anche il valore debug = 0 su ciascuna sezione del file, per evitare fastidiose visualizzazioni dei valori sulla Dashboard;
  • Per un corretto funzionamento, è necessario l’installare almeno la versione 3.7 di Python;

Per installare il software Python sul Rpi con S.O. versione BullsEye, procedete con il seguente comando da terminale:
sudo apt-get install php7.4-common php7.4-cgi php

 

Installazione avanzata

Prima di tutto (se non è stato già fatto durante l’installazione di MMDVMHost): create un system-user, con il comando:
sudo adduser –system –no-create-home –group mmdvm

Aggiungete il nuovo utente al gruppo “dialout”, con il comando:
sudo usermod -a -G dialout mmdvm

Aggiungete la riga seguente al file /etc/sudoers, per ottenere l’accesso logtailer a MMDVMHost, con il seguente comando:
sudo visudo

inserite la riga:
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/MMDVMHost

 

Clonate il seguente repository nella vostra directory home (/home/pi) con il comando:
git clone –recurse-submodules -j8 https://github.com/dg9vh/MMDVMHost-Websocketboard
(questo comando clonerà tutto il repository, con i suoi sottomoduli)

Create la nuova directory, con il comando:
sudo mkdir /opt/MMDVMDash

Copiate tutti i file dal repository, nella nuova cartella MMDVMDash, con i comandi:
cd /MMDVMDash
sudo cp -R * /opt/MMDVMDash/

e ritornate nella cartella /home/pi, con il comando:
cd ..

Cambiate la proprietà del contenuto dei files per l’utente mmdvm, con il comando:
sudo chown -R mmdvm:mmdvm /opt/MMDVMDash

NOTA: Dovrete modificare il contenuto del file logtailer.ini per adattarlo alla vostra configurazione (adesso saltate questo passaggio, lo farete in seguito…);

Modificate il file  /html/js/config.js in base alle vostre esigenze (adesso saltate questo passaggio, lo farete in seguito…); in questo file potrete attivare/disattivare la visualizzazione delle schede o abilitare il debug per ottenere l’output nella console javascript.
Dovrete controllare con attenzione questo file: all’interno ci sono diverse opzioni che potete configurare al meglio, compresa la porta del servizio WebSocket, che tratteremo più avanti).

Copiate i file contenuti nella cartella /opt/MMDVMDash/systemd nella cartella /lib/systemd/system (o similare, corrispondente al vostro sistema operativo), con il comando:
sudo cp *.* /opt/MMDVMDash/systemd/  /lib/systemd/system/

Modificate ora entrambi i files già menzionati sopra (il file /opt/MMDVMDash/logtailer.ini  e il file  /html/js/config.js), per adattarli alle vostre esigenze; farlo poi, sarà più difficile da fare, avendo già attivato i servizi di sistema.

 

Procediamo con la parte DUE.

Creazione dello script di avvio e modifica del servizio

Il software della dashboard è stato già installato nella directory /opt/MMDVMDash, dove al suo interno ci sono già tutti i file necessari.
All’interno di questa directory create un nuovo file denominato logtailer_start.sh, con il seguente comando:
sudo nano logtailer_start.sh

al suo interno, inserite questo codice:

#!/bin/bash
sleep 12
cd /opt/MMDVMDash
python3 /opt/MMDVMDash/logtailer.py
#

 

Questo file (che farà avviare la dashboard, all’avvio del Raspberry) viene lanciato dal suo servizio, ossia /lib/systemd/system/logtailer.service; dovete modificare questo file, come segue:

[Unit] Description=Python3 logtailer for MMDVMDash
After=network.target
[Service] Type=simple
User=mmdvm
Group=mmdvm
Restart=always
# uncomment if you want to wait (not neccessary)
# ExecStartPre=/bin/sleep 30
# Modify for different location of Python3 or other port
WorkingDirectory=/opt/MMDVMDash/
#ExecStart=/usr/bin/python3 /opt/MMDVMDash/logtailer.py
ExecStart=/opt/MMDVMDash/logtailer_start.sh

[Install] WantedBy=multi-user.target

 

A questo punto è necessario fare in modo che il software MMDVMHost generi il file MMDVM.log nella cartella /var/log, e che non utilizzi il servizio logrotate

Verificate che la vostra configurazione corrisponda al codice presente nella seguente configurazione, che trovate nel file  /opt/MMDVMHost/MMDVM.ini

[Log] DisplayLevel=1
FileLevel=2
FilePath=/var/log/
FileRoot=MMDVM
FileRotate=0

 

Modifica della configurazione del servizio della dashboard

Verificate che nella vostra directory /opt/MMDVMDash il file logtailer.ini abbia l’impostazione uguale a questa:

[DEFAULT] # No need to touch this. If you want to bind it to a specific IP-address (if there are more than one interface to the
# network you can set your ip here – but default it listens on every interface
Host=0.0.0.0

# If changeing the port please change it also in the index.html-file at the parts where you find:
# new WebSocket(“ws://” + window.location.hostname …
Port=5678

# set to True if SSL will be used
Ssl=False
SslCert=/opt/MMDVMDash/cert.pem
SslKey=/opt/MMDVMDash/privkey.pem

# This defines the maximum amount of loglines to be sent on initial opening of the dashboard
MaxLines=500

# Keep this parameter synchrone to Filerotate in MMDVM.ini/DMRHost.ini – if 0 then False, if 1 then True
Filerotate=False

[MMDVMHost] # Don’t throw away the trailing slash! It is important but check logfile-location and Prefix twice 🙂
Logdir=/var/log/

# Change this to DMRHost, if you are using DMRHost and configured this as log-prefix in the host-ini.
Prefix=MMDVM
# if you want to have the operator-names as popup with the callsigns, set this parts = 1 and the LookupFile to
# the right position. On MMDVMHost comment out the DMRIDs.dat-line to have the DMRIds and not the callsigns in the
# logfile to have the callsigns with names transported to the dashboard.
DMR_ID_Lookup=1
DMR_ID_LookupFile=/opt/MMDVMHost/DMRIds.dat

# This is the reload-timer for refreshing DMR-ID-Database every x minutes (1440 = 24h = once a day every 24 hours after starting the logtailer)
DMR_ID_Reload_Time=1440

# Location of your MMDVM.ini/DMRHost.ini or similar
MMDVM_ini=/opt/MMDVMHost/MMDVM.ini

# Localtion of your MMDVMHost/DMRHost-binary
# MMDVM_bin=/usr/local/bin/MMDVMHost
MMDVM_bin=/opt/MMDVMHost/MMDVMHost

[DAPNETGateway] # Don’t throw away the trailing slash! It is important but check logfile-location and Prefix twice 🙂
Logdir=/var/log/
Prefix=DAPNETGateway

[ServiceMonitoring] # Here you list your Services to be monitored. Just add additional lines if needed but be sure to count them up
BinaryName1=MMDVMHost
BinaryName2=DMRGateway
BinaryName3=DGIdGateway
BinaryName4=YSF2DMR
BinaryName5=DAPNETGateway

Configurando il file in questo modo, il file MMDVM.log avrà sempre lo stesso nome ed è quello che il software che gestisce la DashBoard si attende di trovare. Nel caso in cui il vostro file di log avesse un nome diverso nella directory /var/log, potete rinominarlo.
NOTA: Normalmente alle ore 00:00 di ogni giorno questo file viene cancellato e sovrascritto da uno nuovo. Diversamente, sarà sufficiente creare uno script in bash, da mettere nel sistem cron del sistema.

 

Pulizia opzionale della directory dei log

Personalmente io preferisco avere una directory dei log abbastanza fornita (settimanale/mensile, per effettuare comodamente la ricerca dei bug…), ma Tony IS0HHA la preferisce più pulita; quindi per mantenere sgombra la sua directory  /home/pi ha realizzato questo semplice file clean_log.sh che ripulisce la directory dei log.
Per farlo anche voi, usate il seguente comando, dall’interno della directory /home/pi :

nano clean_log.sh

ed inserite il seguente codice:

#!/bin/bash
cd /var/log
sudo rm -f *.log.*
sudo rm -f *.log..gz
sudo rm -f *.log.*.gz
sudo rm -f *.1

Salvate il file e procedete ad aggiungere la sua esecuzione nel crontab dell’utente root, scegliendo ogni quanto tempo far avviare quello script.

 

Modifica della cofigurazione della tabella della dashboard

Dovete modificare il vostro file /opt/MMDVMDash/html/js/config.js, facendo in modo che la vostra configurazione sia simile alla seguente (questa è la mia):

// config structure version, please change to value in github-file after update and adding new values
var config_struc_ver = 20210501.1;

// 1 = show link to QRZ.com, 0 = off
var qrz = 1;

// 1 = enable debug in javascript-console, 0 = 0ff
var debug = 0;

// Set messagecounters for different badge-colors
var warnlevel = 200;
var emergencylevel = 500;

// 1 = show tab, 2 = show tab and make it default-tab on startup, 0 = suppress it
var currtx = 1;
var lastheard = 2;
var localheard = 1;
var allheard = 1;
var qso = 1;
var dapnet = 0;
var sysinfo = 1;
var services = 0;
var about = 1;

// Set displayed timezone and timestamp to timezone of browser if 1, else use UTC for displaying
var useClientTimezone = 1;

// Show link to BrandMeister-LastHeard on TG if 1, else no link
var showBMTGLink = 1;

// Array of callsigns that should not be linked to qrz.com
var qrz_blacklist = [
“N0CALL”,
]

// Array of callsigns that should generally not be listed on the dashboard

var dashboard_blacklist = [
“MY0CALL”,
]

// 1 = enable dark display theme, 0 = use bright theme
var useDarkTheme = 0;

// Here you can put in your own html to be shown centered in the headline, to show no text, just set it to “
var customHeadlineText = `Nodo YSF sperimentale del Friuli Venezia Giulia – Italia`;

// Here you can put your own html to be shown between the header and the table-section, to show no text, just set it to “
var customText = `<h2>Pi-Direct Dashboard – nodo IV3BVK PN</h2>
<p>Nodo sperimentale YSF in Fontanafredda (PN) – JN65GX</p>`;

 

NOTA: Le linee identificate in grassetto, sono quelle che ho modificato; ho disabilitato la visualizzazione dei dati della DAPNET (che ritengo inutile, in questo caso), ho abilitato la visualizzazione del tema chiaro di default e ho aggiornato il testo identificativo della dashboard. Non ritengo ci siano altri parametri da dover modificare.

 

Ancora un piccolo passo, ed avete termianto la configurazione!

Ora rimane la parte finale, quella dell’abilitazione e dell’avvio dei servizi.

Abilitando i servizi con i seguenti comandi, il risultato sarà l’avvio automatico di entrambi ad ogni riavvio del Raspberry Pi:
sudo systemctl enable http.server.service
sudo systemctl enable logtailer.service

Avviate i servizi con i seguenti comandi:
sudo systemctl start http.server.service
sudo systemctl start logtailer.service

Da questo momento dovreste essere in grado di visualizzare la nuova Dashboard, inserendo nella barra indirizzi del vostro browser il nome host (o l’indirizzo IP) del vostro Hotspot/Ripetitore, utilizzando la porta 8000 (predefinita).
Ad esempio:  http://indirizzo_IP_del_vostro Raspberry:8000

Avete terminato, la vostra dashboard è attiva e funzionante, visibile all’interno della vostra rete casalinga!

 

Come rendere pubblica la vostra dashboard in Internet

Per fare in modo che chiunque possa raggiungere e visualizzare la vostra dashboard, dovete abilitare il port forwarding nel vostro router.
Dovete abilitare in forwarding sia la porta web esterna che servirà alla visualizzazione della struttura web (porta interna 8000), e anche la porta 5678 (interna) verso l’esterno (porta 5678 esterna) del WebSocket, che si occupa del trasferimento dei dati nella dashboard.

NOTA: Per diversi miei motivi tecnici, io non ho utilizzato e fatto il port forwarding della porta standard del WebSocket (5678).
Di conseguenza, ho modificato il numero della porta nel file di configurazione /opt/MMDVMDash/logtailer.ini, e anche nel file /opt/MMDVMDash/html/index.html, sostituendo il numero della porta 5678 con il nuovo numero 7100; questa modifica deve esser fatto in tutte le chiamate delle righe presenti alla fine del file index.html, dove trovate indicata la variabile new WebSocket, sostituendo il numero originario con il nuovo valore che avrete scelto. 

A questo punto, nel mio router inserirò questee due regole di port-forwarding per lo stesso IP interno (statico) del Raspberry (es.: 192.168.2.2):

  • porta interna web (8000) ==> porta esterna verso Intenet (8020)
  • porta interna WebSocket (7100) ==> porta esterna verso Intenet (7100)

Notate che la porta 7100 mantiene lo stesso valore, tra l’intrerno e l’esterno del vostro router. 
Facendo un rapido test su internet, visualizzerò la mia dashboard all’indirizzo: http://paolettopn.hopto.org:8020/

 

Risoluzione dei problemi

Se riscontrate dei problemi con l’esecuzione del software, la maggior parte delle cose dipendono dal componente logtailer. Quindi è una buona idea provare ad avviare il software sulla console, utilizzando il comando da terminale:
python3 ./logtailer.py

In questo modo sarà facile vedere nella stessa area del terminale l’output dei messaggi del programma. Un errore comune è la mancanza delle librerie Python, che dovrete installare con i comandi menzionati sopra.

Se nel vostro sistema trovate qualche altra libreria mancante, fatecelo sapere! Basta aprire un ticket per risolvere il problema!

Se ci sono problemi con i percorsi dei file di registro, potreste anche ottenere alcuni consigli visualizzando l’output del programma.

 

Se utilizzate il sistema DMRHost del Gruppo BrandMeister

Se state utilizzando il servizio DMRHost in sostituzione del MMDVMHost dovreste abilitare la funzione DMR-ID-Lookup all’interno del file logtailer.ini, impostando l’opzione corrispondente = 1.
Inoltre, assicuratevi di configurare il percorso corretto della posizione del vostro file DMRIds.dat.

Per aggiornare il file DMRIds.dat, potete utilizzare lo script che trovate all’interno della cartella scripts del programma.

 

Configurazione dei testi dei talkgroup nella colonna “Destinazione”

Troverete un file nella cartella /html/data chiamato TG_List.csv, che è un file separato da virgole nel seguente formato:

MODE,TS,TG,LABEL,URL
DMR,1,263,DL Multimode BM,
DMR,2,8021,Pegasus DMR-DL,
DMR,2,2625,RLP/SL BM,
YSF,0,1,Local Parrot,
YSF,0,2,DEV Reflector,
YSF,0,10,YSF2DMR TG26250,
YSF,0,40,DL Multimode 263,https://c4fm.ysfreflector.de/Germany/

Lasciate intatta la prima fila per l’orientamento. Le altre righe contengono nella prima colonna la fascia oraria DMR utilizzata dal TG, la seconda colonna contiene il numero del talkgroup e la terza colonna contiene l’etichetta che desiderete venga mostrata nella colonna di destinazione del dashboard. L’ultima colonna può contenere un URL a qualsiasi dashboard o home page a cui desiderate puntare. Se non viene fornito alcun URL, in modalità DMR viene collegata la corrispondente lista Last-Heard per il talkgroup in BrandMeister-Network.

Modificate questo file in base alle vostre esigenze. Potrebbe cambiare di tanto in tanto dal lato sviluppatore, quindi durante l’aggiornamento conservate una copia del vostro elenco personale per modificarlo/aggiornarlo.

NOTA: Se non desiderate avere questi testi del gruppo di visualizzazione della vostra dashboard, rimuovete semplicemente tutto tranne la prima riga di questo file.

 

Migliori pratiche di installazione

Per ottenere la migliore “esperienza utente” per la visualizzazione della dashboard,  si consiglia di configurare MMDVMHost e altri software di G4KLX con il seguente parametro:

FileRotate=0

Il risultato è quello di ottenere un solo file di log per ciascun programma e farlo ruotare dal sistema Linux con logrotate a parte, se configurato.

Dovete anche configurare il vostro file logtailer.ini con il valore

FileRotate=False

per utilizzare il servizio logtailer nel modo corretto, per la lettura di questo file dalla parte web del sistema.

Per capire come configurare la rotazione dei log in Linux, date un’occhiata a questo link:
https://www.tecmint.com/install-logrotate-to-manage-log-rotation-in-linux/.

 

Crediti

Il servizio logtailer.py è basato sul lavoro del progetto di Ji ZHANG http://shzhangji.com/blog/2017/07/15/log-tailer-with-websocket-and-python/, ed è stato rilasciato con licenza Creative Commons.

 

Ringraziamenti allo staff dei beta tester

I miei ringraziamenti vanno ai colleghi Tony IS0HHA e Andrea IW4EHJ, che assieme a me effettuano continuamente dei test di sistema su questa distribuzione radioamatoriale. Mi suggeriscono modifiche e forniscono dei preziosi consigli che ci permettono di migliorare ulteriormente questa nuova distribuzione.

 

Come utilizzare questo software e dove scaricarlo

Per tutte le informazioni sull’utilizzo, lo scaricamento del software della distribuzione e anche dell’ottima guida per l’utilizzo realizzata da Andrea IW4EHJ, che trovate nel nostro cloud GDrive, assieme al software e alle patch di aggiornamento.

 

Controllo delle connessioni sulla dashboard in rete

Questa è la dashboard (in Internet) per controllare la connessione in YSFDirect sul master server italiano.

 

Conclusioni

Come sempre, rimango a vostra disposizione via email, ma soprattutto sul nostro canale Pi-Direct Hotspot – Italia 🇮🇹 , per darvi ulteriori informazioni al riguardo dell’argomento trattato.

Auguro a tutti buone prove e buona sperimentazione!

’73 de Paolo IV3BVK

 

Grazie per aver visitato il mio blog, lasciate un vostro commento a questo post...