NUT - come "smartizzare" un UPS
Anche il più solido dei sistemi non può nulla senza alimentazione. In questa guida vedremo come monitorare in rete uno o più UPS tramite NUT (Network UPS Tools), così da garantirvi tranquillità anche durante un blackout improvviso.
Gli UPS sono indubbiamente i componenti dell'infrastruttura più importanti, specialmente per chi non dispone di un'utenza elettrica professionale e viene impattato maggiormente da un blackout locale o da sbalzi di corrente.
Potrete anche avere messo sotto bilanciamento i vostri servizi, ma senza corrente nessuno dei vostri nodi rimarrà acceso per fronteggiare il guasto!
Mi piace immaginare che vi siate presi un po' di paura avendo pensato a quanto ho appena scritto, e che avete appena montato un UPS nuovo fiammante, ma non sapete come monitorarlo.
Il manuale del produttore sembra scritto in geroglifici, ed avete solo capito che dovete collegare l'UPS tramite cavo USB-B (volgarmente chiamato "Cavo Stampante") ad un computer.
Grazie al progetto NUT (Network UPS Tools) installato su un computer collegato fisicamente all'UPS potrete monitorare lo stato dell'UPS direttamente dalla rete.
Di conseguenza, potrete stare molto più tranquilli quando sentirete il vicino smadonnare perché ha appena perso il lavoro delle ultime due ore, e non solo! Saprete anche quanta batteria vi rimane, e per quanto tempo potrete ancora stare -relativamente- tranquilli.
Vediamo insieme come fare!

Prerequisiti
Per poter utilizzare NUT avrete bisogno di:
- Un UPS con interfaccia di comunicazione. Di solito a partire dagli UPS di fascia media è molto comune trovare una porta USB-B sul retro per collegare l'UPS con un computer.

- Un computer a cui collegare l'UPS. Potete collegarlo direttamente al vostro PC, ma dovrete usare il software fornito dal produttore (che non sempre è all'altezza).
Per utilizzare l'UPS tramite NUT dovrete collegarlo ad un computer che faccia da middleman, cioè che legga le informazioni dall'UPS e le esponga tramite un'interfaccia web per la fruizione da un dispositivo terzo.
Per via del costo e delle dimensioni contenute, vi consiglio di usare un Raspberry Pi Zero 2 W (va benissimo anche un modello di prima generazione, se ce l'avete di scorta!)

Installazione
(procedura testata su Raspberry Pi OS 2024-11-19)
L'installazione di NUT è semplicissima, basta installare il pacchetto tramite il gestore dei pacchetti del nostro sistema operativo
sudo apt install nutA breve andremo a censire l'UPS su NUT, e vi consiglio quindi di andare a recuperare marca e modello del vostro UPS.
Nel mio caso si tratta di un EPYC NEON da 650VA:
E di un Tecnoware ERA Plus 2000:

Configurazione
Andiamo a censire il nostro UPS
nano /etc/nut/ups.confDi seguito, due esempi relativi ai miei due UPS. Sulla pagina del progetto NUT potete trovare una lista di parametri associati a vari modelli di UPS.
[Tecnoware]
driver = "blazer_usb"
port = auto
desc = "Tecnoware Era Plus 2000"
langid_fix = "0x409"
[EPYC]
driver = "usbhid-ups"
port = auto
desc = "EPYC NEON"Modifichiamo il file nut.conf
nano /etc/nut/nut.confimpostando la modalità in standalone
MODE=standalonediamo un riavvio alla macchina (non sempre necessario)
reboot
Prima di procedere, controlliamo un paio di cose:
- Controlliamo che lo stato del servizio nut-server sia active (running)
sudo service nut-server status- Controlliamo quindi se NUT riesce a leggere correttamente i parametri dall'UPS
upsc %nomeups%Dovreste ricevere un output simile a questo, ma tenete a mente che il numero di parametri disponibili varia molto a seconda del modello.
Init SSL without certificate database
battery.charge: 100
battery.voltage: 27.20
battery.voltage.high: 26.00
battery.voltage.low: 20.80
battery.voltage.nominal: 24.0
device.type: ups
driver.name: blazer_usb
driver.parameter.langid_fix: 0x409
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.internal: 0.14
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.current.nominal: 4.0
input.frequency: 50.0
input.frequency.nominal: 50
input.voltage: 236.2
input.voltage.fault: 236.2
input.voltage.nominal: 230
output.voltage: 236.2
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 2
ups.productid: 0000
ups.status: OL
ups.type: offline / line interactive
ups.vendorid: 0001Da ora in poi, su questo sistema potremo visualizzare i parametri dell'UPS tramite il comando upsc.
Se volete integrare questa funzione con altri applicativi in rete (come Grafana e HomeAssistant) procedete col prossimo capitolo.
Censimento Utenti
Modifichiamo il file upsd.users che definisce gli utenti che possono contattare il servizio upsd via rete per ottenere i parametri degli UPS.
nano /etc/nut/upsd.usersCompilate il file come segue, cambiando la password di default mypasswd
[admin]
password = mypasswd
actions = SET
instcmds = ALL
[upsmon]
password = mypasswd
upsmon masterConfigurazione monitoraggio
Modifichiamo il file upsmon.conf
nano /etc/nut/upsmon.confAggiungete la seguente riga in cima al file
MONITOR %nomeups%@localhost 1 upsmon %password% masterfacendo attenzione a valorizzare:
- %nomeups% col nome UPS indicato in /etc/nut/ups.conf
- %password% con la password di upsmon indicata in /etc/nut/upsd.users
Opzionalmente, se si vuole ricevere un avviso sulla CLI di questa macchina quando lo stato dell'UPS cambia, decommentare le seguenti righe (sono già presenti nel file di default):
NOTIFYFLAG ONLINE SYSLOG+WALL
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG REPLBATT SYSLOG+WALLConfigurazione servizio web
- modifichiamo il file /etc/nut/upsd.conf che contiene i parametri del server web upsd, che gli altri applicativi contatteranno per ricevere le metriche degli UPS
nano /etc/nut/upsd.conf- aggiungiamo la seguente riga al file per lasciare il server in ascolto su tutti gli indirizzi IP disponibili, sulla porta 3493
LISTEN 0.0.0.0 3493Configurazione dei permessi sui files
- Come ultima cosa, modifichiamo i permessi dei files di configurazione in modo che il servizio li possa leggere
sudo chown nut:nut /etc/nut/*
sudo chmod 640 /etc/nut/upsd.users /etc/nut/upsmon.conf
Utilizzo
su HomeAssistant
Usando l'integrazione nativa Network UPS Tools (NUT) possiamo importare le metriche degli UPS, tramite NUT, direttamente su HomeAssistant.
- Andate in Settings → Devices & Services e premete su Add Integration
- Cercate e selezionate "Network UPS Tools (NUT)"

- Configurate i parametri di connessione indicando:
- Host → l'indirizzo IP del server NUT (nel mio caso, il Raspberry Pi)
- Port → la porta che avete indicato nella direttiva LISTEN dentro a /etc/nut/upsd.conf
- Username → l'utente amministratore del server NUT (quello con cui effettuate l'accesso sulla macchina)
- Password → la password dell'utente amministratore del server NUT

Come avrete notato, non possiamo specificare il nome dell'UPS da monitorare. In questo modo verranno importati in HomeAssistant tutti gli UPS collegati a questa istanza di NUT, se ce ne sono più di uno.
A seconda delle metriche supportate dal vostro UPS, adesso avrete un nuovo Device con svariate Entities, come:
- Percentuale di carica
- Tensione in ingresso
- Tensione in uscita
- Carico (%)
Che potete usare nelle vostre dashboard o anche in automazioni.
Per esempio, potete creare una nuova automazione che vi invii un messaggio su Telegram quando la percentuale di carica dell'UPS scende sopra al 90%.

Utilizzo
su Windows
Ci sono vari client open-source per Windows che supportano NUT. In questo esempio vedremo come configurare Windows NUT Client
- Prima di tutto, scaricate il pacchetto .msi dell'ultima release disponibile ed installatelo
- Aprite WinNUT-Client e premete su Settings

- Configurate le impostazioni:
- NUT Host → l'indirizzo IP del server NUT (nel mio caso, il Raspberry Pi)
- NUT Port → la porta che avete indicato nella direttiva LISTEN dentro a /etc/nut/upsd.conf
- UPS Name → il nome dell'UPS da monitorare, come censito in /etc/nut/ups.conf
- Polling Interval → ogni quanti secondi il client dovrà richiedere le metriche al NUT Server
- Login → l'utente amministratore del server NUT (quello con cui effettuate l'accesso sulla macchina)
- Password → la password dell'utente amministratore del server NUT
- Re-establish connection → attivare questa opzione per permettere a WinNUT-Client di ricollegarsi all'UPS quando perde la connessione

Ora che avete terminato la configurazione di WinNUT-Client, riceverete una notifica di Windows appena lo stato dell'UPS cambia.
Nel caso in cui l'UPS dovesse perdere il collegamento alla corrente, WinNUT-Client vi avviserà periodicamente circa il tempo rimanente prima dell'esaurimento delle batterie (Attenzione: si tratta comunque di una stima che va presa molto con le pinze!)
Utilizzo con Prometheus/Grafana
Per integrare NUT con Prometheus e Grafana, ed inserire quindi un widget sulla vostra dashboard che indica lo stato dell'UPS, serve un software aggiuntivo che legga i dati da NUT e li prepari per darli in pasto a Prometheus.
Non mi sembrava il caso di allungare così tanto questa guida, che già di suo non è sicuramente corta, ma potete leggere la guida dedicata seguendo questo bookmark:


