Per evitare di perdere dati a causa di blackout improvvisi le aziende, e in certi casi anche i privati, si affidano a sistemi UPS (Uninterruptible Power Supply). Questi device sono sostanzialmente delle batterie molto capienti con cui alimentare per un certo periodo di tempo computer e monitor. Con il tempo tali dispositivi sono diventati sempre più avanzati e dispongono di una serie di funzionalità di monitoring accessibili anche grazie al protocollo comune chiamato NUT (Network UPS Tool). NUT è un insieme di tool per monitorare e gestire gli UPS senza dover installare un applicativo dedicato e sviluppato dalla case madre del dispositivo.
Scopriamo quindi come eseguire il monitoring del nostro UPS tramite un NUT Server che opera all'interno di Raspberry Pi. NUT è quasi uno standard de facto. Più di 174 aziende lo adottano ed è possibile sfruttare questo protocollo su ben 1141 UPS differenti.
L'hardware per il nostro progetto
Per creare un NUT Server dobbiamo dotarci di un Raspberry Pi. Se avete un vecchio modello potete riciclarlo senza problemi per tale scopo. Se invece partite da zero acquistate direttamente l'edizione più recente della board ARM, oltre ovviamente ad una microSD da almeno 64GB. Per potersi interfacciare con l'UPS sarà necessario un cavo USB sufficientemente lungo da arrivare al Raspberry Pi. Per il setup iniziale dovrete dotarvi infine di mouse, tastiera e monitor.
Ovviamente è necessario possedere un UPS compatibile con NUT. Dovrete quindi assicurarvi che il modello scelto possa interfacciassi con tale protocollo prima di proseguire con questa guida.
Installazione di Raspberry Pi OS
Raspberry Pi deve essere configurato a dovere prima di poter installare il NUT Server. Partiamo quindi installando Raspberry Pi OS, la distribuzione Linux che abbiamo scelto per tale guida.
Quindi scarichiamo il file ISO di Raspberry Pi OS e l'installer di Raspberry Pi Imager, il programma incaricato di eseguire il flash della distribuzione sulla microSD.
Avviamo quest'ultimo. Clicchiamo su "Choose OS" per scegliere il file ISO di Raspberry Pi OS, poi spostiamoci sulla voce "Choose Storage" per indicare al tool la microSD connessa al PC e, per terminare pigiamo, scegliamo "Write" e avviamo il processo di flash.
Al termine di tale procedura disconnettiamo la microSD dal computer ed inseriamola nell'apposito slot presente nel Raspberry Pi. Connettiamo il tutto alla corrente ed eseguiamo il setup iniziale di Raspberry Pi OS.
Installazione e configurazione del server NUT su Raspberry Pi OS
Siamo pronti per avviare l'installazione del nostro server NUT. Quindi verifichiamo prima di tutto che Raspberry Pi OS sia correttamente aggiornato agli ultimi pacchetti disponibili nei repository ufficiali. Per fare ciò utilizziamo la CLI (Command Line Interface) di APT, il package manager integrato nella distribuzione. Apriamo poi la finestra del terminale, pigiando CTRL+ALT+T, e scriviamo:
sudo apt update && sudo apt upgrade -y
Dopo aver lasciato che il sistema aggiorni tutti i pacchetti possiamo passare all'installazione di NUT. Torniamo in bash e digitiamo:
sudo apt install nut
Con tale comando verranno installati il client ed il server NUT. Ora è necessario individuare il modello dell'UPS connesso via USB a Raspberry Pi. Digitiamo quindi nella shell:
lsusb
lsusb
elenca tutte le periferiche USB connesse al PC. Come output dovremmo quindi ricevere una schermata come la seguente:
Bus 001 Device 001: ID 0987:0543 Cyber Power System, Inc. ABC500 UPS
Ora dobbiamo fare attenzione ai numeri dopo la voce "ID" che identificano con precisione il produttore ed il device. Quindi apriamo il file di configurazione di NUT con l'editor di testo nano:
sudo nano /etc/nut/ups.conf
e modifichiamolo con i parametri:
[NOMECHEVOLETEDAREALLUPS]
driver = NomedelDriver
desc = "ModellodellUPS"
port = auto
vendorid = 0987
productid = 0543
È possibile reperire il nome del driver nel sito ufficiale del progetto NUT, gran parte degli UPS è servito dal driver chiamato usbhid-ups
.
Salviamo la modifica premendo i tasti CTRL+O e chiudendo il documento con CTRL+X.
Abilitare l'accesso da remoto al NUT Server
Di base è possibile collegarsi al NUT Server solo se si è connessi alla rete locale. Tuttavia possiamo impostare il server in modo che sia accessibile anche dall'esterno della LAN. Riapriamo il file upsd.conf
:
sudo nano /etc/nut/upsd.conf
e modifichiamo il parametro LISTEN
cosi:
LISTEN 0.0.0.0 3493
Salviamo e chiudiamo il file.
Impostazione dell'utente NUT
Per connetterci al nostro NUT Server è necessario impostare un utente tramite credenziali. Modifichiamo quindi tale file:
sudo nano /etc/nut/upsd.users
e generiamo l'utente e la password aggiungendo queste righe alla fine del documento:
[upsmon]
password = <INSERITELAVOSTRAPASSWORD>
upsmon primary
Cosi facendo abbiamo generato un utente primario chiamato upsmon
. Ora salviamo ed usciamo dal documento. Quindi modifichiamo il file per consentire all'utente di monitorare l'UPS:
sudo nano /etc/nut/upsmon.conf
In fondo al file scriviamo:
MONITOR <NOMEDELLUP>@localhost 1 upsmon <LATUAPASSWORD> primary
Salviamo e passiamo al file nut.conf
per abilitare la funzione di network server:
sudo nano /etc/nut/nut.conf
Modifichiamo il parametro mode
cosi:
MODE=netserver
Anche in questo caso salviamo le modifiche appena eseguite e riavviamo i demoni del NUT Server tramite systemd
per renderle operative:
sudo systemctl restart nut-server
sudo systemctl restart nut-monitor
Ora possiamo testare il funzionamento del NUT server digitando:
upsc ups
Se avete dato un nome diverso al vostro UPS dovete cambiare la voce "ups" con la denominazione corretta. Ecco un outupt d'esempio:
battery.charge: 95
battery.charge.warning: 20
battery.mfr.date: CPS
battery.runtime: 9000
battery.runtime.low: 300
device.model: modellodeldriver
device.serial: XA1101Ahaah
ups.vendorid: 0987
Installazione e configurazione del Web server e di nut-cgi
Per rendere accessibili facilmente tali dati anche da altri device dobbiamo installare un Web server, in questo caso useremo Apache 2, in accoppiata con la WebGUI nut-cgi:
sudo apt install apache2 nut-cgi
Abilitiamo il modulo cgi
:
sudo a2enmod cgi
e riavviamo il processo apache2
:
sudo systemctl restart apache2
Connettiamoci ora all'URL, composto in parte dall'IP locale del Raspberry Pi, per visualizzare i dati registrati dal NUT Server:
http://192.168.0.13/cgi-bin/nut/upsstats.cgi
Se non conoscete l'indirizzo IP del Raspberry Pi questo dato è facilmente ottenibile digitando il seguente comando in bash:
hostname -I