Installazione Server NUT per gestire un UPS

Ho deciso di usare NUT per gestire un UPS.
Di seguito la procedura che ho usato, provata su Kubuntu 14.04.

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-get 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" Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

ossia mi manda una e-mail ad ogni evento che io ho selezionato con NOTIFYMSG appunto, ovviamente Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.  sarà l'indirizzo e-mail a cui inviare le notifiche.

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.