community italiana di domotica personale
 
Realizzare un gruppo di continuità UPS (con gestione via software) per Raspberry Pi

Realizzare un gruppo di continuità UPS (con gestione via software) per Raspberry Pi

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

Tutti gli ambienti

NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione progetto: 1.0

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 delle semplici batterie le quali sono, spesso, alimentate in ingresso tramite porta Micro USB (come il Raspberry Pi) e che erogano tensione in uscita tramite la porta USB standard.

Con questo progetto vedremo come utilizzare una di queste batterie concepite specificamente per Raspberry Pi a mo’ di UPS e come, via software (in caso si usi Raspberry Pi OS -Raspbian- come sistema operativo), rilevare un power outage (black-out) e provvedere allo spegnimento controllato del Raspberry prima che la batteria si esaurisca.

Un’ulteriore alternativa – a metà, per così dire – sta nell’adozione di un mini-UPS. Questa alternativa è descritta in quest’altro progetto.

N.b. Ovviamente la soluzione in assoluto migliore, che consigliamo, è quella di utilizzare di un UPS vero e proprio, magari gestibile tramite Network UPS Tools (NUT).

Prerequisiti

Ciò di cui abbiamo bisogno è solo una batteria 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 batterie di questo tipo in mAh, ovvero milliAmpere/ora. Per alimentare per circa 8 ore un Raspberry Pi 3 model B+ è necessaria una capacità di accumulo di 3.000 mAh.

In merito all’erogazione, è necessario che la batteria sia in grado di erogare su USB almeno 2 Ampere; per quanto riguarda la porta di ingresso (di ricarica) della batteria è necessario che essa sia dotata di una porta Micro USB. Infine, è necessario un cavo USB / Micro USB (maschio/maschio), solitamente in dotazione. Si dà ovviamente per scontato che si abbia un Raspberry Pi il quale sia alimentato da un alimentatore Micro USB.

La batteria presa ad esempio per il presente progetto è questa, la quale è dotata di una scheda di controllo che non solo fa da tramite tra il Raspberry e la batteria, ma espone anche un interruttore per l’accensione/spegnimento, dei LED per l’indicazione visuale del livello di carica, nonché l’attacco per una seconda, eventuale batteria.

Batteria per Raspberry Pi - Scheda di controllo

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 batteria; collegare poi il cavo USB sulla batteria e l’altro capo, Micro USB, sul Raspberry, al posto della precedente alimentazione.

Batteria per Raspberry Pi - Montato

Di fatto l’UPS è pronto: quando la batteria sarà carica il flusso di corrente dall’alimentatore alla batteria e dalla batteria al Raspberry sarà continuo, anche e sopratutto in caso di power outage, in quanto le batterie 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 Raspberry Pi OS (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 Home Assistant OS 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à. Gli utenti che utilizzino ambienti come HassOS potrebbero però realizzare un’automazione che, a fronte della rilevazione del down della porta ethernet, spenga il Raspberry Pi.
UPS Raspberry con Power Bank
lo schema di connessione.

Soddisfatto il pre-requisito, la procedura di installazione del demone upsd (da eseguire da terminare) è la seguente:

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

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

sudo dpkg -r upsd

Il demone è concepito per monitorare la disponibilità residua di capacità della batteria 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.


Raspberry Pi sempre al fresco con l’accensione dinamica della ventola

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.