Jugando con un SAI (Powerware 5115) desde OpenBSD (1/2)
Introducción
Tengo un SAI Powerware 5115 funcionando desde hace algún tiempo. Y el caso es que según venia, que venia de estar funcionando durante meses o años en otro lugar, así se quedo. No tenia el software original ni supe dar con el soporte adecuado. No lo configure, simplemente probe que funcionaba y estaba siendo utilizado hasta hoy, como SAI (Sistema de Alimentación Ininterrumpida), si nos ceñimos al significado del acrónimo. Pero un SAI puede (¡y debe!) hacer mucho más que la función de generador alternativo de energía, en caso de interrupción del suministro eléctrico.
Una vez configurado, se utiliza para que envie una señal de aviso a la máquina que esta conectado, para que cierre el sistema antes de que el SAI se apague. De esta forma, no solo podemos estar tranquilos un rato, cuando se va la luz, sino que podemos estar, completamente tranquilos.
La máquina conectada al SAI utiliza un servidor de red, al que se pueden conectar otras máquinas de la red que estén utilizando el mismo SAI, y asi, es enviada la señal a todas ellas, antes de que se agote la batería. En este primer post, solo voy a tratar el asunto, hasta el punto anterior, es decir, únicamente voy a explicar como hacer para que el Powerware 5115 sea reconocido por una máquina (i386) con OpenBSD, y así poder observar la información que puede proporcionarme el SAI.
El otro día un colega, fue el “culpable” de que me entre la curiosidad absoluta de probar, porque el se compró un SAI, y lo tiene funcionando con NUT desde linux. Eso me ha echo pensar dos cosas, la primera, la envidia puede a la pereza. Lo que no había echo en meses, decido hacerlo hoy “solo” porque un colega lo habia echo. Y la segunda, ¿donde esta el cable RS-232 que yo tenia por aquí?
Preparación
Antes de buscar el cable, he leido Gestionando un SAI desde OpenBSD con NUT de jjm. Despues he leido la documentación de las NUT. Viendo que no tenia soporte concreto para mi SAI, he intentado conectarle con el driver del modelo soportado mas cercano (en numeración, el 5519), que no tiene por que ser igual por dentro, pero por probar a ver que me dice. No me decía nada, como era lógico esperar.
Llegado este punto, he ido a ver que me podia contar el primo Google, y en las listas de correo de NetBSD, he encontrado un mensaje relevante a este asunto. Según leo, el Powerware 5115 tiene soporte en las NUT, en la versión de desarrollo. Y utiliza un driver diferente del que yo estaba utilizando (eso es una buena noticia), es el driver BCMXCP. Las primeras pruebas que hice antes, la hice desde una OpenBSD 3.7-STABLE con el paquete de nut-2.0.0 para 3.7. Ahora voy a utilizar una más antigua, una 3.6-STABLE y las NUT versión 2.0.2 compiladas “a mano”.
Compilación de las Network UPS Tools
$ ftp http://www.networkupstools.org/source/2.0/nut-2.0.2.tar.gz
$ tar zxvf nut-2.0.2.tar.gz
El directorio creado al descomprimir, contiene 7 archivos de texto con toda la información que puedes necesitar a la hora de compilar y utilizar las herramientas. Debes leer por ti mismo la documentación antes de hacer nada, siempre se debe leer la documentación oficial antes, y recurrir a información de terceros (como este post :) en ultimo lugar. Ahora, como dice claramente el INSTALL voy a crear un usuario para la gestión del SAI, y proceder a compilar las herramientas, con ese usuario hardcoded. Le doy login class como daemon y le asigno shell nologin. En un alarde de originalidad, le he llamado ‘sai‘.
$ sudo adduser
$ ./configure --with-user=sai
$ make
Me ha compilado sin ningún problema, asi que voy a instalarlo.
$ sudo make install
$ sudo make install-conf
Ahora falta crear el directorio de estado (para los drivers y el servidor que se usa para guardar los datos del estado del SAI y otros archivos auxiliares) y darle los permisos adecuados, para que el propietario sea el usuario que he creado antes.
$ sudo mkdir -p /var/state/ups
$ sudo chmod 0700 /var/state/ups/
$ sudo chown sai:sai /var/state/ups/
Ahora necesito darle permisos al usuario, para que pueda acceder al puerto serie. Que por defecto son:
crw------- 1 root wheel 8, 0 Mar 11 01:06 /dev/tty00
Entonces:
$ sudo chmod 600 /dev/tty00
$ sudo chown sai:sai /dev/tty00
Y aquí termina la instalación de las NUT. Ahora toca la configuración.
Configuración del driver para el Powerware 5115
Hay que crear una sección por SAI en el ups.conf. Como en mi caso solo tengo uno, y ya se que driver utiliza, no necesito mirar ni en data/driver.list ni en el README, que es donde aparece el listado de drivers y para que hardware es cada uno. Me queda un ups.conf tal que así:
[sindios]
driver = bcmxcp
port = /dev/tty00
desc = “jesucristo vas de listo, y mahoma, que me la coma.”
Comprobación de la configuración del driver
Ahora, toca probar si todo arranca limpiamente, sin escupirme errores:
$ sudo /usr/local/ups/bin/upsdrvctl -u sai start
Network UPS Tools - UPS driver controller 2.0.2
Network UPS Tools - BCMXCP UPS driver 0.08 (2.0.2)
Unable to open /dev/tty00: Device busy
Current user id: sai (1000)
Serial port owner: sai (1000)
Serial port group: sai (1000)
Mode of port: 0600
Things to try:
- Use another port (with the right permissions)
- Fix the port owner/group or permissions on this port
- Run this driver as another user (upsdrvctl -u or 'user=...' in ups.conf).
See upsdrvctl(8) and ups.conf(5).
Fatal error: unusable configuration
Driver failed to start (exit status=1)
¿ Que ocurre ? Facil:
$ fstat |grep tty00
root getty 13194 0 / 1546 crw------- rw tty00
root getty 13194 1 / 1546 crw------- rw tty00
root getty 13194 2 / 1546 crw------- rw tty00
Configuración del puerto serie (En caso de estar siendo utilizado por getty)
Se me olvidó, que tengo el getty configurado en el serie, para poder loggear a esta máquina en local y sin monitor, en caso de problemas de conectividad. Cambiaria ahora mismo el cable si pudiera, a otra máquina de la misma red, que tiene dos puertos serie, pero lamentablemente, no puedo. Me toca desactivar el serie de ‘/etc/ttys‘:
$ sudo vi /etc/ttys
Cambio la linea:
tty00 "/usr/libexec/getty std.9600" vt100 on
por:
tty00 "/usr/libexec/getty std.9600" unknown off
Y como pone en init(8), el estado de la linea (on, off, secure, getty o información de la ventana) puede cambiarse en el archivo ttys y no hace falta reiniciar para que el cambio sea efectuado, se le puede enviar una señal SIGHUP con la orden ‘kill -s HUP 1‘. Al recibir la señal, init vuelve a leer la configuración en ttys.
$ sudo kill -s HUP 1
Confirmación de la configuración del driver
Y ahora, puedo continuar y probar si arranca sin quejarse:
$ sudo /usr/local/ups/bin/upsdrvctl -u sai start
Network UPS Tools - UPS driver controller 2.0.2
Network UPS Tools - BCMXCP UPS driver 0.08 (2.0.2)
Modell = PW5115 750i 750VA
Firmware = 01.04
Shutdown delay = 120 seconds
Me ha detectado correctamente el modelo: PW5515 750i. Premio para el caballero :) Ahora tengo que configurar el upsd, el encargado de servir los datos a los clientes a traves de la red, arrancarlo, y probar que me envia toda la información acerca del SAI.
Configuración del upsd
Por defecto upsd escucha en localhost, y deniega la conexión a cualquier cliente que conecte desde otro lugar. También tengo que crear el uspd.users si pienso darle acceso a clientes fuera de localhost, que si pienso hacerlo, puesto que aunque solo es un SAI, están conectados a el los dos servidores y el firewall de mí red. Pero por el momento, se puede dejar vacio, puede ser un archivo vacio, que luego rellenaré. Crearlo, hay que crearlo, aunque esté vacio.
$ sudo touch upsd.users && sudo touch upsd.conf && sudo chown root:sai upsd.conf upsd.users && sudo chmod 0640 upsd.conf upsd.users
Como se puede ver, también aprovecho y le dejo los permisos, como debiéran ser, segun la documentación. Y creo el upsd.conf (el que puede permanecer, de momento vacio, es el upsd.users) con la configuración por defecto:
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACCEPT localhost
REJECT all
Iniciando el servidor de red
Ahora me toca asegurarme, de que el servidor de red (upsd) es capaz de conectar con el driver del SAI:
$ sudo /usr/local/ups/sbin/upsd
Network UPS Tools upsd 2.0.2
Connected to UPS [sindios]: bcmxcp-tty00
Synchronizing…done
Perfecto, ahora debo asegurarme de que el SAI esta ofreciendome la información de estado correcta:
$ /usr/local/ups/bin/upsc sindios@localhost ups.status
OL
Esa única linea,OL, es lo que necesitaba ver, significa que esta funcionando On Line, significa que está conectado a la red eléctrica. Si respondiera OB o LB, significaria que esta On Battery o con Low Baterry, y seguramente sea que el driver está mal configuradoAhora, voy a ver toda la información que me puede mostrar el SAI, dependiendo del driver, podria ser más o menos, en este caso concreto, esta es la información que gracias a NUT puedo ver, de un Powerware 5515 (750i) :
$ /usr/local/ups/bin/upsc sindios@localhost
ambient.temperature: 42
battery.charge: 86
battery.runtime: 1693
battery.voltage: 25.66
driver.name: bcmxcp
driver.parameter.port: /dev/tty00
driver.version: 2.0.2
driver.version.internal: 0.08
input.frequency: 50.00
input.voltage: 225
output.current: 0.86
output.frequency: 50.00
output.voltage: 225
ups.firmware: 01.04
ups.load: 24.4
ups.model: PW5115 750i 750VA
ups.power.nominal: 750
ups.serial: XXXXXXXXXX
ups.status: OL
ups.voltage.nominal: 220
Ya puedo ver la información del SAI, hace tiempo no estaba soportado por las NUT y no sabia ni exactamente cuantos VA tenia (no puedo rotar el SAI con facilidad sin que se apague todo :) Falta por ver como configurar las máquinas para que se apaguen correctamente, cuando el SAI se esté quedando sin batería. Pero eso lo dejo para el siguiente post.
Saludos.
14 de Marzo de 2006 a las 17:36
Interesante. Tendré que ponerme a ello.
15 de Julio de 2008 a las 22:31
[...] los que siguen este blog, les sonará el capítulo 1 de como jugar con un SAI desde OpenBSD, tomense este post, en frio, muy ligerito, que consta unicamente de un screenshot del KNutClient, [...]