Controla un SAI con tu Raspberry PI (Network UPS Tools)

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.

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                

                 sudo nano nut.conf

Añadimos:

                 MODE=standalone

 

 

Archivo ups.conf

                 sudo nano ups.conf

Añadimos:

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

 

Archivo upsd.conf

              sudo nano upsd.conf

Añadimos:

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

 

Archivo upsmon.conf

          sudo nano upsmon.conf

Añadimos:

         
          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

          sudo nano upsd.users

Añadimos:

         [nonmaster]

         password = contraseña

         actions = set 
         instcmds = ALL
         upsmon master

 

Archivo upssched.conf

          sudo nano upssched.conf

Añadimos:


          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

          sudo nano upssched-cmd

Añadimos:

          #!/bin/sh 
           case "${NOTIFYTYPE}" in 
          ONLINE) 
          _notifymessage="UPS ${UPSNAME} - Equipo funcionando con la luz electrica"; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          ONBATT) 
          _notifymessage="UPS ${UPSNAME} - Corte en el suministro electrico, el sistema funciona con bateria. CUIDADO"; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          LOWBATT) 
          _notifymessage="UPS ${UPSNAME} - Bateria baja"; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          FSD) 
          _notifymessage="UPS ${UPSNAME}: - Forzando el apagado del equipo"; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          COMMOK) 
          _notifymessage="La comunicacion con el UPS ${UPSNAME} se ha establecido correctamente"; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          COMMBAD) 
          _notifymessage="La comunicacion con el UPS ${UPSNAME} se ha PERDIDO, ERROR."; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.
          upsdrvctl start salicru;; 
          SHUTDOWN) 
          _notifymessage="Finalizando sesion y apagando el equipo."; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          REPLBATT) 
          _notifymessage="UPS ${UPSNAME} - The battery needs to be replaced!"; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          NOCOMM) 
          _notifymessage="UPS ${UPSNAME} - El UPS no esta disponible"; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.
          upsdrvctl start salicru;; 
          NOPARENT) 
          _notifymessage="No se puede apagar automaticamente el servidor, se necesita 
          intervencion del administrador."; 
          echo ${_notifymessage} | mail -s "SAI" This email address is being protected from spambots. You need JavaScript enabled to view it.;; 
          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:

 Añadimos:

           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.

Para ver como se configura, picha aquí...

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.

 

Related Articles

Este espacio lo he creado pensando en los entusiastas como tú, para compartir y centralizar documentación sobre temas que me apasionan: Arduino, impresoras 3D, Raspberry Pi, y mucho más.

Además, he querido fusionarlo con mi canal de YouTube, donde exploramos retro-informática, Raspberry Pi, consolas retro, electrónica y otras maravillas del mundo tecnológico. Este es tu sitio si disfrutas aprendiendo, creando y reviviendo lo mejor de la tecnología de ayer y hoy.

¡Bienvenido!