piGarden: gestione eventi

PiGarden (il software che permette di trasformare il vostro Raspberry Pi in una centralina di irrigazione) dalla version 0.5.1 ha acquistato la gestione eventi: adesso sarà possibile fare eseguire i vostri script allo scaturire degli eventi innescati da piGarden. Per esempio sarà possibile eseguire l’invio di una mail all’apertura di un’elettrovalvola durante l’avvio dell’irrigazione, oppure sarà possibile non fare partire l’irrigazione in base a controlli che potrete inserire in un vostro script personalizzato. Ma andiamo con ordine e vediamo esattamente come funzione il tutto.

PiGarden permette di gestire diverse azioni, ognuna di queste fa innescare due eventi ai quali possono essere agganciati uno o più script da fare eseguire prima (eventi *_before) o dopo (eventi *_after) l’azione eseguita. Ad ogni script viene passato come primo argomento il nome dell’evento stesso, gli argomenti a seguire saranno diversi in base alla tipologia dell’evento innescato. Nella seguente tabella sono riportati gli eventi gestiti con relativa descrizione e argomenti passati agli script:

EventoDescrizioneParametri passati
init_beforeViene innescato prima della chiamata di inizializzazione di piGarden (piGarden init)

$1 - nome evento
$2 - timestamp
init_afterViene innescato al termine della chiamata di inizializzazione di piGarden (piGarden init)

$1 - nome evento
$2 - timestamp
ev_open_beforeViene innescato prima dall'apertura di un'elettrovalvola

$1 - nome evento
$2 - alias elettrovalvola
$3 - force
$4 - timestamp
ev_open_afterViene innescato dopo dall'apertura di un'elettrovalvola

$1 - nome evento
$2 - alias elettrovalvola
$3 - force
$4 - timestamp
ev_close_beforeViene innescato prima della chiusura di un'elettrovalvola

$1 - nome evento
$2 - alias elettrovalvola
$3 - timestamp
ev_close_afterViene innescato al dopo la chiusura di un'elettrovalvola

$1 - nome evento
$2 - alias elettrovalvola
$3 - timestamp
check_rain_sensor_beforeViene innescato prima del controllo meteo da parte del sensore

$1 - nome evento
$2 - state: rain | norain
$3 - timestamp
check_rain_sensor_afterViene innescato dopo ave eseguito il controllo meteo da parte del sensore

$1 - nome evento
$2 - state: rain | norain
$3 - timestamp
check_rain_sensor_changeViene innescato al cambio dello stato del sensore pioggia. L'evento verrà eseguito quando inizia o quando termina la pioggia

$1 - nome evento
$2 - state: rain | norain
$3 - timestamp
check_rain_online_beforeViene innescato prima di eseguire il controllo meteo tramite servizio online

$1 - nome evento
$2 - state: rain | norain
$3 - timestamp
check_rain_online_afterViene innescato al termine dell'esecuzione del controllo meteo tramite servizio online

$1 - nome evento
$2 - state: rain | norain
$3 - timestamp
check_rain_online_changeViene innescato quando cambia lo stato meteorologico a seguito del controllo tramite servizio online.
Verrà eseguito quanto inizia o termina la pioggia

$1 - nome evento
$2 - state: rain | norain
$3 - timestamp

PiGarden adesso contiene una nuova sotto-cartella dal nome events che ha la seguente struttura:

events
├── check_rain_online_after
├── check_rain_online_before
├── check_rain_online_change
├── check_rain_sensor_after
├── check_rain_sensor_before
├── check_rain_sensor_change
├── ev_close_after
├── ev_close_before
├── ev_open_after
├── ev_open_before
├── init_after
├── init_before
└── scripts
    ├── sendmail.sh
    ├── testeventbreak.sh
    └── testevent.sh

Ogni sotto directory, ad esclusione di scripts, identifica un evento specifico. Gli script da fare eseguire dovranno essere posizionati (o creato un link simbolico) nella relativa cartella che identifica l’evento. In presenza di più script, questi verranno eseguiti  in ordine alfabetico.

Quando sono presenti più script per un singolo evento, uno di questi potrà interrompere l’esecuzione dei successivi uscendo con un exit code diverso da zero (es: exit 1).

Una nota particolare va fatta per l’evento ev_open_before. Gli script eseguiti da questo evento hanno la facoltà di impedire l’apertura dell’elettrovalvola che si appresta ad entrare in funzione. Basterà infatti fare terminare lo script con un codice di uscita diverso da zero (es: exit 1). Così facendo oltre a interrompere l’esecuzione di eventuali script successivi verrà anche impedita l’apertura dell’elettrovalvola.

Una nota particolare va fatta per la cartella scripts. Questa è adibita a contenere gli script da associare agli eventi. E’ infatti consigliabili posizionare gli script qui dentro e successivamente creare dei link simbolici nelle directory relative agli eventi a cui vogliamo che vengano associati.

Nella cartella scripts, sono presenti tre esempi da potere prendere come da campione. Tra questi vi è lo script sendmail.sh, che potete utilizzare questo come modello per crearne uno vostro (es: sendmail_custom.sh) personalizzandolo con i vostri dati e successivamente creare il link simbolico negli eventi che desiderate, in modo che venga inviata una mail al loro innesco.

Spero che questa nuova funzione possa essere utile a molti. Mi raccomando se create degli script interessanti da fare eseguire allo scaturire dei vari eventi, non mancate di condividerli in modo da poterli inserire nelle prossime versioni di piGarden.

4 pensieri su “piGarden: gestione eventi

  1. @lejubila
    ottimo lavoro, fra l’altro recepisce buona parte dei miei desiderata.
    Proverò queste nuove funzionalità al più presto.
    Ciao

  2. @lejubila
    sto provando la gestione eventi per l’invio di email tramite codice python, sinora ho un solo piccolo problema, sembra che il parametro $2 (timestamp) dell’evento init_after non venga valorizzato, comunque potrebbe essere un mio errore che ancora non invividuo.
    A breve proverò, sempre con codice python, ad utilizzare la gestione eventi per popolare un database MySql (MariaDB), a tal proposito pensavo che potrebbe essere utile estendere questa nuova funzionalità anche alle opreazioni di schedulazione ed al setup iniziale. Pensi sia possibile?
    Grazie.
    Ciao

  3. Ciao @Ivano,
    per quanto riguarda gli eventi init_* è presente un bug per cui viene passato il timestamp come terzo parametro anziché secondo. A breve rilascerò il fix.
    Per quanto riguarda gli eventi che proponi di aggiungere, se ho capito bene, vorresti che alla conferma di una schedulazione da interfaccia web venisse scaturito un’evento. Stessa cosa alla conferma del setup iniziale ?
    Mi confermi quanto sopra ?

  4. @lejubila,
    hai capito bene, io credo che allargare la gestione degli eventi, con le stesse modalità utilizzate per quanto già fatto, a tutte le operazioni possa essere una cosa utile.

    L’estensione, a mio avviso, consentirebbe di utilizzare lo strumento così ben fatto aumentando la flessibilità, già introdotta con le gestione dei driver, ciò potrebbe soddisfare un largo ventaglio di esigenze degli utilizzatori pur mantenendo il giusto livello di astrazione e generalità indispensabile per uno strumento non di nicchia e/o specializzato per la singola situazione.

    Grazie.

    Ciao

Lascia un commento

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