-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
622 lines (571 loc) · 33.4 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
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