piGarden v 0.4.0 e piGardenWeb v 0.3.0: novità relative alla sicurezza, schedulazioni, statistiche

Salve a tutti,
da poche ore ho rilasciato la nuove versioni si piGarden e piGardenWeb le quali vanno ad aggiungere, come cita il titolo del post, alcune funzioni relative alla sicurezza, schedulazioni e statistiche. Ma andiamo con ordine…..

piGarden v 0.4.0

La nuova versione di piGarden, script per la gestione del nostro impianto di irrigazione gestito da Raspberry Pi, aggiunge le seguenti caratteristiche.

Credenziali di comunicazione sul socket server

Come già detto in passato la piGarden e piGardenWeb comunicano grazie ad socket server esposto sulla rete. Fin quando i due componenti risiedono sulla stessa macchina non ci sono grossi problemi, ma nel caso che l’applicazione web gestita da piGardenWeb giri su un secondo Raspberry (come nel mia installazione) allora il socket server deve rimanere in ascolto sull’interfaccia di rete che lo collega alla lan lasciandolo in balia di possibili intrusi.

Per ovviare a questa vulnerabilità ho introdotto la possibilità di definire le credenziali del socket server e che i client (piGardenWeb) dovranno indicare per autenticarsi in fase di connessione.

Per fare si che il socket server sia soggetto ad autenticazione dovranno essere definite nel file di configurazione le variabili TCPSERVER_USERTCPSERVER_PWD.

Funzione di lock/unlock su richieste concorrenti nell’apertura/chiusura delle elettrovalvole

Nel caso in cui vengano definite per lo stesso orario due o più schedulazioni di apertura/chiusura il sistema andava in crisi e potevano verificarsi problemi per cui una delle due schedulazioni non portava a termine l’operazione. Per ovviare a questo problema ho introdotto un sistema di lock/unlock il quale da priorità ad eventuali richieste concorrenti e mette in attesa tutte le altre, una volta processata la prima, passa alla seconda e così via.

Schedulazioni disabilitate

E’ stato aggiunto la possibilità di definire delle schedulazioni disabilitate di apertura/chiusura delle elettrovalvole. Questa nuova caratteristica è stata aggiunta per dare supporto a piGardenWeb per gestire la possibilità di disabilitare le schedulazioni già definite.

Per potere inserire una schedulazione disabilitata è necessario impartire il comando add_cron_open seguito dall’opzione disabled:

piGarden.sh add_cron_open alias m h dom mon dow [disbled]

Corretto perdita dati delle ultime piogge

In fase di inizializzazione del sistema tramite il comando init, venivano eliminate le informazioni relative all’ultima pioggia rilevata dal sensore e dal servizio online. Con questo aggiornamento queste informazioni vengono mantenute e quindi non più eliminate.

Raccolta statistiche di utilizzo

In questi ultimi giorni, vendendo i grafici dei clone di piGarden eseguiti su github mi sono reso conto che non avevo nessuno strumento per capire quali effettivamente fossero utilizzati e quanto invece cestinati magari perché scaricati solo per curiosità.

Ho pensato quindi di aggiungere una funzione che raccolga una sorta di attività giornaliera delle installazioni attive.

Il sistema funzione generando un’identificativo univoco di 32 caratteri, ricavato facendo un md5sum del mac address della prima interfaccia di rete presente sul Raspberry. Questa stringa mi permetterà di identificare in maniera univoca l’installazione in un ambito statistico, ma nel rispetto della privacy, non avrò nessun modo per potere risalire, identificare o rintracciare l’hardware originale da cui proviene l’identificativo.

L’identificativo viene scritto nel file /tmp/pigarden.id e viene inviato con una frequenza massima di 24 alla url https://www.lejubila.net/statistic/collect_usage/piGarden indicando la versione utilizzata.

Per chi volesse disabilitare l’invio dell’identificativo per non essere soggetto a statistiche di utilizzo, lo può fare definendo nel file di configurazione la NO_SEND_IDENTIFIER e impostandola con il valore uno:

NO_SEND_IDENTIFIER=1

Aggiornamento dalla v 0.3.1

Per eseguire l’aggiornamento di piGarden alla versione 0.4.0 procedere come segue:

cd
cd piGarden
git pull

Definire il percorso dell’eseguibile stat nel file di configurazione:

# Percorso stat
STAT="/usr/bin/stat"

Definire le credenziali del socket server con i valori che preferite:

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

Definire la variabile per impedire l’invio delle statistiche:

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

piGardenWeb

Credenziali di comunicazione con socket server

Come già detto sopra, ho introdotto la possibilità di definire le credenziali di accesso al socket server gestito da piGarden, di conseguenza piGardenWeb dovrà autenticarsi in modo corretto. Per definire le credenziali di autenticazione andranno definiti parametri PIGARDEN_SOCKET_CLIENT_USERPIGARDEN_SOCKET_CLIENT_PWD nel file .env.

Abilitare o disabilitare una schedulazione di apertura / chiusura

Con questa versione è stata aggiunta la possibilità di disabilitare o abilitare le schedulazioni di apertura / chiusura delle zone. Questo può risultare utile quando vorremo sospendere temporaneamente una schedulazione senza doverla necessariamente eliminare per poi essere reinserita successivamente. Basterà semplicemente disabilitarla per poi essere riabilitata quando necessario.

Aggiornamento dalla v 0.2.0

Per eseguire l’aggiornamento di piGardenWeb dalla v 0.2.0 alla v 0.3.0 eseguire come segue:

cd
cd piGardenWeb
git pull

Se necessario definire del file .env le credenziali di accesso al socket server come indicato sopra.

Conclusioni

Per ora è tutto. Per qualsiasi dubbio o problema scrivete pure nei commenti.

27 pensieri su “piGarden v 0.4.0 e piGardenWeb v 0.3.0: novità relative alla sicurezza, schedulazioni, statistiche

  1. Ciao David,
    purtroppo aggiornando si è incastrato qualcosa. in sostanza non riconosce più lo script come tale. Ad esempio se provo a scrivere (nella cartella) pi+TAB non mi completa il nome e se lo scrivo a mano (piGarden.sh init) mi dice command not found.

    Non vorrei riformattare la SD, ma vorrei reinstallare da capo. Come si possono rimuovere i cloni dei repository e l’eventuale cache? ci ho provato ma riscarica tutto in meno di 1 secondo e il problema persiste.

    Grazie come sempre,
    Marco

  2. Ciao @Marco,
    sei sicuro di avere impartito il comando nel modo giusto ? Mi spiego, se sei nella cartella di installazione per lanciare lo script devi digitare
    ./piGarden.sh
    e non
    piGarden.sh

    stesso discorso vale per l’autocompletamento, devi metter il ./ davanti al comando. Serve ad indicare alla shell che vuoi eseguire il comando che è nalla cartella corrente.

    Se non ti funziona nemmeno così controlla i se lo script ha i permessi di esecuzione, se non ce li ha puoi riassegnarli con
    chmod 755 piGarden.sh

    Per ultimo puoi controllare se nel file di configurazione sono definite tutte le variabili relative ai path dei comandi a cui si affida piGarden, puoi confrontare il tuo file di configurazione che hai in /etc/piGarden.conf con quello di esempio presente in /home/pi/piGarden/conf/piGarden.conf.example

    Se invece vuoi reinstallare da capo eliminando quella attuale puoi fare così
    cd
    rm -rf piGarden
    git clone https://github.com/lejubila/piGarden.git

    Fammi sapere se riesci a risolvere.

  3. Ho risolto la questione dello script, evidentemente ricordavo male la sintassi. Però continua a non funzionare (tentavo proprio di lanciare l’init perché non è più ripartito dopo l’aggiornamento). Quello che ho notato è che all’avvio la procedura init è molto lenta e i led dei relay rimangono tutti accesi. Appena riesco vorrei ripristinare l’immagine di backup che feci sul pc per vedere che tipo di problema è.

    Nel frattempo ritorno a irrigare con il metodo “CoLeMan”!

    Ciao!

  4. Ciao
    ho eseguito l’aggiornamento e tutto sembra funzionare perfettamente. Solo una cosa funziona in modo anomalo: all’avvio del RB il sistema non resetta più le elettrovalvole e rimangono tutte aperte. è necessario agire su ogni singolo canale aprendolo e chiudendolo a mano. Ho controllato il crontab e sembra essere ok.
    cosa potrebbe essere?
    grazie
    Claudio

  5. Ciao @Claudio,
    ho fatto una correzione.
    Per favore puoi provare ad aggiornare e vedere come va ora ?
    Aggiorna facendo così:
    cd
    cd piGarden
    git pull

    Fammi sapere così va meglio
    Grazie.

  6. …sei meglio di help desk 24×7
    Non resetta come prima….considera però che sto lavorando off line, ovvero con la scheda relè collegata al RB ma senza il collegamento alle elettrovalvole.
    Sempre nella medesima configurazione, però, la precedente versione funzionava bene.
    grazie
    Claudio

  7. ho fatto un’ulteriore modifica,
    dovrei avere risolto.
    Puoi rifare l’aggiornamento come prima ?
    Fammi sapere se ti funziona.

  8. Perfetto lejubila
    funziona alla grande!!!
    nella versione precedente resettava contemporaneamente tutti i canali. Nell’attuale li resetta uno per volta. Direi ottimo!!!
    Grazie 1000
    Claudio

  9. Confermo anche io: appena effettuato l’aggiornamento e tutto funziona come dovrebbe.

    Grazie mille!

  10. Ciao @Marco,
    nei vari articoli pubblicati sono previste sei zone (elettrovalvole) di tipo bi-stabile collegate ad un raspberry pi 1 di tipo B.
    Niente vieta che possa aggiungere altre zone baste che il raspberry abbia ulteriori gpio liberi da potere utilizzare.
    Se scegli l’installazione con valvole monostabili risparmi due gpio e quindi puoi aggiungere due zone ulteriori.

  11. Ciao, che tu sappia, c’è modo di creare un file log al giorno? Mi spiego: ogni giorno viene greato un nuovo file o sovrascritto da capo il vecchio.
    Grazie
    Claudio

  12. Ciao @Claudio,
    il comportamento standard di piGarden è accodare i log nel file /home/pi/piGarden/log/piGarden.log (lo puoi cambiare modificando la variabile LOG_FILE nel file di configurazione). Quando raggiunge la dimensione massima specificata in LOG_FILE_MAX_SIZE (sempre nel file di configurazione) viene rinominato e compresso. A questo punto viene creato un nuovo di file di log.
    Se vuoi che tutti i giorni il file di log venga azzerato per poi ricominciare, puoi inserire un cron che tutti i giorni a mezzanotte elimini il file di log. Es:

    0 0 * * * rm /home/pi/piGarden/log/piGarden.log

    Spero di esserti stato utile.

  13. Ciao,
    mi complimento con te per il progetto che stai portando avanti, molto interessante.
    A mio avviso l’interfaccia frontend di un progetto è molto importante. E dato che sono interessato al tuo progetto ho alcune domande da farti.
    L’hardware d’acquistare quale?
    esiste un contenitore che possa alloggiare tutto l’hardware?
    siccome vorrei controllare tutto dal wifi un raspberry pi 3 va bene?
    quali sono poi gli altri moduli che occorrono per gestire 6 elettrovalvole?
    Siccome devo partire da zero mi puoi indicare che sistema installare?
    la tua applicazione web può essere gestita da uno smartphone?

    Grazie e complimenti ancora

  14. Ciao @Tiziano,
    qui sul blog ho pubblicato tutta una serie di post, che ti invito a leggere, dove viene spiegato passo-passo tutto il necessario per realizzare l’impianto.
    Per quanto riguarda il materiale da acquistare puoi leggere il primo post della serie: Impianto di irrigazione con Raspberry Pi (prima parte).
    Per il contenitore puoi vedere questo altro posto (ci sono anche le foto): Impianto di irrigazione con Raspberry Pi: collegamenti esterni alla centralina (sesta parte).
    Il raspeberry 3 va più che bene, tieni conto che io ho utilizzato un raspberry di prima generazione nella versione B con un dongle usb-wifi collegato.
    I moduli necessari sono indicati tutti nei post.
    Tutto il sistema è stato sviluppato e testato su raspbian.
    L’interfaccia dell’applicazione web è responsive e quindi sia adatta ai diversi form-factor dei dispositivi e quindi anche agli smatphone.

    Tieni conto che nei primi post viene descritto l’implementazione dell’impianto con elettrovalvole di tipo bi-stabili, successivamente è stato aggiunto anche il supporto per le elettrovalvole mono-stabili (un po più semplici da gestire). Puoi approfondire in questo post: piGarden v 0.3.1: aggiunto supporto sperimentale per elettrovalvole mono-stabili.

    Se hai dubbi chiedi pure.

    Dimenticavo, a questo link trovi tutto l’elenco dei post ordinati dal più recente al più vecchio.

  15. @lejubila
    Ciao e grazie per la tua gentile risposta.
    Guarderò tutto, mi puoi spiegare cosa intendi con valvola bistabile e monostabile?
    Io ho delle valvole da 24vac della rainbird, quindi devo acquistare un alimentatore 24vac da collegare sul modulo releays, giusto?
    Ad ogni modo è importante per me controllare tutto dallo smartphone, quindi se tutto è compatibile siamo a cavallo.

  16. Ciao @Tiziano,
    non conosco queste elettrovalvole ma dovrebbero essere del tipo mono-stabile, quindi si ti confermo che devi collegare l’alimentatore al modulo relè. Puoi leggere questo post relativo al supporto per le elettrovalvole mono-stabili.

    Ti confermo che puoi usare piGardenWeb dal browser dello smartphone.

  17. @lejubila
    benissimo, io avevo già dato per scontato che avrei collegato tutto via relè.
    Sarebbe bello poter mettere un display da 3.5″ o superiore e visualizzare la grafica di controllo anche sul display, è una cosa fattibile ?
    hai mai provato su un display da 3.5″ ?

  18. Ciao @Tiziano,
    non ho esperienza riguardo a display collegati al raspberry ma non escludo che possa essere realizzato.
    Anzi se pensi di cimentarti in questo impresa e ci riesci magari poi puoi condividere la tua esperienza con noi.

  19. Hai cambiato il valore di EV_TOTAL nel file di configurazione in modo che corrisponda al numero totale di elettrovalvole ?
    Hai definito correttamente la nuova elettrovalvola nel file di configurazione ?
    Se hai qualche dubbio puoi riportare qui sotto le definizioni delle elettrovalvole che hai nel file di configurazione.

  20. ritornando al discorso display, secondo me sarebbe utile li dove bisogna agire manualmente e in rapidità sull’impianto.
    Chissà magari qualcuno può aiutarci…

  21. Secondo me il display per come è stato concepito l’impianto ha solo una funzione estetica (es: Mostrare quale EV sta irrigando e per quanto starà aperta), ma sicuramente non può aiutare ad intervenire “in rapidità” sull’impianto.

    Per implementare una console vera e propria è necessario intervenire a livello di circuito magari inserendo un pulsante “rosso” che permette di bloccare manualmente l’irrigazione, o n pulsanti che permettono di far partire questa o quella EV.

    Io ho ordinato un display (che ci sta mettendo tanto ad arrivare) e come ho già avuto modo di dire a Lejubila ci sarebbe da fare una modifica sulla struttura dello script.

    Insomma, implementare quello che intendi tu si traduce in uno stravolgimento del sistema così come è fatto.

    Ciao,
    Marco

  22. Ciao Marco, grazie per la risposta.
    Si ho capito benissimo la situazione, molte volte capita di dare acqua senza programmare, a questo punto, dato che è complesso farlo via hardware si potrebbe implementare via software la gestione manuale o esiste gia?
    io purtroppo devo ancora progettare tutto, attendo che arrivi il materiale…

Lascia un commento

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