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.

Condividi
NUT - come "smartizzare" un UPS

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.
due porte USB-B ed un cavo da USB-A ad USB-B
‼️
Se state acquistando un UPS, accertatevi che il cavo da USB-A a USB-B sia incluso, altrimenti procuratevene uno.
  • 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!)

Raspberry Pi Zero 2 W

€28

Acquista su Amazon
💡
Se non avete un computer o un SBC da dedicare a questo progetto, potete collegare l'UPS ad un Host ESXi ed esporre ad una VM Linux il dispositivo USB.

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 nut

A 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:

EPYC NEON 650VA

€70

Acquista su Amazon

E di un Tecnoware ERA Plus 2000:

Tecnoware ERA Plus 2000VA

€145

Acquista su Amazon

Configurazione

Andiamo a censire il nostro UPS

nano /etc/nut/ups.conf

Di 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"
❗
Ricordatevi di segnarvi il nome dell'UPS che andate a censire (negli esempi sopra, si tratta di Tecnoware ed EPYC) perché in seguito dovremo passare questi nomi case sensitive a NUT

Modifichiamo il file nut.conf

nano /etc/nut/nut.conf

impostando la modalità in standalone

MODE=standalone

diamo 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: 0001

Da 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.users

Compilate il file come segue, cambiando la password di default mypasswd

[admin]  
password = mypasswd  
actions = SET  
instcmds = ALL

[upsmon]  
password = mypasswd  
upsmon master

Configurazione monitoraggio

Modifichiamo il file upsmon.conf

nano /etc/nut/upsmon.conf

Aggiungete la seguente riga in cima al file

MONITOR %nomeups%@localhost 1 upsmon %password% master

facendo 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+WALL

Configurazione 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 3493

Configurazione 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

❗
Windows NUT Client è ben lontano dall'essere un software perfetto, ma tra tutti i progetti che ho trovato è il migliore disponibile (al momento). Non esitate a farmi sapere se doveste trovare un alternativa migliore e più aggiornata.
  • 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!)

❗
Purtroppo, allo stato attuale Windows NUT Client non si integra con le funzionalità di Windows relative agli UPS. Non è in grado quindi di mostrare il livello della batteria tramite il widget nativo di Windows. Peccato 😔

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:

Monitorare gli USP tramite NUT e Grafana
Una guida pratica per esporre e raccogliere le metriche dei tuoi gruppi di continuità (UPS) gestiti da NUT. Impara come integrare nut_exporter con Prometheus per avere sempre sotto controllo lo stato di alimentazione del tuo homelab.