Impianto di irrigazione con Raspberry Pi: piGardenWeb, il pannello web di amministrazione (settima parte)

pigardenweb dashboard

Dopo molti mesi finalmente sono riuscito a rilasciare l’interfaccia web di gestione della centralina del nostro impianto di irrigazione basato su Raspberry Pi.

Il pannello di amministrazione ci permetterà di comandare tramite browser da pc o smartphone, le diverse zone del nostro impianto di irrigazione, di programmarne le schedulazioni e di tenere sotto controllo le condizioni atmosferiche rilevate dal servizio online Wunderground.

L’applicazione web è basata sul framework Laravel 5.2 ed alcuni componenti di Backpack for Laravel. Gira sia su apache che nginx ed ha bisogno di un database per gestire le credenziali di accesso al pannello.

Per motivi di leggerezza in questo post verrà indicato come installarlo su nginx utilizzando sqlite come base dati.

PiGardenWeb comunica con piGarden, grazie al socket server implementato dalla versione 0.2 di quest’ultimo.

Installazione

Per funzionare piGardenWeb necessita di alcuni pacchetti tra cui php 5.5.9 o superiore. L’installazione può essere eseguita come segue:

sudo apt-get install nginx php5-fpm php5-cli php5-mcrypt php5-sqlite git

Una volta installato i pacchetti php è necessario fare alcune modifiche al file /etc/php5/fpm/php.ini in modo da decommentare la linea relativa a cgi.fix_pathinfo al quale andrà assegnato il valore zero, come segue:

cgi.fix_pathinfo=0

Dobbiamo abilitare i moduli php sqlite e mcrypt:

sudo php5enmod mcrypt
sudo php5enmod sqlite3

A questo punto scarichiamo con git piGardenWeb nella propria home:

cd
git clone https://github.com/lejubila/piGardenWeb.git

Configuriamo nginx prendendo il file di configurazione presente in piGardenWeb e personalizzandolo se necessario:

cd
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original
sudo cp piGardenWeb/virtualhost/nginx/default /etc/nginx/sites-available/default

Creiamo adesso il file di configurazione di piGarden, creiamo e inizializiamo il database, generiamo l’application key (necessaria per laravel) e impostiamo i giusti permessi ai file:

cd 
cd piGardenWeb
cp .env.example .env
touch database/piGarden.sqlite
./artisan key:generate
./artisan migrate
sudo chown -R pi:www-data /home/pi/piGardenWeb/
sudo chmod -R g+w storage database database/piGarden.sqlite

Facciamo partire il server web nginx:

sudo service nginx restart

Adesso se non lo avete già fatto installiamo piGarden, lo script bash di gestione della centralina ed avviamo il socket server per farlo comunicare con piGardenWeb. Per maggiori sull’installazione e configurazione piGarden vi invito a leggere il post Impianto di irrigazione con Raspberry Pi: piGarden, lo script di gestione (quinta parte):

cd
git clone https://github.com/lejubila/piGarden.git
cd piGarden
./piGarden.sh start_socket_server force

A questo punto aprendo il browser e puntando a su http://indirizzo_ip_del_tuo_raspberry_pi dovresti visualizzare la home page di piGardenWeb:

Home - piGardenWeb

Cliccando sul link Registrati posto in alto a destra è possibile creare l’utente con cui loggarsi successivamente al pannello di amministrazione:

Registrazione - piGardenWeb

Creato il primo utente è possibile quindi loggarsi dall’apposita pagina di login:

Login - piGardenWeb

Una volta loggati ci troveremo sulla dashboard di piGardenWeb da dove potremo aprire e chiudere l’elettrovalvole delle varie zone, controllare lo stato dell’ultima pioggia e le attuali condizioni meteorologiche:

Dashboard - piGardenWeb

Una volta arrivati alla dashboard, dobbiamo eseguire il setup iniziale in modo che vengano creati i crontab necessari per l’inizializzazione della centralina all’avvio del sistema, per l’avvio automatico del socket server e per il monitoring delle condizioni meteorologiche. Per fare questo dovrete raggiungere il menu SETUP / Setup Iniziale e cliccare sul pulsante Esegui il setup (nel caso abbiate già installato piGarden in precedenza, prima di eseguire il setup iniziale dovrete rimuovere dal crontab tutte le eventuali schedulazioni già create relative alla centralina).

Setup iniziale - piGardenWeb

Una volta eseguito il setup iniziale potremo disabilitare la registrazione pubblica degli utenti andando a variare il file .env impostando la variabile REGISTRATION_OPEN con il valore false:

REGISTRATION_OPEN=true

Dal file .env sarà possibile anche variare i parametri smtp utilizzati per l’invio delle notifiche via mail e in particolare quelle per eseguire il reset della password:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=your_address@gmail.com
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=your_address@gmail.com
MAIL_FROM_NAME=piGardenWeb

Oltre a quanto visto sopra da piGardenWeb potremo anche forzare l’apertura delle varie elettrovalvole in caso di pioggia e di gestire le schedulazioni di apertura e chiusura di ogni elettrovalvola:

Zona - piGardenWeb

Schedulazione - piGardenWeb

Possiamo anche gestire, aggiungere o rimuovere gli utenti che potranno accedere al pannello di amministrazione:

 

Utenti - piGardenWeb

Bene, per ora è tutto.

Nel caso troviate difficoltà a configurare l’ambiente oppure problemi di funzionamento fatemi sapere nei commenti.

A presto.

31 pensieri su “Impianto di irrigazione con Raspberry Pi: piGardenWeb, il pannello web di amministrazione (settima parte)

  1. Ciao ancora non ho installato il tuo programma, ma sembra molto promettente,e conto di installarlo domani ,io attualmente sto usando un’altro programma “rpirrigate” per irrigare con il raspberry,un ottimo lavoro anche quello,unica pecca e credo manchi anche al tuo lavoro la possibilità di effettuare una irrigazione d’emergenza,la possibilità di lanciare un ciclo di irrigazione al volo senza dover settare tutte le zone con orario/data di inizio e fine,possibilità che danno certe centraline ahimè troppo costose,ma che rimane a mio avviso, molto utile in caso di estati asciutte e troppo calde.
    Grazie per il tuo lavoro

  2. Ciao @stafano e grazie per il tuo interessamento.
    Relativamente alla tua richiesta volevo capire cosa intendevi riguardo all’irrigazione di “emergenza”. Se intendi (ma non penso) potere avviare manualmente le varie zone, con piGarden questo si può fare. Se invece intendevi che l’impianto possa attivarsi in autonomia in base al clima circostante, questo purtroppo non è attualmente previsto.
    Non è detta però che non si possa fare magari in futuro.
    Volevo inoltre farti presente che il mio progetto funziona con elettrovalvole bistabili. A quanto ho potuto notare, rpirrigate gestisce un altro tipo di elettrovalvole. Ne consegue che piGaden potrebbe non essere compatibile con il tuo impianto.

  3. Ciao!

    Ho installato tutto da capo (ammetto che ero in fremente attesa di questo aggiornamento).

    Tutto liscio fino alla fase di registrazione dove mi restituice 2 errori SQL:
    1- PDOException in Connection.php line 457: SQLSTATE[HY000]: General error: 14 unable to open database file

    2-QueryException in Connection.php line 729: SQLSTATE[HY000]: General error: 14 unable to open database file (SQL: insert into “users” (“name”, “email”, “password”, “updated_at”, “created_at”) values (Marco, marco.xxxxxxxx@gmail.com, y$.pm9TrwOCwyMQ5.N44WcDOr6JbWBQkPd.jbBGnt85Uj0gbPUxSotK, 2017-04-24 18:24:00, 2017-04-24 18:24:00))

    Parrebbe che non riesca ad accedere al file DB ma i comandi per cambiare i permessi li ho lanciati e sono andati a buon fine.

    lanciando “ls -al” questo è il risultato:

    -rw-rw-r– 1 pi www-data 21504 Apr 24 18:16 piGarden.sqlite

    quindi penso che siano corretti. Cosa Può essere secondo te?

    Grazie in anticipo

  4. Ho risolto. In pratica bisogna dare gli stessi permessi del file anche alla cartella; in sostanza i comandi sono 2:

    sudo chmod -R g+w storage database/piGarden.sqlite
    sudo chmod -R g+w database

    Grazie ancora!!
    Marco

  5. Ciao @lejubila, grazie per la risposta,non ho la piu pallida idea quale sia la differenza tra le valvole bistabili oppure le altre valvole,per quello che ho capito il tuo programma e rpirrigate usano i gpio del raspberry per inviare un impulso ad un rele che apre e chiude le valvole,spero possa funzionare anche con le mie”non ho idea di che tipo siano,tornando al discorso principale per emergenza intendo il poter far partire al volo un ciclo di irrigazione su tutti i settori senza dover impostare,ora date e durata,in pratica sono sul prato vedo che un po di acqua non ci starebbe male,imposto la durata per ogni settore premo un pulsante e il ciclo parte una tantum,magari poi tra 3/4 giorni vedo la stessa cosa e lo ripeto,un irrigazione extra da poter lanciare velocemente.
    Spero di esser stato un po piu chiaro spiegarmi per iscritto non e il mio forte

  6. Ciao @Marco,
    sono contento che hai risolto il problema sui permessi del db.
    Correggerò le istruzioni indicando il comando mancante.

  7. Ciao @stefano,
    le valvole bistabili non necessitano di un’alimentazione continua per potere restare aperte, bensì basta che siano sottoposte ad una tensione per breve lasso di tempo perché possano assumere lo stato aperto o chiuso (a seconda della polarità impartita). Se ti interessa approfondire l’argomento ti invito a leggere il secondo di questa serie di post che tratta appunto l’argomento dell’elettrovalvola: https://www.lejubila.net/2015/10/impianto-di-irrigazione-con-raspberry-pi-l-elettrovalvola-seconda-parte/

    Per quanto riguarda invece l’irrigazione ad “emergenza” è una buona idea e pensandoci bene potrei provare ad implementarla nella prossima versione di piGarden e piGardenWeb.

    Se hai qualche altra idea o suggerimento fammi sapere.

  8. Rieccomi…credo di aver problemi riguardanti il cron, spiego: il serio iniziale lo fa “strano” nel senso che mi aspettavo di vedere qualcosa di diverso dalla homepage, ed effettivamente quando seleziono una zona mi carica un pezzo di pagina e poi restituisce questo messaggio:

    Whoops, looks like something went wrong.

    1/1
    FatalErrorException in 5652850bbf962319b8dd17613e9d46c2fbef81e9.php line 121:
    Class ‘app\CronHelper’ not found

    Ho dimenticato di installare qualcosa?

    Grazie come sempre

  9. Ciao Marco
    Puoi verificare che il file /home/pi/piGardenWeb/app/CronHelper.php abbia i permessi in lettura.
    Fammi sapere.

  10. rieccomi. nada. i permessi li avevo, ho perfino eseguito il chmod 777 su quel file ma non ho risolto.

  11. il problema potrebbe risiedere nel namespace indicato per la classe CronHelper:
    app\CronHelper
    anziché
    App\CronHelper

    ho fatto questa correzione.

    Per aggiornare fai così:

    cd
    cd piGardenWeb
    git pull

    In questo modo dovresti avere la versione più aggiornata.
    Spero che così si risolva il problema.

  12. Ciao @lejubila, ho provato ad installare piGardenWeb ma quando provo ad entrare mi da questo errore
    PiGarden server error

    stdClass Object
    (
    [description] => stream_socket_client(): unable to connect to tcp://localhost:8084 (Connection refused) at line 32 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php
    [code] => 0
    )

  13. Ciao @stefano,
    sembra che piGardenWeb non riesca a comunicare con piGarden.
    Hai aggiornato lo script piGarden all’ultima versione e avviato il socket server come indicavo nelle istruzioni ? Te le riporto qui di seguito:

    cd
    git clone https://github.com/lejubila/piGarden.git
    cd piGarden
    ./piGarden start_socket_server force

    Fammi sapere.
    David.

  14. @stefano,
    dimenticavo…

    se avevi una versione più vecchia di piGarden e poi hai fatto l’aggiornamento all’ultima versione, prima di fare partire il socket server, ricordati di aggiornare il file di configurazione /etc/piGarden.conf con quello presente in /pi/piGarden/conf/piGarden.conf.example

  15. Ho fatto tutto come descritto nell’articolo, l’unica differenza dal tuo articolo qui sopra é che ho installato lo script come descritto nella sezione numero 5, perché se facevo come descritto qui sopra mi dava errore, non trovava il file. Conf, ho un dubbio le 2 installazioni vanno fatte in directory separate oppure nella stessa directory?

  16. Le installazioni devono essere eseguite tutte e due nella home dell’utente.
    In pratica in /home/pi (o del tuo utente) dovresti avere la cartella piGarden e piGardenWeb.
    Comunque il problema sembra essere che il socket server non parte. La versione di piGareden che lo implementa ha bisogno di grep, tcpserver e sed presenti nel sistema per funzionare.
    Se non l’hai fatto installali con il seguente comando:
    sudo apt-get install grep sed ucspi-tcp

    Devi anche aggiornare il file di configurazione come segue aggiungendo le righe relative al socket server:

    # Indirizzo ip e porta di ascolto del socket server
    TCPSERVER_IP=”0″ #”192.168.50.247″ #”127.0.0.1″
    TCPSERVER_PORT=”8084″

    Devi anche aggiungere le definizioni dei percorsi, come segue, se nel tuo sistema sono diversi variali come necessario:

    # Posizione gpio
    GPIO=”/usr/local/bin/gpio”

    # Posizione js
    JQ=”/usr/local/bin/jq”

    # Percorso curl
    CURL=”/usr/bin/curl”

    # Percors wc
    WC=”/usr/bin/wc”

    # Percorso gzip
    GZIP=”/bin/gzip”

    # Percors mv
    MV=”/bin/mv”

    # Percorso di tr
    TR=”/usr/bin/tr”

    # Percorso di cut
    CUT=”/usr/bin/cut”

    # Percorso tcpserver
    TCPSERVER=”/usr/bin/tcpserver”

    # Percorso cron
    CRONTAB=”/usr/bin/crontab”

    # Percorso grep
    GREP=”/bin/grep”

    # Percorsp sed
    SED=”/bin/sed”

    # Percorso readlink
    READLINK=”/bin/readlink”

  17. Ciao @lejubila, innanzitutto complimenti per il tuo lavoro.
    Purtroppo per me l’ho scoperto un po’ troppo tardi: (mi ricollego a quanto detto qui nei commenti con Stefano) mio padre ha gia’ acquistato le elettrovalvole e sono a 24v (non bistabili), ci sono possibilita’ che il tuo sistema funzioni comunque e/o sia adattabile in qualche modo?

  18. Ciao @Francesco,
    adattare lo script piGarden per funzionare con elettrovalvole non “bistabili” dovrebbe essere relativamente semplice. Il problema è che io non ho l’hardware su cui lavorare e verificare il funzionamento, in più è da tenere presente che gli schemi di collegamento presentati nei post precedenti sarebbero in parte diversi.
    Comunque sia se hai voglia di sperimentare, dato che te hai l’hardware, io sono disposto a collaborare per adattare il progetto.
    Fammi sapere.

  19. Ciao che bello se adatti lo script, per il test se ti serve ci sono anche io, ma non credo sia necessario avere le valvole per poter testare il funzionamento, basta che colleghi il raspberry ad un relè e verifichi sul relè la corretta apertura e chiusura, tanto sala lui che poi gestisce la valvola. Ciao

  20. Ciao, quando lancio il comando ./piGarden start_socket_server force mi dice -bash: ./piGarden: No such file or directory ovviamente dalla cartella piGraden come descritto nella guida!!
    Ciao

  21. Ciao, grazie per la risposta!!
    Inserendo la riga come da te riportata mi ritorna l’errore: config file not found in /etc/piGarden.conf
    Ciao e grazie

  22. Ciao @marco,
    come indicato sul post devi installare correttamente lo script piGarden per fare funzionare piGardenWeb. In questo post trovi le istruzioni.
    Comunque per il problema specifico devi copiare il file di configurazione /home/pi/piGarden/conf/piGarden.conf.sample in /etc/piGarden.conf

  23. Ciao grazie per la dritta!! Non mi sono accorto di quella parte ops!!
    Ora mi trovo davanti un altro problema!! Sto installando lo script e sono arrivato alla riga cd jq-1.5 poi autoreconf -i e mi restituisce fatal: not a git repository ( or any of the parent directories): .git
    Grazie

  24. Quando dai il comando “autoreconf -i” assicurati di essere dentro la directory jq-1.5
    Il problema dovrebbe essere quello.

Lascia un commento

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