Impianto di irrigazione con Raspberry Pi: piGarden, lo script di gestione (quinta parte)

Eccoci giunti alla quinta parte di questa serie di post in cui ho descritto come realizzare una centralina di irrigazione costruita attorno ad un Raspberry Pi.

Oggi vi presento lo script bash di gestione della centralina che ho realizzato. Con questo viene gestito l’apertura e chiusura delle elettrovalvole, il rilevamento della pioggia e l’eventuale interruzione di irrigamento in base alla condizione meteorologica.

Lo script molto fantasiosamente l’ho chiamato piGarden ed possibile scaricarlo da github https://github.com/lejubila/PiGarden.

Qui di seguito descrivo come installarlo sul nostro Raspberry Pi (Raspbian Jessie).

Innanzitutto occorre collegarsi via ssh sul Raspberry. Una volta giunti sulla propria home (/home/pi) è necessario installare git, del quale ci serviremo per scaricare lo script da github e le altre librerie da cui dipende:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git

bene, una volta installato git procediamo scaricando piGarden:

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:

cd
sudo apt-get install curl gzip grep sed ucspi-tcp

Jq:

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:

cd
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin 
./build

Configurazione

Bene, 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:

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:

# Elettrovalvole mono-stabili
EV_MONOSTABLE=1
 
# Elettrovalvole bi-stabili
EV_MONOSTABLE=0

Scorrendo ancora nel file di configurazione troveremo le seguenti definizioni:

# Numero totale di elettrovalvole
EV_TOTAL=6
 
# Definizione delle elettrovalvole
EV1_ALIAS="1" #
EV1_GPIO=17
 
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

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.

Scorrendo ancora più in basso nel file di configurazione troviamo le seguenti definizioni:

# Definisce l'api key e il luogo per recuperare lo stato meteo online
WUNDERGROUND_KEY=""
WUNDERGROUND_LOCATION="IY/Monsummano"   # http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&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 nel post Impianto di irrigazione con Raspberry Pi: il sistema di rilevamento pioggia (terza parte) abbiamo a disposizione due tipi di controllo meteo: tramite servizio online offerto da wunderground.com oppure, se l’abbiamo integrato nella centralina, tramite sensore hardware.

Se decidiamo di utilizzare il servizio di wunderground.com dobbiamo creare un nostro account in modo da avere una nostra api key da inserire nella variabile WUNDERGROUND_KEY. Per eseguire la registrazione e creare la vostra api key potete fare riferimento al post sopra menzionato.

Bene ora che abbiamo la nostra api key e l’abbiamo definita nel file di configurazione, dobbiamo indicare la posizione geografica in cui ci troviamo ed inserirla in WUNDERGROUND_LOCATION. La stringa da inserire dovrà contenere l’identificativo della nazione (IY per l’Italia) e la località geografica in cui vi trovate. Nel file di configurazione di esempio è riportata la città italiana Monsummano Terme. Per verificare che il nome della città che indicherete nella stringa di configurazione abbia un esito corretto, potete fare dei test con un browser inserendo l’url http://api.wunderground.com/api/TUA_API_KEY/conditions/q/IY/Monsummano.json (sostituendo TUA_API_KEY con la propria api key e IY/Monsummano con la località geografica in cui vi trovate). Se la stringa indicata sarà corretta, nella pagina del browser comparirà un json contenente le informazioni meteorologiche della vostra località.

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 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 (fate sempre riferimento al post Impianto di irrigazione con Raspberry Pi: il sistema di rilevamento pioggia (terza parte) per l’installazione e maggiori informazioni), 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 a 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_ONLINENOT_IRRIGATE_IF_RAIN_SENSOR.

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:

# 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 clients 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. Per approfondire questo argomento consiglio di consultare i post piGarden 0.2 – Easter egg e piGarden v 0.4.0 e piGardenWeb v 0.3.0: novità relative alla sicurezza, schedulazioni, statistiche.

Altri due parametri che possono interessare sono LOG_FILELOG_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

Vediamo adesso come utilizzare lo script per gestire l’impianto di irrigazione.

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:

/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:

/home/pi/piGarden/piGarden.sh set_cron_init

oppure manualmente digitando il comando crontab -e in modo da aprire il file di configurazione di crontab e inserite la seguente linea:

@reboot 	/home/pi/piGarden/piGarden.sh 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:

/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 utente similmente a come segue (digitate crontab -e per aprire il crontab)

10 21 * 6-9 * 	/home/pi/piGarden/piGarden.sh open giardino_posteriore
40 21 * 6-9 * 	/home/pi/piGarden/piGarden.sh close giardino_posteriore

in questo modo nella zona giardino_posteriore verrà avviata l’irrigazione alle ore 21:10 di tutti i giorni dal mese di giugno al mese di settembre e verrà fermata alle ore 21:40 dello stesso periodo.

Se non volete editare manualmente il crontab potete delegare a piGarden l’inserimento delle schedulazioni di avvio e chiusura utilizzando i seguenti comandi:

# 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

Per una maggiore approfondimento la gestione delle schedulazioni da linea di comando potete consultare il post piGarden 0.2 – Easter egg.

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 utilizzati uno o entrambi i seguenti comandi a seconda del sistema scelto:

/home/pi/piGarden/piGarden.sh check_rain_online  # Controllo pioggia online
/home/pi/piGarden/piGarden.sh check_rain_sensor  # Controllo pioggia da sensore

nel momento in cui invochiamo i due comandi qui sopra, questi in caso di pioggia scriveranno il timestamp corrente rispettivamente in /home/pi/piGarden/state/last_rain_online e in /home/pi/piGarden/state/last_rain_sensor. In questo modo lo script saprà la data e ora dell’ultima pioggia e gestirà l’apertura delle elettrovalvole nel modo opportuno.

Per fare si che lo script sia costantemente aggiornato sulle condizioni meteo dovremo schedulare nel crontab utente i due comandi visti sopra in questo modo:

*/3 * * * * 	/home/pi/piGarden/piGarden.sh check_rain_online 2> /tmp/check_rain_online.err
* * * * *	/home/pi/piGarden/piGarden.sh check_rain_sensor 2> /tmp/check_rain_sensor.err

Anche qui se non volete definire manualmente i crontab, potete farlo fare direttamente a piGarden con i seguenti due comandi

/home/pi/piGarden/piGarden.sh set_cron_check_rain_online
/home/pi/piGarden/piGarden.sh set_cron_check_rain_sensor

Come ultimo passo, se vogliamo che un’irrigazione attualmente in corso venga interrotta in caso di pioggia, dobbiamo schedulare nel crontab utente questo ulteriore comando:

*/5 * * * *	/home/pi/piGarden/piGarden.sh close_all_for_rain 2> /tmp/close_all_for_rain.err 1> /dev/null

oppure come segue per farlo inserire direttamente a piGarden:

/home/pi/piGarden/piGarden.sh set_cron_close_all_for_rain

Altri comandi

Lo script oltre a quelli già visti sopra, prevede altri parametri. Riporto qui sotto l’elenco completo:

# Inizializza le porte gpio, il sistema di alimentazione e chiude tutte le elettrovalvole
piGarden.sh init
 
# Apre un'elettrovalvola, se passato l'ulteriore parametro "force" forza l'apertura anche in caso di pioggia
piGarden.sh open alias [force]
 
# Apre un'elettrovalvola in modalità ritardata: 
# - minute_start indica dopo quanti minuti dovrà partire l’irrigazione; se viene indicato il valore 0 (zero), l’irrigazione partirà immediatamente
# - minute_stop indica quanti minuti dovrà durare l’irrigazione una volta avviata
# - force che è opzionale, se specificato, forza l’irrigazione anche in caso di pioggia
piGarden.sh open_in minute_start minute_stop alias [force]
 
# Chiude un'elettrovalvola
piGarden.sh close alias
 
# Visualizza l'elenco degli alias (nomi zone) configurati
piGarden.sh list_alias
 
# Visualizza lo stato di una elettrovalvola (1=aperta, 0=chiusa)
piGarden.sh ev_status alias
 
# Visualizza lo stato di tutte le elettrovalvole
piGarden.sh ev_status_all
 
# Visualizza un json contenente lo stato di tutte le elettrovalvole e altre informazioni di sistema
piGarden.sh json_status
 
# Controlla lo stato meteo dal servizio online e memorizza il timestamp se piove
piGarden.sh check_rain_online
 
# Controlla lo stato meteo dal sensore hardware e memorizza il timestamp se piove
piGarden.sh check_rain_sensor
 
# Chiude tutte le elettrovalvole se attualmente piove
piGarden.sh close_all_for_rain
 
# Chiude tutte le elettrovalvole, se viene passato anche il parametro "force" forza la chiusura anche delle elettrovalvole risultano già chiuse
piGarden.sh close_all [force]
 
# Avvia e ferma il socket server che espone le api di piGarden per essere comandato da terze parti
# Il soket_server viene utilizzato dall'interfaccia web piGardenWeb per interagire con piGarden
# Il parametro "force" forza la chiusura del socket server se già attivo
piGarden.sh start_socket_server [force]
piGarden.sh stop_socket_server
 
# Gestione schedulazione di apertura/chiusura delle varie zone
# per maggior informazioni consulta il relativo post
piGarden.sh add_cron_open alias m h dom mon dow [disbled]
piGarden.sh del_cron_open alias
piGarden.sh get_cron_open alias
piGarden.sh del_cron_open_in alias
piGarden.sh add_cron_close alias m h dom mon dow [disabled]
piGarden.sh del_cron_close alias
piGarden.sh get_cron_close alias

Conclusioni

Bene, siamo arrivati alla fine. Con questo concludo per adesso l’argomento. Per il futuro ho in progetto di realizzare un pannello web per la gestione dell’impianto, ma dato il poco tempo libero, prevedo che non riuscirò a rilasciarlo in tempi brevi.

Per qualsiasi dubbio o domanda sono a disposizione ……. alla prossima 🙂

44 pensieri su “Impianto di irrigazione con Raspberry Pi: piGarden, lo script di gestione (quinta parte)

  1. Ciao lejubila, complimenti per il tuo lavoro e sopratutto per la chiarissima spiegazione.
    Anche io ho un vecchio Raspberry PI B che sta facendo polvere in un cassetto.
    Sto finendo di ristrutturare casa e stavo pensando a come poter sfruttare il Raspberry.
    Avevo in mente una soluzione molto simile alla tua ma la differenza sostanziale è che io vorrei comandare (magari anche da remoto) i termostati ambiente dell’impianto di riscaldamento delle zone della mia abitazione.
    Ho visto altri progetti di termostati con sensori di temperature attaccati al raspberry e/o accensione e spegnimento della caldaia (nessuno di questi mi ha convinto); ho visto che in commercio vendono anche cronotermostati wifi a prezzi però secondo me folli.
    Vorrei creare comunque una cosa semplice: installare i classici termostati nelle varie zone dell’abitazione (impostati ai gradi desiderati) e poi poter dare tensione o staccare gli stessi termostati ambiente che comandano le elettrovalvole (elettrovalvole con micro a 220V) magari come dicevo da remoto o meglio ancora con una app sul cellulare.
    Gran parte del tuo lavoro mi sembra possa combaciare. Ho visto che per i moduli relè per le mie 7 zone di casa c’è anche questo articolo in amazon

    http://www.amazon.it/COLEMETER-Modulo-Canali-Arduino-Elettronica/dp/B00E370JAC/ref=pd_sim_147_2?ie=UTF8&dpID=51a1%2BrIC2tL&dpSrc=sims&preST=_AC_UL160_SR160%2C160_&refRID=01JW4HYESPRTGWVNNDFZ

    Il relè n. 8 potrei magari utilizzarlo per accendere o spegnere la luce fuori di casa (magari sempre da remoto).
    Ti volevo chiedere se secondo te il progetto è fattibile e volevo magari qualche consiglio sulla programmazione del Rpi (io non ne so proprio niente purtroppo di programmazione). Le elettrovalvole nel mio caso dovranno essere sempre in tensione o sempre staccato come pure la luce fuori casa (relè n. 8).
    Grazie. Ciao.
    Mirco

  2. Ciao Mirko,
    del tuo progetto non ben capito il raspberry pi cosa dovrebbe comandare: itermostati o le elettrovalvole ?
    Il linea di massima comunque penso non ci siano problemi di realizzazione se non riuscire a stendere tutti i cavi che collegheranno i termostati/elettrovalvole con i relè comandati dal raspberry.
    Il modulo dei relè dovrebbe andare bene, anche io avrei optato per un modello simile ma ormai ne avevo già acquistati 2 da 4.
    Per il resto se vuoi un aiuto per la programmazione ti do una mano volentieri.
    Ciao.

  3. Quando lancio il comando
    sudo apt-get install autotools -y
    ottengo
    E: Impossibile trovare il pacchetto autotools

    Sai come risolvere?
    Ciao e grazie. Ivano

  4. Ciao Ivano hai ragione il raspberry non ha il pacchetto autotool.
    Prova a sostituire il comando con questo

    sudo apt-get install libtool autoconf automake gettext

    fammi sapere se così funziona.
    David.

  5. L’installazione dei pacchetti indicati è riuscita, anche perchè c’erano già …
    Io per prova, prima di scriverti avevo installato autotools-dev (non so se c’entra …).
    Comunque alla fine ottengo sempre un errore facendo make (a proposito i 2 comandi che hai scritto su una sola riga “make sudo make install” vanno separati):
    src/builtin.c:1375:23: fatal error: builtin.inc: No such file or directory
    compilation terminated. …. e altro …

  6. Allora, ho rieseguito l’installazione di jq su un raspberry dove ancora non l’avevo fatto.
    I comandi giusti dovrebbero essere i seguenti:

    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 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
    autoreconf -i
    ./configure –disable-maintainer-mode
    make
    sudo make install

    Fammi sapere se funziona.
    David.

  7. Mi ha dato qualche warning ma sembra funzionare …
    Ho dovuto correggere però il file di configurazione:
    # Posizione js
    JQ=”/usr/local/bin/jq”
    va aggiunto /jq e diventa
    # Posizione js
    JQ=”/usr/local/bin/jq/jq”

    Ti ringrazio e ti auguro buon anno!
    Ivano

  8. Ciao Ivano,
    ho corretto nel post le istruzioni di installazione di JQ. Comunque sia a me il path di installazione risulta corretto /usr/local/bin/jq

    Grazie e buon anno anche a te!
    David.

  9. A me l’installazione ha creato in /usr/local/bin una directory di nome jq contenente poi l’eseguibile jq.
    Dato che nel piGarden.conf la variabile $JQ indica il percorso dell’eseguibile (completo del comando) ho dovuto aggiungere come detto un ulteriore /jq.
    Così funziona, altrimenti da l’errore :
    -bash: /usr/local/bin/jq: E’ una directory

    Ciao. Ivano

  10. Ciao. Ho ordinato il relè (evviva – spero mi arrivi presto).
    Volevo chiederti una cosa. Ho letto che nel tuo progetto hai usato elettrovalvole bistabili per non lasciarle sotto tensione come le elettrovalvole monostabili. Quindi quando dai il comando di apertura e chiusura il relè fa chiudere il circuito per pochi secondi e poi ripassa nella posizione di circuito aperto?
    Funziona come un pulsante di un campanello o dell’apertura del cancelletto pedonale di casa tanto per capirci? (avevo in mente qualche altra autorizzazione in casa).
    Ciao.

  11. Si Mirco funziona come hai detto te, il comando di apertura fa chiudere il relè per mezzo secondo dopo di che viene riaperto. Il comando di chiusura funziona allo stesso modo solo che prima di chiedere il relè eseguo un’inversione di polarità della tensione applicata all’elettrovalvola.

  12. Ciao Lejubila, complimenti per questo progetto.
    Innanzitutto volevo sapere se posso contattarti in privato (mail) perchè ho molte domande da farti, sono uno studente universitario ed è sempre un piacere avere la possibilità di confrontarsi con persone più esperte. Come posso contattarti se possibile?
    Grazie in anticipo.

  13. Ciao Paolo,
    se vuoi chiedere qualcosa inerente a questo progetto qui é il posto giusto. Può usare i commenti del blog in modo che anche altre persone possano leggere.
    Comunque sia ti scrivo anche in privato in modo che possiamo contattarci direttamente.

  14. Ciao, scusami il disturbo ma ho visto che l’ultimo commento è del 30 gennaio, spero tu non abbia abbandonato questo bellissimo progetto che data la sua praticità e chiarezza nella guida mi ha spinto a provare a realizzarlo (è il mio primo “progetto elettronico”).
    Ti volevo chiedere se esiste una pagina riassuntiva o un pdf ancor meglio con tutte le guide fin ora realizzate e soprattutto chiederti se avevi avuto tempo in questi mesi di realizzare il pannello web per la gestione dell’impianto.
    Grazie di aver condiviso!
    Luca

  15. Ciao Luca,
    non ho assolutamente abbandonato il progetto. Purtroppo l’interfaccia web non è ancora pronta. Purtroppo a causa di mancanza di tempo non sono ancora riuscito a portarla a termine.
    Mi dispiace deluderti ma non esiste nessun post riassuntivo o pdf del progetto.

  16. Ci vorrebbero più ferie e tempo libero per tutti, questo è il problema 🙂
    Non mi è chiaro però come sono stati collegati i fili alle elettrovalvole e quindi al tuo sistema di irrigazione. Non dal punto di vista connessione (che è spiegato chiaramente sul tuo schema elettrico) ma proprio dal punto di vista pratico (i fili che escono dalla scatola dentro un tubo sono “volanti” prima di arrivare alle elettrovalvole?). Riesci cortesemente a fare una foto e postarla sul blog ad uso e informazione di tutti? Altrimenti anche inviarla alla mia email, come ti è più comodo.
    Grazie ancora della disponibilità a supporto di noi noob!
    Luca

  17. Ciao! Certo che sono interessato, sto provando a creare il tutto appena ho un pò di tempo!
    Grazie del nuovo upload (il link è alla quinta parte però), lo guardo subito.
    Luca

  18. Ciao,
    complimenti ottimo progetto. Se ti serve una mano sulla parte web possiamo vederla insieme.

    Francesco

  19. #Francesco,
    grazie per l’offerta. Attualmente sono quasi a termine dello sviluppo della dashboard. Una volta sistemata questa parte penso di pubblicare una prima versione.

  20. ciao lejubula,
    normale che quando lancio il comando:
    pi@raspberrypi:~/jq-1.5 $ autoreconf -i
    ottengo l’errore
    fatal: Not a git repository (or any of the parent directories): .git ?
    grazie
    Claudio

  21. Ciao @Claudio,
    ho riprovato anche io e anche a me da diversi messaggi come quello che hai indicato ma se vai avanti con le istruzioni indicate, la compilazione va a avanti senza problemi.
    Per terminale la compilazione di jq ci vorranno diversi minuti.

    Se continui ad avere problemi fammi sapere.

  22. Ciao,
    in effetti sembra funzionare tutto alla grande. Mi manca di recuperare l’hw necessario per eseguire definitivamente tutti i test. Ci aggiorniamo tra qualche giorno. Buona settimana

  23. Ciao lejubila,complimenti per il bel progetto. Sto seguendo la tua guida e vorrei sostituire il sensore di pioggia con un sensore di umidità del terreno poichè nel mio caso le piante sono al coperto. Vorrei fare in modo che il raspberry prima di far partire l’elettrovalvola controlli se il sensore è a valore 0 o 1 quindi se è umido il terreno non interviene viceversa irriga.
    Come posso fare per modificare il codice?
    Grazie mille

  24. Ciao #Arcangelo,
    penso che tu possa collegare il sensore di umidità al posto di quello del rilevamento pioggia e utilizzare piGarden così come è senza alcuna modifica. In questo modo piGarden penserà che sia piovuto invece che ci sia abbastanza umidità ma in realtà il risultato non cambia perché staccherà o non farà partire l’irrigazione.
    Se hai dubbi fammi sapere.

  25. Ciao ho provato ma purtroppo così facendo l’irrigazione partirebbe lo stesso all’orario impostato e si spegnerebbe in corso di irrigazione. Altrimenti pensandoci ci sarebbe il modo da crontab di fare un if else? Tipo se la variabile del sensore memorizzata ad un certo orario è 1 allora salta il comando di irrigazione se invece è 0 irriga?

    Grazie

  26. Ciao @Arcangelo,
    quello che dici tu è già previsto.
    Nel crontab deve essere inserito un comando che esegue il check del sensore ogni minuto. In questo modo memorizza lo stato del sensore e all’avvio dell’irrigazione prima di partire viene controllato questo stato e di conseguenza vene bloccata l’irrigazione se necessario.
    Per inserire il comando nel cron puoi farlo manualmente come indicato qui oppure puoi farlo con impartendo il seguente comando:
    ./piGarden.sh set_cron_check_rain_sensor

    Ci sono anche altri comandi che automatizzano l’inserimento dei cron. Li puoi vedere facendo partire lo script piGarden.sh senza parametri.

    Spero di esserti stato di aiuto.
    Se hai bisogno fammi sapere.

  27. Ciao, ho risolto con i problemi di installazione dello script!!tutto funziona!!
    Leggendo qui sopra fai riferimento allo stop in caso di pioggia come deve essere!!
    Ti ricordi che poco tempo fa ti avevo chiesto di poter spegner l’irrigazione se la pompa di calore è accesa?
    Si può sfruttare una cosa simile per fare quello che si diceva? cioè controllo lo stato di un pin ogni x secondi se il pin è chiuso la pompa è accesa di conseguenza sospende l’irrigazione parte il timer per x secondi (settabili), finiti riparte l’irrigazione!!
    Ciao
    Marco

  28. Ciao @Marco,
    come ti avevo risposto nei precedenti commenti mettere in pausa l’irrigazione per poi farla riprendere dal punto in cui era rimasta, non è possibile. Il motivo è perché piGarden sia per le schedulazioni e che per la funzione di avvio ritardato, si basa sui cron di sistema linux, ovvero un cron per l’apertura ed uno per la chiusura dell’elettrovalvola. Implementare una funziona di pausa in mezzo ai due cron diventa difficilmente realizzabile.
    Se invece ti basta fare in modo che l’irrigazione venga interrotta secondo me hai due possibilità:
    1. utilizzare l’attuale sistema di rilevamento pioggia che interrompe o non fa partire l’irrigazione per un periodo di tempo settabile a piacere; in questo modo dovresti sostituire il sensore di rilevamento e al suo posto collegare il contatto della tua pompa (o eventualmente collegarli in parallelo).
    2. se hai elettrovalvole monostabili potresti collegare il contatto della pompa ad un gpio in ingresso, inserire un relè a monte dell’alimentazione delle elettrovalvole. Con uno script che rimane in esecuzione controllarne lo stato della pompa e in base a questo aprire o chiudere il relè.

    Se hai valvole monostabili personalmente preferirei la seconda soluzione, almeno rimarrebbe inalterata la funzione di rilevamento pioggia.

    Spero di esserti stato utile.

  29. ciao al comando autoreconf -i
    sono apparsi degli errori:
    fatal: Not a git repository (or any of the parent directories): .git

    come mai?

  30. Ciao se provo a editare le zone e per esempio inserisco la dicitura
    zona 1
    zona 2 ecc

    il sistema va in errore. anche se scrivo “zona uno”
    va in errore, come mai?

  31. @Tiziano,
    se stai cercando di variare in nomi delle zone nelle variabili EV1_ALIAS, EV2_ALIAS, EV3_ALIAS, ecc…
    i nomi non devono contenere spazi.
    Per esempio, invece di “zona 1” puoi inserire “zona_1” in questo modo:
    EV1_ALIAS=zona_1

  32. Bene funziona.

    mi sono registrato sul sito e generato l’api.
    ho provato anche l’url ma nell’url mi appaiono i dati di tre città differenti, incluso il mio, è corretto?
    il problema è che sul mio web non appare nessun meteo, c’è scritto ultima pioggia online e sotto la scritta sconosciuto secondo te perchè?
    ho provato anche a mettere roma IY/Roma, e anche così’ non funziona.

    guarda se ho fato bene:

    # Definisce l’api key e il luogo per recuperare lo stato meteo online
    WUNDERGROUND_KEY=”QUI OVVIAMENTE CI SONO LE LE MIE API”
    WUNDERGROUND_LOCATION=”IY/Roma” # http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&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 piovuto viene bloccata l’irrigazione. Inserendo il valore zero non viene 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 non viene eseguito nessun controllo.
    NOT_IRRIGATE_IF_RAIN_SENSOR=0

    # Indirizzo ip e porta di ascolto del socket server

    TCPSERVER_IP=”0″ #”192.168.1.245″ #”127.0.0.1″
    TCPSERVER_PORT=”8084″

    # Utente e password che i clients devono utilizzare per stabilire una connessione tramite socket server
    TCPSERVER_USER=””
    TCPSERVER_PWD=””

    # Con impostato il valore 1 non invia l’identificativi per statistiche di utilizzo
    NO_SEND_IDENTIFIER=0

  33. Ma per far funzionare l’interruzione dell’irrigazione con l’ausilio online non devo are nessun comando giusto?

    /home/pi/piGarden/piGarden.sh check_rain_online # Controllo pioggia online
    /home/pi/piGarden/piGarden.sh check_rain_sensor # Controllo pioggia da sensore

    ???

  34. @Tiziano
    per fare funzionare l’interruzione dell’irrigazione, nel crontab oltre ai comandi che già hai citato tu deve essere inserito anche quello relativo a close_all_for_rain:

    * * * * * /home/pi/piGarden/piGarden.sh check_rain_sensor 2> /tmp/check_rain_sensor.err
    */3 * * * * /home/pi/piGarden/piGarden.sh check_rain_online 2> /tmp/check_rain_online.err
    */5 * * * * /home/pi/piGarden/piGarden.sh close_all_for_rain 2> /tmp/close_all_for_rain.err 1> /dev/null

    Se non vuoi creare i cron manualmente puoi farlo in automatico dal piGardenWeb andando nel menu “Setup Iniziale” e cliccare sul pulsante “Esegui il setup”. In questo modo oltre ai cron appena indicati vengono creati anche quelli relativi all’inizializzazione della centralina e dell’avvio del soket server in fase di boot del raspberry.

  35. Ma in futuro potrebbe esserci l’implementazione di un bel pulsante rosso OFF?
    Una cosa che ho notato e che al riavvio del raspberry i rele’ si chiudono e poi riaprono per qualche secondo? è normale?

  36. Ciao @Tiziano,
    come ti dicevo nella precedente risposta, esiste già la possibilità di disabilitare le schedulazioni senza eliminarle quindi per ora, inserire un’ulteriore pulsante per disabilitarle/abilitarle mi sembra un doppione. Niente vieta che in futuro non possa implementarlo.
    In fase di avvio viene lanciata l’inizializzazione dei gpio e vengono chiuse tutte le elettrovalvole, questo per prevenire gpio che per default sono aperti e quindi lascerebbero aperte le zone lanciando l’irrigazione.

  37. ciao,
    Secondo me non sarebbe un doppione, perché il pulsante off che intendo io spegnerebbe tutte le valvole in un colpo solo, senza dover entrare in ogni zona.
    si potrebbe aggiungere un pulsante hardware con un. led rosso che se acceso indica che il gruppo relè non è alimentato?

  38. Ciao, volevo chiederti se si può sostituire il servizio meteo con un altro, mi spiego: io sono iscritto ad “openweathermap.org” ed ho la mia chiave, posso inserire nello script questo servizio al posto di quello indicato da te? i dati sono sempre in formato json, pensi debba fare altre modifiche?
    Grazie in anticipo

  39. Ciao @paolo,
    purtroppo al momento l’unico servizio meteo supportato è quello di Wundrground.
    Avevo comunque già pensato di generalizzare il codice in modo da supportare anche altri servizi.
    Non so però quando potrò implementare questa funzionalità.

  40. Ok, grazie per la risposta così rapida; mi iscriverò anche al servizio wunder, il tuo programma mi piace un mondo 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *