Powerbank como SAI / UPS de Raspberry Pi v 2.0

A estas alturas estoy seguro de que la mayoría de vosotros ya ha podido comprobar la falta de correlación entre las pruebas realizadas en un laboratorio y las llevadas a cabo en el mundo real.

La Raspberry Pi no es ajena a esta afirmación, ya que su sistema de archivos, en teoría sólido como una roca al estar basado en Linux y ejecutarse en un medio sólido (sin dependencia mecánica), es en realidad extremadamente sensible a las fluctuaciones de alimentación, pudiendo llegar a corromperse por completo.

Pensemos en varios usos: una Raspberry Pi funcionando como webcam, repetidor de radio en una montaña, o leyendo información de un motor diesel.

En esos entornos, es fácilmente imaginar los habituales micro/cortes de corriente o cambios de intensidad/tensión por efecto de la arrancada/aceleración del motor diesel.

Mientras la  Raspberry Foundation le da solución a este problema (han hecho importantes avances respecto a sus primeras versiones), os propongo una solución sencilla y barata, apta para principiantes, sin necesidad de tener conocimiento de electrónica ni programación.

Usar un Powerbank como SAI / UPS de Raspberry Pi

Como os podéis imaginar por el título de este post, la solución está en el uso de un powerbank, aunque  os adelanto que no os valdrá uno cualquiera, ya por algún motivo la mayoría de powerbanks del mercado no son capaces de alimentarse/cargarse y dar alimentación/cargar otro dispositivo al mismo tiempo, produciéndose un corte de corriente de apenas una décima de segundo en el cambio de modalidad, corte que es suficiente para dejar sin alimentación a nuestra Raspberry Pi, provocando un reinicio de la misma del peor modo posible.

He dicho la mayoría porque por suerte hay varios fabricantes que por suerte han ido un paso más allá, fabricando powerbanks capaces de cargarse y dar carga al mismo tiempo del mismo modo que lo haría un SAI / UPS de calidad.

Personalmente os recomiendo este:

Es el que he usado yo, un powerbank Tecknet, de calidad, muy bien acabado, con una capacidad de 20000mAh, y dos conectores USB capaces de dar 2.1A (3A en total), potencia más que suficiente para una Raspberry bien equipada, ya que en su configuración básica apenas llega a 1.8A.

Para su utilización bastará con conectarlo a la corriente a través de su cable de alimentación (incluido), haciéndose necesario un cable USB – miniUSB para que el powerbank alimente nuestra Raspberry.

El cable USB – Microusb conectado entre el powerbank y la Raspberry sustituye el cable de alimentación/fuente de la Raspberry, funcionando el powerbank literalmente como un SAI /UPS.

Monitorizar la alimentación

Para los que como me ha pasado a mí queráis ir un paso más lejos y siendo capaces de tomar decisiones en función de que haya corriente o nos estemos alimentando de la batería, a continuación os explico como hacerlo.

La clave está en monitorizar la conexión ethernet, por lo que para este proyecto se hace necesario conectar la Raspberry Pi a otro dispositivo (hub/switch/modem) que esté conectado a la corriente sin ningún tipo de SAI /UPS de respaldo. El dispositivo no necesita disponer de conexión a internet.

Una vez hecho esto lo siguiente es instalar el programa/demonio encargado de supervisar tanto la corriente como el estado de carga de nuestro powerbank.

El programa de software libre / licencia GPL se llama upsd (Servicio de control de Alimentación) y permite:

  • Supervisar la alimentación (externa o con SAI), y el nivel de carga del powerbank.
  • Ejecutar scripts automáticamente en función de si se ha cortado o reestablecido la alimentación.
  • Apagar ordenadamente el sistema en caso de detectar un bajo nivel de carga en nuestro powerbank.
  • Registrar los eventos más relevantes relacionados con la alimentación de nuestra Raspberry Pi.

Instalación del programa:

wget http://raspi-ups.appspot.com/upsd/upsd_1.2-1.deb

sudo dpkg -i upsd_1.2-1.deb

Si queremos desinstalarlo podemos hacerlo con:

sudo dpkg -r upsd

Para comprobar que el programa se ha instalado correctamente:

upsd -i

que nos mostrará algo parecido a lo siguiente:

IS_RUNNING=YES
PID=3165
LAST_UPDATED=2017-05-26 17:31:34
POWER_OUTAGE=NO
BATTERY_CHARGE_LEVEL=100
BATTERY_REMAIN_TIME=02:48:00
BATTERY_LOW=NO

Lo siguiente es configurar el programa para adaptarlo a las especificaciones de nuestro Powerbank.

Para editar el fichero de configuración:

sudo nano /etc/upsd/upsd.conf

Los parámetros más importantes son los siguientes:

INTERFACE : Interface utilizado para detectar el voltaje: por defecto eth0

BATTERY_RUN_TIME : Autonomía en segundos del Powerbank. (*1)

BATTERY_CHARGE_TIME : Tiempo en segundos que necesita el powerbank para cargarse totalmente. (*2)

BATTERY_LOW_LEVEL : Nivel de carga, en %, a partir del cual la batería se considerará vacía, por ejemplo 15

BATTERY_LOW_TIME : La cantidad de tiempo en segundos, tras el cual la batería se considerará vacía (se desactiva con 0).

Los scripts en caso de caida de corriente están en:

/etc/apcupsd/

Se llaman:

onbattery  (se ejecuta cuando vuelve la corriente)

offbattery (se ejecuta cuando se va la corriente)

Pueden ser scripts de shell o python,  para permitir conocer al sistema de que tipo se trata recordad informarlo en la primera línea, por ejemplo para python :

#!/usr/bin/env python

(*1) Para calcular la autonomía en segundos de nuestro Powerbank:

autonomia = 3600 * capacidad en WH de Powerbank / Watios que consume una RPI.

Como los powerbanks informan su capacidad en mAh lo primero que haremos será pasar su capacidad a Wh, en mi caso para no de 9600 mAh:

5V * 9600mAh / 1000  = 48Wh

Trasladado a mi ejemplo, teniendo en cuenta que una Raspberry 3 consume unos 2w a pleno rendimiento:

3600 * 48 / 2.5 = 86.400 segundos = 1.440 minutos = 24 horas

(*2) Para calcular el tiempo necesario para la carga del Powerbank:

(3600 * Wh) / (Amperaje de carga del powerbank * 5v)

que en el caso de mi powerbank con una potencia de entrada de 1.5A:

(3600 * 48) / (1.5 * 5)  = 172.800 / 7.5  = 23.040 segundos = 384 minutos = 6,4 horas

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

9 respuestas a Powerbank como SAI / UPS de Raspberry Pi v 2.0

  1. Raúl dijo:

    Hola, gracias por el tutorial, estás muy bien. Pero una pregunta, dónde se puede ver el script que hace que se apague la raspberry cuando le queda poca batería a la SAI? Lo he buscado y no lo he encontrado. Además he probado a que se agote la baterí y no ha saltado el script. En el log tampoco viene nada de apagarse automáticamente. Muchas gracias de antemano, un saludo.

    Me gusta

    • elalbir28 dijo:

      Hola, gracias a tí por el comentario ya que he visto que desde la última versión se ha cambiado la ruta en la que se guardan los scripts y el nombre de los mismos. Acabo de actualizar el tutorial a la nueva versión. Si ves cualquier otra cosa no dudes en contactarme.

      Salu2

      Santi

      Me gusta

  2. Raúl dijo:

    Buenas Santiago, me ha gustado mucho tú artículo, está muy bien explicado. Pero me gustaría saber donde se encuentra el código para apagar de forma programada la raspberry. He probado el script y al agotarse la batería no se ha ejecutado nada, se ha apagado del tirón. Espero tú respuesta, muchas gracias de antemano!

    Me gusta

    • elalbir28 dijo:

      Hola, gracias a tí por el comentario, que me ha permitido ver que han realizado cambios en la aplicación desde mi publicación, cambiando la ruta en la que se guardan los scripts y el nombre de los mismos. Acabo de actualizar el tutorial a la nueva versión. Si ves cualquier otra cosa no dudes en contactarme.

      Salu2

      Santi

      Me gusta

  3. Cesar dijo:

    Muchas gracias, Santiago, muy buen post.

    Crees que me funcionara para alimentar una Raspberry Pi 3b + Router con modem usb (5V 1.5A), o irá muy al límite al dar el TeckNet Power Zen 3.4A en total?

    Conoces algún otro powerbank sin corte de corriente y mayor capacidad para evitar el reinicio de la Raspberry Pi y también alimentar al router en caso de que se vaya la luz durante unas horas?

    Gracias!

    Me gusta

    • elalbir28 dijo:

      Hola,
      yo creo que si, es cosa de probarlo, cada puerto da hasta 2.4A con un máximo entre todos de 3.4A , y la ventaja de que el reparto de potencia lo hace un procesador qualcomm que lleva integrado el propio powerbank. Si le conectas tan solo lo que dices no debería darte problemas.

      No he mirado últimamente en la web de tecknet pero recuerdo que el Power Zen era uno de los más bajos en prestaciones dentro de su gama Bluetek, así que muy probablemente habrá algún modelo con mayor potencia.

      Salu2

      Me gusta

  4. Taxidermista dijo:

    Una salvedad a tu explicación, si me lo permites. La inmensa mayoría de fabricantes de powerbanks dan como capacidad nominal la capacidad total de sus baterías internas de litio con su voltaje nominal correspondiente, esto es, 3,6V. Por tanto el cálculo de watios•hora, en tu ejemplo, sería 9,6Ah x 3,6V = 34,56 Wh. Por eso normalmente «parece» que los powerbanks tuvieran algo menos de su capacidad anunciada. Que yo sepa el único que es honrado con esto es Xiaomi que proporciona todas las especificaciones eléctricas en las etiquetas de sus powerbanks.

    Me gusta

  5. Martin Gonzalez dijo:

    que funcion tiene el switch o hub para poder obtener los datos?

    Me gusta

    • elalbir28 dijo:

      Hola Martín,

      Ten en cuenta que tratamos sobre un powerbank y no un UPS estandard desde el que podamos informarnos a través de un cable USB.

      En este ejemplo, en el que la Pi se alimenta desde un Powerbank y el hub directamente desde un enchufe de corriente, la Radpberry detecta la caída de corriente chequeando el puerto ethernet.

      Si hay un corte de corriente el hub/switch se apagará y la Raspberry Pi lo detectará al ver que no llega señal al puerto ethernet.

      Espero haberte aclarado la duda.

      Salu2

      Santi

      Me gusta

Deja un comentario

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