Skip to content

lejubila/piGardenSched

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VERSIONE 0.3.3
--------------
piGardenSched.sh e' un'alternativa allo schedulatore di piGarden basato sul crontab.
Si consiglia di installarlo sotto la home dell'utente pi, quindi il percorso del package sara' /home/pi/piGardenSched

Possiamo dividere in 2 aree di funzionamento:
* gestione file di schedulazione
* esecuzione delle schedulazioni

Le vedremo nel dettaglio successivamente.

STRUTTURA DEL PACCHETTO:
------------------------
Una volta installato potete trovare il seguente contenuto (nota: orari e dimensione potrebbero essere differenti nel caso di versioni successive):
	drwxr-xr-x 2 pi pi 4096 Apr 28 16:29 conf
	drwxr-xr-x 2 pi pi 4096 Apr 28 16:30 include
	-rwxr-xr-x 1 pi pi 5918 Apr 28 15:51 piGardenSched.sh
	-rw-r--r-- 1 pi pi  907 Apr 27 00:36 README
in conf potete trovare alcuni esempi, tra cui il file di configurazione, la cui funzione e' spiegata di seguito.
in /home/pi/piGardenSched/include vi sono tutte le funzioni suddivise per tipologia (cron, rain e generali functions), oltre agli script che vengono eseguiti con la partenza dell'irrigazione (irrigating.sh) e la gestione delle attese tra open/close e contestuale verifica dello stato della pioggia (raincheck-waitloop.sh):
	-rw-r--r-- 1 pi pi   730 Apr 28 15:52 cron.include.sh
	-rw-r--r-- 1 pi pi 26637 Apr 28 16:30 functions.include.sh
	-rwxr-xr-x 1 pi pi  1903 Apr 28 00:43 irrigating.sh
	-rwxr-xr-x 1 pi pi  2074 Apr 27 00:35 raincheck-waitloop.sh
	-rw-r--r-- 1 pi pi  5002 Apr 26 23:58 rain.include.sh
Al primo avvio verranno create le directory:
	drwxr-xr-x 2 pi pi 4096 Apr 28 15:40 log
	drwxr-xr-x 2 pi pi 4096 Apr 28 00:22 state
	drwxr-xr-x 2 pi pi 4096 Apr 28 15:39 tmp
Nella directory log troveremo ogni volta che viene lanciato da crontab (vedi successivamente per spiegazione dettagliata) il log principale (piGardenSched.log); troveremo inoltre un file di log per ogni combinazione di EV+orario di esecuzione (ZONA1_pratoSud-10:00.log).
in state vengono registrate le attivita' di ogni EV schedulata nella sua ultima esecuzione (ZONA1_pratoSud-10:00.lastrun) e il suo storico (ZONA1_pratoSud-10:00.history)
E' anche presente lo storico di ogni EV effettivamente aperta con l'orario e la durata (ZONA1_pratoSud-irrigationhistory).
Piu' avanti vedremo quali sono le opzioni da passare a piGardenSched per consultare ed interpretare tali file di stato.
Infine in tmp vi sono i file temporanei creati/impiegati da piGardenSched durante il suo funzionamento.

ATTIVAZIONE
-----------
Per poter essere attivato piGardenSched deve essere a sua volta presente in crontab.
Esistono 3 opzioni per la gestione della propria entry in crontab da parte di piGardenSched.sh e sono:
	cronadd crondel croncheck
con la conseguente azione facilmente comprensibile.
La prima cosa da fare ovviamente e' copiare piGardenSched.conf da /home/pi/piGardenSched/conf/piGardenSched.conf, con il seguente comando:
	pi@raspberrypi:~/piGardenSched $ sudo cp conf/piGardenSched.conf /etc
successivamente attivare la entry in crontab:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh croncheck
	ERROR: crontab entry for piGardenSched.sh NOT found
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh cronadd
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh croncheck
	NORMAL: crontab entry for piGardenSched.sh found
	pi@raspberrypi:~/piGardenSched $ crontab -l |grep piGardenSched
	* * * * * /home/pi/piGardenSched/piGardenSched.sh >> /home/pi/piGardenSched/log/piGardenSched.log 2>&1
	pi@raspberrypi:~/piGardenSched $

FILE DI CONFIGURAZIONE
----------------------
/etc/piGardenSched.conf e' il file di configurazione.
Deve essere presente, altrimenti lo script non parte.
Ecco il contenuto del file:
	# pigarden config file	
	# Author: androtto

	verbose="no" # yes|no

	PIGARDENSCHED=/etc/piGarden.sched

	PIGARDEN_HOME="/home/pi/piGarden"
	STATUS_DIR="$PIGARDEN_HOME/state"

	#integration with drv_rainsensorqty
	RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain"
	RAINSENSORQTY_HISTORY="$STATUS_DIR/rainsensorqty_history"

	# activate integration with drv_rainsensorqty
	autostoprain=yes  # yes|no
	autodelayrain=yes # yes|no

	# set 0 for leave enabled autostoprain (if set to yes) for each EV
	# set 1 for override autostoprain and leave active even if it will be raining
	EV1_NORAIN_RAINSENSORQTY=0
	EV2_NORAIN_RAINSENSORQTY=0
	EV3_NORAIN_RAINSENSORQTY=0
	EV4_NORAIN_RAINSENSORQTY=0
	EV5_NORAIN_RAINSENSORQTY=0
	EV6_NORAIN_RAINSENSORQTY=0

(ulteriori entry per ogni EV come la precedente se ne avete piu' di 6 come nell'esempio)

breve spiegazione di ciascuna entry

verbose consente di aumentare il livello di informazioni nell'esecuzione dello script. Per esempio, con verbose=no, non viene visualizzato (e quindi riversato nel log) nessun output quando viene lanciato piGardenSched.sh se non vi sono schedulazioni. Con verbose=yes viene ad esempio visualizzato l'output "16:30:59-28/04/19 NORMAL: no irrigation run at 16:30".

PIGARDEN_HOME  STATUS_DIR sono relative rispettivamente alla home di piGarden e alla sua sottodirectory state. 
Queste variabili servono per le due successive: RAINSENSORQTY_LASTRAIN RAINSENSORQTY_HISTORY utili per l'integrazione con il driver RAINSENSORQTY.

autostoprain consente l'interruzione della pioggia - usando la componente opzionale drv_rainsensorqty - durante l'irrigazione.
per poter fare cio' deve essere disattivata l'integrazione con il sistema di rilevazione pioggia integrato in piGarden, quindi in /etc/piGarden.conf ciascuna valvola deve riportare l'entry come la seguente:
	EV1_NORAIN=1 #         Non interrompe l'irrigazione di questa zona in caso di pioggia
piGardenSched considera tale gestione pioggia la CLASSIC mentre quella opzionale QTY. I messaggi che verranno eventualmente segnalati conterranno informazioni delle variabili gestite da piGardenSched le quali sono EVNORAINQTY e EVNORAINCLASSIC
Se vi fossero dei conflitti sulle impostazioni per la gestione della pioggia, piGardenSched le segnala.
E' possibile disattivare il comportamento autostoprain per ogni EV con le variabili EV1_NORAIN_RAINSENSORQTY (o similare con numero cambiato, es. EV2_NORAIN_RAINSENSORQTY ecc.)

autodelayrain permette il ritardo automatico della schedulazione se vi sono state delle pioggie nei giorni precedenti tra il momento dell'irrigazione e la precedente.
Ad esempio, se il prato viene irrigato ogni 3 gg alle 10.30 e la precedente irrigazione e' avvenuta il 5 aprile/10.30 la successiva sarebbe l'8 aprile/10.30
Se l'ultima pioggia fosse stata il 7 aprile/10.00, l'irrigazione verrebbe ritardata di 2 gg, quindi il 10 aprile/10.30
Se invece fosse stata il 7 aprile/11.00 (nelle 24 ore precedenti alla schedulazione dell'8 aprile/10.30 ), verrebbe rimandata di 3gg, l'11 aprile/10.30
Ad oggi non esiste il controllo di autodelayrain solo per ciascuna EV. E' una variabile globale.

IL FILE DI SCHEDULAZIONE
------------------------
/etc/piGarden.sched e' il file di schedulazione. Alla prima esecuzione piGardenSched.sh crea il file configurazione vuoto.
E' possibile popolarlo editandolo manualmente anche se sconsigliato, in quanto potrebbero verificarsi errori di sintassi.

Vi sono diverse opzioni che servono per popolare il file di schedulazione. Le vediamo di seguito ad una ad una con il corrispondente output.
E' sempre possibile eseguire ./piGardenSched.sh help per avere un riepilogo delle diverse opzioni presenti.

La prima opzione che vediamo e' add. Serve per inserire una entry. Con piGardenSched.sh si fa riferimento alle EV con il nome alias, ovvero EV1, EV2 e cosi' via. 
La prima esecuzione con parametri insufficienti - crea nel comtempo il file di configurazione vuoto:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add EV1
	WARNING: piGarden_sched Config file not found in /etc/piGarden.sched
	creating empty file
	18:38:42-24/04/19 -e ERROR: 4 parameters needed
	piGardenSched.sh add ev?_alias duration time frequency
	pi@raspberrypi:~/piGardenSched $
Con i parametri corretti: cioe' il nome della EV; la durata in minuti dell'irrigazione; l'orario di schedulazione; e la frequenza in giorni, 1 significa ogni giorno; due ogni due giorni (1 si' e 1 no), e cosi' via.
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add EV1 20 14:00 1
	18:39:10-24/04/19 SUCCESS adding new schedule for EV1
	pi@raspberrypi:~/piGardenSched $
E' sempre possibile verificare il contenuto del file eseguendo il comando:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;14:00;1;active
	pi@raspberrypi:~/piGardenSched $
Lo si puo' anche visualizzare direttamente, ma verranno visualizzati anche i commenti:
	pi@raspberrypi:~/piGardenSched $ cat /etc/piGarden.sched
	#piGarden.sched config file 
	#author: androtto
	#version 0.3.3
	#format file
	#1st field;2nd field;3rd field;4th field;5th field
	#EV?;duration;time;every_X_days;active|inactive
	#EV?;duration;EV? #(previous)
	#time is HH:MM 24h format
	#every_X_days means daily frequency, 1= every day, 2=every three days (first yes, second no)),3= every three days (first yes, second and third no), 	etc...
	EV1;20;14:00;1;active
	pi@raspberrypi:~/piGardenSched $
piGardenSched gestisce l'irrigazione sequenziale concatenando in sequenza le EV specificate attraverso l'opzione seq. Viene quindi schedulata solo la prima EV e le successive verranno comandate in sequenza.
La sequenza deve coincidere con l'ordine numerico; cioe' possono essere in sequenza le EV 1 2 3 4, oppure le 3 4 5, ma non le 4 3 6, ne' 2 3 5.
Per poter funzionare il comando, la prima EV deve essere presente.
Ad esempio, pur essendo corretta la sequenza del comando successivo, va in errore perche' EV2 non e' presente:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh seq EV EV3 EV4
	00:02:38-29/04/19 ERROR:first member EV2 of sequence NOT found
	pi@raspberrypi:~/piGardenSched $
Mentre e' corretta la prossima esecuzione, per la quale, non essendo gia' presenti le EV 2 3 e 4, la durata di apertura viene ereditata dalla EV1 (20 minuti):
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh seq EV1 EV2 EV3 EV4
	18:39:49-24/04/19 NORMAL: first member EV1 of sequence is present
	18:39:49-24/04/19 SUCCESS creating sequence EV1 EV2 EV3 EV4
	pi@raspberrypi:~/piGardenSched $ 
Per controllare il contenuto:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;14:00;1;active
	EV2;20;EV1;;
	EV3;20;EV2;;
	EV4;20;EV3;;
	pi@raspberrypi:~/piGardenSched $
Se uso l'opzione add facendo riferimento ad una entry gia' esistente ottengo un errore:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add EV1 20 14:00 1
	ERROR: EV4 is already present; use "add_time, change_time, change_freq or change_dur" option
	18:40:06-24/04/19 ERROR adding new schedule for EV4
	pi@raspberrypi:~/piGardenSched $
Non e' quindi possibile aggiungere due volte la stessa entry. Se si vuole fare piu' schedulazioni e' possibile aggiungere un altro orario:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add_time EV1 15:55
	19:01:03-24/04/19 NORMAL: 14:55 added to EV1 entry
	pi@raspberrypi:~/piGardenSched $
e conseguente verifica:	
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;15;16:00,14:55;1;inactive
	EV2;15;EV1;;
	EV3;15;EV2;;
	EV4;15;EV3;;
	pi@raspberrypi:~/piGardenSched $
La schedulazione con piu' orari e' solo possibile se la frequenza giornaliera e' a 1.
Ad oggi non vi e' nessun controllo se le schedulazioni sulla stessa EV si sovrappongono: EV1 con schedulazione 15:55 e 16:00 con durata di 15 minuti.

E' possibile eliminare un orario dalla schedulazione:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh del_time EV1 16:00
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;15;14:55;1;inactive
	EV2;15;EV1;;
	EV3;15;EV2;;
	EV4;15;EV3;;
	pi@raspberrypi:~/piGardenSched $
Oppure posso sostituire tutte quelle presenti (anche se solo una) con una nuova:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_time EV1 16:00
	00:06:49-29/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;20;EV1;;
	EV3;20;EV2;;
	EV4;20;EV3;;
	pi@raspberrypi:~/piGardenSched $
Non e' possibile cambiare l'orario o la frequenza di un membro, che non sia il primo, di una sequenza:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_time EV3 16:00
	00:08:25-29/04/19 ERROR: cannot change scheduled time for a sequential irrigation - EV3 will run after EV2
	pi@raspberrypi:~/piGardenSched $
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_freq EV3 3
	00:09:04-29/04/19 ERROR: cannot change frequency for a sequential irrigation - EV3 will run after EV2
	pi@raspberrypi:~/piGardenSched $
Mentre per la durata e' possibile:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_dur EV2 15
	00:10:56-29/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_dur EV4 25
	00:11:04-29/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;EV1;;
	EV3;20;EV2;;
	EV4;25;EV3;;
	pi@raspberrypi:~/piGardenSched $
E' altresi' possibile annullare la sequenza; le nuove entry verranno automaticamente schedulate per gli orari calcolati come se fossero in sequenza:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh noseq
	00:12:18-29/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;16:20;1;active
	EV3;20;16:35;1;active
	EV4;25;16:55;1;active
	pi@raspberrypi:~/piGardenSched $
Errore di esecuzione opzione seq con ordine non in sequenza:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh seq  EV1 EV2 EV4
	ERROR: wrong sequence given EV1 EV2 EV4
	        number are not contiguous or repeated (1 2 4 )
	pi@raspberrypi:~/piGardenSched $
mentre e' corretta:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh seq  EV2 EV3 EV4
	00:14:25-29/04/19 NORMAL: first member EV2 of sequence is present
	00:14:25-29/04/19 SUCCESS creating sequence EV2 EV3 EV4
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;16:20;1;active
	EV3;20;EV2;;
	EV4;25;EV3;;
	pi@raspberrypi:~/piGardenSched $
e puo' essere ripristinata la sequenza originale senza dover rimuovere quella eventualmente parzialmente presente:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh seq  EV1 EV2 EV3 EV4
	00:15:51-29/04/19 NORMAL: first member EV1 of sequence is present
	00:15:51-29/04/19 SUCCESS creating sequence EV1 EV2 EV3 EV4
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;EV1;;
	EV3;20;EV2;;
	EV4;25;EV3;;
	pi@raspberrypi:~/piGardenSched $
Questa volta essendo le entry della sequenza presenti, la durata viene mantenuta e non ereditata dalla prima EV1.
Possiamo aggiungere una nuova EV:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add EV5 20 18:00 1
	00:19:07-29/04/19 SUCCESS adding new schedule for EV5
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;EV1;;
	EV3;20;EV2;;
	EV4;25;EV3;;
	EV5;20;18:00;1;active
	pi@raspberrypi:~/piGardenSched $
Ma deve essere dichiarata in /etc/piGarden.conf . Ad esempio, avendo impostato in tale file di configurazione EV_TOTAL=6, non posso aggiungere EV7:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add EV7 20 19:00 1
	00:19:38-29/04/19 ERROR: EV7 is NOT between range (EV_TOTAL = 6 )
	00:19:38-29/04/19 ERROR: EV7 is not a valid EV
	pi@raspberrypi:~/piGardenSched $
Cosi' come non sono permessi errori specificando l'EV:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add EV6b 20 19:00 1
	00:20:06-29/04/19 ERROR: EV6b format is NOT right "EV[0-9] or EV[0-9][0-9]"
	00:20:06-29/04/19 ERROR: EV6b is not a valid EV
	pi@raspberrypi:~/piGardenSched $
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh add EV6 20 19:00 1
	00:20:34-29/04/19 SUCCESS adding new schedule for EV6
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;EV1;;
	EV3;20;EV2;;
	EV4;25;EV3;;
	EV5;20;18:00;1;active
	EV6;20;19:00;1;active
	pi@raspberrypi:~/piGardenSched $
Vengono fatti i controlli sulle EV come abbiamo visto poco fa, sugli orari (23:61 non e' permesso) e sulle durate e frequenze (numeri):
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_dur EV5 20A
	ERROR: 20A is not a valid duration in minutes
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_dur EV5 20
	18:41:27-24/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_time EV5 15:65
	ERROR: 15:65 is not a valid time
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_time EV5 24:65
	ERROR: 24:65 is not a valid time
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_time EV5 23:59
	18:41:46-24/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $
E' possibile variare la frequenza per EV5:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_freq EV5 3
	00:23:29-29/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;EV1;;
	EV3;20;EV2;;
	EV4;25;EV3;;
	EV5;20;18:00;3;active
	EV6;20;19:00;1;active
	pi@raspberrypi:~/piGardenSched $
E' possibile cancellare l'entry EV6:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh del EV6
	00:24:57-29/04/19 NORMAL: found EV6 in line 6 - removed
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;20;16:00;1;active
	EV2;15;EV1;;
	EV3;20;EV2;;
	EV4;25;EV3;;
	EV5;20;18:00;3;active
	pi@raspberrypi:~/piGardenSched $
Ma non l'entry di una sequenza:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh del EV2
	00:25:32-29/04/19 ERROR: found EV2 in part of a concatenated irrigation
	pi@raspberrypi:~/piGardenSched $
A meno che non sia la prima:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh del EV1
	00:25:51-29/04/19 NORMAL: found EV1 in line 1 - removed
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV2;15;16:20;1;active
	EV3;20;EV2;;
	EV4;25;EV3;;
	EV5;20;18:00;3;active
	pi@raspberrypi:~/piGardenSched $
in tal caso la nuova prima diventa la EV2 con lo stesso orario di partenza: EV1 h 16:00 + 20' di durata = 16:20
E' possibile lasciare una schedulazione inattiva all'interno del file:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh disable EV2
	00:32:28-29/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV2;15;16:20;1;inactive
	EV3;20;EV2;;
	EV4;25;EV3;;
	EV5;20;18:00;3;active
	pi@raspberrypi:~/piGardenSched $
Riattivabile successivamente:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh enable EV2
	00:33:28-29/04/19 NORMAL: change done
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV2;15;16:20;1;active
	EV3;20;EV2;;
	EV4;25;EV3;;
	EV5;20;18:00;3;active
	pi@raspberrypi:~/piGardenSched $
Ovviamente non e' possibile farlo per le irrigazioni sequenziali:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh disable EV3
	00:33:35-29/04/19 ERROR: cannot enable EV3 because it's part of a sequential irrigation
	pi@raspberrypi:~/piGardenSched $

GESTIONE IRRIGAZIONI
--------------------
come abbiamo anticipato prima, tutte gli stati delle schedulazioni e delle irrigazioni vengono registrate nella sottodirectory state.
Lasciamo questa configurazione dello schedulatore attiva per qualche giorno e vediamo cosa otterremo:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;2;10:00;1;active
	EV2;2;EV1;;
	EV3;2;EV2;;
	EV4;2;EV3;;
	EV5;5;16:00;1;inactive
	EV6;1;09:00,18:00;1;inactive
	pi@raspberrypi:~/piGardenSched $
Vedi dettagli nei log in riferimento al periodo 00:46 del 29/4 fino alle 16:30 del 29/4.
Successivamente e' stata attivata la EV6:
	pi@raspberrypi:~/piGardenSched/log $ ../piGardenSched.sh enable EV6
	pi@raspberrypi:~/piGardenSched/log $ ../piGardenSched.sh show
	EV1;2;10:00;1;active
	EV2;2;EV1;;
	EV3;2;EV2;;
	EV4;2;EV3;;
	EV5;5;16:00;1;inactive
	EV6;1;09:00,18:00;1;active
	pi@raspberrypi:~/piGardenSched/log $

Questa l'output del comando con opzione history (dopo solo un'irrigazione , quella delle 10):
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh history
	
	NORMAL: irrigation for ZONA1_pratoSud is at 10:00 every 1 day(s) - ACTIVE
	this is an ACTIVE concatenated irrigation: ZONA1_pratoSud ZONA2_pratoSudOvest ZONA3_pratoNordOvest ZONA4_pratoNord
	history of irrigations:
	Mon Apr 29 10:00:00 CEST 2019
	pi@raspberrypi:~/piGardenSched $
Questo l'output con l'opzione irrigation:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh irrigation

	EV ZONA1_pratoSud history of effective irrigation
	Mon Apr 29 10:00:02 CEST 2019 for 2 mins
	
	EV ZONA2_pratoSudOvest history of effective irrigation
	Mon Apr 29 10:02:04 CEST 2019 for 2 mins
	
	EV ZONA3_pratoNordOvest history of effective irrigation
	Mon Apr 29 10:04:06 CEST 2019 for 2 mins

	EV ZONA4_pratoNord history of effective irrigation
	Mon Apr 29 10:06:09 CEST 2019 for 2 mins
	pi@raspberrypi:~/piGardenSched $
L'opzione stat per verificare le irrigazioni schedulate presenti e future:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh stat
	
	NORMAL: irrigation for ZONA1_pratoSud is at 10:00 every 1 day(s) - ACTIVE
        	last irrigation was     on Mon Apr 29 10:00:00 CEST 2019
	        next irrigation will be on Tue Apr 30 10:00:00 CEST 2019
	this is an ACTIVE concatenated irrigation: ZONA1_pratoSud ZONA2_pratoSudOvest ZONA3_pratoNordOvest ZONA4_pratoNord

	WARNING: irrigation for Fragole is at 16:00 every 1 day(s) - INACTIVE
	        no previous irrigation
        	next irrigation will be today/tomorrow at 16:00

	NORMAL: irrigation for Aiuola is at 09:00 every 1 day(s) - ACTIVE
        	no previous irrigation
	        next irrigation will be today/tomorrow at 09:00

	NORMAL: irrigation for Aiuola is at 18:00 every 1 day(s) - ACTIVE
        	no previous irrigation
	        next irrigation will be today/tomorrow at 18:00
	pi@raspberrypi:~/piGardenSched $

E' possibile effettuare un reset degli stati registrati con il seguente comando:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh reset
	00:37:08-29/04/19 NORMAL: resetting irrigation status for all EVs
	tar: Removing leading `/' from member names
	/home/pi/piGardenSched/state/
	/home/pi/piGardenSched/state/ZONA1_pratoSud-irrigationhistory
	/home/pi/piGardenSched/state/ZONA3_pratoNordOvest-irrigationhistory
	/home/pi/piGardenSched/state/ZONA1_pratoSud-10:00.lastrun
	/home/pi/piGardenSched/state/ZONA1_pratoSud-10:00.history
	/home/pi/piGardenSched/state/ZONA4_pratoNord-irrigationhistory
	/home/pi/piGardenSched/state/ZONA2_pratoSudOvest-irrigationhistory
	pi@raspberrypi:~/piGardenSched $ ll state
	total 0
	pi@raspberrypi:~/piGardenSched $
E automaticamente viene fatto un backup del contenuto della directory sotto tmp
	pi@raspberrypi:~/piGardenSched $ ll tmp
	total 28
	-rw-r--r-- 1 pi pi  1058 Apr 28 15:20 crontab
	-rw-r--r-- 1 pi pi   955 Apr 29 00:28 crontab.output
	-rw-r--r-- 1 pi pi     0 Apr 29 00:37 piGarden.sched
	-rw-r--r-- 1 pi pi   157 Apr 29 00:36 piGarden.sched_2
	-rw-r--r-- 1 pi pi   551 Apr 29 00:36 piGarden.sched_3
	-rw-r--r-- 1 pi pi 10240 Apr 29 00:37 state_32327.tar
	pi@raspberrypi:~/piGardenSched $ tar tvf tmp/state_32327.tar
	drwxr-xr-x pi/pi             0 2019-04-28 00:22 home/pi/piGardenSched/state/
	-rw-r--r-- pi/pi            52 2019-04-28 00:45 home/pi/piGardenSched/state/ZONA1_pratoSud-irrigationhistory
	-rw-r--r-- pi/pi            52 2019-04-28 00:47 home/pi/piGardenSched/state/ZONA3_pratoNordOvest-irrigationhistory
	-rw-r--r-- pi/pi            11 2019-04-28 00:33 home/pi/piGardenSched/state/ZONA1_pratoSud-10:00.lastrun
	-rw-r--r-- pi/pi            22 2019-04-28 00:33 home/pi/piGardenSched/state/ZONA1_pratoSud-10:00.history
	-rw-r--r-- pi/pi            52 2019-04-28 00:48 home/pi/piGardenSched/state/ZONA4_pratoNord-irrigationhistory
	-rw-r--r-- pi/pi            52 2019-04-28 00:46 home/pi/piGardenSched/state/ZONA2_pratoSudOvest-irrigationhistory
	pi@raspberrypi:~/piGardenSched $


IL LOG DELLO SCHEDULATORE - piGardenSched.log
---------------------------------------------
Con l'opzione verbose=yes di /etc/piGardenSched.con vengono attivati ulteriori messaggi (tipicamente con NORMAL come prefisso), come il seguente ogni minuto in assenza di schedulazioni:
	01:14:01-29/04/19 NORMAL: no irrigation run at 01:14
La schedulazione di EV5 e' disattivata pertanto alle 16:00 il messaggio riportato nel log e':
	09:00:01-29/04/19 NORMAL: piGarden drv_rainsensorqty service active - integration with piGardenSched is available
	Mon Apr 29 09:00:00 CEST 2019 - START IRRIGATION Aiuola after 1 days
	WARNING: single irrigation for Aiuola EV ( scheduled EV is Aiuola ) is INACTIVE - irrigation skipped
Cosi' come alle 10:
	10:00:01-29/04/19 NORMAL: piGarden drv_rainsensorqty service active - integration with piGardenSched is available
	Mon Apr 29 10:00:00 CEST 2019 - START IRRIGATION ZONA1_pratoSud after 1 days
	NORMAL: multi irrigation for  ZONA1_pratoSud ZONA2_pratoSudOvest ZONA3_pratoNordOvest ZONA4_pratoNord EV ( scheduled EV is ZONA1_pratoSud ) is running
	EV ZONA1_pratoSud lastrun updated
	10:00:01-29/04/19 running nohup command "/home/pi/piGardenSched/include/irrigating.sh  ZONA1_pratoSud:2 ZONA2_pratoSudOvest:2 ZONA3_pratoNordOvest:2 ZONA4_pratoNord:2
        check logfile /home/pi/piGardenSched/log/ZONA1_pratoSud-10:00.log"

IL LOG DELL'IRRIGAZIONE (es. ZONA1_pratoSud-10:00.log - tipo "MULTI IRRIGATION"):
---------------------------------------------------------------------------------
Con l'opzione verbose=yes di /etc/piGardenSched.conf vengono attivati ulteriori messaggi con prefisso NORMAL.
Vediamo il contenuto di tale log per la prima EV:
	called irrigating.sh ZONA1_pratoSud:2 ZONA2_pratoSudOvest:2 ZONA3_pratoNordOvest:2 ZONA4_pratoNord:2
	----- STARTING MULTI IRRIGATION - 4 EVs CONCATENATED -----
	10:00:02-29/04/19 NORMAL: piGarden drv_rainsensorqty service active - integration with piGardenSched is available
	10:00:02-29/04/19 NORMAL: $RAIN_GPIO is "drv:rainsensorqty" and "$autostoprain" yes - raincheck
	10:00:02-29/04/19 NORMAL: ${EVNORAINQTY[1]} is 0 (or null) - raincheck QTY for ZONA1_pratoSud is active
	10:00:02-29/04/19 NORMAL: ${EVNORAINCLASSIC[1]} is 1 - classic raincheck for ZONA1_pratoSud is disabled
	10:00:02-29/04/19 NORMAL: starting irrigation EV ZONA1_pratoSud
	TEST flag "/home/pi/piGardenSched/include/TEST" found - piGarden.sh open ZONA1_pratoSud not executed
	10:00:02-29/04/19 NORMAL: piGarden drv_rainsensorqty service active - integration with piGardenSched is available
	waiting 2 minutes 10:00:02-29/04/19 NORMAL: $RAIN_GPIO is "drv:rainsensorqty" and "$autostoprain" yes - raincheck
	10:00:02-29/04/19 NORMAL: ${EVNORAINQTY[1]} is 0 (or null) - raincheck QTY for ZONA1_pratoSud is active
	10:00:02-29/04/19 NORMAL: ${EVNORAINCLASSIC[1]} is 1 - classic raincheck for ZONA1_pratoSud is disabled
	.10:01:02-29/04/19 NORMAL: $RAIN_GPIO is "drv:rainsensorqty" and "$autostoprain" yes - raincheck
	10:01:02-29/04/19 NORMAL: ${EVNORAINQTY[1]} is 0 (or null) - raincheck QTY for ZONA1_pratoSud is active
	10:01:02-29/04/19 NORMAL: ${EVNORAINCLASSIC[1]} is 1 - classic raincheck for ZONA1_pratoSud is disabled
	.
	TEST - piGarden.sh close ZONA1_pratoSud not executed
	10:02:02-29/04/19 NORMAL: end irrigation EV ZONA1_pratoSud after 2 mins
	[...] rimosse alcune linee
	TEST flag "/home/pi/piGardenSched/include/TEST" found - piGarden.sh close ZONA4_pratoNord not executed
	10:08:09-29/04/19 NORMAL: end irrigation EV ZONA4_pratoNord after 2 mins
	----- FINISHED MULTI IRRIGATION -----

La prima riga riporta gli argomenti con cui e' stato lanciato lo script: un argomento per EV con il nome:durata.
Viene specificato che trattasi di MULTI IRRIGATION
Tutti i messaggi NORMAL sono visibili per via dell'opzione verbose attiva. Vedremo che se disattivata il log sara' piu' conciso.
le prime 4 righe, cioe' le:
	10:00:02-29/04/19 NORMAL: piGarden drv_rainsensorqty service active - integration with piGardenSched is available
	10:00:02-29/04/19 NORMAL: $RAIN_GPIO is "drv:rainsensorqty" and "$autostoprain" yes - raincheck
	10:00:02-29/04/19 NORMAL: ${EVNORAINQTY[1]} is 0 (or null) - raincheck QTY for ZONA1_pratoSud is active
	10:00:02-29/04/19 NORMAL: ${EVNORAINCLASSIC[1]} is 1 - classic raincheck for ZONA1_pratoSud is disabled
Sono verifiche per l'opzione autostoprain attiva per via dell'integrazione con drv_rainsensorqty . Lo verifica della presenza della pioggia viene effettuata prima dell'apertura dell'EV e durante il periodo di attivazione - cioe' il parametro tempo di apertura/durata. Motivo per il quale sono presenti due blocchi di tali verifiche.
Ogni . (punto) riportato e' un minuto passato. Vedremo la maggior leggibilita' del log con verbose=no
La presenza del file vuoto /home/pi/piGardenSched/include/TEST evita l'apertura/chiusura dell'EV al fine dei test dello schedulatore.
Mettiamo quindi verbose=no in /etc/piGardenSched.conf editando il file.
Di seguito il log dell'irrigazione dell'EV6, ovvero Aiuola:
called irrigating.sh Aiuola:1
	----- STARTING SINGLE IRRIGATION -----
	18:00:01-29/04/19 NORMAL: starting irrigation EV Aiuola
	TEST flag "/home/pi/piGardenSched/include/TEST" found - piGarden.sh open Aiuola not executed
	waiting 1 minutes .
	TEST flag "/home/pi/piGardenSched/include/TEST" found - piGarden.sh close Aiuola not executed
	18:01:01-29/04/19 NORMAL: end irrigation EV Aiuola after 1 mins
	----- FINISHED SINGLE IRRIGATION -----

INTEGRAZIONE CON DRV_RAINSENSORQTY
Al fine di dimostrare il funzionamento dell'integrazione con rainsensorqty, ho predisposto la seguente irrigazione alle 22:30
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;2;10:00;1;active
	EV2;2;EV1;;
	EV3;2;EV2;;
	EV4;2;EV3;;
	EV5;5;16:00;1;inactive
	EV6;1;09:00,18:00;1;active
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh enable EV5
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_time EV5 22:30
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh change_dur EV5 10
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh show
	EV1;2;10:00;1;active
	EV2;2;EV1;;
	EV3;2;EV2;;
	EV4;2;EV3;;
	EV5;10;22:30;1;active
	EV6;1;09:00,18:00;1;active
	pi@raspberrypi:~/piGardenSched $
Questa la previsione di irrigazione:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh stat

	NORMAL: irrigation for ZONA1_pratoSud is at 10:00 every 1 day(s) - ACTIVE
	        last irrigation was     on Mon Apr 29 10:00:00 CEST 2019
	        next irrigation will be on Tue Apr 30 10:00:00 CEST 2019
	this is an ACTIVE concatenated irrigation: ZONA1_pratoSud ZONA2_pratoSudOvest ZONA3_pratoNordOvest ZONA4_pratoNord

	NORMAL: irrigation for Fragole is at 22:30 every 1 day(s) - ACTIVE
	        no previous irrigation
	        next irrigation will be today/tomorrow at 22:30

	NORMAL: irrigation for Aiuola is at 09:00 every 1 day(s) - ACTIVE
	        no previous irrigation
        	next irrigation will be today/tomorrow at 09:00

	NORMAL: irrigation for Aiuola is at 18:00 every 1 day(s) - ACTIVE
        	last irrigation was     on Mon Apr 29 18:00:00 CEST 2019
	        next irrigation will be on Tue Apr 30 18:00:00 CEST 2019
	pi@raspberrypi:~/piGardenSched $

Ho impostato la durata di 10 minuti cosi' possiamo simulare la pioggia in questo intervallo di tempo. Testeremo il comportamento controllato dalla variabile
autostoprain impostata a yes
	pi@raspberrypi:~/piGardenSched $ ll -rt log
	total 76
	-rw-r--r-- 1 pi pi  5934 Apr 29 10:08 ZONA1_pratoSud-10:00.log
	-rw-r--r-- 1 pi pi   389 Apr 29 18:01 Aiuola-18:00.log
	-rw-r--r-- 1 pi pi   350 Apr 29 22:30 piGardenSched.log
	-rw-r--r-- 1 pi pi   245 Apr 29 22:32 Fragole-22:30.log
	pi@raspberrypi:~/piGardenSched $ tail -f log/Fragole-22\:30.log
	called irrigating.sh Fragole:10
	----- STARTING SINGLE IRRIGATION -----
	22:30:01-29/04/19 NORMAL: starting irrigation EV Fragole
	TEST flag "/home/pi/piGardenSched/include/TEST" found - piGarden.sh open Fragole not executed
	waiting 10 minutes ...
Simuliamo la pioggia popolando a mano il file /home/pi/piGarden/state/rainsensorqty_lastrain
Il tempo di reazione e' entro un minuto, in quanto il loop controllato da raincheck-waitloop.sh verifica lo stato della pioggia ogni minuto.
Ecco il log:
	called irrigating.sh Fragole:10
	----- STARTING SINGLE IRRIGATION -----
	22:30:01-29/04/19 NORMAL: starting irrigation EV Fragole
	TEST flag "/home/pi/piGardenSched/include/TEST" found - piGarden.sh open Fragole not executed
	waiting 10 minutes ......
	RAINED on Mon Apr 29 22:35:22 CEST 2019 for 7.26 mm
	TEST flag "/home/pi/piGardenSched/include/TEST" found - piGarden.sh close Fragole not executed
	22:36:02-29/04/19 NORMAL: end irrigation EV Fragole after 6 mins
	----- FINISHED SINGLE IRRIGATION -----
Se verifichiamo quanto ha irrigato la EV5:
	pi@raspberrypi:~/piGardenSched $ ./piGardenSched.sh irrigation

	EV Aiuola history of effective irrigation
	Mon Apr 29 18:00:01 CEST 2019 for 1 mins

	EV Fragole history of effective irrigation
	Mon Apr 29 22:30:01 CEST 2019 for 6 mins

	EV ZONA1_pratoSud history of effective irrigation
	Mon Apr 29 10:00:02 CEST 2019 for 2 mins

	EV ZONA2_pratoSudOvest history of effective irrigation
	Mon Apr 29 10:02:04 CEST 2019 for 2 mins

	EV ZONA3_pratoNordOvest history of effective irrigation
	Mon Apr 29 10:04:06 CEST 2019 for 2 mins

	EV ZONA4_pratoNord history of effective irrigation
	Mon Apr 29 10:06:09 CEST 2019 for 2 mins
	pi@raspberrypi:~/piGardenSched $
Vediamo che la EV Fragole ha irrigato alle 22:30:01 per 6 minuti

Attiviamo anche la EV5 alle 22:45 cosi' vediamo come entra in gioco il comportamento gestito dalla variabile autodelayrain=yes
	pi@raspberrypi:~/piGardenSched $ cat log/piGardenSched.log
	[...] rimosse linee
	EV Aiuola would have next irrigation on Mon Apr 29 22:45:00 CEST 2019
	RAINED on Mon Apr 29 22:35:22 CEST 2019 for 7.26 mm
	EV Aiuola irrigation delayed 1 day(s)
	EV Aiuola next irrigation will be on Tue Apr 30 22:45:00 CEST 2019
	pi@raspberrypi:~/piGardenSched $

FUNZIONI SPECIALI
-----------------
L'eventuale creazione del file vuoto (touch TEST) nella directory /home/pi/piGardenSched/include (file esteso quindi /home/pi/piGardenSched/include/TEST) che impedisce l'effettiva esecuzione dell'apertura chiusura delle valvole. Modalita' utile se si vuole testare il funzionamento del nuovo schedulatore prima di metterlo in produzione:
	-rw-r--r-- 1 pi pi     0 Apr 27 23:34 TEST

About

Alternative scheduler for piGarden

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages