Network UPS Tools (NUT) es un completo programa para sistemas operativos basados en Unix y Linux para administrar y gestionar correctamente un Sistema de Alimentación Ininterrumpido (SAI). La mayoría de fabricantes incorporan un software capaz de monitorizar el estado del SAI y enviar avisos por email, también permite ejecutar el sistema como “maestro” de tal forma que otros ordenadores se conecten a él como “esclavos” para leer el estado del SAI. Tanto los equipos maestros como los esclavos, al leer el estado del SAI se pueden configurar para que se apaguen de forma automática si hay un corte de luz.

En este manual se pretende configurar desde cero el programa NUT en una Raspberry Pi con sistema operativo Raspbian. El punto fuerte de utilizar este sistema en lugar de un ordenador es el bajo consumo de energía y permite una gran configurabilidad como por ejemplo avisos por email. NUT también permite que ordenadores “esclavos” se conecten para leer el estado del mismo.

nut_ups

Instalación

Lo primero que tenemos que hacer es instalar el programa:

sudo apt-get install nut

Editar archivos de configuración

Una vez que se ha instalado, nos tenemos que ir al directorio /etc/nut/ donde se encuentran todos los archivos .conf para proceder con su configuración.

Nosotros hemos probado esta configuración con un SAI Salicru SPS SOHO+ 1400VA. A continuación os vamos a poner el contenido de nuestros archivos para que la Raspberry actúe como maestro y envíe notificaciones por email en caso de problemas. Tan sólo debemos editarlos en modo superusuario (root) con nuestro editor de archivos favorito (vi, vim, nano o cualquier otro).

Archivo nut.conf

MODE=standalone

Archivo ups.conf

 [salicru]
 	driver = blazer_usb
	port = auto
	desc = "SAI Salicru" 

Archivo upsd.conf

MAXAGE 15
MAXCONN 1024
LISTEN 127.0.0.1 3493
LISTEN ::1 3493

Archivo upsmon.conf

MONITOR salicru@localhost 1 nonmaster contraseña master

MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /bin/upssched-cmd
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

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 5

Archivo upsd.users

[nonmaster]
        password = contraseña
        actions = set
        instcmds = ALL
        upsmon master

Archivo upssched.conf

CMDSCRIPT /bin/upssched-cmd
PIPEFN /var/run/nut/upssched/upssched.pipe
LOCKFN /var/run/nut/upssched/upssched.lock

AT COMMOK * EXECUTE notify
AT COMMBAD * EXECUTE notify
AT REPLBATT * EXECUTE notify
AT NOCOMM * EXECUTE notify
AT FSD * EXECUTE forced-shutdown
AT NOPARENT * EXECUTE notify
AT SHUTDOWN * EXECUTE notify
AT ONLINE * CANCEL-TIMER shutdown
AT ONLINE * EXECUTE resume
AT ONBATT * START-TIMER shutdown 60000
AT ONBATT * EXECUTE shutdown-warning
AT LOWBATT * START-TIMER shutdown
AT LOWBATT * EXECUTE shutdown-warning

Hasta aquí llegaría la configuración de los archivos fundamentales para que el sistema operativo reconozca el SAI correctamente y comience a funcionar. Sin embargo, hay un archivo extra ubicado llamado upssched-cmd ubicado en /bin/ que se encarga de realizar las acciones configuradas en los anteriores archivos, como por ejemplo ejecutar el apagado del servidor en caso de que estemos bajos de batería o notificar en el syslog los diferentes eventos que están ocurriendo en el SAI.

La ruta de este archivo (que es fundamental para una buena configuración) está en /bin/upssched-cmd, procedemos a editarlo con nuestro editor de archivos favorito con el siguiente contenido:

Archivo upssched-cmd

#!/bin/sh

case "${NOTIFYTYPE}" in
ONLINE)
_notifymessage="UPS ${UPSNAME} - Equipo funcionando con la luz electrica";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
ONBATT)
_notifymessage="UPS ${UPSNAME} - Corte en el suministro electrico, el sistema funciona con bateria. CUIDADO";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
LOWBATT)
_notifymessage="UPS ${UPSNAME} - Bateria baja";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
FSD)
_notifymessage="UPS ${UPSNAME}: - Forzando el apagado del equipo";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMOK)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha establecido correctamente";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMBAD)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha PERDIDO, ERROR.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
SHUTDOWN)
_notifymessage="Finalizando sesion y apagando el equipo.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
REPLBATT)
_notifymessage="UPS ${UPSNAME} - The battery needs to be replaced!";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
NOCOMM)
_notifymessage="UPS ${UPSNAME} - El UPS no esta disponible";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
NOPARENT)
_notifymessage="No se puede apagar automaticamente el servidor, se necesita
intervencion del administrador.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
esac

case "${1}" in
shutdown-warning)

_message="${_notifymessage}.
Apagado inminente en ${_shutdowntimer} segundos.";;

shutdown)
_message="${_notifymessage}.
Se inicia el apagado del equipo.";
shutdown -p now ${_message};;

resume)
_message="${_notifymessage}.
Apagado cancelado.";;

forced-shutdown)
_message="${_notifymessage}.
Apagado forzado inminente en 100 minutos.";
shutdown -h 100;;

notify)
_message="${_notifymessage}";;

*)
_message="Unknown command: ${1}";
esac

# Write message to syslo
logger -t upssched-cmd "${_message}"

Comprobar funcionamiento y mirar logs

Después de realizar estas acciones, es recomendable reiniciar el sistema operativo para comprobar que todo funciona correctamente. Hay un comando muy útil para comprobar si los drivers y el sistema en Raspbian funcionan correctamente:

upsdrvctl start salicru

Todos los logs se guardan en syslog, por tanto podemos hacer un simple tail para obtener las últimas líneas de información del sistema para detectar problemas en el arranque u otros avisos:

tail /var/log/syslog

Como habéis podido observar en este último archivo de configuración, hemos utilizado el servidor SMTP que hemos instalado en Raspbian para enviar los avisos por email. Tenéis el manual completo de configuración aquí: Cómo enviar emails con Gmail por terminal en Raspbian.

Si usamos clientes de NUT en los ordenadores esclavos como por ejemplo WinNUT, podremos leer el estado del SAI y apagar los diferentes ordenadores. Esta configuración que os proponemos, la hemos probado y funciona correctamente, no obstante, es posible que tengáis algún tipo de problema por los drivers u otros motivos, os invitamos a ponernos un comentario si tenéis problemas e intentaremos echaros una mano.

Publicado por Sergio De Luz el 09 Febrero 2014

  • Jordi

    Hola!

    Muy interesante, gracias por compartirlo. Acabo de comprar un SALICRU SPS ONE 900VA y me gustaría saber si el proceso será también compatible con este SAI…

    Muchas gracias!

    Jordi

    • Pues todo depende del driver que se use, aunque apostaría que sí es compatible también con ese SAI (blazer_usb).

      Saludos 😉

  • Jose

    Hola

    Consigo la comunicacion con el sai pero si lo desconecto de la red electrica no me manda un correo .tengo configurado el ssmtp

    podriais explicar un poco mas NOTIFYCMD y upssched-cmd al que hace referencia?
    Mi objetivo final es que me informe cuando se va la luz

    • En lugar de poner en el archivo upssched-cmd

      mail -S ….

      Pon esto:

      ssmtp -s “Asunto del mensaje” email@destino.com

      Y ya se enviaría bien, mira en los logs para ver qué está ocurriendo 🙂 Ponme aquí los logs por si veo algo.

      El objetivo de este manual es justamente eso, hacer una sonda para saber cuándo se va la luz 😀

      • Jose

        Si eso ya lo había corregido.
        El verdadero problema es que estaba testeando con otro sai que tenia por casa mientras venia el mencionado aquí.Que ya lo había comprado por otros motivos y estaba decidiendo cual destinaba al propósito de saber si se iba la luz..Y resulta que el otro que tenia me estaba dado problemas de compatibilidad con los comandos y por eso no me mandaba el correo correspondiente al evento sino que me mandaba que perdía la conexión constantemente.

  • auli

    Porfin! pude configurar nut con un Tripp Lite SMART1000LCD

  • Pingback: Tres razones para tener un SAI en nuestro hogar y guía para comprar uno()

Últimos análisis

Valoración RZ
10
Valoración RZ
7
Valoración RZ
9
Valoración RZ
10
Valoración RZ
8
Valoración RZ
10
Valoración RZ
9
Valoración RZ
9
Valoración RZ
10