Chi possiede un po’ di verde presso la propria abitazione, con l’arrivo dell’Estate è costretto a rimboccarsi le maniche per dedicarsi all’irrigazione del proprio giardino. Questa attività per alcune persone potrà essere anche divertente ma per quanto mi riguarda la considero abbastanza noiosa. E’ per questo che un giorno di circa tre anni fa ho pensato di utilizzare un vecchio Raspberry Pi B che avevo in un cassetto per cercare di automatizzare l’irrigazione del mio giardino. Da allora è passato po’ di tempo e il lavoro fatto si è concretizzato in un progetto che prende il nome di piGarden.
PiGarden è uno script bash che permette di trasformare un Raspberry Pi in una centralina per il controllo dell’irrigazione. Queste sono le principali caratteristiche:
- Definizione delle zone da irrigare (ognuna comandata dalla propria elettrovalvola comandata da un relativo GPIO)
- Supporto per elettrovalvole mono-stabili e bi-stabili
- Possibilità di schedulazione avvio e termine irrigazione per le varie zone
- Controllo condizioni meteo, tramite sensore hardware o servizio on-line, per prevenire irrigazioni in presenza di pioggia
- Espandibilità per mezzo di appositi driver facilmente scrivibili (elettrovalvole comandate da apparecchi esterni, interfacciamento con servizi meteo online)
- API esposte su socket tcp per potere controllare piGarden da software terzi
- Architettura master-slave che permette di fare comunicare più moduli piGarden tra di loro, magari per gestire l’irrigazione di vaste aree verdi.
- Gestione eventi (avvio irrigazione, stop irrgazione, cambio condizioni meteo, ecc…); ad ogni evento è possibile associare un proprio script bash per gli usi più disparati (invio notifiche via mail. ecc..)
L’utilizzo di piGarden è strettamente legato alla linea di comando linux costringendoci frequentemente a smanettare con tastiera sul nostro amato terminale. Purtroppo questa via non è sempre tra le più comode, ho quindi sviluppato un’interfaccia web di gestione che ci rende tutto più comodo. Questa prende il nome di piGardenWeb (si lo so: ho molta fantasia), con la quale potremo amministrare l’impianto di irrigazione semplicemente con il nostro smartphone o pc.
Ma andiamo con ordine e vediamo di cosa abbiamo bisogno per realizzare il nostro impianto.
Lista della spesa
Il materiale che sto per indicare è un’indicazione di massima e non vuole essere certo un elenco esaustivo, sono quindi delle indicazioni di massima riferita al mio caso d’uso ed ognuno può adattarla alle proprie esigenze.
Starter Kit Colibri
Per iniziare mi sono affidato ad uno Starter Kit Colibi di Claber. Il contenuto di questo kit permette di servire l’irrigazione di un’unica zona di 50 mt/q. Dato che a me occorreva gestire tre zone, ho seguito un po’ l’istinto e ho separato i vari componenti per creare le varie zone che mi servivano. In aggiunta ho poi acquistato separatamente altri tubi e innesti che mi servivano completare l’impianto di distribuzione.
Nel kit sono presenti cinque irrigatori Colibri da interrare del giardino. Quando l’impianto non è in funzione gli irrigatori rimangono invisibili, quando invece viene azionato, grazie alla pressione dell’acqua questi si innalzano ed iniziano ad irrigare il terreno circostante.
Elettrovalvole
Dobbiamo acquistare tante elettrovalvole quanto vogliamo siano le zone gestite. Dobbiamo inoltre scegliere la tipologia dell’elettrovalvola: mono-stabile o bi-stabile. La differenza tra le due tipologia è quelle mono-stabili hanno bisogno di un’alimentazione continua affinché queste rimangano eccitate (e quindi aperte per fare irrigare), mentre le bi-stabili necessitano di un piccolo impulso elettrico iniziale per eseguire l’apertura, e di un ulteriore impulso con tensione negativa per eseguire la chiusura. Il vantaggio è che non dobbiamo tenere sotto tensione l’elettrovalvola per tutto il tempo di irrigazione. Io ho optato per l’utilizzo di elettrovalvole bi-stabili ed ho utilizzato una semplice batteria a 9Vper impartire i comandi di apertura e chiusura.
L’elettrovalvola che ho scelto è la Claber 78215-10 Elettrovalvole 9V
Se invece avete intenzione di utilizzare elettrovalvole monostabili dovrete munirvi anche del’apposito alimentatore con cui azionarle.
Raspberry Pi
Come centralina ho utilizzato un vecchio Raspberry Pi B (di prima generazione), ma va benissimo qualsiasi altra versione, anche più recente.
Relè
In accoppiata con il nostro Raspy ho preso un paio di moduli SunFounder 4 Channel 5V Relay Shield Module. Ogni modulo gestisce quattro relè. Due relè serviranno per simulare un doppio deviatore per gestire l’inversione di polarità utilizzata per comandare l’avvio e la chiusura delle elettrovalvole bi-stabili. I restanti relè saranno dedicati ognuno ad una elettrovalvola.
Sensore di rilevamento pioggia
Come sensore di rilevamento pioggia ho acquistato quello che vedete qui sotto. Si trova online a pochi euro. Se non volete utilizzare un sensore hardware sarà possibile controllare lo stato meteo direttamente da OpenWeatherMap o Wunderground.
Assemblaggio e collegamenti
Adesso che sappiamo cosa ci serve procediamo all’assemblaggio ed al collegamento dell singole parti.
Come detto in precedenza abbiamo due possibilità, gestire elettrovalvole bi-stabili oppure mono-stabili.
Impianto con elettrovalvole bi-stabili
Come detto prima l’apertura o la chiusura dell’elettrovalvola viene eseguita a seconda della polarità applicatagli. Per gestire l’inversione della polarità ho simulato un doppio deviatore utilizzando due relè del primo modulo. Il seguente schema illustra il funzionamento del doppio deviatore.
Le due coppie A e B indicano i morsetti dei due relè, ai quali arriva in ingresso il polo positivo e negativo della batteria a 9V. Quando entrambi i relè sono commutati sul A, il doppio deviatore lascia passare tensione positiva all’elettrovalvola (M), mentre quando sono commutati su B fanno arrivare una tensione negativa.
Ricapitolando, avremo a monte di tutto una batteria a 9V collegata ad un doppio deviatore con il quale viene gestita la polarità. In uscita dal doppio deviatore vi saranno collegati i vari relè che quando chiusi trasmetteranno il segnale di apertura/chiusure alle rispettive elettrovalvole.
Riporto qui di seguito lo schema completo della centralina e subito dopo il dettaglio dei collegamenti del doppio deviatore e del primo relè di pilotaggio dell’elettrovalvola.
Nello schema vediamo che il polo positivo della batteria 9V viene collegato al morsetto 2 del primo relè (SW1) del modulo (MSW1), mentre il polo negativo sempre al morsetto 2 del secondo relè (SW2). Al morsetto 1 del relè SW1 viene collegata la massa delle elettrovalvole: vediamo infatti che questo va a collegarsi sul polo negativo della prima elettrovalvola (EV1). L’uscita del morsetto 1 del relè SW2 viene invece collegata in entrata agli altri relè che si occupano di impartire il segnale di apertura/chiusura alle elettrovalvole. In questo caso vediamo che viene collegata al morsetto 2 del relè SW3 che si occupa di fare arrivare il segnale alla prima elettrovalvola.
L’inversione di polarità viene invece gestita dai seguenti due ponti:
- Relè SW1, morsetto 1 <——> relè SW2, morsetto 3
- Relè SW1, morsetto 3 <——> relè SW2, morsetto 1
Per finire qui di seguito riporto la foto dei collegamenti fatti sui tre relè.
Impianto con elettrovalvole mono-stabili
Se avete optato per l’utilizzo di elettrovalvole mono-stabili, le connessioni si semplificano e non servirà più la batteria a 9V che veniva utilizzata per impartire l’impulso di apertura/chiusura delle elettrovalvole. Sarà invece necessario che vi dotiate di un alimentatore/trasformatore che possa fornire l’alimentazione a corrente continua (generalmente 24V, 12V o 9V) richiesta dalle elettrovalvole mono-stabili che deciderete di utilizzare. I due relè dedicati all’inversione di polarità non aranno più necessari e sara sufficiente collegare il polo positivo del vostro alimentatore all’ingresso dei relè che comanderanno l’apertura/chiusura dell’elettrovalvole. Il polo negativo lo potrete invece collegare direttamente al rispettivo contatto delle elettrovalvole.
Di seguito riporto il dettaglio dello schema di collegamento.
Collegamento del sensore di pioggia
Il sensore che ho utilizzato prevede un’alimentazione variabile da 3.3 a 5 Volts e due uscite, una digitale e l’altra analogica, che ci indicano lo stato meteorologico. E’ inoltre presente un trimmer con cui è possibile regolare la tolleranza di rilevamento.
Come si può notare nella foto qui sotto, ho collegato al pin VCC e GND rispettivamente l’alimentazione di 3.3V e la massa provenienti dal Raspberry Pi. Il pin OD (output digital) l’ho collegato in ingresso ad un porta GPIO in modo da fare rilevare al raspberry la presenza di pioggia. Su questo pin viene emesso normalmente un segnale a 3.3V, in presenza di pioggia invece viene azzerato il voltaggio passando a 0V. Ne consegue quindi che la porta GPIO a cui è collegato assumerà il valore 1 in assenza di pioggia e il valore 0 con pioggia.
Connessioni GPIO
Tutto il progetto è stato realizzato utilizzato un Raspberry Pi “modello B” di prima generazione e quindi tutte le connessione che indicherò faranno riferimento alla piedinatura di questo modello specifico. Niente vieta però di utilizzare un Raspberry Pi diverso da quello indicato o di eseguire le connessioni dei vari apparati a porte GPIO diverse da quelle qui specificate. Infatti nello script di gestione che illustrerò nel prossimo articolo, sarà possibile rimappare ogni elemento andando a definire gli ingressi/uscite in un apposito file di configurazione.
Nella tabella che segue sono riepilogate le connessioni GPIO eseguite e le connessioni per fornire l’alimentazione ai vari moduli/sensori. La colonna Physical indica la numerazione fisica corrispondente ai vari piedini presenti sul Raspberry Pi, mentre la colonna BCM indica l’id con cui vengono identificate le porte GPIO. Questi id verranno poi utilizzati nel file di configurazione dello script per mappare i vari elementi.
Ogni elemento della tabella può essere ritrovato nello schema elettrico riportato qui sotto.
Per eseguire eventuali verifiche del corretto collegamento dei vari pin sul Raspberry Pi è possibile utilizzare da shell il comando GPIO con il quale, oltre a programmare e impostare lo stato delle varie porte, è anche possibile visualizzarne lo stato. Questa utility non è direttamente presente ma deve essere installata mediante la libreria wiringPi, la quale sarà anche necessaria per il corretto funzionamento dello script di gestione.
Installazione wiringPi
L’installazione può essere eseguita impartendo i seguenti comandi da shell direttamente dalla propria home:
1 2 3 4 5 6 7 |
sudo apt-get install git-core sudo apt-get update sudo apt-get upgrade git clone git://git.drogon.net/wiringPi cd wiringPi git pull origin ./build |
Una volta eseguiti installato wiringPi è possibile utilizzare il comando GPIO readall per visualizzare lo stato di tutte le porte GPIO, che nel mio caso sono come segue:
|
Installazione e configurazione del software
Come detto in precedenza piGarden è controllato dal uno script bash di gestione che il vero e proprio cuore del sistema. Oltre a questo è possibile installare anche piGardenWeb che ci permette di gestire il nostro impianto da una comoda interfaccia web. I due componenti comunicano tra loro tramite socket tcp e possono risiedere sia sullo stesso raspberry che su due diversi.
Vediamo ora in dettaglio l’installazione e configurazione dello script bash.
piGarden.sh, lo script di gestione
Installazione e configurazione di piGarden
Per installare i vari componenti software occorre essere collegati al nostro Raspberry via ssh ho da console per impartire i comandi necessari nel terminale.
L’installazione verrà eseguita nella home del vostro utente (generalmente l’utente pi) e sarà necessario utilizzare git per scaricare piGarden del proprio repository di github. Procediamo quindi ad aggiornare il sistema ed a installare git:
1 2 3 |
sudo apt-get update sudo apt-get upgrade sudo apt-get install git |
bene, una volta installato git procediamo scaricando piGarden:
1 2 |
cd git clone https://github.com/lejubila/piGarden.git |
in questo modo verrà creata la cartella piGarden che conterrà lo script piGarden.sh ed altre varie sottocartelle di cui vi parlerò più avanti.
Ora procediamo con l’installazione delle librerie e pacchetti necessari per fare funzionare piGarden: wiringPi, curl, gzip, jq.
Curl, Gzip, Grep, Sed, Ucspi-tcp:
1 2 |
cd sudo apt-get install curl gzip grep sed ucspi-tcp |
Jq:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
cd sudo apt-get install flex -y sudo apt-get install bison -y sudo apt-get install gcc -y sudo apt-get install make -y sudo apt-get install libtool autoconf automake gettext autotools-dev -y sudo apt-get install dh-autoreconf -y wget https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz tar xfvz jq-1.5.tar.gz cd jq-1.5 # Con questo comando verranno presentati diversi errori, non ci fare caso e procedi avanti tranquillamente autoreconf -i ./configure --disable-maintainer-mode make sudo make install |
WiringPi:
1 2 3 4 5 |
cd git clone git://git.drogon.net/wiringPi cd wiringPi git pull origin ./build |
Adesso che abbiamo installato tutto il necessario possiamo provvedere a configurare piGarden. Per fare questo dobbiamo copiare in /etc il file di configurazione di esempio:
1 2 |
cd sudo cp piGarden/conf/piGarden.conf.example /etc/piGarden.conf |
Apriamo adesso il file di configurazione appena creato ed andiamo a modificare i parametri di configurazione come più ci fa comodo.
Innanzi tutto definiamo la tipologia di elettrovalvole che abbiamo utilizzato nel nostro impianto, bi-stabili o mono-stabili. Per fare questo scorriamo il file fintanto che non troviamo la definizione relativa a EV_MONOSTABLE. Impostando il valore ad uno imposteremo il supporto per le elettrovalvole mono-stabili, se invece imposteremo il valore zero, verrà impostato il supporto per le elettrovalvole bi-stabili:
1 2 3 4 5 |
# Elettrovalvole mono-stabili EV_MONOSTABLE=1 # Elettrovalvole bi-stabili EV_MONOSTABLE=0 |
Scorrendo ancora nel file di configurazione troveremo le seguenti definizioni:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Numero totale di elettrovalvole EV_TOTAL=6 # Definizione delle elettrovalvole EV1_ALIAS="1" # EV1_GPIO=17 EV1_NORAIN=1 EV2_ALIAS="2" # EV2_GPIO=27 EV3_ALIAS="3" # EV3_GPIO=22 EV4_ALIAS="4" # EV4_GPIO=18 EV5_ALIAS="5" # EV5_GPIO=23 EV6_ALIAS="6" # EV6_GPIO=24 |
questa configurazione è già pronta per fare gestire sei zone (elettrovalvole) e per poter funzionare su di un Raspberry Pi B collegato ai vari moduli hardware come descritto nei precedenti post. Rimane soltanto da variare i nomi delle zone (alias) se quelli impostati di default non vi soddisfano. I nomi vanno assegnati alle variabili EV1_ALIAS, EV2_ALIAS, EV3_ALIAS, ecc.. e non devono contenere spazi.
Se invece volete diminuire o aumentare le zone gestite, dovete intervenire sulla variabile EV_TOTAL assegnandovi il numero totale delle elettrovalvole presenti nell’impianto, poi per ognuna di esse definite altre due variabili in cui indicare il nome della zona (alias) e la porta GPIO dove è collegata l’elettrovalvola. La coppia di variabili dovrà rispettare la seguente nomenclatura, dove x indica il numero della zona che viene definita:
EVx_ALIAS=”Nome_zona”
EVx_GPIO=17
EVx_NORAIN=1
nella prima variabile viene definito il nome della zona, che dovrà contenere una stringa alfanumerica senza spazi, mentre la seconda indica la porta GPIO su cui è collegata l’elettrovalvola della zona. La terza definizione indica che la zona non sarà soggetta a interruzione di irrigazione in caso di pioggia, se la definizione non viene inserita, la zona sarà soggetta alle condizioni meteo.
Nel caso in cui l’elettrovalvola venga gestita da una scheda di terze parti invece di essere collegata direttamente su un GPIO del raspberry, nel parametro EVx_GPIO andrà inserito il nome dell’apposito driver più i parametri che questi richiede. Per maggiori informazioni su questo aspetto fare riferimenti al post “piGarden: gestione driver“.
Scorrendo ancora più in basso nel file di configurazione troviamo le seguenti definizioni:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Definisci il servizio online da utilizzare per il controllo delle condizioni meteo, puoi scegliere openweathermap oppure wunderground WEATHER_SERVICE="openweathermap" # Parametri di openweathermap, definisce l'api key e il luogo per recuperare lo stato meteo online OPENWEATHERMAP_KEY="" OPENWEATHERMAP_LOCATION="q=Pieve%20a%20Nievole,it" # https://openweathermap.org/current OPENWEATHERMAP_TZ="Europe/Rome" # Time zone # Parametri di wunderground, definisce l'api key e il luogo per recuperare lo stato meteo online WUNDERGROUND_KEY="" WUNDERGROUND_LOCATION="IT/Pieve%20a%20Nievole" # http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&amp;MR=1 # Blocca l'irrigazione se l'ultima pioggia rilevata online è avvenuta nell'ultima quantità di tempo inserita. # Il tempo è espresso in secondi. Quindi inserendo 86400, se nelle ultime 24 ore ha pioviuto viene bloccata l'irrigazione. Inserendo il valore zero nonviene eseguito nessun controllo. NOT_IRRIGATE_IF_RAIN_ONLINE=86400 # Il parametro è simile a quello precedente, il controllo però anziché essere fatto attingendo a wunderground, viene eseguito direttamente sul sensore se installato. Inserendo il valore zero nonviene eseguito nessun controllo. NOT_IRRIGATE_IF_RAIN_SENSOR=86400 |
Con i parametri sopra riportati possiamo configurare il controllo sulle condizioni meteorologiche per far in modo che venga evitata l’irrigazione in caso di pioggia. Come avevo spiegato prcedentemente, abbiamo a disposizione due tipi di controllo meteo: tramite le api di alcuni servizi online oppure, se l’abbiamo integrato nella centralina, tramite sensore hardware.
Nel file di configurazione è presente la variabile RAIN_GPIO che indica la porta GPIO dove verrà collegato il sensore hardware di rilevamento pioggia e naturalmente siete liberi di variarlo a vostro piacimento. Se non avete integrato il sensore hardware nella vostra installazione, dovrete impostata la variabile RAIN_GPIO senza valore per evitare rilevazioni errate da parte di piGarden, lo fate impostando la variabile in questo modo:
1 2 |
# Id del GPIO usato per collegare il sensore di rilevamento pioggia RAIN_GPIO= |
Meteo online
Se decidiamo di utilizzare un servizio online, potremo scegliere tra OpenWeatherMap (gratuito) e Wunderground (a pagamento). Fatta questa scelta dovremo indicare il nome del servizio nella variabile WEATHER_SERVICE inserendo il valore openweathermapoppure wunderground.
Per completare la configurazione dovremo recuperare l’api key, che uno dei due servizi ci ha assegnato, e inserirla nell’apposita variabile di configurazione (OPENWEATHERMAP_KEY o WUNDERGROUND_KEY). Dovremo anche indicare la località di rifermento per la quale dobbiamo recuperare le condizioni meteo definendole in OPENWEATHERMAP_LOCATION o WUNDERGROUND_LOCATION. Nel file di configurazione di esempio è definita la località Pieve a Nievole. Per costruire la stringa che identifica la vostra località, sia OpenWeatherMap che Wunderground vi vengono in aiuto con appositi strumenti online.
Come ultima cosa dobbiamo indicare nella variabile NOT_IRRIGATE_IF_RAIN_ONLINE quanti secondi dovranno trascorrere dall’ultima pioggia per fare si che l’impianto di irrigazione riprenda ad irrigare in modo regolare. Il valore inserito di default è 86400 secondi, ovvero 24 ore. In questo modo se nelle ultime 24 ore ha piovuto, la centralina interromperà l’irrigazione se in esecuzione oppure eviterà che questa si avvi se impartiremo il comando di apertura di una elettrovalvola.
Nel caso abbiate scelto di installare un sensore hardware, similmente a come indicato prima, abbiamo a disposizione la variabile NOT_IRRIGATE_IF_RAIN_SENSOR nella quale dobbiamo indicare sempre il numero di secondi che dovranno passare dall’ultima pioggia che il sensore ha rilevato, per far si che la centralina riprenda ad irrigare in modo regolare. Anche in questo caso il valore di default è di 24 ore.
Nel caso non volessimo eseguire nessun controllo sulle condizioni meteorologiche basterà assegnare il valore zero alle due variabili NOT_IRRIGATE_IF_RAIN_ONLINE e NOT_IRRIGATE_IF_RAIN_SENSOR.
Come già indicato più in alto è inoltre possibile escludere alcune zone dal controllo delle condizioni meteo in modo da non interrompere l’irrigazione in caso di pioggia. Un classico utilizzo potrebbe essere per l’irrigazione di zona al coperto. Per eseguire questa impostazione basterà definire il parametro EVx_NORAIN=1 dove x sarà il numero dell’elettrovalvola interessata.
Seguendo con la configurazioni troviamo i parametri relativi al socket server che espone le api per il controllo di piGarden via rete. Il socket server è utilizzato come canale di comunicazione con piGardenWeb, l’interfaccia web di controllo. Le variabili di configurazioni interessate sono le seguenti:
1 2 3 4 5 6 7 8 9 |
# Indirizzo ip sul quale il socket server rimane in ascolto. E' possibile impostare il valore 0 perché rimanga in ascolto su tutti gli indirizzi ip del sistema TCPSERVER_IP="127.0.0.1" # Porta tcp su cui il socket server rimane in ascolto TCPSERVER_PORT="8084" # Utente e password che i client devono utilizzare per stabilire una connessione tramite socket server TCPSERVER_USER="" TCPSERVER_PWD="" |
Se avete intenzione di installare piGardenWeb e piGarden sullo stesso Raspberry potete lasciare tranquillamente i parametri sopra elencati con i valori di default. Se invece avete intenzione di installare piGardenWeb su un’altro hardware oppure di esporre le api del socket server in rete, consiglio di impostare un utente e password in TCPSERVER_USER e TCPSERVER_PWD.
Altri due parametri che possono interessare sono LOG_FILE e LOG_FILE_MAX_SIZE che indicano rispettivamente la posizione del file di log che lo script genera e la dimensione massima che questo potrà avere. Una volta raggiunta questa dimensione il file di log verrà compresso e rinominato dando così spazio ad un nuovo file di log.
Le altre variabili STATUS_DIR, GPIO, JQ, CURL, WC, GZIP, MV, TR, CUT, TCPSERVER, CRONTAB, GREP, SED, READLINK, STAT contengono percorsi e nomi dei comandi di sistema utilizzati dallo script.
In fine sono presenti un altro insieme di variabili utilizzate per definire le porte GPIO e gli stati da utilizzare per la gestione dell’alimentazione del elettrovalvole e per la connessione del sensore meteo.
Utilizzo dello script
Ora che abbiamo installato piGarden vediamo come utilizzarlo.
Inizializzazione centralina
Prima di potere eseguire qualsiasi operazione la centralina deve essere inizializzata. Questa operazione configura nella giusta modalità le porte GPIO ed eseguire la chiusura di tutte le elettrovalvole. L’inizializzazione avviene digitando il seguente comando:
1 |
/home/pi/piGarden/piGarden.sh init |
Il mio consiglio è quello di inserire il comando nel crontab utente in modo che venga eseguito all’avvio del Raspberry Pi. Potete farlo fare direttamente a piGarden con il seguente comando:
1 |
/home/pi/piGarden/piGarden.sh set_cron_init |
Apertura e chiusura delle elettrovalvole
L’apertura e la chiusura delle elettrovalvole avviene passando a piGarden.sh l’argomento open o close seguito dall’alias della zona come definito nel file di configurazione. Esempio:
1 2 |
/home/pi/piGarden/piGarden.sh open giardino_posteriore /home/pi/piGarden/piGarden.sh close giardino_posteriore |
in questo modo viene prima aperta e poi chiusa l’elettrovalvola relativa alla zona definita con il nome giardino_posteriore.
Se vogliamo schedulare l’apertura e la chiusura di questa zona, possiamo inserire i due comandi nel crontab.
Se non volete editare manualmente il crontab potete delegare a piGarden l’inserimento delle schedulazioni di avvio e chiusura utilizzando i seguenti comandi:
1 2 3 4 5 |
# Imposta una schedulazione crontab per l'apertura di zona alla data e ora specificata /home/pi/piGarden/piGarden.sh add_cron_open alias m h dom mon dow # Imposta una schedulazione crontab per la chiusura di zona alla data e ora specificata /home/pi/piGarden/piGarden.sh add_cron_close alias m h dom mon dow |
Controllo condizioni meteorologiche
Per fare si che venga gestito il ritardo e l’interruzione dell’irrigazione in caso di pioggia lo script deve interrogare costantemente il servizio online e/o il sensore hardware. Per fare questo andranno inserite nel crontab le apposite schedulazioni. Lo potete fare utilizzando direttamente piGarden, in questo modo:
1 2 3 |
/home/pi/piGarden/piGarden.sh set_cron_check_rain_online /home/pi/piGarden/piGarden.sh set_cron_check_rain_sensor /home/pi/piGarden/piGarden.sh set_cron_close_all_for_rain |
Altri comandi
PiGarden mette a disposizione molti altri comandi, potete vederli in dettaglio dal messaggio di aiuto che compare avviando lo script senza alcun parametro.
piGardenWeb, il pannello web di amministrazione
Il pannello di amministrazione web ci permetterà di comandare tramite browser da pc o smartphone, le diverse zone del nostro impianto di irrigazione, di programmare le schedulazioni e di tenere sotto controllo le condizioni atmosferiche rilevate dal servizio online configurato in piGarden.
L’applicazione web è basata sul framework Laravel 5.2 ed alcuni componenti di Backpack for Laravel. Gira sia su apache che nginx ed ha bisogno di un database per gestire le credenziali di accesso al pannello.
Per motivi di leggerezza in questo post verrà indicato come installarlo su nginx utilizzando sqlite come base dati.
Per funzionare piGardenWeb necessita di alcuni pacchetti tra cui php 5.5.9 o superiore. Se sul vostro Raspberry avete installato Raspbian 9 stretch, sul sistema sarà presente php 7. Di seguito sono riportate le istruzioni sia per Raspbian 9 stretch che per il più vecchio Raspbian 8 jessie con php 5.
Installazione prerequisiti
L’installazione può essere eseguita come segue:
1 2 3 4 5 |
# Per raspbian 8 jessie (php5) sudo apt-get install nginx php5-fpm php5-cli php5-mcrypt php5-sqlite git # Per raspbian 9 stretch (php7) sudo apt install nginx php-fpm php-cli php-mcrypt php-sqlite3 git |
Una volta installato i pacchetti php è necessario fare alcune modifiche al file /etc/php5/fpm/php.ini. Se avete Raspbian 9 con php7, il file da modificare è /etc/php/7.0/fpm/php.ini. Variate il file in modo da decommentare la linea relativa a cgi.fix_pathinfo al quale andrà assegnato il valore zero, come segue:
1 |
cgi.fix_pathinfo=0 |
Dobbiamo abilitare i moduli php sqlite e mcrypt:
1 2 3 4 5 6 7 |
# Per raspbian 8 jessie (php5) sudo php5enmod mcrypt sudo php5enmod sqlite3 # Per raspbian 9 stretch (php7) sudo phpenmod mcrypt sudo phpenmod sqlite3 |
A questo punto scarichiamo con git piGardenWeb nella propria home:
1 2 |
cd git clone https://github.com/lejubila/piGardenWeb.git |
Configuriamo nginx prendendo il file di configurazione presente in piGardenWeb e personalizzandolo se necessario:
1 2 3 4 5 6 7 8 9 |
# Per raspbian 8 jessie (php5) cd sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original sudo cp piGardenWeb/virtualhost/nginx/default /etc/nginx/sites-available/default # Per raspbian 9 stretch (php7) cd sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original sudo cp piGardenWeb/virtualhost/nginx/default-php7 /etc/nginx/sites-available/default |
Creiamo adesso il file di configurazione di piGardenWeb, creiamo e inizializiamo il database, generiamo l’application key (necessaria per laravel) e impostiamo i giusti permessi ai file:
1 2 3 4 5 6 7 8 |
cd cd piGardenWeb cp .env.example .env touch database/piGarden.sqlite ./artisan key:generate ./artisan migrate sudo chown -R pi:www-data /home/pi/piGardenWeb/ sudo chmod -R g+w storage database database/piGarden.sqlite |
Facciamo partire il server web nginx:
1 |
sudo service nginx restart |
Adesso, avviamo il socket server che permette a piGardenWeb di comunicare con piGarden. Lo facciamo impartendo il seguente comando da terminale:
1 2 |
cd ./piGarden.sh start_socket_server force |
Dashboard
A questo punto aprendo il browser e puntando a su http://indirizzo_ip_del_tuo_raspberry_pi dovresti visualizzare la home page di piGardenWeb:
Cliccando sul link Registrati posto in alto a destra è possibile creare l’utente con cui loggarsi successivamente al pannello di amministrazione:
Creato il primo utente è possibile quindi loggarsi dall’apposita pagina di login:
Una volta loggati ci troveremo sulla dashboard di piGardenWeb da dove potremo aprire e chiudere le elettrovalvole delle varie zone, controllare lo stato dell’ultima pioggia e le attuali condizioni meteorologiche:
Una volta arrivati alla dashboard, dobbiamo eseguire il setup iniziale in modo che vengano creati i crontab necessari per l’inizializzazione della centralina all’avvio del sistema, per l’avvio automatico del socket server e per il monitoring delle condizioni meteorologiche. Per fare questo dovrete raggiungere il menu SETUP / Setup Iniziale e cliccare sul pulsante Esegui il setup.
Una volta eseguito il setup iniziale potremo disabilitare la registrazione pubblica degli utenti andando a variare il file .env ed impostando la variabile REGISTRATION_OPEN con il valore false:
1 |
REGISTRATION_OPEN=false |
Dal file .env sarà possibile anche variare i parametri smtp utilizzati per l’invio delle notifiche via mail e in particolare quelle per eseguire il reset della password:
1 2 3 4 5 6 7 8 |
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=465 MAIL_USERNAME=your_address@gmail.com MAIL_PASSWORD=your_password MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=your_address@gmail.com MAIL_FROM_NAME=piGardenWeb |
Oltre a quanto visto sopra da piGardenWeb potremo anche forzare l’apertura delle varie elettrovalvole in caso di pioggia e di gestire le schedulazioni di apertura e chiusura di ogni elettrovalvola:
Oltre alle schedulazioni è disponibile la funzione di “avvio ritardato”, questa ci permette di avviare l’irrigazione delle singole zone subito o dopo alcuni minuti, impostando nell’immediato anche la durata dell’irrigazione. A differenza della schedulazioni questa viene eseguita una sola volta e non verrà più ripetuta una volta terminata.
Possiamo anche gestire, aggiungere o rimuovere gli utenti che potranno accedere al pannello di amministrazione:
Conclusioni
Siamo arrivati alla fine di questo lungo articolo, e spero che il progetto vi piaccia.
Ricordo in oltre che piGarden mette a disposizione altre funzioni avanzate come le seguenti, che vi invito ad approfondire sul sito ufficiale mentre per discuterne ci trovate su questa pagina dedicata nel forum.
- Gestione eventi
- Gestione driver
- piGarden + spb16ch: gestiamo fino a 128 zone nel nostro impianto di irrigazione
- Implementare un’architettura master/slave: controllare più piGarden remoti tramite un’installazione principale
- Utilizzare i moduli Sonoff per controllare l’elettrovalvole
Se vuoi restare aggiornato, seguici anche sui nostri social: Facebook , Twitter, YouTube, Google+, Telegram
AUTORI
lejubila: (David Bigagli)
“Appassionato di informatica, linux, Raspberry Pi, domotica”