In diverse occasioni mi è stato chiesto come piGarden funzionasse e alcune volte è stata fatta un po’ di confusione riguardo ai ruoli dei diversi componenti che entrano in giorco. Ci sono stati alcuni utenti infatti che volendo cambiare o aggiungere nuove funzionalità pensavano di dovere intervenire su quella che è solo l’interfaccia web (piGardenWeb). Per questo motivo ho deciso di fare questo piccolo post dove cerco di spiegare una volta per tutte l’architettura del progetto e il ruolo delle varie parti in gioco.
Nello schema riportato sopra possiamo notare tre componenti principali: piGarden.sh, piGardenWeb e mqttconnector.
Questi tre componenti possono girare tutti sullo stesso Raspberry ma anche su tre hardware separati (ognuno su un proprio Raspy). La comunicazione tra le tre parti avviene grazie al socket server che piGarden.sh mette a disposizione.
E’ bene chiarire che il core risiede tutto nello script piGarden.sh il quale controlla le elettrovalvole, verifica le condizioni meteo tramite sensore fisico o servizio online e permette la schedulazione delle irrigazioni andando a creare degli appositi cron linux. Mette anche a disposizione tutta una serie di comandi da impartire tramite terminale per permettono di controllare l’impianto in ogni sua parte. Eventuali modifiche o nuove implementazioni devono essere fatte su questo script. Il core può appoggiarsi a script esterni per estendere le proprie funzioni, uno di questi è piGardenSched, uno schedulatore alternativo che offre nuove possibilità per programmare l’avvio dell’irrigazione.
In un secondo momento è stato creato piGardenWeb, l’interfaccia web con cui può essere gestito più facilmente piGarden. Ogni interazione con l’interfaccia web viene inoltrata verso lo script piGarden.sh tramite apposite chiamate al socket server. Anche la visualizzazione dello stato delle elettrovalvole avviene facendo richieste a cadenza regolare (20 secondi) a piGarden.sh tramite socket server, il quale risponde con un json contenente lo stato dell’impianto. I dati del json successivamente vengono interpretati e mostrati a video da piGardenWeb.
Il terzo elemento che vediamo nello schema e lo script python mqttconnector.py. Questo permette di inoltrare al socket server eventuali richieste ricevute tramite protocollo mqtt. E’ stato realizzato principalmente per potere gestire l’impianto di irrigazione tramite Home Assistant il noto domotic controller open source.
In futuro mqttconnector.py potrebbe essere utilizzato anche per l’acquisizione dello stato di sensori che supportino il protocollo mqtt (per esempio rilevatori di umidità).