Questa è una vecchia versione del documento!


POWERBANK PER RASPBERRY

FONTE: Raspberry Pi UPS by using a USB power bank

La mancanza improvvisa di tensione, può creare dei problemi al nostro sistema di monitoraggio, introducendo nelle letture dei picchi non realistici e, cosa non da poco, può portare a danneggiare irrimediabilmente il sistema operativo del Raspberry al punto da rendere inutilizzabile la schedina.

Per scongiurare questi problemi, è quindi molto importante dotare il nostro Raspberry di una fonte alternativa di alimentazione.

La soluzione più semplice ed economica è quella di alimentare il Raspberry per il tramite di un power-bank, che anche in assenza di tensione di rete provvederà a tenere acceso il Raspberry per diverse ore.

ups_rap_1.jpg

Personalmente ho adottato questa soluzione con una finezza in più, un piccolo software che in caso di assenza di rete, “stima” la durata della batteria, ed in caso di assenza prolungata di alimentazione provvede a spegnere via software il Raspberry, scongiurando qualsiasi problema.

Particolare attenzione dovrà essere posta alla scelta del power-bank. Si dovrà infatti scegliere un power bank che può rimanere sempre alimentato e che sia dotato di uno switch interno che in caso di carica completa provvede ad alimentare il nostro Raspberry direttamente tramite la rete.

Personalmente ho utilizzato l’EasyAcc Classic Gen2 5200mAh Power Bank che si trova in rete per circa 15€ e che ben si presta a tale scopo, garantendo un’autonomia di circa 6 ore ed essendo dotato di una presa microUSB di ingresso e di una USB in uscita.

Non tutti i modelli di powerbank sono però utilizzabili a tale scopo, dobbiamo infatti utilizzare dei modelli dotati di switch interno che una volta carichi alimentano il raspberry tramite rete. Di seguito una lista di modelli testati che risultano compatibili oppure non compatibili.

Per diversi produttori questa funzione viene identificata come “Duo-Charge”, pertanto i modelli che riportano questa specifica dovrebbero essere compatibili a questo scopo.

Lo schema di collegamento sarà quindi il seguente:

ups_rap_2.jpg
Can tale configurazione sarà anche possibile utilizzare il software upsd (Uninterruptible Power Supply Daemon) che permette, come visto, di “stimare” la durata della batteria ed in caso di assenza di alimentazione prolungata spegnere il Raspberry.
Il software rileva la mancanza di rete attraverso la presa LAN, ecco perché è importante che vi sia il collegamento LAN (basta anche il solo collegamento ad uno switch LAN anche senza rete internet)

L'installazione del software di gestione non è indispensabile per il funzionamento. E' comunque interessante il fatto che il software garantisca un corretto spegnimento del Raspberry prima che si esaurisca la batteria, nel caso di una prolungata mancanza di tensione di rete

Da terminale (Putty) creiamo inoltre il link simbolico:

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

Per eventualmente disinstallare il programma basterà digitare sempre da terminale:

sudo dpkg -r upsd

Per controllare se il software è stato correttamente installato basterà digitare da terminale:

upsd -i

che in caso positivo vi restituirà le seguenti informazioni:

IS_RUNNING=YES
PID=2305
LAST_UPDATED=2015-08-16 15:47:13
POWER_OUTAGE=NO
BATTERY_CHARGE_LEVEL=100
BATTERY_REMAIN_TIME=06:40:53
BATTERY_LOW=NO

Per leggere invece la documentazione completa del software:

manupsd

ed anche

man upsd.conf

Al fine di garantire un corretto funzionamento ed in particolare una corretta stima della durata della carica del power-bank, è necessario effettuare alcune configurazioni che sono chiaramente spiegate nel manuale (man upsd.conf)

Con WinSCP andiamo ad editare il file upsd.conf che si trova nella cartella /etc/upsd/


Dovremo andare ad inserire i seguenti parametri:


BATTERY_RUN_TIME : indica il tempo in secondi di durata della batteria
Come indicato nella guida potrà essere determinato in due modi:

  • Misurandolo: a power-bank completamente carico, togliere l’alimentazione e lasciare acceso il Raspberry alimentato mediante la batteria ed attendere fino alla scarica completa, cronometrando la durata.
  • Calcolandolo: la guida fornisce un sistema approssimativo di calcolo:
runtime = 3600 * Wh / W
                            Wh = battery capacity in watt-hours (Wh)
                            W = average system power consumption in watt (W)
                                   Raspberry Pi Model A: 1.5 W
                                   Raspberry Pi Model A+: 1 W
                                   Raspberry Pi Model B: 2.5 W
                                   Raspberry Pi Model B+: 1.75 W
                                   Raspberry Pi Model 2 B: 2 W

Pertanto con il power-bank indicato da 5200mAh oppure da 19,24 Wh nel caso di un Raspberry b+ avremo: 3600 * 19.24 / 1.75 = 39579s
Personalmente ho adottato questo sistema in quanto non mi interessa la precisione, mi basta che il sistema si spenga in condizioni di sicurezza ed ho anche adottato un consumo di 2W per il mio Raspberry B+, superiore a quello indicato, ottenendo: 3600 * 19.24 / 2 = 34362s


BATTERY_CHARGE_TIME: indica il tempo impiegato in secondi per una completa ricarica
Anche in questo caso la guida indica i due modi per determinare questo parametro:

  • Misurandolo: a power-bank completamente scarico, collegare l’alimentazione e attendere fino alla carica completa, cronometrando la durata.
  • Calcolandolo: la guida fornisce un sistema approssimativo di calcolo:
chargetime = 3600 * Wh / (min(As, Ai) * V)
                            Wh = capacità batteria in watt-ora (Wh)
                            As = corrente massima erogata dall’alimentatore, in ampere (A)
                            Ai = corrente massima del connettore di input, in ampere (A)
                            V = tensione della batteria, in volt (V)


Pertanto con il power-bank indicato da 5200mAh avremo:

  • Wh = 19.24 Wh
  • As = 2,0A (corrente erogata dal mio alimentatore)
  • Ai = 2,1A
  • V= 5V

E quindi chargetime = (3600 * 19.24) / (2,0 * 5) = 6926 s (115 min)



BATTERY LOW LEVEL: indica il livello in % di carica della batteria sotto il quale il software la considera scarica e procede con lo spegnimento.
Personalmente ho lasciato il 30% già predisposto per garantire un discreto margine di sicurezza.

Ricavati tutti i parametri necessari possiamo quindi procedere ad editare con WinSCP il file upsd.conf che si trova nella cartella /etc/upsd/ inserendo i dati indicati in rosso

# 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 = 34362

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

# 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

Tali dati dovranno ovviamente essere adattati alla capacità del vostro power-bank con quanto indicato sopra.
Inutile dire che la stima della durata sarà tanto più precisa, quanto preciso sarà il dato che andremo ad inserire.
Ci rimane solo da configurare cosa deve eseguire il programma in caso di raggiungimento del livello di scarica previsto (30%), e cioè lo spegnimento del Raspberry.
Per fare ciò, dovremmo editare con WinSCP il file low_battery che si trova nella cartella /usr/lib/upsd

#!/bin/bash

# This script is executed by upsd if there is a power outage AND the battery
# charge level is considered to be low. Whenever this happens, you have to
# expect an abrupt loss of power very soon. It thus usually is the best idea
# to properly shut down the system here.

# Uncomment the line below to properly shut down the system. Note that upsd
# must be running as root, otherwise this will not work.

shutdown -h now

Basterà quindi togliere il commento (#) davanti all’ultima riga.

Abbiamo poi a disposizione ulteriori due file sempre nella cartella /usr/lib/upsd in cui inserire dei comandi che il sistema eseguirà nelle due condizioni:

  • power_back : comandi da eseguire al ritorno dell’alimentazione dopo una interruzione. Si potrà ad esempio inserire un comando di invio di una email a segnalare la mancanza di tensione
  • power_outage : comandi da eseguire appena si rileva una mancanza di alimentazione


  • ups_raspberry.1505765442.txt.gz
  • Ultima modifica: 2017/09/18 22:10
  • da flane