
Un UPS ha una sola porta USB, ma in casa i dispositivi da proteggere sono due: il Raspberry Pi e il NAS Synology. La soluzione è NUT (Network UPS Tools): il Raspberry legge lo stato dell’UPS via USB e lo condivide in rete. In un blackout lungo il NAS si mette in sicurezza, poi si spegne il Raspberry e l’UPS toglie corrente. Al ritorno della rete tutto riparte da solo.
Cosa serve
- UPS con porta USB (qui un APC Back-UPS BX700UI)
- cavo USB A-B, quello delle stampanti
- Raspberry Pi con Raspberry Pi OS e IP fisso
- NAS Synology con IP fisso, sulla stessa rete
Raspberry, NAS e router vanno collegati alle prese dell’UPS.
1. Collegamento
Collega il lato B (quadrato) alla porta USB dell’UPS e il lato A a una porta USB del Raspberry. Verifica che il Raspberry veda l’UPS:
lsusb
Nell’elenco deve comparire una riga con il nome del produttore dell’UPS: per gli APC è American Power Conversion, per altri marchi compare il loro nome (ad esempio Eaton o Cyber Power). Se non riconosci nessuna riga, stacca e ricollega il cavo e lancia di nuovo lsusb: la riga nuova è quella dell’UPS.
2. Installazione di NUT
sudo apt update
sudo apt install nut
Non installare nut-monitor dai pacchetti suggeriti: è un’interfaccia grafica per il desktop. Eventuali messaggi di errore al termine dell’installazione sono normali, perché NUT non è ancora configurato.
3. Configurazione
I file sono in /etc/nut/. Modificali con sudo nano NOMEFILE.
nut.conf: cambia la riga esistente in
MODE=netserver
ups.conf: aggiungi in fondo
[ups]
driver = usbhid-ups
port = auto
desc = "APC BX700UI"
offdelay = 120
ondelay = 150
ignorelb
override.battery.runtime.low = 300
offdelay e ondelay sono i secondi che l’UPS aspetta prima di togliere corrente e prima di ridarla al ritorno della rete.
Le ultime due righe fanno scattare lo spegnimento quando restano 5 minuti di autonomia, invece dei 2 impostati dall’UPS: troppo pochi per spegnere tutto con calma.
Per UPS di altre marche, il driver giusto si trova nell’elenco di compatibilità di NUT.
upsd.conf: aggiungi in fondo
LISTEN 0.0.0.0 3493
Senza questa riga NUT ascolta solo sul Raspberry stesso e il NAS non può collegarsi.
upsd.users: genera una password con openssl rand -hex 16 e aggiungi in fondo
[monuser]
password = secret
upsmon secondary
[upsmon_pi]
password = LA_TUA_PASSWORD
upsmon primary
monuser / secret sono le credenziali fisse che usa il NAS Synology: non si possono cambiare. Per questo, al passo 5, la porta di NUT si apre solo per l’IP del NAS.
upsmon.conf: aggiungi in fondo, con la stessa password
MONITOR ups@localhost 1 upsmon_pi LA_TUA_PASSWORD primary
4. Avvio e verifica
sudo systemctl enable --now nut-server nut-monitor
sudo systemctl restart nut-driver-enumerator nut-server nut-monitor
Ripeti il secondo comando ogni volta che modifichi un file di configurazione. Poi controlla:
upsc ups@localhost
Devono comparire, tra le altre, ups.status: OL (a rete), battery.charge e battery.runtime.low: 300.
5. Firewall
Se sul Raspberry usi ufw, apri la porta di NUT solo per il NAS:
sudo ufw allow from IP_DEL_NAS to any port 3493 proto tcp comment 'NUT Synology'
6. Configurazione del NAS
In DSM: Pannello di controllo → Hardware e alimentazione → UPS
- Spunta Attiva il supporto UPS.
- Tipo di UPS: Server Gruppo di continuità di rete Synology.
- Modalità di standby: Personalizza ora, 3 minuti.
- IP del server di rete UPS: l’indirizzo del Raspberry.
- Applica, poi Informazioni dispositivo: deve risultare Connesso, con il modello dell’UPS e la carica della batteria.
In Hardware e alimentazione → Generale spunta Riavvia automaticamente dopo la risoluzione del problema di alimentazione, altrimenti il NAS non riparte da solo.
Dal Raspberry puoi verificare che il NAS sia collegato:
upsc -c ups
Deve comparire l’IP del NAS.
7. Come funziona in un blackout
- L’UPS passa a batteria: tutto resta acceso.
- Dopo 3 minuti il NAS entra in standby: servizi fermi, dischi al sicuro.
- Quando l’autonomia scende sotto i 5 minuti, il Raspberry si spegne.
- Circa un minuto dopo l’UPS toglie corrente alle prese.
- Al ritorno della rete l’UPS ridà corrente e router, Raspberry e NAS ripartono da soli.
I blackout più brevi di 3 minuti passano senza spegnere nulla. Con un carico di circa 80 W, questo UPS ha retto circa 15 minuti.
Prova senza staccare la spina: con l’UPS a rete, sudo upsmon -c fsd simula la batteria scarica ed esegue tutta la sequenza. Router e NAS resteranno spenti per qualche minuto.
8. Controllare lo stato dell’UPS
Per vedere com’è messo l’UPS in questo momento:
upsc ups 2>/dev/null | grep -E 'ups.status:|charge:|runtime:|load:'
Il comando mostra lo stato, la carica della batteria, l’autonomia stimata in secondi e il carico in percentuale. 2>/dev/null nasconde l’avviso Init SSL without certificate database, che compare sempre ed è innocuo.
Gli stati principali:
OL: a rete, tutto normaleOL CHRG: a rete, batteria in caricaOB DISCHRG: a batteria, cioè blackout in corsoLB: batteria bassa, sta per partire lo spegnimentoRB: batteria da sostituire
Per seguirlo in tempo reale, con aggiornamento ogni 30 secondi (si esce con Ctrl+C):
watch -n 30 "upsc ups 2>/dev/null | grep -E 'ups.status:|charge:|runtime:'"
Lo stesso stato si vede anche in DSM, in Pannello di controllo → Hardware e alimentazione → UPS → Informazioni dispositivo. Se in Notifiche hai configurato l’email, DSM ti avvisa da solo quando l’UPS passa a batteria.
9. Cosa è successo mentre non c’eri
Ogni passaggio a batteria viene registrato nel journal del Raspberry. Per vedere gli eventi degli ultimi sette giorni:
journalctl -u nut-monitor --since "7 days ago" --no-pager | grep -E 'on battery|on line|low|shutdown'
Per una lettura più comoda, questo piccolo script mostra gli eventi con data, ora e durata di ogni blackout. Crealo con nano ~/upseventi.sh:
#!/bin/bash
# uso: ~/upseventi.sh [GIORNI]
g=${1:-30}
journalctl -u nut-monitor -o short-unix --since "$g days ago" --no-pager \
| grep -E 'on battery|on line power|is low|power-fail' \
| while read -r ts host proc msg; do
t=${ts%.*}
d=$(date -d "@$t" '+%d/%m %H:%M:%S')
case "$msg" in
*"on battery"*) ini=$t; echo "$d a batteria" ;;
*"on line power"*)
if [ -n "$ini" ]; then echo "$d a rete ($((t-ini)) s)"; ini=""
else echo "$d a rete"; fi ;;
*"is low"*) echo "$d BATTERIA BASSA" ;;
*"power-fail"*) echo "$d SPEGNIMENTO PI" ;;
esac
done
Rendilo eseguibile con chmod +x ~/upseventi.sh e lancialo con ~/upseventi.sh (ultimi 30 giorni) oppure ~/upseventi.sh 365. Un esempio di risultato:
09/11 14:45:07 a batteria
09/11 14:51:42 a rete (395 s)
09/11 22:01:43 a batteria
09/11 22:01:48 a rete (5 s)
09/11 23:10:03 a batteria
09/11 23:19:38 BATTERIA BASSA
09/11 23:19:54 SPEGNIMENTO PI
I passaggi di pochi secondi sono sbalzi di tensione assorbiti dall’UPS. Una riga BATTERIA BASSA seguita da SPEGNIMENTO PI indica invece un blackout lungo, con lo spegnimento completo.
10. La batteria
Le batterie al piombo degli UPS durano in genere 3-5 anni. Una volta all’anno conviene ripetere una prova: con l’UPS carico, stacca la spina e controlla quanto scende l’autonomia in qualche minuto. Se è molto più bassa di quando la batteria era nuova, oppure se lo stato mostra RB, è ora di sostituirla. Il BX700UI usa una batteria VRLA da 12 V 7,2 Ah, facile da trovare.