Multipresa smart con Raspberry PI

Multipresa smart con Raspberry PI

1920 1200 Nicola Montemurro

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
Presa Bivalente e Trivalente

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

    Preferenze Privacy

    Quando visiti il nostro sito web, possono essere memorizzate alcune informazioni, di servizi specifici, tramite il tuo browser, di solito sotto forma di cookie. Qui puoi modificare le tue preferenze sulla privacy. Il blocco di alcuni cookie può influire sulla tua esperienza sul nostro sito Web e sui servizi che offriamo.

    Click to enable/disable Google Analytics tracking code.
    Click to enable/disable Google Fonts.
    Click to enable/disable Google Maps.
    Click to enable/disable video embeds.
    Il nostro sito web utilizza cookie, principalmente di terze parti. Personalizza le preferenze sulla privacy e/o acconsenti all'utilizzo dei cookie.