Da molto tempo, per necessità professionale, possiedo un rack con vari server che implementano l’ambiente laboratorio ad uso didattico, per eseguire prove ed esperimenti utili alla mia professione, rigorosamente acceso 24x7x365. Visto, però, il costo sempre crescente dell’energia elettrica, avevo considerato di spegnere tutto e ripiegare a soluzioni meno pregiate. Dopo una riflessione durata giorni, non disposto a rinunciare a tutto, ho optato per rinunciare a qualcosa, scegliendo una soluzione che prevedesse un consolidamento per ridurre la quantità di computer (hardware) e per un’accensione parziale degli stessi.
Ho, quindi, replicato, sul mio pc, la parte server e di rete, su macchine virtuali, qualora fosse necessario accedere a qualche risorsa durante il tempo in cui l’infrastruttura principale sia spenta e ho scelto di accendere l’infrastruttura principale durante le ore di ufficio.
Accensione e spegnimento dovranno avvenire automaticamente a giorni e orari prestabiliti, ho, quindi, realizzato la multipresa, comunemente chiamata “ciabatta”, per fornire o togliere alimentazione al rack, gestita tramite Raspberry PI, illustrata di seguito.
Materiale utilizzato
- n. 1 – Raspberry PI 3B+, completo di microSD 16GB
- n. 1 – Scheda Relay a 8 canali, 10A
- n. 1 – Scatola Gewiss 12 moduli verticale
- n. 4 – Prese da incasso trivalenti Gewiss
- n. 4 – Prese da incasso bivalenti Gewiss
- n. 1 – Scatola stagna Gewiss 20×25 e pressacavo
- n. 1 – Spina IEC320-C14 da incasso
- n. 1 – Alimentatore 5V 2,5A microUSB
- qb – cavo elettrico (marrone, blu, giallo-verde)
Inoltre
- Materiale di consumo: puntalini, morsetti forbox, nastro isolante, guaina termoretraibile, stick di colla, etc
- Attrezzatura: forbici, cacciavite a croce, cacciavite a taglio, pinze, saldatore, pistola per la colla a caldo, etc








Procedimento
Prestate attenzione, l'uso della tensione domestica (220V) è pericolosa, se non siete pratici oppure qualora abbiate dubbi, confrontatevi sempre con qualcuno più esperto. NON IMPROVVISATE!
L’uso della scheda a 8 Relay, facilita la messa in opera in quanto permette un’integrazione perfetta con Raspeberry PI, non occorre, crimpare o saldare nulla, per l’utilizzo base, qui rappresentato.
La prima cosa da fare è unire i due contenitori, sul lato lungo a mezzo di tre fori allineati alle prese stesse, nei quali saranno inseriti i pressacavo, che saranno, poi, utilizzati come passaggio per i cavi che forniranno alimentazione alle prese (foto 2).
Realizzare, sulla testa (lato corto) della scatola grande, una fessura in corrispondenza alle porte del Raspberry PI (USB e Ethernet); qualora, si volesse utilizzare la porta HDMI, occorre trovare il sistema per alloggiare il Rasperry PI alla parete, ma personalmente lo ritengo troppo laborioso quanto inutile, infatti una volta installato il sistema operativo, il Raspberry PI può essere gestito interamente tramite accesso SSH.
Sull’altra testa della scatola, troverà posto la spina IEC320, che fornirà alimentazione all’intero sistema; l’unica accortezza è evitare di posizionarla al centro della parete, altrimenti risulterà di impaccio all’alloggiamento scheda a 8 Relay (foto 1, 5, 6).
L’alimentatore può essere recuperato da qualcosa di “avanzato” che abbia le caratteristiche corrette (io ho utilizzato l’alimentatore di un vecchio telefono) e una volta eliminato il contenitore e rimosso i puntali per la presa elettrica (spesso sono fissati ad incastro, ma alcune volte sono saldati) è necessario saldare due spezzoni di filo, di colore diverso (nell’esempio nero e blu), al posto dei puntali, che andranno, poi, collegati alla spina IEC320 (foto 1, 2, 3).
Siamo giunti al cablaggio vero e proprio, anche qui nulla di complicato; partendo dalla spina IEC320, occorre raggiungere direttamente una della prese, nell’altra scatola, con un cavo, in questo caso il nero (visibile in tutte le foto) che andrà successivamente “cavallottato” a tutte le altre, stessa cosa vale per la messa a terra di colore giallo-verde (foto 1,2,5,6); procedere a cablare la restante linea ai Relay, partendo dalla spina IEC320, e raggiungendo il contatto comune (C) del primo relay e realizzando una serie di cavallotti fino ad unire tutti gli altri contatti comuni, a questo punto l’alimentazione dei Relay è completata; restano da completare le singole linee che alimenteranno ciascuna presa scegliendo quale comportamento si vuole ottenere alla prima accensione.
-
Se, quando viene fornita alimentazione al sistema, le prese dovranno essere alimentate (accese) a poi, controllare, attraverso il software l’eventuale spegnimento, ciascuna presa dovrà essere collegata al contatto NC (normalmente chiuso).
-
Se, quando viene fornita alimentazione al sistema, le prese dovranno essere disalimentate (spente) a poi, controllare, attraverso il software l’eventuale accensione, ciascuna presa dovrà essere collegata al contatto NA (normalmente aperto).
Se non già fatto in precedenza, per ciascun punto fin qui illustrato, occorre procedere a fissare le componenti con fascette e colla a caldo; ho tralasciato, volutamente, i passaggi sull’uso di puntalini, morsetti, connettori, saldature per non essere inutilmente prolisso e lasciando a ciascuno la scelta di come effettuare le varie giunzioni, in ogni caso le fotografie allegate illustrano a sufficienza il metodi da me adottati.
Dopo aver copiato il sistema operativo Debian sulla MicroSD, che non illustro in quanto esistono già molti tutorial in rete, inserita e avendo avviato Raspberry PI, attraverso un collegamento SSH, ottenuto l’accesso alla shell si procederà alla creazione la directory, nella quale copiare gli script indicati in seguito.
Per abitudine, concentro i vari script nella directory /usr/local/scripts, potrete scegliere se utilizzare la stessa, oppure apportare alcune modifiche, agli script, che, in caso, indicherò.
Codice
# ---------------------------------------------------------------------------------- # - File Name : initpowerstrip.sh # - Author : Nicola Montemurro # - Administrator : Nicola Montemurro - Mobile: XXX- # - Create : 06/10/2021 # - Last Update : 06/10/2021 # - Description : File di inizializzazione GPIO (ciabatta) # - Position : /usr/local/scripts # - Note : NON modificare senza AUTORIZZAZIONE dell'AMMINISTRATORE # ----------------------------------------------------------------------------------- #!/usr/bin/bash MAILINGLIST="emailaddress1@domain.ext emailaddress2@domain.ext" declare -a gpiorelay=("26" "21" "20" "19" "16" "13" "6" "5") gpioinit() { for element in ${gpiorelay[@]} do if [ -h /sys/class/gpio/gpio$element ] then echo $element > /sys/class/gpio/unexport fi echo $element > /sys/class/gpio/export ### INIT GPIO as OUT direction echo "out" > /sys/class/gpio/gpio$element/direction ### INIT GPIO as STATE 1 (LOW/OFF) echo 1 > /sys/class/gpio/gpio$element/value # cat /sys/class/gpio/gpio$element/value echo GPIO$i initializated sleep 1.1 done } gpioinit UPTIME=`uptime -s` #echo "System Started on $UPTIME" | mail -s "Powerstrip01 has been initializated" $MAILINGLIST unset gpiorelay
Script “initpowerstrip.sh”, serve ad inizializzare le GPIO (General Purpose Input/Output) di Raspberry PI, deve essere eseguita solo una volta all’avvio della SBC; per farlo è sufficiente aggiungere il codice seguente al file /etc/rc.local, appena prima del costrutto “exit 0” sostituendo, all’occasione, “/usr/local/scripts” con il path della directory scelta.
if [ -f /usr/local/scripts/initpowerstrip.sh ] then sudo /usr/bin/bash /usr/local/scripts/initpowerstrip.sh fi
Lo script powerstrip.sh è, di fatto, il cuore del sistema, una volta copiato nella directory scelta è sufficiente lanciarlo specificando il canale sul quale si intende agire insieme allo stato che si vuole ottenere, es.
sudo /usr/bin/bash /usr/local/scripts/powerstrip.sh CH1 OFF sudo /usr/bin/bash /usr/local/scripts/powerstrip.sh CH7 ON
# ---------------------------------------------------------------------------------- # - File Name : powerstrip.sh # - Author : Nicola Montemurro # - Administrator : Nicola Montemurro - Mobile: XXX- # - Create : 06/10/2021 # - Last Update : 06/10/2021 # - Description : File di inizializzazione GPIO (ciabatta) # - Position : /usr/local/scripts # - Note : NON modificare senza AUTORIZZAZIONE dell'AMMINISTRATORE # ----------------------------------------------------------------------------------- #!/usr/bin/bash CHANNEL=$1 STATE=$2 if [ ! -z $CHANNEL ] || [ ! -z $STATE ] then # echo $CHANNEL # echo $STATE case $CHANNEL in CH1) ch=26 ;; CH2) ch=21 ;; CH3) ch=20 ;; CH4) ch=19 ;; CH5) ch=16 ;; CH6) ch=13 ;; CH7) ch=6 ;; CH8) ch=5 ;; *) echo "Parameter error" ;; esac case $STATE in ON) state=0 ;; OFF) state=1 ;; *) echo "Parameter error" ;; esac VALUENOW=`cat /sys/class/gpio/gpio$ch/value` [ $VALUENOW -ne $state ] && echo $state > /sys/class/gpio/gpio$ch/value echo Relay $1 $2 else echo echo "Usage $0 [ CH1 | CH2 | CH.. ] [ ON | OFF ]" echo exit 2 fi
Lo script “getallstate.sh”, non svolge alcun compito nella gestione delle alimentazione, se lanciato restituisce lo stato all’istante, di tutti i canali della scheda relays.
sudo /usr/bin/bash /usr/local/scripts/getallstate.sh
ottenendo, ad esempio, questo output.
CH1 ON GPIO26 CH2 ON GPIO21 CH3 OFF GPIO20 CH4 OFF GPIO19 CH5 OFF GPIO16 CH6 OFF GPIO13 CH7 OFF GPIO6 CH8 OFF GPIO5
# ---------------------------------------------------------------------------------- # - File Name : getallstate.sh # - Author : Nicola Montemurro # - Administrator : Nicola Montemurro - Mobile: XXX- # - Create : 06/10/2021 # - Last Update : 06/10/2021 # - Description : File per cambio di stato di tutti GPIO (ciabatta) # - Position : /usr/local/scripts # - Note : NON modificare senza AUTORIZZAZIONE dell'AMMINISTRATORE # ----------------------------------------------------------------------------------- #!/bin/bash typeset -a gpiorelay=("26" "21" "20" "19" "16" "13" "6" "5") for i in ${gpiorelay[@]} do STATE=`cat /sys/class/gpio/gpio$i/value` case $i in 26) channel=CH1 ;; 21) channel=CH2 ;; 20) channel=CH3 ;; 19) channel=CH4 ;; 16) channel=CH5 ;; 13) channel=CH6 ;; 6) channel=CH7 ;; 5) channel=CH8 ;; esac case $STATE in 0) state=ON ;; 1) state=OFF ;; esac echo -e "$channel\t$state\tGPIO$i" sleep 0.1 done
Di seguito è indicato un esempio, qualora si volesse pianificare l’esecuzione secondo calendario, attraverso l’uso Crontab.
### POWER ON Week Days 0 9 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH1 ON 0 9 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH2 ON 0 14 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH1 ON 0 14 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH2 ON ### POWER OFF Week Days 25 11 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH1 OFF 30 11 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH2 OFF 25 18 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH1 OFF 30 18 * * 1-5 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH2 OFF ### POWER ON Week End 0 11 * * 6-7 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH1 ON 0 11 * * 6-7 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH2 ON ### POWER OFF Week End 55 13 * * 6-7 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH1 OFF 0 14 * * 6-7 /usr/bin/bash /usr/local/scripts/powerstrip.sh CH2 OFF