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 continuacion 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, 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 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

Esta entrada fue publicada en OSX / MAC, Raspberry Pi y etiquetada , , , , , , , , . Guarda el enlace permanente.

5 respuestas a Raspberry como monitor de SAI / UPS

  1. albama dijo:

    Me interesa un monton este artículo ya que tengo un problema con el sai que compre apc back-ups que no tiene la opción de enviar notificaciones cuando se va la luz y yo necesito enterarme de cuando se va porque es un sitio que no hay nadie y nadie se entera si se va la luz. Lo que sí, si quisiera usar en vez de telegram , usar el correo como se haria para que me enviara a un correo verdadero sin instalar un servidor de correo en la rpi.
    Sobre telegram te o pregunto en el articulo de telegram ya que no me quedo muy claro su instalación en la raspi.

    Muchas gracias y enhorabuena por el aporte

    Me gusta

    • elalbir28 dijo:

      Hola,
      explico como poder enviar emails desde la Raspberry Pi en otra página de este blog:

      Como enviar emails desde el shell de Raspberry

      Pruébalo es muy fácil, es cuestión de apenas 5 minutos. En mi opinión es más recomendable usar Telegram al ser mucho más inmediato y no requerir entrar a consultar el correo. Se produce una alarma y recibes el mensaje en el momento.

      Salu2

      Me gusta

      • albama dijo:

        Yo en principio lo puse por telegram siguiendo tu artículo, mañana lo pruebo en el trabajo haber si me funciona bien que tengo dudas en el script de online y offline de cuando ponias el num-usuario si te refieres al alias que tengo en telegram o al numero de usuario userid de telegram. ( yo puse el @mialias ).
        De todas maneras esta alerta nos tiene que llegar a varias personas por eso creo que seria muy bueno poder hacer una cosa conjunta que nos envie por correo y que nos envie por telegram , asi no habria problemas de no recibirlo nunca.

        Por otro lado acabo de ver lo del correo pero date cuenta que tu ahi explicas como mandar tu el correo a mano , esto tiene que ser automatico según el evento asique no se si con el script que viene por defecto y poniendo direcciones ya serviria o si habria que hacerlo de otra manera.

        Muchas gracias por todo.

        Me gusta

      • elalbir28 dijo:

        Hola,

        en Telegram hay que usar el Userid, si no estás seguro de cual es explico como conocerlo justo al final del tutorial de Telegram.

        Los script pueden estar hechos en python o en shell. En mi ejemplo he usado python, y así se lo he hecho saber informando en la primera línea:
        #!/usr/bin/env python

        Si quieres usar una sentencia shell como la de mi ejemplo sobre como enviar emails, bastará con que elimines esa primera línea.

        Cuéntanos como te ha ido.

        Salu2

        Me gusta

  2. Pingback: APCUPSD – Monitor de Red de SAI – UPS a través del navegador | Alteageek, tutoriales, raspberry pi y cisco, en español

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.