SAI MGE Ellipse Premium y Linux

MGE Ellipse Premium

Ya para nota me propuse tras actualizar mi equipo sobremesa, para darle un poco más de emoción, a la versión de desarrollo de Ubuntu, Edgy Eft, configurar el SAI que tengo en ese equipo, dejando al otro PC como cliente. El SAI es un Ellipse Premium 800 de MGE. MGE ofrece varias opciones para controlar desde Linux el SAI. Te puedes instalar su paquete personal, orientado a escenarios con un sólo PC conectado al SAI o bien puedes ponerte a jugar con las herramientas de Linux para controlar SAIs -o UPS en versión inglesa- en red, NUT. El pack personal usa por debajo NUT, configurándolo cada vez que se ejecuta el cliente de configuración del SAI. En cualquier caso, la gente de MGE proporciona los binarios y fuentes para compilar las herramientas necesarias en tu Linux desde su sitio dedicado al código abierto.

Si lo que queremos es que cuando falle la alimentación externa, todos los equipos se apaguen de forma ordenada tras un cierto tiempo, la mejor opción es usar directamente NUT. En el ordenador maestro al que está conectado el SAI se colocará un monitor de NUT en modo maestro, mientras que en el cliente se configurará el monitor de NUT en modo esclavo. La idea es que cada monitor, en caso de que el SAI informe de pérdida de alimentación externa, apague el equipo que controla. En el caso del esclavo cuando la batería baje del mínimo de seguridad -35% por defecto- o bien pase un tiempo -2 minutos según se configurará más adelante. En el caso del maestro, esperará a que no quede conectado ningún monitor esclavo y esperará hasta que las baterías del SAI bajen por debajo del límite de seguridad. En ese momento, el equipo se apagará iniciando el procedimiento de apagado del sistema. Además, el script de apagado verificará si el monitor del SAI es quien ha iniciado el apagado. De ser así, se le mandará al SAI la orden de apagado completo hasta que se recupere la corriente externa. Así, el SAI esperará unos segundos, tiempo suficiente para que el maestro se apague completamente y luego desconectará la carga, quedando todo apagado.

Dicho esto, los ingredientes para que todo esto funcione son:

  • SAI conectado por USB al equipo
  • Herramientas de NUT
  • Cliente gráfico opcional para comprobar de forma fácil el estado del SAI

Instalación de NUT

NUT se instala sin problemas con el gestor de paquetes apt. Si ejecutamos

sudo apt-get install nut nut-usb

tendremos instalado todo lo necesario para ejecutar las herramientas de NUT. El paquete nut-usb contiene los drivers para controlar el SAI de MGE conectado vía puerto USB. Concretamente usaremos el driver newhidups. La instalación no crea los archivos de configuración necesarios pero sí que crea el grupo de usuarios nut y el usuario no privilegiado nut, con el que se va a ejecutar el monitor y el controlador del SAI.

Configuración del puerto USB

Un problema que va a tener el driver al conectarse al SAI es que va a realizar operaciones sobre el puerto USB del SAI que precisan de permisos de escritura. Al usar Ubuntu Edgy Eft el sistema udev para gestionar los dispositivos, para darle permisos a NUT al puerto que utilice el SAI bastará con añadir la regla adecuada en la configuración de udev.

Con el SAI conectado al PC, si hacemos un “lsusb” deberíamos obtener algo como:

theefrit@teroknor:~$ lsusb
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS
Bus 001 Device 001: ID 0000:0000

En la segunda línea tenemos el SAI. Ahora lo que hace falta es añadir la regla a udev. Vamos a indicarle a udev que todo dispositivo USB que pertenezca al fabricante MGE, identificado por el código hexadecimal 0463, pase a pertenecer al grupo nut. Esta regla de acuerdo con la sintaxis de udev será algo como:

SYSFS{idVendor}=="0463", SYSFS{idProduct}=="ffff", MODE="664", GROUP="nut"

La podemos colocar en un fichero de reglas en el directorio /etc/udev/rules.d/. Siguiendo las indicaciones de esta guía, opté por el fichero /etc/udev/rules.d/60-local.rules, que tiene el siguiente aspecto:

theefrit@teroknor:~$ cat /etc/udev/rules.d/60-local.rules
# MGE UPS SYSTEMS - usbhid-ups
BUS=="usb", SYSFS{idVendor}=="0463", SYSFS{idProduct}=="ffff", ACTION=="add", GROUP="nut", MODE="0660", SYMLINK ="ups"

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0463", SYSFS{idProduct}=="ffff", ACTION=="add", GROUP="nut", MODE="0660", SYMLINK ="ups"

Está añadida la opción SYMLINK+=”ups” para que cree un enlace simbólico en /dev/ al SAI y sea más fácil localizarlo por si interesara en un futuro. Una vez añadida la regla, podemos desconectar el SAI del PC, reiniciar udev con

sudo /etc/init.d/udev restart

o bien forzarle que coja los cambios:

sudo udevtrigger

y volver a conectar el SAI. Ahora ya pertenecerá al grupo correcto y podremos lanzar nut sin errores.
Para más información sobre las reglas de udev, se puede consultar esta estupenda guía.

Configuración de NUT

Los ficheros de configuración de NUT se deben ubicar en /etc/nut. Son los siguientes:

  • ups.conf, contiene los descriptores de los SAIs que están conectados al PC.
  • upsd.conf, fija los permisos de acceso al servicio del ups
  • upsd.users, establece los usuarios, contraseñas y permisos.
  • upsmon.conf, configura al servicio de monitorización del SAI, cómo se avisa a los usuarios, las acciones que se toman por defecto.
  • upssched.conf, ejecuta acciones determinadas cuando se produce un evento determinado en el sistema de monitorización.

Si empezamos por el primero, ups.conf, aquí tendremos que añadir una entrada para nuestro SAI de MGE. De acuerdo con la guía de configuración del SAI en sistemas basados en Debian disponible en el sitio de MGE, tendremos que escoger el driver newhidups. El puerto lo va a detectar automáticamente el controlador y se quedará fijado a auto. Con todo, tendremos un fichero parecido a lo siguiente:

[mge]
driver = newhidups
port = auto
desc = "MGE Ellipse Premium 800"

De esta forma identificamos el SAI con el nombre mge. El siguiente paso es fijar los permisos de acceso al demonio de control del SAI. Como nos interesa que se puedan conectar equipos de nuestra LAN que van a estar también pendientes del SAI, deberemos añadir como zonas permitidas la local y el ámbito de la LAN en la forma SUBRED/PREFIJO. El fichero upsd.conf contendrá lo siguiente:

ACL all 0.0.0.0/0
ACL lan SUBRED/PREFIJO
ACL localhost 127.0.0.1/32

ACCEPT localhost
ACCEPT lan
REJECT all

Donde SUBRED/PREFIJO puede ser algo del tipo 192.168.1.0/24 y deberá coincidir con nuestra LAN. Es turno ahora de configurar los usuarios que pueden conectarse al sistema. En el fichero upsd.users habrá que insertar dos entradas: una para el administrador y otras dos para los usuarios monitores de la LAN.

# Supervision user
[admin]
password = ADMIN_PASS
allowfrom = localhost
actions = SET
instcmds = ALL

# Protection user
[monuser]
password = MONITOR_PASS
allowfrom = localhost
upsmon master

[monslave]
password = MONITOR_SLAVE_PASS
allowfrom = lan
upsmon slave

Ahora hay que configurar por último al monitor que se ejecuta localmente en la máquina que controla al SAI. Este cliente va a ser el “master“. Hay que editar el fichero upsmon.conf:

MONITOR mge@localhost 1 monuser MONITOR_PASS master

Podemos añadir más parámetros al monitor para fijar los menajes y notificaciones de error o cómo se reacciona ante los eventos que se reciban del SAI. La ayuda de nut proporciona información detallada mediante el comando man upsmon.conf. Para una muestra de los archivos míos se pueden descargar más abajo. Si además queremos ejecutar acciones específicas como respuesta a eventos del SAI como pérdida de energía, hay que configurar un último fichero, upssched.conf y en el fichero upsmon.conf indicar que la aplicación de notificación es upssched. Estas opciones avanzadas las dejaremos para otro día.

NOTIFYCMD /sbin/upssched

Sólo resta indicar al script de arranque de NUT que se active tanto el monitor como el demonio de control del SAI. Esta operación se hace editando el fichero de propiedades de NUT ubicado en /etc/default/nut y poniendo a “yes” los siguientes valores:

# start upsd
START_UPSD=yes
# start upsmon
START_UPSMON=yes

El último paso, y una vez creados los ficheros de configuración, es establecer los permisos adecuadamente para evitar accesos malintencionados por un lado, y por otro, para que los monitores al ejecutarse como el usuario no privilegiado nut puedan acceder a la configuración:

sudo chown -R root:root /etc/nut
sudo chown nut /etc/nut/upsd.conf
sudo chown nut /etc/nut/upsd.users

Arranque y comprobación

Con todos los ficheros listos, el arranque de nut se hace mediante la orden

sudo /etc/init.d/nut start

Va a tardar un rato en arrancar el servicio, pues el controlador del SAI tarda unos quince segundos en obtener todos los parámetros del SAI. Durante ese tiempo es normal que aparezcan mensajes de error de pérdida de comunicación con el SAI difundidos a todos los terminales vía wall. Deberíamos ver algo así en el terminal:

theefrit@teroknor:~$ sudo /etc/init.d/nut start
Starting Network UPS Tools: upsd upsmon.

Mensaje de difusión general (broadcast) de nut@teroknor
(somewhere) at 0:21 ...

Se ha perdido la comunicación con el UPS mge@localhost.

Mensaje de difusión general (broadcast) de nut@teroknor
(somewhere) at 0:21 ...

El UPS mge@localhost no esta disponible. No se puede contactar con el para monitorizarlo.

Mensaje de difusión general (broadcast) de nut@teroknor
(somewhere) at 0:21 ...

Se ha establecido contacto con el UPS mge@localhost correctamente.

Para verificar el estado del SAI podemos usar un cliente de NUT que se conecte localmente mediante

theefrit@teroknor:~$ upsc mge@localhost
battery.charge: 100
battery.charge.low: 30
battery.runtime: 1715
driver.name: newhidups
driver.parameter.port: auto
driver.version: 2.0.4
driver.version.data: MGE HID 0.9
driver.version.internal: 0.28
input.transfer.high: 264.0
input.transfer.low: 161.0
outlet.0.desc: Main Outlet
outlet.0.id: 1
outlet.0.switchable: 0
outlet.1.autoswitch.charge.low: 0
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 0
outlet.1.switch: 1
outlet.1.switchable: 1
output.voltage: 230.0
ups.delay.shutdown: -1
ups.delay.start: -10
ups.load: 29
ups.mfr: MGE UPS SYSTEMS
ups.model: ellipse premium 800
ups.power.nominal: 800
ups.status: OL CHRG

Además se pueden ejecutar órdenes el SAI. La lista de comandos disponibles la podemos obtener mediante upscmd de la forma

theefrit@teroknor:~$ upscmd -l mge@localhost
Instant commands supported on UPS [mge@localhost]:

load.off - Turn off the load immediately
load.on - Turn on the load immediately

Finalmente, con el comando upsrw mge@localhost podremos ver todas las variables configurables en el SAI, como los retardos que esperará el SAI antes de apagarse o para volver a encenderse, útil si queremos programarlo.

Cliente gráfico

Buscando entre los clientes listados en la página de NUT encontré el ups-monitor para escritorios Linux. Se distribuye como rpm o bien como fuentes. En nuestro caso, lo mejor es compilar e instalar. Desde la página del proyecto, descargamos los fuentes a un directorio temporal, descomprimimos e instalamos las dependencias antes de construir:

sudo apt-get install python-gtk2-dev python-gnome2-dev libgnomeui-dev python-dev build-essential
./configure

Está pensado para sistemas basados en Red Hat un poco antiguos y hay un problema con el enlace simbólico que se crea. El fichero contenido en los fuentes llamado ups-monitor.desktop tiene en la entrada Categories varias. Hay que dejar únicamente la categoría “System.” Hecho este cambio, se puede compilar e instalar:

make
sudo make install

Ahora un pequeño truco para que se termine de ejecutar. Utiliza un icono en el área de notificación mediante una librería que debe ser cargada. Al instalarla, se coloca en /usr/share/ups-monitor/eggtrayiconmodule.so y el problema es que no la va a encontrar. Podemos pegarnos con opciones de configuración en el “./configure” o sencillamente enlazar este fichero al directorio de ejecución del script, que va a estar en /usr/local/bin mediante

sudo ln -s /usr/share/ups-monitor/eggtrayiconmodule.so /usr/local/bin

Desde el menú de Aplicaciones > Sistema podremos lanzar este pequeño monitor que nos informará del estado del SAI.

UPS Monitor para el escritorio de Linux

Monitorizando desde otros equipos

Para conectar más equipos en modo monitor esclavo, bastará con instalar el paquete NUT básico y configurar únicamente el fichero del monitor, es decir, /etc/nut/upsmon.conf con un nombre de usuario válido y en modo “esclavo” con algo como

MONITOR mge@localhost 1 monslave MONITOR_SLAVE_PASS slave

Si lo que queremos es que los equipos de la LAN que ejecuten un sistema operativo de Microsoft también reaccionen ante la pérdida de energía del SAI, disponemos de un port parcial de NUT a Windows. Lo único que han portado es el lado monitor, perfecto para nuestras necesidades.

Desde la página de clientes del proyecto de NUT podremos acceder a la página de WinNUT, la herramienta que usaremos en Windows. Se instala como servicio en los sistemas NT/2000/Xp/LoQueSea-NT y su configuración es idéntica a la del cliente para UNIX.

Win NUT, el port del monitor de nut para windows

Sólamente debemos acordarnos de cambiar en el fichero de configuración del monitor el comando de notificación, que por defecto tiene la ruta absoluta fijada a C:Programm FilesWinNUTalertPopup.exe y puede que no coincida con la ruta de nuestra instalación. También es bueno incrementar el tiempo de apagado en la opción “Use Timed Shutdown” para que nos de tiempo a cerrar todo lo que tengamos abierto de forma normal y evitar que se fuerce el cierre, perdiendo la información no guardada.

Recursos utilizados

9 thoughts on SAI MGE Ellipse Premium y Linux

  1. Hola, estoy usando el winnut en un server 2000 win, para monitorizar un sai Salicru antiguo…. lo conecto , el portatil con win 2000 server al SAI, mediante el puerto serie 232… el casi es que configure todo, y he seguido tb tu manual, pero al llegar a ejecutar el programa, da error de conexion, y al intentar ver datos , mediante un cliente , el PUtty, NO SE ACCEDE AL SAI.

    mmm tengo instalado el winnut, y nada mas, tengo k bajarme el NUT ? y cygwin, bajarme el pakete ese basico nut ?

    saludos, contestame aki, o al mail 🙂

  2. Hola m3n3chm0, mucho me temo que el port de NUT a Windows sólo soporta las funciones de monitorización de otra máquina con un NUT corriendo. Me explico, el SAI debe estar conectado a una máquina UNIX con un NUT corriendo y configurado como master. La máquina Windows con WinNUT se conecta a la máquina UNIX como cliente de monitorización y recibe los avisos del SAI, pero no se conecta el SAI a la máquina Windows.

    No sé si bajarse los fuentes del NUT e intentar compilarlo con cygwin sería la solución, pero mucho me temo que WinNUT no te vale tal como está ahora para monitorizar un SAI.

    En http://csociety.ecn.purdue.edu/~delpha/winnut/ puedes dar con más información.

    Un saludo

  3. OKS 🙂 gracias ahora estoy intentando instalar NUT en Red hat, y acerlo correr, sabes si vale para cualquier SAI ? est es un Silacru, esta descatalogado, pues es del año 1995, y es enorme, puesto que debe aguantar de muchas makinas unas 50 o 60 .

    Vale NUT para cualkier sai ?, voy a instalarlo y probar a ver si me sirve.

    saludos.

  4. Con Ubuntu Gutsy Gibbon 7.10 he encontrado problemas con los ajustes de los permisos y las reglas de udev. Buscando un poco por Google he dado con un par de ajustes para hacer que funcione correctamente.

    El primero es fácil, es cambiar la prioridad de las reglas locales y pasarlas al nivel 60 para que se ejecuten después del 025_nut-usbups.rules que trae el paquete nut-usb. El fichero ahora debería llamarse 60-local.rules

    La segunda ha consistido en mejorar el fichero en cuestión de reglas 60-local.rules, dejándolo en:


    # MGE UPS SYSTEMS - usbhid-ups
    BUS=="usb", SYSFS{idVendor}=="0463", SYSFS{idProduct}=="ffff", ACTION=="add", GROUP="nut", MODE="0660", SYMLINK ="ups"
    SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0463", SYSFS{idProduct}=="ffff", ACTION=="add", GROUP="nut", MODE="0660", SYMLINK ="ups"

  5. Tengo un problema con un SAI salicru advance.

    No puedo cargar el driver, a pesar de que si lo detecta cuando conecto el usb (lsusb).

    ¿Alguien tiene alguna experiencia con este error?

  6. Fantástico "cómo" que ha acelerado la puesta en marcha del nut con mi nuevo MGE Ellipse 750. Sólo un par de detalles a aportar para Ubuntu Hardy 8.04:

    * El paso de 60-local.rules no hace falta porque con el paquete nut 2.2 ya viene un 52_nut-usbups.rules bien configurado.

    * El driver actualizado para tu modelo (y también para el mío) ha cambiado y ahora es "usbhid-ups" (por USB). La lista completa se puede ver en http://eu1.networkupstools.org/compat/stable.html

    Un saludo y gracias por compartir 🙂

  7. Hola… estoy instalando sobre Centos 5.3 una UPS MGE Ellipse ASR 1000 por el puerto USB con el monitor NUT para Gnome.

    De momento he conseguido instalarlo todo… es la primera vez que me meto con linux, ;)… pero tengo un solo problema pendiente de resolver…

    Configuro en el monitor para que el SAI se apague a un determinado % de la batería, y lo hace sin problema… he configurado la BIOS de la placa para que el equipo arranque cuando le vuelva el suministro eléctrico… pero… no he conseguid oque el SAI se apague al poco tiempo de hacer un shutdown al equipo.

    He probado el shutdown configurandolo por defecto en el monitor (el de mgeops) y también con la otra opción manual… y en ambas se me apaga el equipo por orden del monitor, pero en ninguno de los casos se me apaga la UPS después…

    He probado a cambiar la variable interna de la UPS MGE que pone battery.charge.low=30 y la he puesto a 90, pues para las pruebas he puesto que el equipo se apague al 90% y 91% dela batería… pero nada… la dichosa UPS sigue encendida después de apagarse el equipo correctamente… y claro… al no apagarse y volver a encenderse tras restablecer la corriente de entrada… no consigo mi objetivo que es que el equipo (servidor web) se reinicie cuando regresa el suministro eléctrico.

    Si alguien me puede dar una pista se lo agradezco… muchas gracias por adelantado.

    Saludos.

Deja un comentario