Realizzare un gruppo di continuità UPS a basso costo per Raspberry Pi

5 minuti di lettura
SCOPI DEL PROGETTO:
  • Realizzare un sistema UPS per il sostegno energetico automatico in caso di blackout per Raspberry Pi
  • Livello di difficoltà: medio/basso
  • Costo: ridotto (<30 €)
CONCETTI AFFRONTATI:
  • Connessioni e configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
DISPOSITIVI FISICI UTILIZZATI:
GUIDA maggiormente indicatA per:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi modifica all'impianto elettrico dev'essere effettuata da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (la presente guida ha puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere la garanzia.
Revisione progetto: 2.2

Raspberry Pi 2 Top

Abstract

Il Raspberry Pi è un autentico gioiello di miniaturizzazione, ma ha sgradevole tendenza a corrompere la SD card ospitata, sopratutto se non di buona qualità, specialmente in caso di improvvise cadute di tensione o per blackout (power outage).

In ambito domotico, poi, può essere utile che l’host rappresentato dal Raspberry Pi rimanga acceso malgrado un black-out e provveda automaticamente, magari, allo spegnimento controllato per evitare danni.

Sul mercato esistono gruppi di continuità, o UPS, utili a sostenere la tensione a 220v per ore, se non per giorni, ma hanno lo sgradevole difetto di esser costosi, ingombranti e consumare, comunque, energia. Utilizzare un UPS tradizionale per sostenere la tensione in ingresso a un Raspberry Pi sarebbe inoltre come sparare con un cannone a una mosca.

Una soluzione alternativa, ovviamente, esiste.
Sul mercato sono disponibili da ormai anni batterie portatili chiamate “power bank” (per portare un esempio, su Amazon ne esiste una varietà impressionante) le quali sono, spesso, alimentate tramite una porta Micro USB (come il Raspberry Pi) e che erogano tensione via porta USB standard.

Con questo progetto vedremo come utilizzare una power bank come UPS e come, via software (in caso si usi Raspbian come sistema operativo), rilevare un power outage (black-out) e provvedere allo spegnimento controllato del Raspberry prima che la batteria si esaurisca.

Prerequisiti

Power BankCiò di cui abbiamo bisogno è solo power bank sufficientemente potente sia in termini di capacità accumulo, sia in termini di potenza erogata. La capacità di accumulo si misura in Ampere/ora, nel caso delle power bank in mAh, ovvero milliAmpere/ora. Per alimentare per circa 24 ore un Raspberry Pi 3 model B+ è necessaria una capacità di accumulo di 10.000 mAh.

In merito all’erogazione, è necessario che la power bank sia in grado di erogare su USB almeno 2 Ampere; per quanto riguarda la porta di ingresso (di ricarica) della power bank è necessario che essa sia dotata di una porta Micro USB. Infine, è necessario un cavo USB / Micro USB (maschio/maschio).

Si dà per scontato che si abbia un Raspberry Pi il quale sia alimentato da un alimentatore Micro USB.

Nota di sicurezza: si consiglia l’uso di sole batterie di qualità che abbiano, nelle caratteristiche, specifiche funzionalità di prevenzione contro l’overcharge (sovraccarico) nonché la funzionalità di passthrough, ovvero la capacità di accettare corrente in ingresso ed erogarne in uscita, contemporaneamente. L’uso di batterie inappropriate è, per ragioni di sicurezza, caldamente sconsigliato.

Un buon prodotto è il Laptone 5200.

Procedimento

Il procedimento è molto semplice e intuitivo. Dopo aver spento il Raspberry (tramite shutdown; non scollegate mai brutalmente la vostra unità), scollegare l’alimentazione dalla porta Micro USB e collegarla alla Micro USB di ingresso della power bank; collegare il cavo USB sulla powerbank e l’altro capo, Micro USB, sul Raspberry.

Di fatto l’UPS è pronto: quando la batteria sarà carica il flusso di corrente dall’alimentatore alla power bank e dalla power bank al Raspberry sarà continuo, anche e sopratutto in caso di power outage, in quanto le batterie (cariche) della power bank erogheranno tensione continua fin tanto che avranno disponibilità di carica.

Ma se il power outage si protraesse oltre la durata delle batterie?
Il Raspberry Pi si spegnerebbe esattamente come in assenza dell’UPS, quindi brutalmente; è qui che ci viene incontro il software upsd (Uninterruptible Power Supply Daemon).

Intercettare il power outage

In caso si utilizzi un sistema operativo Raspbian è possibile intercettare il power outage (black-out) tramite la valutazione lo stato elettrico della porta ethernet del Raspberry e l’uso combinato del demone upsd, il quale appunto ci permette di interpretare la caduta elettrica su tale porta e, conseguentemente, di effettuare delle azioni, quale banalmente quella di spegnere – in modo controllato – l’unità.

L’unico pre-requisito è avere il Raspberry collegato con un cavo ethernet ad uno switch, un router, un hub collegato, a sua volta alla rete elettrica per l’alimentazione.

Chiaramente, nel momento in cui dovesse intervenire un power outage lo stato elettrico della porta ethernet diventerebbe “disconnesso“, pertanto il software upsd lo interpreterà come “inizio della sessione a batteria” e provvederà a fare quel che gli avremo comandato di fare, ovvero spegnere in modo controllato l’unità prima che la carica si esaurisca..

N.b. In caso si utilizzino alternative (ad esempio distribuzioni di sistema operativo “chiuse”, come HASSIO o altro) questa procedura non sarà attuabile. L’UPS verrà utilizzato in modo semplice, ovvero in caso di assenza di corrente continuerà ad alimentare il Raspberry fino al termine della carica, dopodiché si spegnerà.

 

UPS Raspberry con Power Bank
schema di connessione

Soddisfatto il pre-requisito, la procedura di installazione del demone upsd è la seguente:

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

Nb. Eventualmente lo si voglia successivamente cancellare, il comando è semplice:

sudo dpkg -r upsd

Il demone è concepito per monitorare la disponibilità residua di capacità della powerbank in base all’assorbimento istantaneo e medio del Raspberry e, a fronte dell’imminente esaurimento della corrente disponibile, provvede allo spegnimento controllato dell’unità. La stima è piuttosto accurata, comunque la soglia per il quale la batteria viene considerata scarica (pertanto viene eseguito lo shutdown) è 30%.

Il file di configurazione si trova presso “/etc/upsd/upsd.conf” ed è modificabile tramite il comando

sudo nano /etc/upsd/upsd.conf

Tale file è di default configurato come segue:

# This is the configuration file for the upsd daemon program.
# Please see the upsd.conf(5) man page for further documentation.

# Enabled switch.
ENABLED = YES

# The network interface used to determine power outages.
INTERFACE = eth0

# The check interval for power outages, in milliseconds (ms).
CHECK_INTERVAL = 1000

# The update interval of the upsd.status file, in seconds (s).
UPDATE_INTERVAL = 10

# The amount of time the fully charged battery of the UPS can power the system, in seconds (s).
# BATTERY_RUN_TIME =

# The amount of time the empty battery of the UPS needs to become fully charged, in seconds (s).
# BATTERY_CHARGE_TIME =

# The charge level under which the battery will be considered empty, in percent (%).
# Set this to 0 to disable this feature.
BATTERY_LOW_LEVEL = 30

# The time limit after a loss of power at which the battery will be considered empty, in seconds (s).
# Set this to 0 to disable this feature.
BATTERY_LOW_TIME = 0

Le righe in grassetto sono quelle configurate di default. Come si capisce anche dalle descrizioni, il demone è ampiamente configurabile. Il manuale (che potete comunque scaricare da qui) è consultabile tramite il comando:

man upsd.conf

Per visualizzare in tempo reale il funzionamento del demone, il comando è il seguente:

sudo tail -f /var/log/syslog | grep upsd 

Sarà poi sufficiente disconnettere la porta ethernet – per simulare un outage – e ottenere il seguente log a terminale:

Jul 5 18:24:38 raspberrypi upsd[24676]: There is a power outage right now.
Jul 5 18:24:38 raspberrypi upsd[24676]: The estimated current battery charge level is 100 %.
Jul 5 18:24:38 raspberrypi upsd[24676]: There are 02:48:00 hours remaining before the battery will be empty.
Jul 5 18:24:38 raspberrypi upsd[24676]: If the battery should actually run empty, appropiate action will be taken.

Riconnettendo la porta – quindi facendo credere al demone che la corrente sia tornata – si otterrà il seguente log:

Jul 5 18:24:44 raspberrypi upsd[24676]: The power outage is over now. It could be successfully bridged over by using the battery.
Jul 5 18:24:44 raspberrypi upsd[24676]: The outage lasted for 00:00:06 hours.
Jul 5 18:24:44 raspberrypi upsd[24676]: The estimated battery charge level decreased from 100 to 99 % during the outage.
Jul 5 18:24:44 raspberrypi upsd[24676]: The system could have run for 02:47:53 more hours before the battery would have been empty.

Da qui in poi, il demone vigilerà sull’andamento dell’alimentazione e, in caso di power outage, al ragiungimento (stimato) della soglia del 30% di batteria residua (o diverso valore, cambiando l’impostazione del campo “BATTERY_LOW_LEVEL” presso il file di configurazione) provvederà al salvifico shutdown dell’unità Raspberry.

ALTERNATIVE

Esistono altre possibilità per la realizzazione di UPS per Raspberry Pi, oltre all’utilizzo di power bank, come batterie 12 volt o componenti aggiuntivi per il Raspberry Pi stesso. Vi consigliamo di leggere questa pagina per maggiori informazioni.

Demo (in inglese):


Please comment below