Detector Cortes Electricidad con SAI APC | APCUPSD en Raspberry Pi + Avisos por Telegram

Hoy vamos a ver cómo utilizar el software APCUPSD  (APC UPS Daemon) para controlar con nuestra raspberry pi , las caídas del suministro eléctrico detectadas por nuestro SAI APC, y que nos avise a través de un bot de Telegram.

 
detector cortes electricidad raspberry & sai & Telegram Bot
 

¿Qué es el software apcupsd?

 
apcupsd es un software en Linux para SAI´s de la marca APC, aunque es compatible con muchas otras marcas, y permite controlar algunos aspectos muy interesantes del funcionamiento del SAI, incluso permite lanzar acciones en el momento en el que el SAI pierde la conexión con la red eléctrica, o cuando vuelve a detectar que se vuelve a recibir electricidad de nuevo.
 

¿Cómo crear un detector de caídas electricas con Raspberry Pi y un SAI?

 
Vamos a utilizar el software apcupsd para SAI´s de APC, pero que es compatible con una gran cantidad de modelos.
Y lo vamos a combinar con un bot de Telegram en Raspberry Pi que usa “Motion Detection Telegram“, pero modificado, para que cuando haya un corte eléctrico, el SAI se active, el software apcupsd mandará una señal, y el bot se comunicará con nosotros por Telegram y nos enviará el mensaje que hayamos configurado para cuando haya una caída eléctrica. Y lo mismo cuando vuelva la electricidad.
 

*** Importante: El SAI que utilicemos ha de tener una salida para el software PowerChute de APC (que tiene la misma función que el APCUPSD, pero para Windows, y con una interfaz gráfica algo más elegante).
 

 
Aquí podemos ver la parte trasera del SAI APC Back-UPS 700U-GR, que es el que hemos utilizado en este caso, donde se puede ver el puerto USB tipoA a tipo B necesario:

apc back ups 700 powerchute

 

En este artículo:

 

 

1. SAIS APC Recomendados (desactiva AdBlock)

 

2. CONECTAR SAI A RASPBERRY PI

Dependiendo del tipo de Sai que utilicemos la conexión puede ser principalmente con cable USB a TIPO A a TIPO B, o con cable RJ45 a USB.
 
En este caso lo primero que hemos de hacer es configurar el archivo apcupsd.conf, para que nuestra Raspberry Pi detecte el SAI APC por medio del cable USB 2.0 Tipo A a Tipo B para impresora:

Un SAI APC, buena marca, y de gama media.                       Un SAI de marca poco conocida, pero barato.

                                                                                  

 

 

2.a) CABLES USB Tipo A a Tipo B

 

 

2.b) Cables RJ45 a USB para UPS (desactiva AdBlock)

 

 

3. Instalar el software de control APCUPSD

 
Lo primero instalaremos el paquete APC UPSD.

apt-get install apcupsd

 
instalar apcupsd para SAI en Linux
 

 

4. Configurar APCUPSD

 
Después hemos de configurar los archivos de APC UPSD (que podremos encontrar en /etc/apcupsd ):
 
Enmarcados en rojo podemos ver los archivos más importantes:

  • apccontrol
  • apcupsd.conf
  • offbattery
  • onbattery

 
archivos configuracion apcupsd
 

 

5. Archivo principal de configuración: apcupsd.conf

 

Dependiendo del tipo de SAI que utilicemos y la conexión que utilicemos habremos de configurar los parámetros siguientes:

  • UPSNAME
  • UPSCABLE
  • UPSTYPE
  • DEVICE

 

 

5.a) Ejemplos de Configuración de los parámetros anteriores

 

  • UPSNAME: aquí pondremos el nombre que le daremos al SAI, con la SINTAXIS: UPSNAME espacio NOMBRE

up`sname apcupsd
 

  • UPSCABLE :  Podremos elegir entre diversos tipos, entre ellos: simple, smart, ether, usb, u otros tipos concretos de cable que podemos ver en la captura:

apcupsd upscable
 

  • UPSTYPE
  • DEVICE

Estos dos parámetros nos permiten elegir entre diversas posibilidades. Por ejemplo, para UPSTYPE podríamos elegir la opción más simple (si aplica, claro) que sería USB.
 
Y para DEVICE, lo que corresponda en su columna, dependiendo del UPSTYPE que hayamos elegido en el paso anterior. Podemos ver la tabla siguiente que nos ayudará a entender las diferentes posibilidades:

apcupsd upstype descripcion de dispositivo
 

 

Ejemplo de configuración de UPSTYPE y DEVICE en este caso (utilizamos cable USB) (Podemos ver que en este caso, en el parámetro DEVICE hemos de dejarlo en blanco):

 
apcupsd upstype device
 
Los demás parámetros podemos dejarlos por defecto.
 

 

6. Archivo apccontrol

 

En el archivo apccontrol es donde podemos ver los scripts que hay configurados y lo que mostrará y ejecutará el programa en cada caso. También podemos configurar el user y el mail donde se podrían enviar alertas por mail (aunque nosotros en este caso utilizaremos el BOT de Telegram).

 

SYSADMIN=root

APCUPSD_MAIL=”mail”

apccontrol
 
 

  • Scripts que actuarán en cada caso: killpower, commfailure, commok, powerout, onbattery, offbattery, mainsback.

 

  • Nosotros nos centraremos en los dos scripts principales: onbattery (cuando se cae el suministro eléctrico y comienzan a actuar las baterías del SAI) y offbattery (cuando vuelve el suministro eléctrico y dejan de actuar las baterías del SAI).

 
apcupsd apccontrol
 

 

7. Instalar la API de Telegram Bot

 
Ahora vamos a instalar la API de telegram bot API
 
Tal y como vimos en el artículo Raspberry Telegram Bot y Motion, vamos a instalar la API de TelegramBotAPI, y habremos de crear un bot de Telegram que después conectaremos al software APCUPSD del SAI, y nos avisará directamente por Telegram cuando haya cortes de electricidad.
 
Instalamos python-pip y después ya podemos instalar pyTelegramBotAPI con :

apt-get install python-pip
sudo pip install pyTelegramBotAPI

 
pip install pyTelegramBotAPI
 
Si recibimos el error:

sudo: pip: command not found

Es que nos hace falta instalar el paquete “python pip”; lo instalamos así:

sudo apt-get install python-pip

 
Tras instalar pip, volvemos al paso previo e instalamos pyTelegramBotAPI.
 
Para seguir, hemos de crear un Bot de Telegram, obtener nuestra ID de Telegram y un token de autorización para nuestro bot de Telegram. Todos estos pasos podemos verlos aquí:

 

 

8. Comenzar a usar el software de APCUPSD

 
Después de preparar todo lo anterior, llega el momento de probar el software de APCUPSD con nuestro SAI.
 

 

8.a) APCTEST

 
Lo primero que podemos hacer es un APCTEST. Con este comando comprobamos si el SAI está gestionando correctamente sus variables internas.

Para no obtener el error: apctest FATAL ERROR in apctest.c at line 313

primero hemos de parar el servicio apcupsd, con el comando

service apcupsd stop

, y luego ejecutar

apctest

 
detector cortes electricidad - apcupsd apctest
 
este es el menú de opciones de apctest:

root@motioneye:/etc/apcupsd# apctest
 
2021-07-28 10:30:49 apctest 3.14.14 (31 May 2016) 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

 

Si todo va bien, podremos ver el mensaje: Getting UPS capabilities…SUCCESS

y un menú del SAI, que nos permitirá realizar varias pruebas, calibraciones, cambiar la hora y fecha …
 

 

8.b) Comando DMESG para comprobar mensajes importantes y comprobar la detección del SAI en la Raspberry Pi

 
Si ejecutamos el comando

dmesg

podremos comprobar que el SAI ha sido detectado por la Raspberry Pi:

mensajes dmesg de apcupsd
 

 

8.c) APCACCESS STATUS

 
Reiniciamos el servicio apcupsd con

service apcupsd restart

, y ejecutamos el comando

apcaccess status

 

APCACCESS  es un programa de APCUPSD, que nos permite mostrar el estado completo de nuestro SAI:

 
apcupsd apcaccess status

 

Hecho esto, ya sabemos que nuestro SAI funciona y se comunica correctamente con nuestra Raspberry Pi gracias al software APCUPSD.

 

Ahora vamos a modificar los archivos onbattery y offbattery, y a ver los mensajes que nos envía nuestro bot de Telegram.
 

 

9. Modificar los archivos onbattery y offbattery de APCUPSD, para que invoque al bot de Telegram y nos envíe un mensaje de Telegram

 

El archivo onbattery ejecutará su contenido cuando las baterías del SAI comiencen a funcionar, y el archivo offbattery se ejecutará cuando se reestablezca el corte de electricidad y las baterías del SAI dejen de funcionar (porque se conectará de nuevo a la red eléctrica).
 
Así que modificamos los archivos originales (podemos guardar una copia del archivo original), y en su lugar vamos a llamar al Bot de Telegram, y le diremos que nos envíe un mensaje por Telegram con el texto deseado.

Este es nuestro archivo onbattery (aviso cuando haya un corte de electricidad):
 
apcupsd archivo onbattery - import telegram bot
 

#!/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('xxxxxxx:zzzzzzzzzzzzzzzzzzzz-xxxxxxxxxxxxxxxx')
tb.send_message('666666666', 'El Suministro Electrico se ha CAIDO!')
tb.send_message('000000000', 'El Suministro Electrico se ha CAIDO!')

 
Y el archivo offbattery será igual, solo que el mensaje de texto será diferente, algo así como:

 

import telebot
tb = telebot.TeleBot('xxxxxxx:zzzzzzzzzzzzzzzzzzzz-xxxxxxxxxxxxxxxx')
tb.send_message('666666666', 'Suministro Electrico REESTABLECIDO!'')
tb.send_message('000000000', 'Suministro Electrico REESTABLECIDO!')

 

 

10.a) Mensajes de nuestro Bot de Telegram, avisando de Suministro eléctrico CAIDO:

 
apcupsd onbattery mensaje del telegram bot
 

 

10.b) Mensajes de nuestro Bot de Telegram, avisando de Suministro eléctrico REESTABLECIDO:

 
apcupsd archivo offbatery - mensaje del bot de telegram cuando se deja de usar la bateria
 

 

11. CONCLUSIÓN

 
Si queremos tener un chivato Bot de Telegram y crear un detector de cortes de electricidad gratuito (si ya tienes una Raspberry Pi y un móvil, solo te falta un pequeño SAI de APC( hay otras marcas, pero este tutorial se basa en el software APCUPSD), y combinarlo con un buen SAI APC, en este artículo tenemos una interesante solución, gracias al software APCUPSD. Si además te gusta trastear con las Raspberry Pi, verás que este artículo te puede ser de gran utilidad. Aprovecha la API de Telegram y la funcionalidad de los Bots de Telegram para conseguir avisos instantáneos en tu móvil.  🙂