Ho deciso di usare NUT per gestire un UPS.
Di seguito la procedura che ho usato.
Ho innanzitutto collegato il cavo usb, e tramite il comando
lsusb
ho già trovato l'UPS
Bus 003 Device 003: ID 0665:5161 Cypress Semiconductor USB to Serial
Ovviamente le informazioni riguardanti Bus e Device potrebbero essere diverse dalla mia configurazione, il resto dovrebbe essere uguale.
A questo punto installiamo NUT con il solito comando
sudo apt install nut
Ora, i file che ci interessano si dovrebbero trovare sotto /etc/nut/ e dovremmo controllare permessi e proprietari, dovrebbero risultare come i miei qui sotto:
-rw-r----- 1 root nut 1544 mag 29 01:57 nut.conf
-rw-r----- 1 root nut 4723 mag 28 20:06 ups.conf
-rw-r----- 1 root nut 4572 mag 28 20:08 upsd.conf
-rw-r----- 1 root nut 2246 mag 28 20:10 upsd.users
-rw-r----- 1 root nut 15310 giu 6 11:55 upsmon.conf
-rw-r----- 1 root nut 3887 dic 30 11:04 upssched.conf
quindi permessi 640, proprietario root e gruppo nut.
Ora configuriamo il file /etc/nut/nut.conf inserendo la riga
MODE=standalone
poi tocca al file /etc/nut/ups.conf ed inserire le seguenti righe
[atlantis]
driver = blazer_usb
subdriver = cypress
protocol = mustek
vendorid = 0665
productid = 5161
port = auto
desc = "AtlantisLand Host Power 851"
Ovviamente [atlantis] è ciò che ho scritto io, ma si può inserire qualsiasi riferimento, questo non sarà altro che il nome che prenderà l'UPS monitorato;
mentre l'ultima riga, 'desc' riporta la descrizione che apparirà in diversi comandi al momento dell'interrogazione, anche qui si può inserire una descrizione a piacere.
Ora configuriamo il file /etc/nut/upsd.conf verificando che siano decommentate (cioè senza il cancelletto # iniziale) le seguenti righe, in caso contrario decommentarle
MAXAGE 15
LISTEN 127.0.0.1 3493
MAXCONN 1024
Configurare il file /etc/nut/upsd.users inserendo le seguenti righe
[admin]
password = password-admin
actions = SET
instcmds = ALL
[nome-utente]
password = password-utente
allowfrom = localhost
upsmon master
creando così gli utenti che potranno interagire con il server NUT, ovviamente bisognerà personalizzare le 2 password, inserendo quella dell'utente admin e quella di nome-utente, e cambiare appunto anche "nome-utente" con l'utente che si vuole abilitare.
QUI la pagina ufficiale che spiega un po' questo file.
Ora configuriamo cosa monitorare e come, configuriamo il file /etc/nut/upsmon.conf e verifichiamo che siano decommentate un po' di righe:
RUN_AS_USER nut
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /etc/nut/UPS-Notify.sh
POLLFREQ 15
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE "UPS %s Ripristino AC"
NOTIFYMSG ONBATT "UPS %s AC Persa - Alim. BATTERIA"
NOTIFYMSG LOWBATT "UPS %s Carica Batteria Bassa"
NOTIFYMSG FSD "UPS %s: Chiusura Forzata in corso..."
NOTIFYMSG COMMOK "Comunicazione Stabilita con UPS %s"
NOTIFYMSG COMMBAD "Comunicazione Persa con UPS %s"
NOTIFYMSG SHUTDOWN "Logout e Spegnimento Automatico in corso..."
NOTIFYMSG REPLBATT "UPS %s - Sostituire la Batteria"
NOTIFYMSG NOCOMM "UPS %s non è Disponibile"
NOTIFYMSG NOPARENT "Processo UPSMON Terminato - Impossibile Spegnere"
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 60
MONITOR atlantis@localhost 1 nome-utente password-utente master
QUI un po' di spiegazioni.
Ovviamente le righe sopra riportate sono quelle del mio file di configurazione, ma potranno essere modificate, di sicuro lo dovrà essere l'ultima, dove al posto di nome-utente e password-utente dovranno essere usate quelle impostate prima nel file upsd.users.
La direttiva SHUTDOWNCMD nel mio caso spegne il PC, altrimenti può essere sostituita con
SHUTDOWNCMD "/usr/sbin/pm-hibernate"
oppure
SHUTDOWNCMD "/usr/sbin/pm-suspend"
o altre, insomma non è altro che il comando che verrà eseguito come spegnimento, si può anche associare uno script creato da noi stessi.
La direttiva NOTIFYCMD invece identifica lo script da lanciare quando succede qualcosa, con "qualcosa" si intende un evento NOTIFYMSG, quindi ad esempio quando viene a mancare tensione, la carica della batteria è bassa ecc.
Come si può notare io ho impostato l'avviso per ogni evento, ma è possibile commentare tutto o solo quello che non interessa.
Il mio file UPS-Notify.sh contiene queste righe:
#!/bin/bash
echo "$@" | mail -s "NUT - UPS Atlantis"
ossia mi manda una e-mail ad ogni evento che io ho selezionato con NOTIFYMSG appunto, ovviamente
Una riavviata e, se tutto è andato per il verso giusto, dovrebbe funzionare.
Ed ora un po' di manovre da terminale:
Per controllare tutti i parametri attuali:
upsc atlantis
oppure, se siamo su una macchina in rete
upsc atlantis@server
dove server non è altro che il nome o l'IP del PC dove gira NUT, localhost per il PC locale, che può essere omesso come indica il comando precedente.
Per richiedere lo stato di un parametro in particolare:
upsc atlantis ups.status
Per visualizzare una lista di comandi accettati per controllare l'UPS:
upscmd -l atlantis@localhost
otterremo un risultato del genere:
Instant commands supported on UPS [atlantis]:
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
per inviare un comando all'unità
upscmd -u admin -p password-utente-admin atlantis test.battery.start.quick
dove admin e password-utente-admin sono quelle dichiarate nel file citato prima /etc/nut/upsd.users
Ovviamente a questo punto si possono creare script e/o pagine web per svariate esigenze.