Raspberry Pi como monitor de SAI / UPS

Raspberry Pi como monitor de SAI

Uno de los usos que podemos darle a nuestra Raspberry es precisamente este, convertirla en un monitor/avisador del estado de nuestro SAI /UPS.

Instalarlo es sencillo porque son muchos los programas de este tipo disponibles para Linux, aunque mi preferido, y el que voy a explicar en este tutorial es el de APC, que aunque diseñado por ese fabricante es compatible con la práctica totalidad de SAIs del mercado.

sai

En este tutorial explicare como instalarlo y configurarlo para que nos envíe un mensaje a través de Telegram cada vez que se interrumpa o reestablezca el suministro eléctrico.

Raspberry Pi como monitor de SAI

Raspberry Pi como monitor de SAI

Instalación del programa:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apcupsd

Configuración:

A continuación editaremos el fichero de configuración de apcupsd  para indicarle que tenemos un SAI / UPS standard  conectado al puerto USB de nuestra Raspberry:

sudo nano /etc/apcupsd/apcupsd.conf

Se abrirá el fichero de configuración, y haremos los siguientes cambios:

#UPSCABLE smart
 UPSCABLE usb

#UPSTYPE apcsmart
 UPSTYPE usb

#DEVICE /dev/ttyS0

Para finalizar guardando los cambios pulsaremos Ctrl + X, confirmando a continuación con S ó Y.

El paso siguiente es comprobar la conexión de nuestra Raspberry Pi con el SAI / UPS:

sudo apctest

Si la configuración y la conexión son correctas  mostrará algo similar a lo siguiente:

2017-01-22 12:20:20 apctest 3.14.12 (29 March 2014) debian
Checking configuration ...
sharenet.type = Network & ShareUPS Disabled
cable.type = USB Cable
mode.type = USB UPS Driver
Setting up the port ...
Doing prep_device() ...
You are using a USB cable type, so I'm entering USB test mode
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing USB UPSes.
Getting UPS capabilities...SUCCESS

Please select the function you want to perform.

1)  Test kill UPS power
2)  Perform self-test
3)  Read last self-test result
4)  View/Change battery date
5)  View manufacturing date
6)  View/Change alarm behavior
7)  View/Change sensitivity
8)  View/Change low transfer voltage
9)  View/Change high transfer voltage
10) Perform battery calibration
11) Test alarm
12) View/Change self-test interval

 Q) Quit

Select function number:

Si la conexión ha sido correcta, podemos consultar el estado y configuración del SAI con :

sudo apcaccess

El resultado será muy parecido a este:

root@RPI3-MOTION:~# apcaccess

APC      : 001,036,0886
DATE     : 2017-05-12 19:10:48 +0200  
HOSTNAME : RPI3-MOTION
VERSION  : 3.14.12 (29 March 2014) debian
UPSNAME  : RPI3-MOTION
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2017-05-12 19:10:47 +0200  
MODEL    : Back-UPS XS 700U   
STATUS   : ONLINE 
LINEV    : 232.0 Volts
LOADPCT  : 10.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 52.8 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
SENSE    : Medium
LOTRANS  : 140.0 Volts
HITRANS  : 300.0 Volts
ALARMDEL : 30 Seconds
BATTV    : 13.4 Volts
LASTXFER : Unacceptable line voltage changes
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : 3B1628X25695  
BATTDATE : 2016-07-16
NOMINV   : 230 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 390 Watts
FIRMWARE : 924.Z3 .I USB FW:Z3
END APC  : 2017-05-12 19:10:49 +0200

Para que el programa apcupsd se ejecute como un servicio modificaremos el fichero apcupsd:

sudo nano /etc/default/apcupsd

Informando:

ISCONFIGURED=yes

Guardando a continuación los cambios pulsando Ctrl + X, y confirmando con S ó Y.

Para que el servicio se arranque automáticamente en cada reinicio del sistema:

sudo update-rc.d apcupsd defaults

Iniciaremos el servicio con:

sudo service apcupsd restart

 

Llegados a este punto, y dando por hecho que tenéis instalado Telegram en vuestro teléfono móvil, creado un Bot, e instalado las correspondientes librerías en vuestra Raspberry (explico como hacerlo en otro post de este blog), tan solo nos queda crear los script que actuaran cuando el sistema se alimente de la bateria (onbattery) o se alimente de la red (offbattery).

Dichos scripts se encuentran en /etc/apcupsd/

En nuestro caso editaremos los scripts  con:

sudo nano /etc/apcupsd/onbattery

Borraremos su contenido y lo reemplazaremos por el siguiente, personalizandolo con nuestros datos de Telegram:

#!/usr/bin/env python
#
# This python script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the
# UPS goes back on to the mains after a power failure.
# We send an Telegram message to root to notify him.
#

import telepot

bot = telepot.Bot('NUESTROTOKEN')
bot.sendMessage('NUM-IDTELEGRAM', 'Suministro Off!')

sudo nano /etc/apcupsd/offbattery

Al igual que en el caso anterior borraremos su contenido y lo reemplazaremos por el siguiente, personalizándolo con nuestros datos de Telegram:

#!/usr/bin/env python
#
# This python script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the
# UPS goes back on to the mains after a power failure.
# We send an Telegram message to root to notify him.
#

import telepot

bot = telepot.Bot('NUESTROTOKEN')
bot.sendMessage('NUM-IDTELEGRAM', 'Suministro ON!')

Para finalizar guardando los cambios pulsaremos Ctrl + X, confirmando a continuación con S ó Y.

Eso es todo, a partir de este momento cada vez que nuestro SAI / UPS detecte una caída del suministro eléctrico recibiremos un mensaje de Telegram en nuestro móvil informándonos de ello, y otro una vez que se recupere.

Si en lugar de recibir un mensaje a través de Telegram queremos recibir un email bastará con crear un script que de esa orden. Explico como hacerlo en este otro post.

NOTA:

La función apctest solo funciona teniendo el servicio apagado, por lo que antes de ejecutarlo se hace necesario ejecutar el siguiente comando:

sudo service apcupsd stop

Para volver a ponerlo en marcha

sudo service apcupsd start

 

Espero que el tutorial os haya servido de ayuda. Si necesitáis cualquier cosa no dudéis en contactarme.

Salu2

 

Santi