
Un Raspberry Pi 2 recuperato diventa il server NUT che spegne in sicurezza gli host del lab quando manca la corrente.
UTILIZZARE UN RASPBERRY PI 2 COME SERVER NUT
Nel mio lab gli host principali sono alimentati da un UPS (Uninterruptible Power Supply).
Quando manca la corrente, la batteria dell’UPS tiene accese le macchine solo per pochi minuti.
Se nessuno spegne gli host in tempo, la batteria si scarica e tutto si spegne di colpo.
Uno spegnimento brusco può corrompere file system, dischi in RAID e database.
L’UPS però ha una sola porta USB, quindi solo un dispositivo può leggerne lo stato.
Per risolvere il problema ho scelto Network UPS Tools, conosciuto anche con la sigla NUT.
Un Raspberry Pi 2 collegato all’UPS legge lo stato della batteria e avvisa gli altri host attraverso la rete.
Ogni host riceve l’avviso e si spegne da solo in modo ordinato.
Il compito richiede poca potenza: un Raspberry Pi 2 recuperato è più che sufficiente.
CHE COS’È NETWORK UPS TOOLS
Network UPS Tools è un progetto di software libero, rilasciato con licenza GNU GPL.
Supporta gli UPS di oltre 200 produttori e più di 1.400 modelli diversi.
L’ultima versione stabile è la 2.8.5, rilasciata il 7 aprile 2026.
In Raspberry Pi OS, basato su Debian 13 trixie, il pacchetto disponibile è la versione 2.8.1.
NUT è formato da alcuni componenti che lavorano insieme:
- driver: il programma che dialoga con l’UPS attraverso il cavo USB.
- upsd: il server che condivide lo stato dell’UPS in rete, sulla porta 3493.
- upsmon: il servizio che controlla lo stato dell’UPS e avvia lo spegnimento.
- upssched: il servizio che fa partire azioni a tempo, ad esempio dopo un minuto a batteria.
- upsc: il comando per leggere a mano i dati dell’UPS, come carica, carico e tensione.
Il servizio upsmon funziona in due modalità.
In modalità primary gira sulla macchina collegata all’UPS via USB, qui il Raspberry Pi 2.
La modalità secondary invece gira sugli altri host, che ricevono lo stato dell’UPS dalla rete.
COME FUNZIONA NEL LAB
Le quattro prese dell’UPS alimentano delle ciabatte multipresa.
Alle ciabatte sono collegati gli host del lab, i monitor e il Raspberry Pi 2 NUT.
I dispositivi alimentati dall’UPS sono questi:
SW002: lo switch di rete del lab.
PC001: la postazione di lavoro principale.
NAS001: il NAS per i backup.
VPS001: il server che ospita i servizi della rete di casa.
Raspberry Pi 2 NUT: il server NUT collegato all’UPS con il cavo USB.
Anche lo switch SW002 deve stare sotto UPS.
Senza switch, durante un blackout, l’avviso del Raspberry non raggiungerebbe gli altri host.
Questo UPS non comunica una stima dell’autonomia residua né una soglia di batteria scarica.
Per questo motivo lo spegnimento non aspetta la batteria scarica, ma parte a tempo.
La sequenza in caso di blackout è la seguente:
- Manca la corrente e l’UPS passa a batteria.
- Il Raspberry Pi 2 legge il nuovo stato tramite il cavo USB e avvisa gli host.
- Dopo 30 secondi a batteria il NAS001 si spegne per primo.
- Dopo 60 secondi il Raspberry ordina lo spegnimento a tutti gli altri host.
- PC001 e VPS001 chiudono i servizi e si spengono in modo ordinato.
- Per ultimo si spegne il Raspberry Pi 2.
Se la corrente torna prima dei 60 secondi, il conto alla rovescia si annulla e nessuno si spegne.
SOFTWARE UTILIZZATI
Raspberry Pi 2 NUT
Sistema operativo: Raspberry Pi OS Lite (32-bit), basato su Debian 13 trixie, senza interfaccia grafica.
Utilità: Raspberry Pi Imager, per scrivere il sistema operativo sulla microSD.
Software: Network UPS Tools, pacchetto nut-server, driver usbhid-ups, upsmon in modalità primary.
Pagina web: lighttpd come server web, raccolta dati scritta in Python.
PC001 e VPS001
Software: Network UPS Tools, pacchetto nut-client, upsmon in modalità secondary.
NAS001
Software: plugin openmediavault-nut di OpenMediaVault, in modalità client di rete.
Nota: il Raspberry Pi 2 Model B v1.1 non supporta la versione a 64 bit di Raspberry Pi OS, serve la versione a 32 bit.
ELENCO DEI COMPONENTI
I campi vuoti indicano materiale in possesso.
| Q.ta | DESCRIZIONE | RIGENERATO | NUOVO | PREZZO |
| 1 | Raspberry Pi 2 Model B v1.1 – CPU quad-core ARM Cortex-A7 900MHz – Ram 1GB | |||
| 1 | Case per Raspberry Pi 2 | |||
| 1 | Alimentatore micro USB per Raspberry Pi | |||
| 1 | Scheda microSD SanDisk Ultra 16GB SDHC Classe 10 UHS-I | |||
| 1 | Cavo di rete UTP per collegare il Raspberry allo switch SW002 | |||
| 1 | Cavo USB (USB-A maschio a USB-B maschio) per collegare l’UPS al Raspberry | |||
| 1 | UPS Powercom Black Knight Pro BNT-1000AP – 1000VA/600W – 4 prese sotto batteria – porta USB tipo B | |||
| 3 | Ciabatta multipresa |
INSTALLAZIONE IN BREVE
Ho preparato il Raspberry Pi 2 con questi passaggi:
- Scrittura di Raspberry Pi OS Lite sulla microSD con Raspberry Pi Imager.
- Indirizzo IP statico, così gli host trovano sempre il server NUT.
- Accesso SSH solo con chiave e firewall che apre la porta di NUT ai soli host del lab.
- Installazione di nut-server e collegamento dell’UPS con il driver usbhid-ups.
- Un utente NUT diverso per ogni host, ognuno con la propria password.
- Configurazione di upssched con il timer di 60 secondi.
Sugli host il lavoro è più semplice.
Su PC001 e VPS001 basta installare nut-client e indicare l’indirizzo del Raspberry.
Il NAS001 usa invece il plugin di OpenMediaVault, configurabile dall’interfaccia web.
Durante l’installazione ho incontrato due problemi.
Il primo: il cavo USB era collegato prima di installare NUT, e il driver non aveva i permessi per leggere l’UPS.
È bastato scollegare e ricollegare il cavo per risolvere.
Il secondo: all’avvio il server upsd partiva prima della rete e ascoltava solo in locale.
Gli host quindi non riuscivano a collegarsi.
La soluzione è stata far partire upsd solo dopo che la rete è pronta.
LA PAGINA WEB DI STATO
NUT funziona da riga di comando, ma volevo vedere lo stato dell’UPS e degli host a colpo d’occhio.
Esistono già progetti pronti, come PeaNUT o l’interfaccia CGI inclusa in NUT.
PeaNUT però avrebbe dovuto girare sul VPS001, che non resta acceso tutto il giorno.
L’interfaccia CGI di NUT invece ha una grafica datata.
Ho quindi realizzato una pagina web su misura, con l’aiuto di un agente di intelligenza artificiale.
L’agente ha scritto il codice, le prove automatiche e la guida, e io ho deciso funzioni, aspetto e controlli.
La pagina gira direttamente sul Raspberry Pi 2 e mostra queste informazioni:
- Stato UPS: alimentazione da rete o da batteria, carica, carico e tensione in ingresso.
- Host: per ognuno indica se è collegato a NUT, se è spento o se è acceso ma NUT non risponde.
- Storico: l’andamento delle ultime ore.
- Eventi: passaggi a batteria, ritorni della corrente, host collegati e scollegati.
- Guida: i passaggi per aggiungere un nuovo host a NUT, con un glossario dei termini.
Dopo l’accesso con utente e password si possono aggiungere o togliere host e cambiare il titolo della pagina.
Anche la sicurezza è stata curata fin dall’inizio.
La pagina è servita in HTTPS da lighttpd, un server web leggero adatto al Raspberry.
Il programma che raccoglie i dati è scritto in Python, senza librerie esterne.
Dalla pagina si leggono soltanto i dati: nessun comando arriva mai all’UPS.
Il firewall permette di aprirla solo da alcuni computer del lab.
Alla fine ho controllato la pagina con strumenti di analisi della sicurezza come nmap e Nikto.
È emerso un solo dettaglio minore, corretto subito.
LA PROVA REALE
Ho simulato un blackout staccando la spina dell’UPS dalla presa a muro.
Il Raspberry ha rilevato subito il passaggio a batteria.
Dopo circa 60 secondi ha ordinato lo spegnimento e PC001 si è spento in modo pulito.
Subito dopo si è spento anche il Raspberry Pi 2.
La prova ha mostrato anche due limiti.
Le batterie dell’UPS hanno più di cinque anni e la carica scende molto in fretta sotto carico.
In una prova precedente è passata dal 99% al 22% in meno di un minuto.
Le batterie sono da sostituire, e dopo il cambio ripeterò la stessa prova.
L’altro limite riguarda il comando che spegne l’UPS a fine procedura, che questo modello non supporta.
L’UPS resta quindi acceso, e il Raspberry spento non ripartirebbe da solo al ritorno della corrente.
Il Raspberry Pi 2 non ha un pulsante di accensione.
Per riavviarlo basta scollegare e ricollegare l’alimentatore.
LINK
Inf.: https://networkupstools.org/
Doc.: https://networkupstools.org/documentation.html
Inf.: https://networkupstools.org/stable-hcl.html
Rep.: https://github.com/networkupstools/nut
Dow.: https://networkupstools.org/download.html
Dow.: https://www.raspberrypi.com/software/operating-systems/
FOTO



