Scopi della guida:
Concetti affrontati:
|
Componenti software utilizzate:
Prerequisiti:
COMPONENTI FISICI UTILIZZATI:
|
PROGETTO MAGGIORMENTE INDICATO PER: |
|
NOTE E DISCLAIMER
|
|
Revisione guida: 1.2 |
Abstract
Abbiamo già affrontato in diverse occasioni il tema della continuità elettrica, ovvero la possibilità di rendere la nostra domotica (o altro) costantemente operativa, specie in caso di black-out. Per farlo è necessario dotarsi di un UPS (Uninterruptable Power Supply), il quale sostanzialmente è un pacco di batterie che, in caso di assenza di alimentazione elettrica continua a fornire energia – per lo meno fino alla sua completa scarica.
Modelli di UPS ne esistono centinaia per non dire migliaia: al tema di come e perché scegliere un UPS adeguato alle proprie esigenze abbiamo dedicato una scheda apposita; in tale scheda, nelle conclusioni, abbiamo fatto riferimento all’esistenza di UPS dotati di interfaccia USB la quale consente, in molti casi, di collegare l’unità a un computer al fine di verificarne lo stato operativo, quello di carica rimanente e moltissimi altri parametri. In alcuni casi, essi utilizzano porte seriali oppure una qualche connessione di rete (che sfrutti SNMP, Eaton, MGE XML/HTTP via TCP/IP).
In questa guida prenderemo in analisi l’adozione – su Raspberry Pi dotato di sistema operativo Raspberry Pi OS – dei cosiddetti “Network UPS Tools” (o “NUT”), un pacchetto di software concepiti espressamente allo scopo di riuscire a “dialogare” con l’UPS (indipendentemente dalla tipologia di interfaccia, di marca, del modello o dalle caratteristiche) e standardizzarne così non solo la consultazione delle misure ma anche l’eventuale esecuzione di comandi specifici verso di esso.
L’adozione dei NUT non solo abilita l’esecuzione di comandi e di interrogazioni tramite riga di comando Raspberry Pi OS, ma anche all’integrazione in domotica verso i più disparati HUB personali come, per esempio, Home Assistant.
N.b. Gli utilizzatori di un’eventuale installazione Home Assistant OS debbono fare riferimento a quest’altra guida e non alla presente, la quale è dedicata solo agli utenti Raspberry Pi OS@Raspberry Pi o, più genericamente, a installazioni Linux. |
Altre guide e progetti dedicati a NUT:
- Gestire un UPS con Mini PC/Intel NUC/computer tramite NUT (“Network UPS Tools”) con Docker su Linux Debian
- Gestire un UPS con Raspberry Pi tramite NUT (“Network UPS Tools”) con Docker (su Raspberry Pi OS)
- Installare e configurare i “Network UPS Tools” (NUT) su Home Assistant OS/Supervised
- Integrare un UPS a Home Assistant tramite “Network UPS Tools” (NUT)
Si parte
- Assunti
- Cosa sono i NUT
- Scelta del driver
- Installazione dei NUT
- Configurazione del driver
- Configurazione del servizio
- Verifica
- Configurare il client
- Esecuzione comandi
- Integrazioni con gli HUB personali
Assunti
Per questa guida utilizzeremo a mo’ d’esempio un UPS Tecnoware Era Plus 1100 (o il leggermente più capiente 1200) – non foss’altro perché lo abbiamo in redazione e si tratta di un modello piuttosto diffuso. Come si capirà facilmente nella proseguimento della lettura, in realtà i modelli coi quali questa guida è applicabile sono tantissimi.
Si assume dunque di possedere un Raspberry Pi già configurato con Raspberry Pi OS e collegato in rete domestica, oltre ovviamente a un UPS compatibile (vedremo come) con NUT. Nell’esempio del Tecnoware Era Plus 1100, si immagina tale UPS connesso dal punto di vista logico al Raspberry tramite cavo USB type B.
Cosa sono i NUT
Come spiegato nell’Abstract, NUT è un insieme di software utile a interfacciarsi in modo standard a un UPS dotato di interfaccia USB, seriale o di rete (via SNMP, Eaton o MGE XML/HTTP su TCP/IP).
I NUT sono sostanzialmente composti da:
- un driver per comunicare con l’UPS tramite qualsiasi interfaccia e protocollo supportati, trasformando tale comunicazione in API locali standard;
- un demone (un servizio) che funga da interfaccia tra il driver e qualunque altro interlocutore (per esempio il client che segue, o gli HUB personali);
- un client a riga di comando, per monitorare, comandare e/o interrogare l’UPS (o gli UPS).
Scelta del driver
Non tutti gli UPS con interfacciamento USB/seriale/di rete sono necessariamente compatibili con NUT, anche se solitamente la probabilità è piuttosto alta.
Come abbiamo spiegato anche nella scheda dedicata alla scelta del proprio UPS, esiste una tabella di riferimento che elenca tutti i modelli compatibili con i Network UPS Tools: se il proprio UPS è presente in quella lista, è dunque possibile controllarlo con i NUT. Una volta trovato il proprio modello è necessario segnarsi da parte il driver corrispondente (colonna “Driver”, per l’appunto), informazione fondamentale per l’esecuzione dei prossimi passi.
N.b. Non sempre i modelli sono puntualmente elencati in tabella. Per esempio, proprio nel caso del nostro Tecnoware 1100 è riportato in pratica solo il brand Tecnoware, ma non il modello specifico. Utilizzando comunque il driver genericamente indicato (blazer_usb), l’integrazione verso i NUT ha funzionato alla perfezione, come infatti vedremo a seguire. |
Installazione dei NUT
Installare i Network UPS Tools su Raspberry Pi OS (o su Linux, più genericamente) è quanto di più facile.
Per farlo è necessario eseguire un comando via terminale (da CLI, via SSH oppure con control-alt-t da interfaccia desktop):
sudo apt-get install nut
Limitarsi ad attendere il completamento della procedura.
Configurazione del driver
A questo punto è necessario definire l’elenco di UPS gestiti dai Network UPS Tools. Nella maggior parte dei casi, si tratterà di un solo elemento, ma nessuno vieterebbe di definirne più di uno.
Ipotizziamo quindi di aver collegato il nostro UPS al Raspberry tramite cavo USB e di aver identificato nel “blazer_usb” il driver corretto: andremo quindi a modificare il file di configurazione dei NUT aggiungendo la voce relativa all’UPS.
Per farlo, il comando da eseguire sarà:
sudo nano /etc/nut/ups.conf
Apertosi l’editor, definiamo la nostra configurazione In un punto qualsiasi del file, magari in coda:
[tecnoware] driver = "blazer_usb" port = auto desc = "Technoware Era Plus 1100" langid_fix = "0x409"
Terminata la configurazione, salvare e uscire (ctrl+x, y, invio).
Spieghiamo ora i campi.
[tecnoware] | Il nome col quale l’UPS sarà conosciuto dai NUT |
driver | L’indicazione del driver da utilizzare per questo UPS |
port | La porta da utilizzare (solitamente si indica auto, ma potrebbe essere anche esplicitata come spiegato qui) |
desc | Descrizione verbosa del proprio UPS |
langid_fix | Campo opzionale, necessario in alcuni casi. Per il Tecnoware d’esempio, la fix indicata è quella specifica per il Tecnoware 1100 (trovata in rete). |
Così facendo, i NUT su Raspberry conosceranno ora un UPS chiamato “tecnoware“.
N.b. Va da sé che ogni UPS abbia una propria configurazione. Se si è fortunati, una configurazione molto semplice come quella qui sopra indicata è più che sufficiente; in altri casi è necessario scavare più a fondo per precisare meglio la configurazione, come documentato in dettaglio qui): |
Configurazione del servizio
A questo punto è necessario definire il servizio che si interfacci, tramite il driver indicato in configurazione, l’UPS (o gli UPS) in questione.
Per farlo, modifichiamo il file nut.conf:
sudo nano /etc/nut/nut.conf
Per questa guida consideriamo che sia i client che il server giacciano sullo stesso computer (il Raspberry Pi); pertanto, rechiamoci sul fondo del file e impostiamo il MODE in “standalone“.
MODE=standalone
Terminata la configurazione, salvare e uscire (ctrl+x, y, invio).
Riavviare ora il Raspberry Pi con:
sudo reboot
Verifica
A questo punto verifichiamo che i NUT dialoghino correttamente con l’UPS.
Per farlo avviamo il servizio:
sudo upsdrvctl start
L’output dovrebbe essere il seguente:
Network UPS Tools - UPS driver controller 2.7.4 Network UPS Tools - Megatec/Q1 protocol USB driver 0.12 (2.7.4) Duplicate driver instance detected! Terminating other driver!
Il messaggio “Duplicate driver instance detected! Terminating other driver!” è positivo: significa che la configurazione a monte era corretta e al riavvio precedente è stato avviata correttamente.
Eseguendo:
sudo service nut-server status
il servizio dovrebbe risultare active (running), e quindi correttamente configurato e in esecuzione.
Per verificare, infine, che l’UPS stia dialogando correttamente con i NUT, eseguire il comando:
upsc tecnoware
dove ovviamente “tecnoware” è il nome dell’UPS configurato in precedenza.
L’output dovrebbe riportare lo stato istantaneo dell’UPS:
Init SSL without certificate database battery.charge: 100 battery.voltage: 13.50 battery.voltage.high: 13.00 battery.voltage.low: 10.40 battery.voltage.nominal: 12.0 device.type: ups driver.name: blazer_usb driver.parameter.langid_fix: 0x409 driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.parameter.synchronous: no driver.version: 2.7.4 driver.version.internal: 0.12 input.current.nominal: 2.0 input.frequency: 50.1 input.frequency.nominal: 50 input.voltage: 243.5 input.voltage.fault: 243.5 input.voltage.nominal: 230 output.voltage: 243.5 ups.beeper.status: disabled ups.delay.shutdown: 30 ups.delay.start: 180 ups.load: 0 ups.productid: 5161 ups.status: OL ups.type: offline / line interactive ups.vendorid: 0665
In caso di errore, per esempio:
Init SSL without certificate database Error: Unknown UPS
o altro, sarà evidente come la configurazione effettuata in precedenza non sia corretta, e quindi vada sistemata in modo opportuno. L’UPS non sarà configurato correttamente finché all’esecuzione del comando upsc qui sopra non si ottenga l’output che riporta lo stato dell’UPS.
Non proseguire oltre in questa guida fino all’ottenimento di tale risultato.
Configurare il client
In ultimo dobbiamo configurare il client, utile per eseguire comandi destinati all’UPS nonché all’autenticazione di eventuali componenti d’integrazione verso gli HUB personali per domotica. Inoltre, tale cliente è utile al monitoraggio dell’UPS, che configuremo.
Innanzitutto è necessario definire delle credenziali d’accesso. Per farlo si modifica il file upsd.users:
sudo nano /etc/nut/upsd.users
impostare come segue:
[admin] password = mypasswd actions = SET instcmds = ALL [upsmon] password = mypasswd upsmon master
Ovviamente i campi “password” andranno personalizzati con password personali, quelle che si crede. Il campo “upsmon” viene impostato a master, in quanto il computer è in carico nel monitorare l’UPS.
Ora modifichiamo il file upsmon.conf:
sudo nano /etc/nut/upsmon.conf
Innanzitutto aggiuntiamo, in testa, questa stringa:
MONITOR tecnoware@localhost 1 upsmon mypasswd master
la quale indica quale UPS sia da monitorare. Il nome “tecnoware” ovviamente andrà adeguato col nome dell’UPS configurato in precedenza, così come la password “mypasswrd“, da correggere in base alla propria.
Scendere poi in basso fino a trovare il blocco “# NOTIFYFLAG” e configurare come segue:
NOTIFYFLAG ONLINE SYSLOG+WALL NOTIFYFLAG ONBATT SYSLOG+WALL NOTIFYFLAG LOWBATT SYSLOG+WALL # NOTIFYFLAG FSD SYSLOG+WALL # NOTIFYFLAG COMMOK SYSLOG+WALL # NOTIFYFLAG COMMBAD SYSLOG+WALL # NOTIFYFLAG SHUTDOWN SYSLOG+WALL NOTIFYFLAG REPLBATT SYSLOG+WALL # NOTIFYFLAG NOCOMM SYSLOG+WALL # NOTIFYFLAG NOPARENT SYSLOG+WALL
configurazione che farà sì che il sistema venga allertato in caso di cambi di alimentazione, di bassa batteria e di batteria da sostituire.
Terminata la configurazione, salvare e uscire (ctrl+x, y, invio).
A questo punto concludiamo sistemando i permessi:
sudo chown nut:nut /etc/nut/* sudo chmod 640 /etc/nut/upsd.users /etc/nut/upsmon.conf
Infine, riavviamo:
sudo reboot
Verifica finale
Verifichiamo ora che Raspberry Pi OS si accorga, banalmente, che la corrente sia venuta a mancare. Basterà staccare la spina all’UPS per ottenere, dopo pochi istanti, il seguente messaggio sulla riga di comando:
Broadcast message from nut@raspberrypi (somewhere) (Sun Jan 1 00:00:00 1980): UPS tecnoware@localhost on battery
il che confermerà che l’UPS è sotto monitoraggio da parte del Raspberry Pi.
Esecuzione comandi
Se (e non è detto che sia così) oltre al monitoraggio, l’UPS supporta anche la ricezione di comandi, è possibile visualizzarne l’elenco tramite il comando:
sudo upscmd -l tecnoware
ovviamente adeguando il nome dell’UPS interrogato (nell’esempio, “tecnoware“).
Nel caso del Tecnoware 1100, i comandi elencati sono:
Instant commands supported on UPS [tecnoware]: beeper.toggle - Toggle the UPS beeper load.off - Turn off the load immediately load.on - Turn on the load immediately shutdown.return - Turn off the load and return when power is back shutdown.stayoff - Turn off the load and remain off shutdown.stop - Stop a shutdown in progress test.battery.start - Start a battery test test.battery.start.deep - Start a deep battery test test.battery.start.quick - Start a quick battery test test.battery.stop - Stop the battery test
I comandi sono abbastanza auto-esplicativi.
Ipotizziamo di voler attivare/disattivare il cicalino che suona, automaticamente, in assenza di alimentazione. Il comando avrà questa sintassi:
sudo upscmd tecnoware beeper.toggle
verranno richiesti username e password: il primo sarà admin, la password quella impostata in precedenza.
Integrazioni
Una volta realizzata la propria installazione e configurazione di Network UPS Tools, tali funzioni possono essere utilizzate, come illustrato, tramite riga di comando oppure tramite integrazione con la propria domotica personale basata su HUB personali, e altro.
In caso si la propria domotica personale sia basata su Home Assistant, la guida per integrare un’installazione NUT (e quindi gli UPS tramite essa gestiti) è questa qui.
Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa. |