Skip to content

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

  1. Spunta Attiva il supporto UPS.
  2. Tipo di UPS: Server Gruppo di continuità di rete Synology.
  3. Modalità di standby: Personalizza ora, 3 minuti.
  4. IP del server di rete UPS: l’indirizzo del Raspberry.
  5. 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

  1. L’UPS passa a batteria: tutto resta acceso.
  2. Dopo 3 minuti il NAS entra in standby: servizi fermi, dischi al sicuro.
  3. Quando l’autonomia scende sotto i 5 minuti, il Raspberry si spegne.
  4. Circa un minuto dopo l’UPS toglie corrente alle prese.
  5. 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 normale
  • OL CHRG: a rete, batteria in carica
  • OB DISCHRG: a batteria, cioè blackout in corso
  • LB: batteria bassa, sta per partire lo spegnimento
  • RB: 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.

Torna su