Raspberry como monitor de SAI / UPS

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.

tele-mov

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:

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:

Otra forma de comprobarlo y de paso acceder a datos concretos del estado del SAI es

sudo apcaccess

Con esta función no solo comprobaremos la correcta conexión y configuración sino también los datos de voltaje, nivel de carga…

Si la conexión ha sido correcta, tan solo nos queda activar el servicio apcupsd :

sudo nano /etc/default/apcupsd

En el que informaremos:

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 telebot

tb = telebot.TeleBot('NUESTROTOKEN')
tb.send_message('NUM-USUARIO TELEGRAM', '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 telebot

tb = telebot.TeleBot('NUESTROTOKEN')
tb.send_message('NUM-USUARIO TELEGRAM', '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.

Siguiendo estos ejemplos podemos crear también un fichero llamado changeme  que en este caso responde a la acción que realiza el programa cuando detecta que la batería del SAI ha de ser cambiada. El resto de eventos controlables (runlimit, loadlimit… ) podéis verlos si entráis en /etc/apcupsd/apccontrol .

Espero que os sirva de ayuda. Si necesitáis cualquier cosa no dudéis en contactarme.

Salu2

Santi

Rev 09.2021