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

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 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 7.1.3 o superiore (per versioni inferiori alla v0.4.4 è necessario php 5.5.9). Se sul vostro Raspberry avete installato Raspbian 9 stretch, sul sistema sarà presente php 7. Di seguito sono riportate le istruzioni sia per Raspian 10 Buster, Raspbian 9 stretch che per più vecchio Raspbian 8 jessie con php 5. E’ bene tenere presente però che la versione più recente di piGardenWeb v0.4.4 necessita di php 7.1.3 o superiore che in questo momento è presente solo Buster.

L’installazione può essere eseguita come segue:

# Per raspbian 8 jessie (php5) -- solo per piGardenWeb inferiore alla v0.4.4
sudo apt-get install nginx php5-fpm php5-cli php5-mcrypt php5-sqlite git
 
# Per raspbian 9 stretch (php7) -- solo per piGardenWeb inferiore alla v0.4.4
sudo apt install nginx php-fpm php-cli php-mcrypt php-sqlite3 git
 
# Per raspbian 10 duster (php7.3)
sudo apt install nginx php-fpm php-cli php-mcrypt php-sqlite3 git

Una volta installato i pacchetti php è necessario fare alcune modifiche al file /etc/php5/fpm/php.ini. Se avete Raspbian 9 con php7, il file da modificare è /etc/php/7.0/fpm/php.ini. Per Raspbian 10 con php7.3 andrà invece modificato il file /etc/php/7.3/fpm/php.ini. Variate il file 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:

# Per raspbian 8 jessie (php5)
sudo php5enmod mcrypt
sudo php5enmod sqlite3
 
# Per raspbian 9 stretch (php7)
sudo phpenmod mcrypt
sudo phpenmod sqlite3
 
# Per raspbian 10 stretch (php7.3)
sudo phpenmod 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:

# Per raspbian 8 jessie (php5)
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
 
# Per raspbian 9 stretch (php7)
cd
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original
sudo cp piGardenWeb/virtualhost/nginx/default-php7 /etc/nginx/sites-available/default
 
# Per raspbian 10 duster (php7.3)
cd
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original
sudo cp piGardenWeb/virtualhost/nginx/default-php7.3 /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
php artisan key:generate
php artisan migrate
php artisan db:seed
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, per potere accedere a tutte le funzioni, dobbiamo impostare il nostro utente come amministratore. Lo facciamo richiamando il nostro utente del menu “Users, Roles, Perm / Users” e assegnandogli il ruolo “admin”. Fatto questo dovrete impostare nel file .env il parametro ALLOW_MANAGE_USER con il valore false.

Adesso 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 BACKPACK_REGISTRATION_OPEN con il valore false:

BACKPACK_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.

227 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.

  25. ho provato un update di Pigardenweb e come per magia è apparsa la località nel meteo!

    grazie!

  26. Ciao inanzitutto complimenti per l’ottimo lavoro svolto volevo chiederti io utilizzo solo 3 gpio perchè nel piGardenWeb me ne escono 4 (l’ultimo è senza nome e sempre in funzione),poi altro problema non riesco a visualizzare il meteo online(altra domandone come faccio ad inserire gli spazi nello scrivere il nome del mio paese )
    ultima domanda dove tro il file .env impostando la variabile REGISTRATION_OPEN
    grazie

  27. Ciao @giuseppe,
    per alcuni dei tuoi dubbi ti consiglio di leggere questo post, è un po vecchio ma indicativamente viene spiegato come configurare piGarden.
    Comunque cerco di rispondere alle tue domande:
    – per definire il numero di elettrovalvole gestite devi cambiare valore alla variabile EV_TOTAL che trovi in /etc/piGarden.conf
    – per fare visualizzare il meteo online devi registrarti al servizio web wunderground e configurare piGarden per la gestione del meteo online, trovi tutto spiegato qui e qui
    – gli spazi nel nome del paese nella variabile WUNDERGROUND_LOCATION li fai con %20, per esempio Pieve a Nievole andrà inserita Pieve%20a%20Nievole
    – il file .env lo trovi in /home/pi/piGardenWeb, ricordati che i file che iniziano con un punto sotto linux sono file nascosti quindi può essere che ti sia sfuggito per questo motivi

    Se hai altri dubbi fammi sapere.

  28. Mi aggiungo alla lunga lista di complimenti meritatissimi per il lavoro fatto. Davvero incredibile. Mi accingo ad acquistare tutto il necessario per “provare” sul campo il tuo lavoro e ti faccio un paio di domande: in caso di 10 o più zone da irrigare ci sarebbero problemi? Serve una versione di raspberry con più gpio? Utilizzando EV monostabili potrei sfruttare i due relè non più usati per l’inversione della polarità in modo da comandare 8 zone?

    Grazie ancora!

  29. Ciao @acitre,
    ti ringrazio per i complimenti.
    Relativamente alla tua installazione, con un raspberry pi 2 o 3 hai abbastanza gpio per gestire le dieci zone.
    Di seguito ti riporto lo schema dei gpio del mio raspberry pi 3 ottenuto con il comando “gpio readall” di wiringPI.

    Gpio RPi 3

    Comunque sia, come hai già detto tu, puoi anche utilizzare elettrovalvole monostabili in modo da recuperare due gpio.

    Per qualsiasi problema scrivi pure.

  30. Quindi nel tuo programma non c’è un limite di zone a livello software. Il limite è puramente hardware dettato dal numero di porte gpio. Basta mappare tutto correttamente nel file di configurazione ovviamente.

    Grazie mille anche per la disponibilità!

  31. Ho installato e configurato tutto… Che dire uno spettacolo! Mi rimane solo un dubbio: assegnando un indirizzo ip statico al raspberry accedo alla dashboard di piGarden dal PC collegato ovviamente allo stesso router ma non capisco perché se provo ad accedere a quell’indirizzo ip dallo smartphone (ovviamente sempre sotto la stessa rete) il browser mi restituisce un errore (“impossibile raggiungere il sito” con chrome) … Sarebbe comodo non dover accendere ogni volta il PC! … Da cosa può dipendere? Quell’interfaccia web non è compatibile con gli smartphone? … Anche perché il passo successivo che vorrei fare è passare per un servizio tipo opendns per accedere a piGardenWeb da internet!!! Con lo smartphone ovviamente! 😀

  32. Come non detto, sono stato stupido io… Il problema era l’extender Powerline. Il raspberry era collegato da una parte, il telefono al wifi dell’altra e per qualche motivo “non si vedevano”. Mi sono spostato sulla rete wifi del Powerline dove era collegato anche il raspberry e tutto risolto.

  33. Messo tutto online con servizio no-ip. Grazie ancora per il lavoro che hai fatto! Impagabile! … Ora non mi resta che cominciare a scavare per passare i tubi! XD

  34. Ciao, sto cercando di installare sul raspberry pi 3 mod.b la gestione via web, mentre per quanto rigurada l’installazione di piGarden, e’ andato tutto a buon fine, con questa sto avendo dei problemi dopo la generazione delle chiavi, probabilmente il cambio di directory e’ dovuto al fatto che ho installato il tutto dando il comando “sudo -s” durante sia la fase di installaizone di piGarden che la versione Web;

    col comando “artisan migrate” da il seguente errore
    [InvalidArgumentException]
    Database (/home/pi/piGardenWeb/database/piGarden.sqlite) does not exist.
    infatti non dovrebbe puntare li ma sotto /root/piGardenWeb/database/piGarden.sqlite solo che non so dove andare a cambiare questo parametro.

  35. Ciao @Gianluca,
    il percorso del database è definito nel file
    /root/piGardenWeb/.env

    Fammi sapere se così risolvi.

  36. @lejubila di fatto avendo spostato la directory da “home/pi/~~~” a “root/”
    ho il problema che tutte le volte che va a scrivere il file log sbaglia la directory, la conseguenza e’ il seguente errore : “./piGarden.sh: line 259: /home/pi/piGarden/log/piGarden.log: No such file or directory”
    non so se sia piu’ conveniente rifare tutta l’installazione o cambiare su piGarden.sh “echo -e “`date`\t\t$1″ >> $LOG_FILE” e poi di conseguenza anche eventuali altri riferimenti che portano allo stesso nome della directory, a fronte poi anche di un eventuale update del programma, che mi riporterebbe allo stesso problema.

    l’altro problema che mi trovo nella versione web e’ nel server:
    se mi collego all’ip del raspberry mi dice “404 Not Found” “nginx/1.10.3”, se mi collego su “localhost” ho lo stesso errore, mentre su “localhost:8084” mi da come risposta “This page isn’t working”.
    Potrebbe essere un problema di permessi o sempre di directory ?

  37. Ciao @Gianluca,
    per i log di piGarden, il percorso del file è definito in /etc/piGarden.conf nel parametro LOG_FILE. Quindi lo puoi cambiare a tuo piacimento. Sempre nello stesso file devi cambiare anche il percorso definito in STATUS_DIR.

    Per l’interfaccia web devi cambiare il percorso della document root nel file /etc/nginx/sites-available/default. Trovi la riga che contiene
    root /home/pi/piGardenWeb/public;
    la dovrai cambiare con in modo che contenga il percorso corretto, che immagino nel tuo caso sia
    root /root/piGardenWeb/public;

    Una volta fatto questa correzione riavvia nginx con
    sudo service nginx restart

    Riguardo la porta 8084 non è relativa al server web ma è riservata al socket di comunicazione tra piGarden e piGardenWeb. Non va quindi usata.

    Penso che non ci siano altri cambiamenti da eseguite.
    Personalmente non ho mai fatto un’installazione con l’utente root quindi non ti so dire se ci possano essere altri problemi.

    David.

  38. Ciao, inanzitutto voglio complimentarmi per il lavoro svolto anche se ancora non l’ho installato.
    Ho appena acquistato il materiale necessario, quindi al più presto inizierò le prime prove.
    Avrei qualche richiesta, ho installato l’ultima versione del sistema operativo “Debian Stretch”, MySql, Apache e PHP7, per cui ti chiederei, se possibile, le istruzioni necessarie per installare e configurare in tale ambiente.
    Aggiungo, che per il mio impianto di irrigazione utilizzo delle elettrovalvole monostabili 24V (Claber 90814) e il sensore di pioggia Claber 90915, questo è un componente passivo che di fatto apre il circuito quando l’acqua raggiunge/supera il livello predefinito nella vaschetta di raccolta e lo richiude quando scende al di sotto, di fatto si comporta come un semplice termostato per un impianto di riscaldamento.
    In merito a questo scenario ritieni sia possibile adattare piGarden?
    Grazie

  39. Ciao @Ivano,
    personalmente non ho mai installato piGardenWeb su Debian Stretch ma non penso ci siano grossi problemi.
    Tutto è basato sul framework Laravel 5.2, che per funzionare sotto apache ha bisogno dei seguenti requisiti:
    – PHP >= 5.5.9
    – OpenSSL PHP Extension
    – PDO PHP Extension
    – Mbstring PHP Extension
    – Tokenizer PHP Extension

    Una volta scaricato piGardenWeb con git, puoi trovare il file di virtualhost per apache nella directory piGardenWeb/virtualhost/apache/ che puoi adattare alle tue esigenze.

    Se invece vuoi utilizzare mysql come db anziché sqlite ti basta modificare il file .env togliendo le attuali definizioni DB_CONNECTION e DB_DATABASE e inserire le seguenti:
    DB_CONNECTION=mysql
    DB_HOST=localhost
    DB_PORT=3306
    DB_DATABASE=piGarden
    DB_USERNAME=piGarden
    DB_PASSWORD=piGarden

    Naturalmente dovrai adattare i valori in base al tuo ambiente.

    Per quanto riguarda il sensore di pioggia della Claber per ora non è supportato direttamente. In passato mi era già stato chiesto una cosa del genere, puoi dare un’occhiata a questo commento e alle risposte successive. Potresti trarne spunto.

    Se riscontri problemi fammi sapere.

  40. @lejubila ti ringrazio per la risposta, ti terrò aggiornato.
    Circa il DB, ho un dubbio: il database piGarden deve essere creato o l’operazione viene effettuata dall’applicazione?
    Circa il sensore, credo che questo possa essere banalmente inserito in serie sul comune di alimentazione delle elettrovalvole mono-stabili in modo che sia trasparente al sistema, ovviamente non verrebbe utilizzata la parte di gestione del sensore pioggia, mi sbaglio?
    Grazie di nuovo.
    Ciao

  41. Il db lo devi creare tu manualmente. Lo stesso vale per l’utente MySQL. Poi modifichi il file
    .env come detto prima.
    Per quanto riguarda il sensore di pioggia claber, se il suo funzionamento è come mi avevi indicato, anche secondo me puoi metterlo in serie metterlo in serie alle elettrovalvole.

  42. @lejubila grazie di nuovo, sono cosciente che effettuando il collegamento come da me proposto, molto semplice e rapido, si perdono informazioni (non si sa se e quando il sensore è intervenuto) e funzionalità (non si può forzare l’irrigazione nel caso in cui il sensore abbia aperto il circuito).
    A proposito di PHP7, ho visto che di recente è stata rilasciata una nuova versione di Lavarel, la 5.5, che è compatibile con PHP7.
    Ciao

  43. @lejubila, ho terminato l’installazione seguendo le istruzioni fornite, spero di non aver dimenticato o sbagliato nulla, l’avvio del server piGarden non restituisce alcun errore ed correttamente registrato nel file di log, ma quando accedo al sito tramite il browser apache viene restituito il seguente errore:

    ErrorException in Filesystem.php line 111: file_put_contents(/home/pi/piGardenWeb/bootstrap/cache/services.php): failed to open stream: Permission denied

    Aggiungo che ho dato in permessi a www-data come indicato, inizialmente me ne ero dimenticato ed infatti veniva restituito un altro errore, di fatto non riusciva a scrivere il file di log nel folder piGardenWeb/storage/logs.
    Ciao

  44. Devi applicare i giusti permessi alle cartelle.
    Posizionati dentro la cartella piGardenWeb e impartisci i seguenti comandi:

    sudo chown -R pi:www-data /home/pi/piGardenWeb/
    sudo chmod -R g+w storage database database/piGarden.sqlite

    Fatto questo dovrebbe funzionare

  45. @lejubila operazione già eseguita, ti ricordo che io uso MySql( mariadb) per cui il file database/piGarden.sqlite non l’ho creato.
    Grazie.
    Ciao

  46. Posizionati nella cartelle piGardenWeb e prova impostare i permessi con i seguenti comandi

    sudo chown -R pi:www-data bootstrap/cache
    sudo chmod -R g+w bootstrap/cache

  47. @lejubila ti ringrazio per il supporto e mi scuso se torno a disturbarti.
    I comandi che mi hai suggerito hanno risolto il problema segnalato, quindi mi sono accorto di avere un problema sulla chiave di cifratura in qaunto mi ero dimenticato di eseguire i comandi “./artisan key:generate” e “./artisan migrate”.
    Finalmente sono arrivato alla home page, ma ora quando provo ad accedere alla pagine “Accedi” o “Registrati” mi voene restituito l’errore “Not Found” – “The requested URL /admin/register was not found on this server”.
    Ciao

  48. Ti ricordo che sto usando apache, per cui ho utilizzato il file da te predisposto disponibile in “/home/pi/piGardenWeb/virtualhost/apache/”
    Di nuovo

  49. Assicurati che esista il file
    /home/pi/piGardenWeb/public/.htaccess
    e che abbia i permessi di lettura per tutti gli utenti.
    Dopo di che verifica se il modulo rewrite è abilitato su apache, eventualmente abilitalo con
    sudo a2enmod rewrite
    e riavvia apache con
    sudo service apache2 restart

    Fammi sapere

  50. @lejubila ottimo, il modulo rewrite non era abilitato.
    Preciso solo che i servizi sono gestiti tramite systemd, per cui il comando che ho utilizzato è “sudo systemctl restart apache2”.
    Registrazione effettuata, sono state create 8 tabelle nel database MySql (MariaDB), molte di queste al momento sono vuote.
    Spero di aver risolto tutti i problemi di installazione e proseguire con il resto.

    Solo per promemoria (molto sintetico), magari può essere utile ad altri:
    Ambiente:
    Raspberry Pi 3 model B con Debian Strech (ultimo s.o. rilasciato), Apache, MySql (MariaDB), PHP7.

    Installazioni:
    piGarden
    ———–
    – git clone https://github.com/lejubila/piGarden.git
    – sudo apt-get install curl gzip grep sed ucspi-tcp #di fatto solo ucspi-tcp, gli altri già erano presenti
    – Jq come descritto nella guida (anche in questo caso alcuni moduli già erano presenti)
    – wiringPI è già installato di default (è necessario modificare il path nel file di configurazione di piGarden ==> GPIO=”/usr/bin/gpio”)

    piGardenWeb
    —————
    – git clone https://github.com/lejubila/piGardenWeb.git
    – sudo apt-get install php7.0-fpm php7.0-cli php7.0-mcrypt
    – sudo phpenmod mcrypt
    – modificato il file /etc/php/7.0/fpm/php.ini come indicato sulla guida
    – cd /home/pi/piGardenWeb/ ==> sudo ./artisan key:generate ==> sudo ./artisan migrate
    – sudo chown -R pi:www-data /home/pi/piGardenWeb/
    – cd /home/pi/piGardenWeb/
    – sudo chown -R pi:www-data bootstrap/cache
    – sudo chmod -R g+w storage database bootstrap/cache
    – sudo a2enmod rewrite ==> sudo systemctl restart apache2
    – creato utente (piGarden) e database (piGarden) in MySql
    – sudo cp /home/pi/virtualhost/apache/piGarden.conf /etc/apache2/sites-available/000-default.conf (nel mio caso potevo farlo in quanto al momento non erano presenti altri siti, altrimenti si devono seguire modalità diverse)

    P.S. ovunque ho modificato il contenuto di un file ho sempre fatto una copia della versione originale.

    Grazie di nuovo.
    Ciao

  51. @lejubila a seguito delle prime prove ho notato quanto segue:
    – viene tentato l’accesso al foglio di stile “/vendor/adminlte/plugins/daterangepicker/daterangepicker-bs3.css”, ma questo non esiste per cui HTTP 404
    – avviando una zona, p.e. subito per un minuto, l’immagine “sprinkler-pause.gif” viene sostituita con l’immagine “sprinkler-play.gif”, ma al termine del periodo di irrigazione non avviene l’inverso a meno che non si forzi l’aggiornamento della pagina.

    Con l’occasione aggiungo che nel mio ambiente jq può essere semplicemente installato “sudo apt-get install jq”, per cui sembra non siano necessarie tutte le operazioni indicate nel caso dell’installazione manuale.

    Infine, vorrei sapere se quando vengono inviate delle email utilizzando i parametri indicati nel file di configurazione .env

    Grazie.

    Ciao

  52. Riguardo al mancato ripristino dell’icona quando l’irrigazione di una zona termina, è strano che non funzioni. Ogni 20 secondi viene eseguita una chiamata ajax che recupera lo stato delle zone è imposta le relative icone.
    Potresti verificare nella console del browser se si verificano errori proprio durante queste chiamate ajax.

    Fammi sapere

  53. @lejubila, si avevo già notato, infatti, avendo utilizzato Firefox funziona correttamente, mentre con IE 11 si verifica il problema segnalato.
    Di seguito l’output della console , credo che il problema sia dovuto al metodo ‘startsWith’
    HTML1300: Navigation occurred.
    192.168.0.222
    SCRIPT438: Object doesn’t support property or method ‘startsWith’
    dashboard (4690,11)
    SCRIPT1006: Expected ‘)’
    backend.js (7,42)

    Ciao

  54. @lejubila sto continuando ad esplorare il sistema, confermo i complimenti per l’ottimo lavoro.
    Ovviamente le sigenze personali sono diversificate, inoltre, anche i desiderata si differenziano, per cui provo a segnalare alcune proposte, ovviamente solo per un confronto di idee.
    – Schedulazione irrigazione:
    1) a mio avviso potrebbe essere semplificata l’operazione lasciando un unico pannello ed intrducendo la possibilità di definire la durata (in minuti, ore), in questo modo con un’unica impostazione il sistema può aggiungere le entry di open e close nel crontab
    2) allo stato, se non erro, non è possibile effettuare schedulazioni con frequenza fissa, mi spego meglio p.e. volendo schedulazione una irrigazione ogni 2 giorni (48 ore) mi sembra che le uniche possibilità siano di selezionare i giorni (lunedì, mercoledì, venerdì, domenica), ma in questo modo si avrebbe una ripetizione dopo 24 ore fra domenica e lunedì, o di selezionare i giorni del mese (1, 3, 5, ecc.), ma in questo modo l’operazione diventa piuttosto onerosa; se non erro crontab consente di definire auesto tipo di schedulazioni (step)
    – Invio email:
    dato che il sistema già gestisce l’invio di email, al momento mi sembra utilizzata per il reset della password, credo sarebbe utile avere la possibilità di configurare l’invio di email anche per altri eventi, p.e. avvio di una irrigazione, termine si una irrigazione, apertura del rain sensor, ecc.
    – Refresh tramite chiamata Ajax:
    potrebbe essere utile avere un parametro di configurazione (nel file .env) che consenta di impostare la frequenza in secondi o di disattivarla con il valore zero
    – Eventi del server piGarden
    al momento, se non erro, tutti gli eventi vengono registrati nel file di log piGarden.log, potrebbe essere utile a fini statistici, inserire alcuni di tali eventi (p.e. inizio e fine di una irrigazione, apertura e chiusura del rain sensor, ecc.) anche in una apposita tabella del database; questi dati potrebbero poi essere utilizzati per diversi scopi da che ne ha interesse
    – Interrogazione del rain sensor
    mi sembra di aver capito che impostando a zero i due parametri NOT_IRRIGATE_IF_RAIN_ONLINE e NOT_IRRIGATE_IF_RAIN_SENSOR viene disabilitata considerazione dello stato del rain sensor nella gestione delle irrigazioni , ma controllando il file piGarden.log vedo che il sistema comunque continua a controllarlo (“Rain sensor initialized”, “check_rain_sensor – now is not raining”).

    Ribadisco che, ovviamente, non c’è alcuna pretesa e alcuna volontà di “giudicare” il lavoro svolto, che ribadisco ancora una volta è ottimo, è solo un confronto di idee. Probabilmente hai già analizzato i temi elencati, ed il risultato ti ha portato a fare le tue scelte.

    Grazie.
    Ciao

  55. Ciao @Ivano,
    rispondo alle tue richieste.
    – Semplificazione schedulazioni: concordo con te che attualmente che fare inserire la durata dell’irrigazione al posto della schedulazione di chiusura semplificherebbe l’esperienza utente infatti ci avevo già pensato anche io. Il problema è che mantenendo l’attuale struttura (cron di avvio e cron di chiusura) non è semplice calcolare il cron di chiusura in base alla durata di irrigazione che verrebbe inserita. A meno di non cambiare sistema di chiusura mi diventa difficile implementare questa funzione. In futuro vedrò se riesco a inventarmi qualcosa per riuscire ad intraprendere questa strada.
    – Schedulazioni con frequenza fissa: cron nativamente permette di impostare degli step ma il problema rimane. Se definisco un cron tipo questo “0 22 * * 1/2”, indico di fare partire alle ore 22:00 del lunedì/mercoledì/venerdì/domenica. Come vedi anche con il parametro di step (1/2) il problema rimane. Per attenuare questo mal funzionamento è possibile impostare lo step nel campo dei giorni del mese anziché di quello della settimana: “* 22 1/2 * *”. Così parto il primo del mese poi passo al terzo giorno, al quinto e così via. In base al numero di giorni che il mese ha il problema persiste (spero di essermi spiegato).
    – Invio mail: l’invio delle mail sul reset password viene eseguito dall’interfaccia web, che teoricamente potrebbe stare anche su un’altro raspberry rispetto allo script che piGarden che fa da server (sono due componenti nettamente separati che comunicano tra loro tramite socket). L’invio delle mail in base a determinati eventi dovrebbe essere eseguita direttamente da piGarden. Sarà possibile eseguire questa funzione nella prossima versione che rilascerò nella quale sarò implementata appunto la gestione degli eventi, dove per ognuno di questi potranno essere lanciati degli script custom tra cui uno che preveda l’invio di una mail ( https://github.com/lejubila/piGarden/issues/2 ).
    – Refresh tramite ajax: me la segno, eventualmente la implemento in futuro.
    – Inserimento log eventi in un db: non sei il primo a chiedere questa cosa, il fatto è che piGarden era stato ideato per rimanere abbastanza leggero ed essendo uno script bash diventa un po difficile interagire un db. Sempre per lo stesso discorso di leggerezza ho impostato come predefinito un db sqlite per l’interfaccia web in modo da non appesantire troppo il raspberry con un server mysql sempre attivo. Vedrò in futuro cosa posso fare.
    – Controllo pioggia: impostando a zero i due parametri NOT_IRRIGATE_IF_RAIN_ONLINE e NOT_IRRIGATE_IF_RAIN_SENSOR non viene interrotta l’irrigazione in caso di pioggia ma il controllo su i sensori e/o il servizio meteo online viene eseguito comunque, da qui l’inserimento dei log. Se vuoi disabilitare completamente il check devi togliere le relative schedulazioni nel crontab. Lo puoi fare manualmente oppure con i seguenti comandi:
    ./piGarden.sh del_cron_check_rain_online
    ./piGarden.sh del_cron_check_rain_sensor
    ./piGarden.sh del_cron_close_all_for_rain

    Se hai altri suggerimenti per modifiche o nuove implementazioni puoi, per ognuna di queste, aprire una issue su github
    da qui per piGarden https://github.com/lejubila/piGarden/issues
    e da qui per piGardenWeb https://github.com/lejubila/piGardenWeb/issues

  56. @lejubila ti ringrazio per l’attenzione e la dettagliata risposta fornita, mi permetto solo qualche considerazione premettendo che, pur avendo un’esperienza piuttosto lunga, purtroppo le mie conoscenze nel mondo linux sono scarse per cui ciò che dico potrebbero essere “castronerie”, in tal caso non avere timore nel segnalarmelo.
    – Semplificazione schedulazioni: pur mantenendo l’attuale struttura, non chiedo di modificarla, ho l’impressione che non sia particolarmente complicato calcolare l’ora di chiusura partendo dall’ora di apertura e dalla durata dell’irrigazione, p.e. nel caso l’ora di apertura fosse 22:00 e la durata fosse 15 minuti si potrebbe utilizzare date -d “22:00 today + 15 minutes” +’%d/%m/%Y %H:%M’, ovviamente la stringa ‘today’ serve solo per determinare l’ora di chiusura è in un giorno successivo a quello di apertura
    – Schedulazioni con frequenza fissa: credo che volendo, per esempio, effettuare una irrigazione che parte alle ore 22:00 ogni due giorni si potrebbe definire un cron “0 22 */2 * *”, questo dovrebbe essere valido anche per gli altri parametri, p.e. esempio ogni due ore “0 */2 * * *”
    – Invio mail: sono coscente che piGraden e piGardenWeb sono due componenti separati, anche io, come te, li ho installati su due diversi raspberry, comunque mi sembra ottima la soluzione individuata
    – Inserimento log eventi in un db: fermo restando le difficoltà di cui parli, io utilizzo un Raspberry PI 3 model B con MySql piuttosto impegnato e non ho particolari problemi di performance, inoltre, sull’adeguatezza di avere un db su SD credo che questo potrebbe essere tranquillamente spostato su un disco esterno, comunque credo che queste sia tutte scelte (db, hd, ecc.) che potrebbero essere lasciate all’utente finale
    – Controllo pioggia: scusa avevo capito male, comunque avevo già provveduto a rimuovere le entry indicate dal cron, magari la funzione init potrebbe essere modificata in modo da individuare le schedulazione dei controlli tenendo conto delle impostazioni dei parametri nel file .env.

    Nel caso di necessità per il futuro, come giustamente mi hai indicato, utilizzerò github.

    Grazie.

    Ciao

  57. @lejubila Ciao ho dovuto reinstallare il sistema operativo nel mio Raspberry ed ovviamente la versione non e più la jessie come si presume sia per seguire la tua guida,alla installazioni dei pigarden e pigardenweb in particolare il php che non e più la versione 5 ma la 7 “la 5 non e nei repository “,quando provo a collegarmi all indirizzo del mio raspberry ricevo 502 bad gateway,Qualche suggerimento non oso immaginare un estate senza Pigarden :-(.
    ps perdonami gli accenti ma ho da poco una tastiera con layout US e non sono capace a fare gli accenti

  58. forse risolto andava modificata il percorso del php-fpm,ora riesco a collegarmi all interfaccia web ma non ho ancora risolto l’errore del comando sudo phpenmod mcrypt
    che da errore

  59. Ciao non so cosa sia successo,dopo aver letto la tua doanda ho acceso il raspberry rilanciato il comando sudo phpenmod mcrypt, per copiare l’ errore e l’errore e sparito,oggi mi dava un WARNING dicendo che il fali non era in una cartella, ma nn ricordo di preciso cmq ora sembra ok,cmq il tuotto sembrava funzionare anche con quel WARNING

  60. Ciao, in primis rinnovo i complimenti per lo sviluppo. Bel lavoro.
    Sto prendendo spunto dalla tua relazzazione, per farne una simile, e dall’idea di aggiungere un banale monitor LCD da 5 o 7 pollici, poco conta, per visuliazzare le informazioni a “bordo macchina”. L’architettura che pensavo è del tipo client / server e fatto in questo modo basterà aggiungere un monitor l’LCD a bordo e aprire il browser per visualizzare la pagina web. Così si evitano righe di codice per i display a righe e non si occupano GPIO che non sono mai abbastanza. Cosa ne dici?
    Volevo chiederti due pareri: 1. come hai collegato il raspberry alla tua rete? Wifi o cavo? 2. oggi si trovano i nuovi raspberry Pi3 B con nuovo OS a bordo, pensi ci sia da modificare/adattare qualcosa nella tua versione?

    Grazie in anticipo.

  61. Ciao @Carlo,
    non ho ben capito la relazione tra l’archiettura client/server e il monitor LCD. Comunque sia anche io ho utilizzato un’architettura simile, infatti la parte centrale che controlla l’impianto è lo script piGarden, questo poi si interfaccia con l’applicazione web (piGardenWeb) tramite socket e quindi, volendo, i due componenti possono risiedere macchine diverse. Ed proprio così che ho implementata la mia installazione: su un vecchio raspberry B collegato via wifi alla rete vi sono collegati i relè che comandano le elettrovalvole, il tutto gestito con lo script piGarden; su un altro raspberry 3 collegato via cavo è presente l’applicazione web.
    Per quanto riguarda il nuovo raspberry 3 B non penso ci siano particolari problemi.

  62. Ciao @lejubila,
    intanto grazie per la risposta.
    Provo a spiegarmi meglio.
    Se si facesse “girare” il tutto su un unico raspberry, sia piGarden che piGardenWeb, la comunicazione tra i due avverebbe su socket “interno” (come hai spiegato in un articolo) e quindi si averebbe un solo dispositivo che mi fa tutto.
    Teoricamete è un sistema cieco che, una volta eseguita la configurazione, non ha bisogno di nulla va avanti da se. Quindi, calandolo nell’architettura client/server, in questo caso il mio unico rasberry sarà il mio server.
    I client chi sarebbero? Gli n. dispositivi che si collegano via web al servizio che risiede sul server. Protrei avere n. client, teoricamento non c’è limite.
    E il monitor LCD? In una prima versione di una centralina che feci con Arduino misi un semplice display LCD 16×4 con dei tasti per la navigazione. Questo aveva comportato una onerosa gestione via codice e l’utilizzo di quasi tutto l’IO. Ora ci sono anche display con protocollo I2C che risolvono il problema di saturare gli IO ma comuque il codice va scritto.
    Il vantaggio di questa architettura è che:
    1. Non serve nessuna gestione per l’interfaccia utente in quanto si va ad operare via web.
    2. Ho un notevole vantaggio sull’utilizzo degli IO. Non ho pin occupati per il display.
    3. Il server stesso può funzionare anche da client. Infatti se si collega un monitor LCD al raspberry e si avvia un browser (es. localhost) si vedrebbero le pagine di piGardenWeb.
    4. potrei avere, in impianti più complessi, più stazioni operatore a costo zero.

    Un ulteriore vataggio, per come l’hai pensata e per come la stai utilizzando ora, è la possibilità di gestire un sito remoto, ovvero distante dalla postazione operatore, in quanto piGarden e piGardenWeb possono risiedere su due macchine differenti. Basterà che i due raspberry si vedano in rete.
    Scrivendo quest’ultima considerzione mi è venuta in mente una domanda. Potrei avere più piGarden con socket differente? Immagino di si. Ma come li gestisce piGardenWeb?

    Spero di essere stato chiaro.
    So che questa pensata è riferita solo a impianti ampi e complessi che difficiliemnte si trovano in abitazioni private.

    Ciao e grazie ancora.
    Carlo

  63. Ciao @Carlo,
    ho letto le tue considerazioni e sono d’accordo con te.
    Per quanto riguarda il fare controllare a piGardenWeb più impianti piGarden questo non è possibile. Però con l’ultima versione di piGarden che ho rilasciato questo fine settimana possiamo implementare un’architettura master/slave che si avvicina al risultato da te descritto. In particolare abbiamo un’installazione piGarden master che andrà a controllare le elettrovalvole gestite da altre installazioni piGarden (slave). Avremo quindi l’interfaccia web piGardenWeb che gestendo l’installazione master di piGarden potrà gestire le zone di tutte le slave.
    Fra qualche giorno dovrei pubblicare il post relativo a questa novità.

  64. Ciao @lejubila,
    ho letto ora il tuo commetto e direi che si avvicina a quello che intendevo. Bel lavoro, complimenti.
    In sostanza, se ho capito bene, è un’architettura di questo tipo:
    piGarden master che gestisce IO remoti più un eventuale, ma non necessario in quanto può risiedere su il piGarden master, raspberry per piGardenWeb. Quindi ho un solo master e tutti slave.
    La mia idea era di avere n. piGarden master con i suoi n. piGarden slave. In piGardenWeb si selezionava il piGarden (quindi il socket relativo ma da web l’alias) interessato per la sua gestione.
    Ora, sempre scrivendo :), mi è venuto in mente che probabilmente si riesce a fare. Anche senza pugnalate. La butto li, poi nel caso ci guardo; Io conosco il socket relativo al piGarden master (quindi anche degli n piGarden master) e in piGardenWeb se creerò una dropdownbox dove selezionerò il piGarden master. A questo punto si ricaricherà la pagina di piGardenWeb mostrando le info del piGarden master selezionato. Forse il problema sta nella pagina in quanto, se il codice non è tutto indicizzato (array che verranno grandi quanto il valore recuperato dal config), dovrò creare n pagine e quindi creare un limite. Ma questo lo sai meglio tu. 🙂
    Spero di essermi spiegato. Non ho ancora avuto la possibilità di metterci le mani per integrarlo nella bozza che stavo mettendo giù.

    Ciao e grazie.

  65. Ciao @lejubila,
    questa sera ho avuto un po’ di tempo e ho provato a buttare in toto il tuo progetto su un raspberry che ho qui. E’ nuovo, ha os stretch, php7 ecc… ho modificato i path da php5 al 7 e tutto quanto. Infatti aprendo sia in localhost che da pc in rete vedo tutto. Eseguo la registrazione per testare il DB ed è ok ecc… Ho provato a schedulare una irrigazione mettendo RAIN_SENSOR E ONLINE nel config a 0 e mi sono accorto che non funziona in quanto le icone non cambiavano. Ho provato a girare in lungo in largo ma non ho trovato nulla. Nemmeno nei log mi risulta un open solenoide o close. L’avvio manuale funziona. Inoltre ho notato che nel tasto azzurro di “forza apertura in caso di pioggia” compare la spunta se cliccato ma se cambio pagina per poi tornarci vedo la “x”. Mi sembra che manchi qualche privilegio da qualche parte ma non ho capito dove. In fine nemmeno il meteo funziona. Mi sono registrato al sito, inserito nel config le chiavi necessarie, controllato che nel config in etc fossero corrette, ma nulla. Se la stringa json la incollo nel browser vedo le info delle n città con quel nome. Le info complete, nel browser, le ho solo se metto IT al posto di IY. Che può essere secondo te?

    Grazie per il supporto

  66. Ciao @carlo
    per quanto il problema delle schedulazioni prova a verificare sul raspberry con il comando date se la data e l’ora sono corrette.
    Se l’orario fosse avanti o indietro di qualche ora va corretto il timezone del raspberry.
    Eventualmente controlla anche che una volta confermate le schedulazioni siano correttamente scritte nel cron del raspberry. Lo fai con il comando “cron -l”.
    Se non ha il sensore hardware della pioggia devi impostare la variabile RAIN_GPIO senza valore, in questo modo
    RAIN_GPIO=

    Per la url del servizio meteo se con IT ti ritorna i valori corretti della città lascialo così.
    Tieni conto che le informazioni meteo nell’interfaccia web vengono visualizzate solo se sono stati attivati i cron di gestione (lo fai andando nel menu “Setup Iniziale” di piGardenWeb)

    Dopo la modifica della configurazione eventualmente cancella tutto quello che dentro /home/pi/piGarden/state

    La “x” per forzare l’avvio in caso di pioggia è giusto che non venga memorizzata infatti quella funzione serve solo per eseguire l’avvio una tantum.

    Fammi sapere.

  67. Ciao @lejubila,
    ho verificato la data e nel terminale esce correttamente 29 Mar 23:26:07 CEST 2018. Mi sembra che CEST sia necessario. Ho controllato il timezone e chiaramente è Europa –> Roma.
    Ho messo “NULL” RAIN_CPIO come hai indicato
    controllato nel cron con cronotab -l ecco il risultato –>
    # START cron open 2
    #15 22 * * * /home/pi/piGarden/piGarden.sh open 2
    # END cron open 2

    # START cron close 2
    #25 22 * * * /home/pi/piGarden/piGarden.sh close 2
    # END cron close 2

    # START cron init
    @reboot /home/pi/piGarden/piGarden.sh init
    # END cron init

    # START cron start_socket_server
    @reboot /home/pi/piGarden/piGarden.sh start_socket_server force
    # END cron start_socket_server

    # START cron check_rain_sensor
    * * * * * /home/pi/piGarden/piGarden.sh check_rain_sensor 2> /tmp/check_rain_sensor.err
    # END cron check_rain_sensor

    # START cron check_rain_online
    */3 * * * * /home/pi/piGarden/piGarden.sh check_rain_online 2> /tmp/check_rain_online.err
    # END cron check_rain_online

    # START cron close_all_for_rain
    */5 * * * * /home/pi/piGarden/piGarden.sh close_all_for_rain 2> /tmp/close_all_for_rain.err 1> /dev/null
    # END cron close_all_for_rain

    # START cron open Giardino_Posteriore_DX
    #1,58 22,23 * * * /home/pi/piGarden/piGarden.sh open Giardino_Posteriore_DX
    # END cron open Giardino_Posteriore_DX

    # START cron close Giardino_Posteriore_DX
    #1,59 22,23 * * * /home/pi/piGarden/piGarden.sh close Giardino_Posteriore_DX
    # END cron close Giardino_Posteriore_DX

    # START cron open prova1
    #1,11 23 * * * /home/pi/piGarden/piGarden.sh open prova1
    # END cron open prova1

    Riesce a scriverci (vedi i prova1)

    Ho cancellato i file che mi hai detto ma nulla. Tra l’altro non capisco perchè nel cron esca Giardino_Posteriore_DX. Se non ricordo male è una tua configurazione. Li recupera da il config remoto?

    Ad ogni modo ho fatto più volte il setup iniziale ma nulla.
    Sia le schedulazioni che meteo non appaiono.

    Vago un po’ per capire. Vediamo se trovo. Chiaramente se hai idee… tu sei il mentore..

    Grazie per l’aiuto.
    Carlo

  68. Allora il problema celle schedulazioni che non partono è semplicemente per il fatto che non le hai attivate 🙂
    Devi cliccare sul pulsante posto sopra il dettaglio della schedulazione e portarlo sullo stato (ON). Fatto questo riconferma la schedulazione

    Dovrebbe bastare così.
    Se hai ancora problemi fammi sapere.

  69. Ciao lejubila
    e’ un paio di giorni che sto lavorando su un raspberry pi3. Purtroppo in fase di installazione di PHP, non avendo più a disposizione la versione 5, con la 7 non riesco in nessun modo a far partire interfaccia Web. tutti i puntamenti del web server sono saltati. Hai modo di darmi qualche indicazione a riguardo

    Grazie Mille.

  70. devi cambiare il percorso di php=fpm, ma ora non ho il raspy sottomano e non ricordo dove devi cambiarlo.

  71. Già fatto nel file default del web server è presente la stringa di riferimento. Ma il risultato non cambia. Errore bag gateway. Cmq continuo a cercare

    Grazie

  72. @Grimo75,
    il problema è nel file di configurazione
    /etc/nginx/sites-available/default

    aprilo con un editor, elimina la seguente linea:

    fastcgi_pass unix:/var/run/php5-fpm.sock;

    e al suo posto inserisci questa:

    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

    a questo punto riavvia nginx con questo comando

    sudo systemctl restart nginx

    ora dovrebbe funzionare.

    Fammi sapere.

  73. Grazie Mille

    Tutto a posto.

    Ti tengo aggiornato sull’implementazione del pannello solare

    Ciaoo

  74. Ciao,
    ma non esiste un immagine da caricare in una volta sola sul raspberry? con tutto settato?

  75. Buongiorno David
    sono ritornato ad installare questo programma per l’irrigazione, questa volota al contrario della scorsa ho mantenuto tutto uguale e seguito per filo e per segno l’intera installazione, pero’ mi e’ andata storta qualcosa ma non capisco cosa:

    piGardeWeb mi da il seguente errore
    pigarden.stream_socket_client(): unable to connect to tcp://localhost:8084 (Connection refused) at line 34 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php

    se vado a corregge il file/etc/nginx/sites-available/default e defaut.original con i valori sotto:
    server {
    listen 8084 default_server;
    listen [::]:8084 default_server;
    rifacendo poi ripartire il server nginx

    l’errore che appare ora e’ il seguente
    pigarden.Invalid json socket client response at line 126 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php

    Quindi a questo punto non so proprio se mi conviene ripartire da capo per vedere se mi sono dimenticato qualche cosa oppure essendo stati aggiornati alcuni programmi nel frattempo siano cambiate anche alcune impostazioni, di cui pero’ non saprei dove mettere mano.
    Grazie in anticipo

  76. Ciao @gianluca
    il file di configurazione di ngnx lo devi lasciare inalterato. La porta 8084 viene usata dal socket sever gestito da piGarden per comunicare con piGardenWeb.
    Se tutto è installato correttamente devi prima avviare il socket server dalla tua home con il comando
    ./piGarden.sh start_socket_server Force

    Fatto questo dovresti riuscire ad aprire l’interfaccia web senza errori.

    Fammi sapere se hai ancora problemi.

  77. In effetti è partito regolarmente, in teoria però sarebbe dovuto partire col comando contrab, provo a rivedere se è veramente attivo.
    Grazie per ora non mi rimane che settare i vari orari e le zone per vedere il corretto funzionamento.

  78. Francamente non riesco a capire cosa sia successo, avevo settato tutto orari e quant’altro, non avevo ancora collegato il raspberry al resto dell’impianto, ora finalmente ho collegato il tutto ed ora mi e’ tornato l’errore
    PiGarden server error
    stdClass Object
    (
    [description] => Invalid json socket client response at line 126 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php
    [code] => 0
    )

    pero’ mi sono collegato a http://localhost/ perche’ se si collega a http://localhost:8084 la risposta del server e’
    La pagina non funziona
    localhost ha inviato una risposta non valida.
    ERR_INVALID_HTTP_RESPONS

    e se do il comando : ./piGarden.sh start_socket_server Force
    mi risponde :
    Daemon is already running, use “./piGarden.sh stop_socket_server” to stop the service

    dei cambi non ne ho fatti avevo riportato i due file /etc/nginx/sites-available/default e defaut.original sulla porta 80 come erano in origine
    e quello di configurazione alla porta 8084 di pigarden.

  79. @gianluca
    Se i nomi delle eletrrovalvole che hai definito contengono degli spazi, il problema potrebbe essere quello. Riscrivi i nomi senza spazi.

    Per quanto riguarda il comando

    ./piGarden.sh start_socket_server Force

    devi scrivere force tutto minuscolo altrimenti non funziona.

  80. Il file di configurazione non e’ in /etc/piGarden.conf ???
    effettivamente avevo lasciato gli spazi
    pero’ anche modificandolo da sempre lo stesso errore
    # Numero totale di elettrovalvole
    EV_TOTAL=5

    # Definizione delle elettrovalvole
    EV1_ALIAS=”1″ # Gocciolante-anteriore
    EV1_GPIO=3 # Physical 3 – wPi 1
    #EV1_NORAIN=1 # Non interrompe l’irrigazione di questa zona in caso di pioggia

    EV2_ALIAS=”2″ # Giardino-sx
    EV2_GPIO=5 # Physical 5 – wPi 2

    EV3_ALIAS=”3″ # Gocciolante-posteriore
    EV3_GPIO=7 # Physical 7 – wPi 3

    EV4_ALIAS=”4″ # Giardino-posteriore
    EV4_GPIO=29 # Physical 29 – wPi 4

    EV5_ALIAS=”5″ # Griardino-anteriore
    EV5_GPIO=31 # Physical 31 – wPi 5

    mentre il comando :
    sudo ./piGarden.sh start_socket_server force dato nella directory /piGarden/
    mi ha restituito

    Daemon is already running, use “./piGarden.sh stop_socket_server” to stop the service
    Daemon is started widh pid 2696

  81. Il messaggio di riavvio del socket server va bene così come ti compare

    Daemon is already running, use “./piGarden.sh stop_socket_server” to stop the service
    Daemon is started widh pid 2696

    Però non ho capito se adesso l’interfaccia web ti da ancora errore o no.

  82. Si l’interfaccia web mi da ancora errore.
    Da mercoledì dovrei avere un po più di tempo e quindi provo a ricontrollare anche i fili di collegamento ai relé, dato che fino alla scorsa settimana funzionava tutto ma non avevo ancora collegato la scheda relé all’alimentazione esterna, cioè c’era ma non era alimentata, e non vorrei che il tutto fosse causato proprio dall’alimentazione esterna.

  83. Niente da fare, e’ qualche giorno che provo e riprovo con i collegamenti, ho persino cambiato i collegamenti dal raspberry alla scheda rele’, con quelli che avevi usato tu.
    Purtroppo persisete l’errore, pur essendo attivo il servizio il messaggio e’ in un riquadro a dx in alto
    pigarden.Invalid json socket client response at line 126 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.ph
    e nella Dashboard
    piGardenWeb Dashboard
    PiGarden server error
    stdClass Object
    (
    [description] => Invalid json socket client response at line 126 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php
    [code] => 0
    )
    che mi convenga disintallare e reinstallare il tutto ?

  84. Ciao,premettendo che sono nuovo del mondo raspberry e sopratutto di programmazione, avrei 2 problemi:
    1) quando tento di fare questo passaggio
    Se avete Raspbian 9 con php7, il file da modificare è /etc/php/7.0/fpm/php.ini. Variate il file in modo da decommentare la linea relativa a cgi.fix_pathinfo al quale andrà assegnato il valore zero, come segue:
    mi dice sempre che è impossibile modificare il file in quanto è in sola lettura.
    2) comunque ho finito tutta la procedure , e funziona tutto, ma dalla pagina web non mi vede i settaggi del file config, quindi i nomi delle varie “alias” e tutto il resto , ma forse è dovuto al punto 1 ?
    Grazie e Ciao

  85. Ciao, è possibile settare una valvola master?
    Volevo chiudere la linea che porta l’acqua agli irrigatori?
    Ciao e grazie mille

  86. Caio @giorgio,
    rispondo al tuo commento con un mega-ritardo, ma in questi giorni di ferie sono stato assente.
    Allora riguardo la prima domanda, dato che il file che tenti di modificare un file che non è di tua proprietà, devi anticipare il comando con sudo. Per esempio:
    sudo nano /etc/php/7.0/fpm/php.ini
    In questo caso ti verrà richiesta la password del proprio utente in modo da elevare i permessi come se fossi l’utente root.

    Per quanto riguarda la seconda, se ci fosse qualche problema di comunicazione tra piGarden e piGardenWeb, dovrebbe mostrarti dei messaggi di errore.
    Prova ad eseguire la prima modifica, riavvia il raspberry e vedi se il problema si risolve.
    Se hai ancora problemi fammi sapere, sarò felice di aiutarti.

  87. @Marco,
    spero di avere compreso la tua domanda.
    in piGarden non ci sono distinzioni tra le elettrovalvole, comunque puoi benissimo trattare una come se fosse una master e gestirla a tuo piacimento.
    Se hai dubbi fammi sapere.

  88. grazie, ho modificato il file come mi hai detto, ma ora mi da un altro problema…

    PiGarden server error
    stdClass Object
    (
    [description] => Invalid json socket client response at line 126 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php
    [code] => 0

    non capisco, fino all altro giorno andava… cosa è cambiato…
    grazie

  89. I nomi delle elettrovalvole nel file di configurazione non devono contenere spazi. Se è questo il tuo caso, togli gli spazi.
    In alternativa prova a cancellare tutto il contenuto della directory /home/pi/piGarden/state

    Fammi sapere se hai ancora problemi.

  90. @lejubila Ciao, ti confermo che la cancellazione dei contenuti della directory /home/pi/piGarden/state funziona per l’errore “… at line 126 …”, ti avviso nel caso di bugfix vari… grazie!

  91. Ciao David,
    anche i miei complimenti si associano a quelli di chi mi ha preceduto. Sono un neofita e ti prego di avere santa pazienza. Mi insegni a configurare le altre GPIO per arrivare a gestire 14 zone?
    Non so da che parte iniziare…
    Uso un PaspberryPi 3B ed il comando gpio readall mi restituisce tanti “IN” dove immagino sia necessario ci sia “OUT”, ma come faccio a farlo?

    Grazie molte in anticipo,

    Giulio

  92. Ciao @Giulio,
    per configurare altri gpio ti basta creare delle nuove zone nel file di configurazione di piGarden e assegnare l’identificativo del gpio (quello della colonna BCM che vedi con il comando “gpio readall”) alle variabili EVx_GPIO.
    Una volta fatto questo dovrai reinizializzare piGarden con il comand
    /home/pi/piGarden.sh init
    a questo punto se rieseguirai il comand gpio readall vedrai che i nuovi gpio che hai assegnato a piGarden sono nello stato OUT.

    Se hai altri problemi fammi sapere.

  93. Funziona perfettamente, anche se il percorso giusto è:

    /home/pi/piGarden/piGarden.sh init

    Grazie mille!

  94. Ciao , complimenti per il tuo progetto, lo sto seguendo con molto interesse , mi domandavo se hai mai pensato di renderlo integrabile con HomeAssistant , magari rilasciando un add-on

  95. Ciao #Daxda
    a dire la verità nel branch develop su github è già presente il supporto per il protocollo mqtt con il quale è possibile far dialogare piGarden con Home Assistent. Infatti tutt’ora l’ho configurato sulla mia installazione di Home Assistent. Quello che ho fatto non è un plugin ma bensì ho configurato vari sensori e switch di HA in modo che comandino piGarden via mqtt.
    A breve pubblicherò il supporto mqtt nella versione stabile insieme ai relativi post dove spieghero l’integrazione con HA

  96. Ciao,
    ho rifatto l’installazione e nonostante abbia ripetuto i vari passaggi mi da questo errore, una volta che tento di accedere alla dashbard tramite interfaccia web. Non trova le zone

    PiGarden server error

    stdClass Object
    (
    [description] => Invalid json socket client response at line 126 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php
    [code] => 0
    )

  97. @christian
    l’errore può essere dovuto a
    – nomi di elettrovalvole con spazi al loro interno
    – malformazione del json contenere i dati delle condizioni meteo

    Nel primo caso correggi il nome delle elettrovalvole.
    Nel secondo prova a cancellare il contenuto della directory state.

    Se non risolvi impartisci il comando
    /home/pi/piGarden/piGarden.sh json_status

    e riportarmi l’output emesso.

  98. Ciao,
    I nomi delle zone li legge correttamente, ma dopo un pochino da errore.
    L’output:
    Syntax error: “}” unexpected
    root@Garden1:/home/pi/piGarden# sh piGarden.sh json_status
    piGarden.sh: 11: piGarden.sh: function: not found
    piGarden.sh: 13: piGarden.sh: log_write: not found
    piGarden.sh: 15: piGarden.sh: unlock: not found
    piGarden.sh: 17: piGarden.sh: trigger_event: not found
    piGarden.sh: 24: piGarden.sh: cannot create : Directory nonexistent
    piGarden.sh: 28: piGarden.sh: drv_supply_bistable_init: not found
    piGarden.sh: 20: piGarden.sh: Bad substitution
    seq: operando mancante
    Try ‘seq –help’ for more information.
    seq: operando mancante
    Try ‘seq –help’ for more information.
    piGarden.sh: 55: piGarden.sh: log_write: not found
    piGarden.sh: 58: piGarden.sh: trigger_event: not found
    piGarden.sh: 59: piGarden.sh: log_write: not found
    piGarden.sh: 61: piGarden.sh: Syntax error: “}” unexpected

  99. Ciao, ho reinstallato 3 volte con installazione pulita ma da web server ho il questo errore:

    PiGarden server error

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

    e nella popup appare :
    pigarden.stream_socket_client(): unable to connect to tcp://localhost:8084 (Connection refused) at line 34 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php

    ho letto che il problema è legato al comando ./piGarden.sh start_socket_server Force che va lanciato dalla home ma se lancio dalla home il comando
    ./piGarden.sh start_socket_server Force
    mi ritorna:
    bash: ./piGarden.sh: File o directory non esistente
    Se dalla home lancio:
    ./piGarden/piGarden.sh start_socket_server Force

    mi parte il programma ma ho l’errore di cui sopra
    ho un raspberry 3

  100. Ciao @Andrea,
    il problema per cui piGardenWeb non funziona è l’errore che si verifica quando avvii il socket server.

    Dovresti verificare se tutti i path definiti nelle variabili presenti dentro /etc/piGarden.conf sono corretti.
    Se non lo sono vuole dire o che non tutte le dipendenze sono installate oppure gli eseguibili sono in posizioni del filesystem diversi. Se è quest’ultimo il caso, modifica le variabili indicando il percorso giusto.

    Fammi sapere se riesci a risolvere il problema.

  101. Innanzitutto ti faccio i complimenti per l’ottimo lavoro , in secondo luogo ho risolto, avevo capito di dover sostituire inserire il mio ip nel file di configurazione:
    TCPSERVER_IP=”192.168.1.99″
    ho rimesso quello del default ed è andato tutto alla perfezione.
    Ti volevo chiedere solo un paio di cose, non so se ho configurato male qualcosa io ma quando avvio il raspberry i gpio utilizzati da piGarder sono preimpostati su ON poi quando attivo le valvole vanno su OFF, è possibile invertirle il procedimento per evitare che stiano sempre eccitati i relè ? Volevo sapere anche se fosse possibile usare insieme il sistema sia in modo monostabile che bistabile, grazie e complimenti ancora per bel progetto

  102. Ciao @Andrea.
    nella stessa installazione possono convivere sia elettrovalvole bistabili che monostabili.
    Per default tutte le elettrovalvole sono trattate di tipo bistabile. Per quelle monostabili indicarle impostando nel file di configurazione una variabile di questo tipo:
    EV2_MONOSTABLE=1

    In questo modo avrai indicato che l’elettrovalvola numero due è di tipo monostabile.

    Per quanto riguarda i gpio, così ad occhio, penso che dovresti spostare la connessione delle elettrovalvole sui contatti dei relè e collegarle si contatti del “comune” e “normalmente chiuso”, dopo di che nel file di configurazione dovresti invertire i valori dei parametri RELE_GPIO_CLOSE e RELE_GPIO_OPEN.

  103. Ciao, e tantissimi complimenti per il lavoro svolto!
    Io ho provato a seguire le indicazioni di Ivano per installare piGardenWeb su apache2 e MySql, ma quando provo a registrarmi mi compare il seguente errore: “PDOException in Connection.php line 333: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘piGarden.users’ doesn’t exist”.
    Evidentemente mi sono perso qualche pezzo per strada e non sono state create le tabelle nel Db. Quali istruzioni sarebbero necessarie per la creazione?

  104. Ciao @Paolo
    per il tuo problema devi creare manualmente il db su mysql, dopo di che editi il file .env inserendovi i parametri di connessione i questo modo:
    DB_CONNECTION=mysql
    DB_HOST=nome_host_o_ip
    DB_PORT=3306
    DB_DATABASE=nome_db
    DB_USERNAME=nome_utente
    DB_PASSWORD=password

    fatto questo, esegui la creazione delle tabelle così:
    cd /home/pi/piGardenWeb
    ./artisan migrate

    Fatto questo dovresti avere il database popolato delle tabelle necessarie per il funzionamento id piGardenWeb.

    Se riscontri altri problemi fammi sapere.

  105. Ciao @lejubila e grazie per il supporto, effettivamente mi mancava la generazione delle tabelle con l’istruzione ./artisan migrate. Ti faccio ancora tanti complimenti per il progetto, ora vedo di fare alcune prove e poi magari se mi viene in mente qualche suggerimento/richiesta ti ricontatto. Ciao!

  106. Ciao David
    Relativamente a questo tuo vecchio post in questa pagina:
    <>
    Io ho qualche idea di come creare uno script fatto così.
    se vuoi cooperiamo per modificare pigarden, ma mi serve una mano per pigardenweb che non saprei come modificare.
    ciao
    A

  107. il tuo post (sparito dal commento precedente) era:
    lejubila 25 ottobre 2017 22:51
    Ciao @Ivano,
    rispondo alle tue richieste.
    – Semplificazione schedulazioni: concordo con te che attualmente che fare inserire la durata dell’irrigazione al posto della schedulazione di chiusura semplificherebbe l’esperienza utente infatti ci avevo già pensato anche io. Il problema è che mantenendo l’attuale struttura (cron di avvio e cron di chiusura) non è semplice calcolare il cron di chiusura in base alla durata di irrigazione che verrebbe inserita. A meno di non cambiare sistema di chiusura mi diventa difficile implementare questa funzione. In futuro vedrò se riesco a inventarmi qualcosa per riuscire ad intraprendere questa strada.

  108. @Andrea,
    come dicevo nel precedente post io sono a disposizione, se trovi difficoltà in alcuni punti ti aiuto senza problemi.

  109. Ciao,
    sto mettendo in piedi un apk per android su Android Studio che attraverso la WebView mi permette di visuailzzare il sito di PiGardenWeb come se fosse un app. La cosa si sta facendo interessante. Ovviamente ancora l’ho pensata solo per lavorare sulla rete locale (risoluzione nomi.ecc.ecc.)… Sto avendo problemi con il mio device (Xiaomi Redmi 4X) e sto provando la cosa in emulazione dispositivo. L’ho chiamata “OrtApp”. Quando l’avrò conclusa vorrei condividere con voi il mio risultato, in modo da tener traccia di eventuali migliorie che mi potete suggerire. Vi aggiorno sulle evoluzioni!

  110. Ciao @Tommaso,
    il tuo progetto è molto interessante, una volta completato se vorrai, sarò lieto di poterlo ospitare qui sul blog.
    Tienici aggiornati sugli sviluppi.

  111. scusate ma ho bisogno del vostro aiuto … sono completamente a digiuno di Linus ma seguendo la guida speravo di riuscire a installare tutto … sono arrivato alla generazione dell’application key (necessaria per laravel) :
    cd
    cd piGardenWeb
    cp .env.example .env
    touch database/piGarden.sqlite
    ./artisan key:generate
    ./artisan migrate

    e mi dice database in home….pigarden.sqlite non esistente
    non so dove sbattere la testa …. help me

  112. si proprio dopo quel comando. il messaggio è “invalid argument exception database (/home/pi/pigardenweb/database/piGarden.sqlite) does not exist.
    il file nella cartella c’è… ma pare vuoto non so se debba essere cosi.

  113. @stefano,
    il file è giusto che sia vuoto, infatti è il comando migrate che lo deve inizializzare e popolare.
    Forse i file non ha i giusti permessi di lettura/scrittura per l’utente pi?
    Prova a dare permessi di lettura/scrittura a tutti con il seguente comando:

    chmod 666 /home/pi/pigardenweb/database/piGarden.sqlite

    e successivamente riprova con il comando migrate.
    Fammi sapere se questa soluzione ha funzionato.

  114. il fatto che il nome della directory pigardenweb sia tutto minuscolo puo influire ?

  115. @stefano,
    si probabilmente il problema è proprio quello.
    Linux è case-sensitive quindi le maiuscole/minuscole fanno la differenza.
    Il percorso del database deve essere quello indicato nel file .env contenuto nella directory di piGardenWeb, ovvero
    DB_DATABASE=/home/pi/piGardenWeb/database/piGarden.sqlite
    quindi rinomina il percorso e il nome del file come indicato sopra e vedrai che funzionerà.

  116. questa che Linux è case sensitive l’ho imparata !
    tabelle create con successo …. ma ora il comando chown mi dice utente non valido “g+w”

  117. @stefano,
    probabilmente hai mischiato i due comandi chown e chmod.
    Ti consiglio di fare copia e incolla dei comandi.

  118. mi scuso per il basso livello dei miei commenti !
    alla fine potrai raccoglierli in una sezione dedicata per piPPAgardenWeb 😉
    per ora grazie sto procedendo….

  119. ciao sono riuscito a far tutto, aspetto le valvole e rele….
    volevo chiedere se è possibile assegnare una porta diversa dalla 80 all interfaccia web.
    ho un problema … mi da continuamente pioggia sul sensore fisico (che non ho) nonostante abbia impostato RAIN_GPIO= e pioggia online “sconosciuto” ma le condizioni meteo di openWmap sono visualizzate correttamente cosa ho sbagliato ?

  120. @stefano,
    per una porta diversa dalla 80 devi variare il file di configurazione /etc/nginx/sites-available/default di nginx modificando la direttiva
    listen 80 default_server;
    mettendo la porta che desideri. Fatto questo devi riavviare nginx con il seguente comando
    sudo systemctl restart nginx
    Lo stato della pioggia online probabilmente di da il valore “Sconosciuto” perché non ha ancora piovuto da quando hai installato piGarden.
    Per lo stato della pioggia sul sensore hardware prova a cancellare tutto il contenuto della cartella “state” di pigarden.

  121. tutto fatto grazie, sensori e porta a posto.
    credo potrebbe essere utile poter vedere il log dalla pagina web, è possibile ?

  122. Ciao, avevo preparato una rpi zero w con l’ultima versione di raspbian e il tuo progetto piGardenWeb e tutto funzionava correttamente, l’ho spenta a novembre e riaccesa qualche giorno fa e ho eseguito gli aggiornamenti apt-get update/upgrade.
    Ora il problema è che php inizia a rispondere solo dopo circa 10 minuti dall’accensione, l’errore è Gateway time-out di nginx.
    Cosa mi consigli di fare? Grazie

  123. Ho già provato con vari di questi parametri senza successo, probabilmente non ho ancora individuato il parametro corretto. Il problema credo sia lato php: il sistema per quei 10 minuti non sta occupando CPU o altre risorse in modo particolare, si notano dei worker interni a php che aumentano come numero e poi si riducono e a quel punto il sito funziona. Cerco di approfondire e se trovo la soluzione te la indico. Grazie per il tuo supporto

  124. oggi ho notato che il mio file log non è aggiornato … la data di ultima modifica è di pochi istanti fa, ma l’ultimo evento registrato è del 23 nonostante sia sempre stato acceso e funzionante
    visto che stava piovendo fino a ieri volevo verificare il corretto funzionamento dello stop irrigazione x pioggia

  125. Buongiorno!
    Ho realizzato e messo in funzione il progetto, aggiungendo uno script python che mi accende/spegne una valvola generale ed relativa alimentazione di unapompa adimmersione.
    Via batch, cioè tramite il solo script bash, tutto funziona a meraviglia.
    Ho quindi implementato la parrte web.
    Il problema è che vedo la grafica funzionare (con relativa apertura e chiusura fisica dell’elettrovalvola) solo dopo che ho dato una serie di open / close via batch. Altrimenti posso solo continuare aprire la stessa o le altre valvole ma mai chiuderle.
    Quando termino la sequenza di un n.ro imprecisato dicomandi batch, il sistema funzionabene ancheutilizzando l’interfaccia grafica.
    Qualcuno ha avuto un problema simile?

    Ancora una cosa: qualcuno ha los chema elettrico e relativo layout per Cadsoft/Eagle?

    Grazie.
    Paolo.

  126. Ciao @Polo,
    non è che abbia capito molto del problema che hai.
    Il problema è che non vedi aggiornare l’interfaccia web se apri/chiudi le elettrovalvole cn lo script piGarden.sh da linea di comando?
    Tieni conto che l’aggiornamento dell’interfaccia web non è immediato ma avviene una volta ogni 20 secondi.

  127. Grazie per la risposta solerte!
    Allora, procediamo per step.
    Anzitutto diciamo che il problema è solamente usando l’interfaccia web. I comandi inviati tramite console,fanno lavorare bene le valvole bistabili.
    I) Acceso Raspberry, accedo all’interfaccia con IP:PORTA
    (Avrei scrinshoot man on so se si possono inserire)
    II) Accedo con credenziali
    III) Mi appare l’interfaccia con 6 valvole la cui icona è ‘valvola
    chiusa’
    IV) Click per aprire una valvola
    V) Appare il messaggio ‘Irrigazione aperta’ MA l’icona rimane la stessa (valvola chiusa) e la valvola bistabile fa transitare l’acqua
    VI) Ovviamente, in queste condizioni, posso sempre e solo ‘aprire’ la valvola dal momento che l’interfaccia è sempre la stessa
    VII) passo alla console e invio il comando di chiusura. La Valvola si chiude correttamente

    Non conosco la piattaforma usata. La sto studiando in modo da poter inviare qualche messaggio sul file di log
    Credo però che tramite web per un certo tempo, non si generino gli eventi. Questo per due ragioni:
    I) Dopo un pò di smanettamento via batch su apertura e chiusura delle valvole per i test effettivi di irrigazione, l’interfaccia lavora bene. Icona con valvola aperta quando scorre acqua, viceversa chiusa. Ogni click sulla relativa icona fa aprire e chiudere alternativamente la valvola bistabile interessata.
    II) Ho associato all’evento ‘open_before’ e ‘open_in_before’ uno script con cui incremento un contatore, memorizzato su un file di testo in ‘state’. Ogni volta che apro una valvola, il contatore si incrementa tramite uno script python. viceversa si decrementa alla schedulazione dei rispettivi eventi ‘before_after’. Tutto ciò affinchè lo script python possa aprire una valvola monostabile generale e dare alimentazione ad una pompa ad immersione.
    Bene. Ho notato che non c’è incremento quando uso l’interaccia web inizialmente, come descritto precedentemente. Avviene l’incremento/decremento solo successivamente, dopo lo smanettamento di cui parlavo. Smanettamento che dura diversi minuti, dal momento che,come detto, serve per la verifica dell’irrigazione.
    Preciso ancora che il problema persiste fin dalla prima installazione dell’interfaccia.
    Se qualcuno ha qualche idea in proposito …. io intanto cerco di capire perchènon si scatena l’evento di chiusura.
    Buona giornata
    Paolo

  128. Problema risolto! L’owner dell’evento (/piGarden/state/ev1 …..) era ‘root’, anziche l’utente che per me è ‘pi’.
    I comandi che davo batch o via console, come preferite dire, li davo usando ‘sudo’. Quindi come amministratore. Dandoli come utente, la valvola si apre e chiude,ma a console ricevo l’errore ‘Permesso negato su ev1′. errore nello script piGarden.sh alla riga 350.
    E’ stato sufficiente cambiare l’owner ad ev1…6ed il problema si è risolto.
    Ora devo scoprire chi invia sul file di log socket connection from:’ .
    Grazie per la pazienza nelleggere i miei post ….

  129. @Paolo
    effettivamente lanciare piGarden.sh con sudo o come utente root può causare problemi sui permessi dei file.
    Per quanto riguarda i log “socket connection from:” è l’interfaccia web che instaura una connessione per leggere lo stato di piGarden.

  130. Salve, ma un modo per poter visualizzare l’ultima pioggia (schedulata) e la prossima pioggia (schedulata), magari anche tramite un file log creato e aggiornato in database ogni X secondi esiste? Un po’ come un count-down all’avvio della prossima irrigazione di una qualsiasi zona. Perchè sarebbe utile avere queste informazioni quando si vuole eseguire il taglio dell’erba. Per chi usa la centralina con una sola schedulazione potrebbe sembrare inutile ma per chi ha troppe schedulazioni attive in giorni e orari differenti, questo può essere di grande aiuto e sbrigativo per programmarsi nel proprio diario di giardinaggio il giorno e l’ora per tagliare l’erba senza doversi assicurare prima che non ci siano programmazioni pianificate. Questo per evitare di innaffiarci con tutto il rasaerba xD . Potrebbe ciò essere parte di un futuro aggiornamento del Pannello WEB?

    Complimenti davvero per il progetto che lei ha realizzato e tiene in costante aggiornamento. Non le nascondo che centraline in commercio che costano molti soldi, non si avvicinano minimamente alle funzionalità della centralina che grazie a lei e il suo progetto ho realizzato. In pratica mi trovo a controllare anche fuori casa con l’uso di internet la centralina tramite DNS che mi riporta al modem di casa mia con un port mapping.

    Nella mia città, credo di essere l’unico ad avere una centralina di questa portata, questo mi diverte e al tempo stesso mi rende fiero di averla trovata in questo blog anche perchè da quando ho realizzato la sua centralina il mio prato è sempre più verde.

  131. Ciao Lejubila,
    intanto grazie per il progetto e per la chiarezza espositiva e lineare… 🙂

    Stavo per buttare giù due righe su cron e relativo script per sostituire la mia centralina irrigazione col raspberry 3, quando ho trovato il tuo progetto in rete. E mi sto cimentando con l’installazione.

    Arrivo alla partenza del server ma la pagina web mi ritorna il messaggio
    ” pigarden.stream_socket_client(): unable to connect to tcp://localhost:8084 (Connection refused) at line 34 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php ”
    Per quanto abbia stoppato e riavviato senza apparenti problemi il socket col comando
    ” ./piGarden.sh start_socket_server force ” l’errore resta.

    Qualche idea?

  132. Ciao David,

    per quanto riguarda il post precedente ho risolto, si trattava del server tcpserver che non era installato (o meglio, con ps risultava un processo in corso con quel nome ma non era quello del pacchetto indicato).

    Ora gira tutto, ho collegato i relè e li piloto da piGardenWeb.
    Solo che ho notato che di default sono normalmente eccitati.
    Penso di dover cambiare l’impostazione di default dei pin del Raspi, ma non vorrei fare casino.
    Puoi indicarmi il file e/o la posizione da andare a verificare per tenere i pin del Raspi normalmente low?

    Thank you

    Salvato

  133. Ciao Salvatore
    guarda il file /etc/piGarden.conf le seguenti variabili valorizzate come segue di default:
    # Stato di ingresso da assegnare al gpio per chiudere il rele
    RELE_GPIO_CLOSE=0

    # Stato di ingresso da assegnare al gpio per aprire il rele
    RELE_GPIO_OPEN=1

    Se hai relè low-level trigger (si eccitano se gli passi lo stato 0 alla GPIO), dovresti impostare le variabili nel seguente modo:
    RELE_GPIO_CLOSE=1
    RELE_GPIO_OPEN=0

    ciao

    A

  134. Correct, Andrea.
    Grazie del pronto suggerimento.
    Come detto sopra avevo visto l’impostazione dello stato dei GPIO, ma non ero sicuro che dipendessero solo da quella configurazione, e/o che non confliggesse con altri files di config…

    Ottimo lavoro.

  135. Ciao @Cosimo,
    tutto quello che suggerisci è interessante, attualmente però non è implementato niente di tutto questo.
    Per eventuali richieste di nuove funzionalità puoi aprire delle issue direttamente sul repository github di piGarden e piGardenWeb in modo che non vadano perse tra i mille commenti del blog.

  136. Ciao Lejubila, volevo chiederti come mai non riesco a ricevere alcun dato dal servizio Openweathermap. Ho fatto la registrazione, ho inserito la Key ricevuta , ho modificato la localita ma non vedo ne le ultime precipitazioni, ne il riquadro sotto con i dati della località.
    Ho provato anche a lasciare la tua località, ma niente.
    La key funziona, perchè se provo a testarla direttamente sul link http….. funziona.
    Cosa posso aver sbagliato?
    Grazie

  137. ciao scusa ma ho un problemino sul mio nuovo impianto… il sensore online mi segnala ultima pioggia sconosciuta forse perche non ha ancora piovuto dall’installazione, ma il sensore fisico (che non ho) mi segnala pioggia tutti i giorni esattamente all’ora pianificata per l’apertura dell’irrigazione !!!
    ho provato a cancellare il contenuto della cartella state,
    impostato RAIN_GPIO=
    ed eliminato il ceck con ./piGarden.sh del_cron_check_rain_sensor
    im questo modo l’irrigazione non parte mai e non so come fare 😉

  138. ciao @stefano,
    il contenuto della cartella state va cancellato dopo avere eliminato il cron e avere impostato il valore RAIN_GPIO senza valore.
    Quindi riprova a cancellare nuovamente il contenuto della cartella state.
    Se il problema persiste ancora, guarda del file di log cosa succede quando provi ad aprire un’elettrovalvola e fammi sapere.

  139. avevo messo rain_gpio a zero invece che senza valore … colpa mia ora funziona alla perfezione

  140. Poiché ho voluto utilizzare un’unico Raspberry per i servizi 123Solar, Metern e PiGardenweb, ho dovuto utilizzare un’unico server http (apache2).
    Per far girare i tre siti ho dovuto creare un file link della directory /home/pi/pigardenweb (con relativa modifica dei diritti cartelle e files) piazzato nella root di apache2.
    Il tutto funge, ma vorrei mettere far funzionare pigarden e pigardenweb installandoli direttamente sotto le cartelle /var/www/ (come per 123solar e metern).

    La domanda è: oltre l’attivazione del database sqlite nella posizione là dove viene installato, ci sono altri riferimenti alle posizioni assolute da modificare nei files di configurazione o di esecuzione o nel database?

    Non vorrei fare una ricerca in tutto il codice e/o andare per tentativi…

    Grazie, ciao

  141. Ciao @salvatore,
    non ci sono altri riferimenti assoluti.
    Se apache è configurato correttamente non dovresti avere problemi.

  142. Ciao, complimenti per il progetto!
    Ho installato qualche giorno fa su Raspberry Pi 3 + sia piGarden che piGardenWeb.
    Ho avuto qualche problemino per via del php 7.3 ma ho risolto.
    Quello che ancora non sono riuscito a sistemare è la visualizzazione delle zone.
    Sulla dashboard (menu a sinistra) mi dice sempre “Nessuna zona trovata” nonostante siano correttamente configurate e senza spazi nell’alias. Questo non mi permette quindi di visualizzare la schedulazione delle irrigazioni.
    In realtà non ho ancora collegato il Rasp all’impianto perchè vorrei usare anche Arduino che dialoga con Rasp in wireless per rilevare anche umidità del terreno, ph, luce e temperatura (se qualcuno ha idea di come fare da bash a dialogare con Arduino lo ringrazio anticipatamente) però immagino che dovrebbe funzionare lo stesso la visualizzazione delle zone nel menu a sinistra. Nel pannello centrale invece si vedono e riesco ad interagire.

  143. @ryckers78

    Se non ricordo male, salvo aggiornamenti del programma gui, Arduino ha un suo compilatore.
    Scrivi gli script (nel suo linguaggio/sintassi) e poi il programma compila/invia ad Arduino.
    Almeno, su ambiente winsozz…
    Con Arduino gestivo alcuni consumi legati al ftv. Passare a Rasp è stato come riprendere a respirare… 🙂

  144. Ciao @rykers78,
    dal pannello web non ti viene mostrato nessun errore? Oltre a non mostrarti le zone sulla parte sinistra (il menu) non ti vengono mostrate nemmeno nella dashboard?
    Prova da terminale ad impartire il seguente comando:
    /home/pi/piGarden/piGarden.sh list_alias

    Dovrebbe mostrarti gli alias delle zone configurate, se così non è vuole dire che c’è qualcosa di errato nel file di configurazione.

    Altra cosa che puoi verificare è se il socket server è in esecuzione.

    Fammi sapere.

  145. Ciao,
    non si vedono le “zone” sulla parte sinistra (il menu), mentre nella dashboard si vedono correttamente. Non ho cambiato il nome, quindi sono ancora 1,2,3,…
    Ho impartito il comando “/home/pi/piGarden/piGarden.sh list_alias” e mi presenta il nome delle zone 1,2,3,…
    Usando il comando “sudo lsof -i -P -n | grep LISTEN” per controllare se il server è in ascolto vedo la porta 80 di nginx in ascolto.
    Per quanto riguarda l’integrazione con Arduino mi è chiaro che devo lavorare con la sua gui e compilatore ma non ho idea di come integrare la ricezione delle risposte di Arduino su piGarden, magari inserendole nello stesso database sqlite che usa piGarden per poi decidere se far partire o meno l’irrigazione.
    Grazie.

  146. Ciao @rykers78,
    scusa la domanda abbastanza banale. Non è che sei sulla pagina pubblica di piGardenWeb? Quella che compare senza eseguire l’autenticazione. Perché su questa pagina le zone non compaiono sulla sinistra.

    Per la comunicazione tra arduino e raspberry sinceramente non saprei, ma se riesci ad acquisire i dati, per mostrarli su piGardenWeb nei cambi relativi al meteo già esistenti, forse il sistema migliore è quello di scrivere un apposito driver (se non ricordo male basta popolare un json con gli appositi valori). Puoi prendere come modello quello che ho scritto per openweathermap. Altre info le puoi trovare qui https://www.lejubila.net/2017/10/pigarden-gestione-drivers/

  147. Ciao lejubila, grazie per la dritta sui driver, appena riesco a capire come popolare il database con le informazioni che mi arriveranno dalla scheda esterna proverò a realizzare il driver.
    Per quanto riguarda le zone, sono collegato correttamente con il mio utente e sono online. Non vorrei che fosse un altro problema legato a PHP 7.3 solo che non sono molto pratico si questo linguaggio server-side e ho difficoltà nel capire nel tuo progetto qual’è la pagina principale e come vengono richiamate le altre pagine in modo da visualizzare il codice e darti qualche dettaglio in più.
    Grazie ancora.

  148. @rykers78,
    se mi fai avere in qualche modo il tuo /etc/piGarden.conf verifico sulla mia installazione se riesco a riprodurre il tuo problema.
    Riguardo al db di piGardenWeb non deve essere popolato con alcun dato, infatti li ci stanno soltanto gli utenti. I dati vengono ricevuti ogni 20 secondi facendo delle chiamate allo script piGarden.sh tramite socket.
    L’interfaccia web è costruita sopra il framework Laravel e rispecchia il paradigma mvc.
    Tutto parte da piGardenWeb/app/Http/route.php dove sono definite le rotte per gli instradamenti dell url. Da li viene richiamato i rispettivi metodi nel controller, del controller vengono recuperati i dati per essere passati alla view.
    I controller stanno in piGardenWeb/app/Http/Controller e le view in
    piGardenWeb/resources/views

  149. Ciao lejubila,
    sei stato gentilissimo, ora la struttura mi è più chiara anche se non conosco l’MVC, lo studierò per capire meglio il funzionamento del progetto.
    Il DB lo userei per creare altre tabelle nelle quali recuperare i dati di temperatura, umidità, luce, PH e EC e ragionare anche su questi valori per decidere se irrigare e quanto per ogni pianta (lo usereui sia per l’orto tradizionale che per quello idroponico). Se mi consigli di non toccare il DB di piGarden creerò un altro DBSqlite per salvare i dati.
    Di seguito il file piGarden.conf (ho aggiunto solo i parametri di openweathermap dopo essermi iscritto e aver recuperato la key, ma anche questo non sembra funzionare, forse perchè non ha ancora piovuto fino ad oggi…). Ho installato piGarden e piGardenWeb sullo stesso Rasp Pi 3+:

    # Log file
    LOG_FILE=”/home/pi/piGarden/log/piGarden.log”
    LOG_FILE_MAX_SIZE=1048576 # 1MB

    # Log file for driver output
    LOG_OUTPUT_DRV_FILE=”/tmp/piGarden.drv.log”

    # Status directory
    STATUS_DIR=”/home/pi/piGarden/state”

    # Event directory
    EVENT_DIR=”/home/pi/piGarden/events”

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

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

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

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

    # Percorso gzip
    GZIP=”/bin/gzip”

    # Percorso 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”

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

    # Percorso mosquito_pub
    # # Installare con apt install mosquitto-clients
    MOSQUITTO_PUB=”/usr/bin/mosquitto_pub”

    # Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
    # se impostato a 0 il sistema gestirà elettrovalvole bistabili
    EV_MONOSTABLE=1

    # Id gpio usati per simulare il doppio deviatore con cui eseguire l’alimentazione alle elettrovalvole
    SUPPLY_GPIO_1=2 # Physical 3 – wPi 8
    SUPPLY_GPIO_2=3 # Physical 5 – wPi 9

    # Stato dei due gpio per impartire l’alimentazione positiva alle elettrovalvole (aperta)
    SUPPLY_GPIO_POS=0

    # Stato dei due gpio per impartire l’alimentazione negativa alle elettrovalvole (chiusa)
    SUPPLY_GPIO_NEG=1

    # Stato di ingresso da assegnare al gpio per chiudere il rele
    RELE_GPIO_CLOSE=0

    # Stato di ingresso da assegnare al gpio per aprire il rele
    RELE_GPIO_OPEN=1

    # Id del gpio usato per collegare il sensore di rilevamento pioggia
    RAIN_GPIO= # AndreaP. era 25 / Physical 22 – wPi 6

    # Valore in ingresso sul gpio definito in RAIN_GPIO che indica lo stato di pioggia
    RAIN_GPIO_STATE=0

    # Numero totale di elettrovalvole
    EV_TOTAL=6

    # Definizione delle elettrovalvole
    EV1_ALIAS=”1″ #
    EV1_GPIO=17 # Physical 11 – wPi 0
    #EV1_NORAIN=1 # Non interrompe l’irrigazione di questa zona in caso di pioggia
    #EV1_MONOSTABLE=1 # L’elettrovalvola è monostabile

    EV2_ALIAS=”2″ #
    EV2_GPIO=27 # Physical 13 – wPi 2

    EV3_ALIAS=”3″ #
    EV3_GPIO=22 # Physical 15 – wPi 3

    EV4_ALIAS=”4″ #
    EV4_GPIO=18 # Physical 12 – wPi 1

    EV5_ALIAS=”5″ #
    EV5_GPIO=23 # Physical 16 – wPi 4

    EV6_ALIAS=”6″ #
    EV6_GPIO=24 # Physical 18 – wPi 5

    # Definisci il servizio online da utilizzare per il controllo delle condizioni meteo, puoi scegliere openweathermap oppure wunderground.
    # Se non vuoi configurare nessun servizio imposta il vale “none”
    WEATHER_SERVICE=”openweathermap”
    #WEATHER_SERVICE=”none” # Nessun servizio configurato

    # Parametri di openweathermap, definisce l’api key e il luogo per recuperare lo stato meteo online
    OPENWEATHERMAP_KEY=”aafd67bc766109db2ba4dd248b2d1c9a”
    OPENWEATHERMAP_LOCATION=”Turin,it” # https://openweathermap.org/current
    OPENWEATHERMAP_TZ=”Europe/Rome” # Time zone

    # Parametri di wunderground, definisce l’api key e il luogo per recuperare lo stato meteo online
    WUNDERGROUND_KEY=””
    WUNDERGROUND_LOCATION=”IT/Rivalta%20di%20Torino” # http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&MR=1

    # Blocca l’irrigazione se l’ultima pioggia rilevata online è avvenuta nell’ultima quantità di tempo inserita.
    # Il tempo è espresso in secondi. Quindi inserendo 86400, se nelle ultime 24 ore ha piovuto viene bloccata l’irrigazione. Inserendo il valore zero non viene eseguito nessun controllo.
    # NOT_IRRIGATE_IF_RAIN_ONLINE=86400
    NOT_IRRIGATE_IF_RAIN_ONLINE=0

    # Il parametro è simile a quello precedente, il controllo però anziché essere fatto attingendo a wunderground, viene eseguito direttamente sul sensore se installato. Inserendo il valore zero non viene eseguito nessun controllo.
    # NOT_IRRIGATE_IF_RAIN_SENSOR=86400
    NOT_IRRIGATE_IF_RAIN_SENSOR=0

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

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

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

    # Parametri connessione al broker mqtt
    MQTT_ENABLE=0 # set 1 to enable
    MQTT_HOST=you_host_mqtt
    MQTT_PORT=1883
    MQTT_USER=your_user_mqtt
    MQTT_PWD=yout_password_mqtt
    MQTT_TOPIC=”pigarden/result”
    MQTT_CLIENT_ID=piGarden

  150. @rykers78
    ho provato il tuo file di configurazione e come puoi vedere dall’immagine a me funziona bene.

    Che versione hai di raspbian?

  151. Ciao,
    PRETTY_NAME=”Raspbian GNU/Linux 10 (buster)”
    NAME=”Raspbian GNU/Linux”
    VERSION_ID=”10″
    VERSION=”10 (buster)”
    VERSION_CODENAME=buster
    ID=raspbian
    ID_LIKE=debian

  152. @rykers78

    ho installato Raspbian 10 Duster su un raspberry che avevo da parte ed ho aggiornato la guida di installazione su github.
    Inserendo il tuo file di configurazione a me funziona tutto correttamente.

    Ti consiglio provare a rieseguire l’installazione di piGardenWeb seguendo la nuova guida che trovi qui:
    https://github.com/lejubila/piGardenWeb/blob/master/README.md

    Se hai già installato qualche pacchetto relativo al php, rimuovilo prima di procedere con l’installazione.

  153. Ciao lejubila,
    ho reinstallato di nuovo tutto 2 volte, la prima con Php7.3 ma niente, ho reinstallato con Php7.1 e ora funziona tutto.
    Grazie!
    Ho trovato al seguente indirizzo (https://www.instructables.com/id/Arduino-to-Laravel-Communication/) il modo di comunicare tra Raspeberry e Arduino tramite Laravel con il routing.
    L’articolo dice di aggiornare il file Laravel/routes/api.php ma nella versione di Laravel(4?) di piGarden non è presente questo file.
    Ho aggiornato allora il file piGardenWeb/app/Http/routes.php incollando al fondo del file le due routes, modificandole come segue (altrimenti davano errore entrambe)

    /* ORIGINALE
    Route::middleware(‘auth:api’)->get(‘/user’,function (Request $request) {
    return $request->user();
    });
    */
    /* MODIFICATO*/
    Route::group([‘middleware’ => [‘auth:api’]], function () {
    Route::get(‘/users’, function (Request $request) {
    return response()->json([‘name’ => ‘user’]);
    });
    });

    /* ORIGINALE
    Route::post(‘/’, function (\Illuminate\Http\Request $request) {
    \Illuminate\Support\Facades\Storage::append(“arduino-log.txt”,
    “Time: ” . now()->format(“Y-m-d H:i:s”) . ‘, ‘ .
    “Temperature: ” . $request->get(“temperature”, “n/a”) . ‘°C, ‘ .
    “Humidity: ” . $request->get(“humidity”, “n/a”) . ‘%’
    );
    });
    */
    /* MODIFICATO*/
    Route::post(‘Arduino’, function (\Illuminate\Http\Request $request) {
    \Illuminate\Support\Facades\Storage::append(“arduino-log.txt”,
    “Time: ” . now()->format(“Y-m-d H:i:s”) . ‘, ‘ .
    “Temperature: ” . $request->get(“temperature”, “n/a”) . ‘°C, ‘ .
    “Humidity: ” . $request->get(“humidity”, “n/a”) . ‘%’
    );
    });

    Ma mi viene mostrato l’errore “405 Method not allowed.”
    E’ possibile che ci sia qualcosa di incompatibile con la versione Laravel 5 che ho io?
    Inoltre immagino che dovrei sempre andare sulla pagina mioIP/Arduino per popolare il file di log ma vorrei automatizzare la cosa inserendo ogni 5 minuti i risultati su un DB sqlite.
    Idea di come fare?
    Grazie ancora per gli utilissimi aiuti.

  154. Scusate se OT ma creare un gruppo telegram per condividere le esperienze ed i problemi riscontrati con pigarden?

  155. Scusate se OT ma creare un gruppo telegram per condividere le esperienze ed i problemi riscontrati con pigarden?

  156. @rykers78,
    così su due piedi non saprei il motivo dell’errore ma tra laravel 4 e 5 ci sono delle sostanziali differenze quindi immagino che il codice che hai trovato vada riadattato.
    C’è però un problema di fondo: se vuoi gestire le irrigazioni in base ai valori raccolti dai vari sensori, intervenire su piGardenWeb non è la cosa giusta da fare. Infatti questa è solo l’interfaccia web di presentazione. Dovresti invece modificare piGarden.sh ovvero lo script che gestisce tutto l’impianto.
    Se vuoi puoi dare un’occhiata al seguente link dove spiego i ruoli delle varie componenti in gioco:
    https://www.lejubila.net/2019/08/pigarden-larchitettura/

  157. @Stefano,
    l’idea di un gruppo telegram è proprio carina, c’è solo un piccolo problema: personalmente riesco a malapena a gestire le risposte qui sul blog figuriamoci su un gruppo telegram. Personalmente non ce la posso fare. Se però qualcuno imbarcarsi in questa idea per me va benissimo ed eventualmente posso ufficializzarlo inserendo il link qui sul sito.

  158. Ciao lejubila ,
    Innanzitutto bellissimo progetto e soprattutto molto utile ! Ho riscontrato un problema dall interfaccia web : il pannello relativo al meteo rimane sempre aggiornato a metà ovvero alcuni dati non vengono percepiti , inoltre mi continua ad aggiornare la voce ” ultima pioggia SENSORE ” ( il sensore non e collegato ) con la data e l orario corrente mentre ” ultima pioggia online ” rimane sempre con il trattino .
    Grazie per la disponibilità

  159. Per il sensore che ti segnala sempre lo stato di pioggia, imposta RAIN_GPIO senza valore nel file di configurazione di piGarden:
    RAIN_GPIO=

    Per i dati mancanti, se ti riferisci alla temperatura percepita, raffiche di vento e punto di rugiada, è normale così perché erano valori forniti dal servizio wunderground che nel frattempo è diventato a pagamento, mentre non sono presenti in openwheatermap.

  160. Ciao lejubila,
    è possibile togliere la registrazione utente una volta registrati?
    Te lo chiedo perchè se espongo il sistema su internet rischio che qualcuno si registri e di conseguenza si logga modificando parametri o addirittura metta mano in qualche modo ad altre cose!
    Ciao
    Marco

  161. Ciao lejubila,
    utilizzo piGarden ormai da qualche anno, il tutto è installato su un Raspberry Pi 3 model B con Debian stretch e Apache.
    Attualmente sto provando a configurare un secondo server come reverse proxy Apache, configurato in modo da utilizzare il protocollo HTTPS, ma non riesco a far funzionare correttamete tutte le parti dell’applicazione.
    La parte “pubblica” funziona correttamente, mentre il login ed il logout no. Ho verificato che le due funzioni effettuano un redirect (HTTP 302), ma la URL non viene riscritta correttamente, in pratica viene utilizzato l’indirizzo IP del server ove è installato piGardenWeb. Sono riuscito a bypassare temporaneamente modificando il file “/vendor/symfony/http-foundation/RedirectResponse.php” forzando la URL corretta nel metodo “setTargetUrl”, ma è ovvio che questa non può essere considerata la soluzione definitiva.
    Ti chiederei di fare una verifica e, se possibile, fornirmi delle indicazioni.
    Grazie.

  162. Ciao @ivano,
    ho replicato la tua configurazione per quanto ho capito.
    Ho creato un proxypass su apache con una configurazione così composta

    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName pigarden.mydomain.net

    ProxyPreserveHost On
    ProxyRequests off

    ProxyPass / http://192.168.50.247/
    ProxyPassReverse / http://192.168.50.247/

    RewriteEngine on

    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*) ws://192.168.50.247/$1 [P,L]

    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.*) http://192.168.50.247/$1 [P,L]
    </VirtualHost>

    Con questa configurazione apache ha un virtualhost dal nome pigarden.mydomain.net il quale inoltra tutte le richieste verso l’installazione di pigardenWeb (http://192.168.50.247)’

    Per attivare l’ssl con letsencrypt ho installato certbot e abilitato il cerificato sulla precedente configurazione

    Nel file di configurazione di piGardenWeb (.env) imposta il seguente parmetro:
    APP_FORCE_HTTPS=true

    Così facendo a me funziona tutto regolarmente.

    I

  163. Ciao @lejubila,
    ti ringrazio per le indicazioni che mi hai fornito, appena possibile farò le prove necessarie.

    Un solo dubbio: nella configurazione da te indicata leggo “”, non dovrebbe essere “” o sbaglio?

    Grazie di nuovo

  164. Ciao @lejubila,
    ho un problema con questi comandi:

    pi@raspberrypi:~/piGardenWeb $ ./artisan key:generate
    -bash: ./artisan: Permission denied
    pi@raspberrypi:~/piGardenWeb $

    ho provato anche con questo comando:
    pi@raspberrypi:~/piGardenWeb $ php artisan key:generate
    PHP Parse error: syntax error, unexpected ‘?’ in /home/pi/piGardenWeb/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 500

    ma da sempre errore..
    dove sbaglio? fino a questo punto non ho avuto problemi.
    ho gia reistallato tutto 2 o 3 volte

    grazie

  165. Con l’ultima versione di piGardenWeb è necessario avere installato php 7.1.3 o superiore.
    Probabilmente hai una versione inferiore.
    Se hai l’ultima versione di Raspbian non dovresti avere problemi perché ha php 7.3.
    Ma se hai una versione inferiore di Raspbian sei costratto a installare una versione di piGardernWeb inferiore alle 0.4.4.
    Tutte le versioni le trovi qui https://github.com/lejubila/piGardenWeb/releases

  166. Risolto tutto installando Raspbian 10.
    adesso ho problemi con l’accesso alla dashboard, mi appare la pagina di login ma non mi riconosce l’utente, ne provo a creare uno nuovo e dopo un po va in errore HTTP 500.
    cosa può essere?
    scusa per il disturbo

  167. Ciao @Lorenzo,
    mi sono accoto di avere commesso un errore nel ripotare i comedi da impartire per installare l’ultima versione di piGardenWeb.
    Prova a inserire i seguenti comandi:

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

    Spero che così funzioni.
    Se dovessero ripetersi errori è possibile controllare il file di log che è in /home/pi/piGardenWeb/storage/log/

    Fammi sapere se riesci a portare a termine con successo l’installazione.

  168. Ciao @lejubila,
    utilizzo piGarden ormai da qualche anno, il tutto è installato su un Raspberry Pi 3 model B con Debian buster, Apache e MySql (Mariadb).
    Dopo qualche tempo ho avuto modo di dedicare del tempo, per cui oggi ho provveduto ad effettuare l’aggiornamento alle ultime versioni (piGarden 0.6.0 – piGardenWeb 0.5.0).
    Per quanto riguarda piGardenWeb non è stata una operazione immediata, infatti ho dovuto installare manualmente PHP 7.3, aggiungere la tabella icons e altre operazioni. Comunque ora sembra funzionare quasi tutto.
    Vorrei segnalare che la pagina http://[IP]/admin/user va in errore “Errore durante il caricamento della pagina. Per favore ricarica la pagina.” e che se il parametro ALLOW_MANAGE_USER, nel file .env, viene impostato a false si ha un errore dopo il login.
    Aggiungo, visualizzando i quattro file presenti nel cartella database/migrations ho visto che la struttura delle tabelle è stata modificata rispetto a quella presente nel mio DB, è prevista una procedura di migrazione senza perdita di dati?
    Infine, tempo fa (18/02/2020) ti avevo chiesto un aiuto per configurare piGardenWeb dietro un apache reverse proxy, gentilmente mi hai risposto (26/02/2020) ma configurazione proposta, sicuramente a causa della mia spiegazione, non faceva al caso mio.
    Ho un web server apache che risponde alle richieste HTTPS (certificato let’s encrypt), vorrei che questo venisse configurato come reverse proxy verso un secondo server apache (solo HTTP) ove è installato piGardenWeb. Purtroppo riesco solo in parte, credo che il problema sia nelle chiamate websocket, infatti, dopo l’apertura/chiusura di una zona non si aggiorna lo stato (icone) e non viene visualizzato il pop up.
    Ti sarei molto grato se troverai il tempo per fornirmi qualche consiglio.
    Grazie.

  169. Ciao @Ivano
    effettivamente dalla versione 4.3.1 e alla 4.4.0 di piGardenWeb sono cambiate un bel po’ di cose sotto il cofano.
    E’ stato infatti aggiornato laravel alla versione 5.8 il quale ha comportato anche la necessità di utilizzare una versione più recente del php.
    Ci sono state anche diverse modifiche alla struttura del db, che però non avresti dovuto avere problemi in fase di aggiornamento seguendo le istruzioni rioportate qui https://www.lejubila.net/2020/03/pigardenweb-v-0-4-4-personalizzazione-delle-icone/
    In particolare con le seguenti istruzioni
    sudo php artisan migrate
    sudo php artisan db:seed

    viene eseguiito l’aggiornamento del db e l’inserimento dei record relativi alla definizione dei permessi e ruoli utenti.
    Se riscontri ancora problemi ti invito a reinstallare da capo piGardenWeb, che tra l’altro nel frattempo ho rilasciato un piccolo aggiornamento che risolve un problema sul parametro APP_FORCE_HTTPS presente nel file di configurazione .env.

    Per quanto riguarda il proxypass con apache e certificato ssl lets and crypt, ho una configurazione pressochè identica alla tua.
    Ti indico qui sotto come ho fatto io:

    Sul raspberry dove è installato piGardenWeb ho attivato il seguente virtualhost andando a togliere quello impostato di default da apache:
    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName piGarden.home

    DocumentRoot "/home/pi/piGardenWeb/public"
    <Directory "/home/pi/piGardenWeb/public">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Require all granted
    Order allow,deny
    Allow from all
    </Directory>

    </VirtualHost>

    In questo modo piGardenWeb dovrebbe essere raggiungibile tramite httpo sulla rete interna puntando direttamente l’ip del raspbarry.

    Fatto questo possiamo andare ad attivare il proxy pass sul raspberry che esposto pubblicamente e che gestisce il reverse proxy. Lo puoi fare andando a acreare un file di configurazione simile al seguente ed avendo cura di cambiare il nome host e l’ip del raspberry dove è installato piGardenWeb. Naturalalmente dopo avere attivato il questo file di configurazione dovra essere riavviato apache affinche la modifica abbia effetto:

    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName yourhost.yourdomain.it

    ProxyPreserveHost On
    ProxyRequests off

    ProxyPass / http://192.168.50.102/
    ProxyPassReverse / http://192.168.50.102/

    RewriteEngine on

    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*) ws://192.168.50.102/$1 [P,L]

    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.*) http://192.168.50.102/$1 [P,L]
    </VirtualHost>

    A questo punto dovresti potere raggiungere pubblicamente piGardenWeb in http puntando a http://yourhost.yourdomain.it

    Adesso puoi abilitare https andando a generare il certificato tramite l’utility certbot e indicando su quali file di configuirazione deve essere attivata la connession ssl. Nella fase finale viene richiesto se deve essere eseguito in automatico il redirect da http ad https, nel mio caso non ho impostato il redirect automatico.

    L’ultimo passo da eseguire è quello di impostare il parametro APP_FORCE_HTTPS con il valore true nel file .env di piGardenWeb (assicurati di avere l’ultimissima versione di piGardenWeb ovvero la 0.5.1, l’attivazione di questo parametro genererà un errore).

    Riavvia ancora apache e a questo punto tutto dovrebbe essere funzionante e dovresti potere raggiungere pubblicamente piGardenWeb tramite https.

    Spero di esserti stato di aiuto e che tuttop funzioni correttemente.

  170. Ciao @lejubila,
    ti ringrazio per le informazioni e i consigli forniti.
    Purtroppo, ancora non riesco nel mio intento. Iniziamo dallo schema del DB, i comandi che mi hai indicato li avevo già eseguiti, ma l’esito è stato negativo:

    —————————-
    sudo php artisan migrate
    —————————-

    Migrating: 2019_03_28_180133_create_permission_tables

    Illuminate\Database\QueryException : SQLSTATE[42S01]: Base table or view already exists: 1050 Table ‘permissions’ already exists (SQL: create table ‘permissions’ (‘id’ int unsigned not null auto_increment primary key, ‘name’ varchar(191) not null, ‘guard_name’ varchar(191) not null, ‘created_at’ timestamp null, ‘updated_at’ timestamp null) default character set utf8mb4 collate ‘utf8mb4_unicode_ci’)

    at /var/www/piGardenWeb/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660| // If an exception occurs when attempting to run a query, we’ll format the error
    661| // message to include the bindings with SQL, which will make this exception a
    662| // lot more helpful to the developer instead of just the database’s errors.
    663| catch (Exception $e) {
    > 664| throw new QueryException(
    665| $query, $this->prepareBindings($bindings), $e
    666| );
    667| }
    668|

    Exception trace:

    1 Doctrine\DBAL\Driver\PDOException::(“SQLSTATE[42S01]: Base table or view already exists: 1050 Table ‘permissions’ already exists”)
    /var/www/piGardenWeb/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:123

    2 PDOException::(“SQLSTATE[42S01]: Base table or view already exists: 1050 Table ‘permissions’ already exists”)
    /var/www/piGardenWeb/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:121

    Please use the argument -v to see more details.

    —————————-
    sudo php artisan db:seed
    —————————-

    Illuminate\Database\QueryException : SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘guard_name’ in ‘field list’ (SQL: insert into ‘permissions’ (‘name’, ‘guard_name’, ‘updated_at’, ‘created_at’) values (manage users, web, 2020-06-13 19:18:24, 2020-06-13 19:18:24))

    at /var/www/piGardenWeb/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660| // If an exception occurs when attempting to run a query, we’ll format the error
    661| // message to include the bindings with SQL, which will make this exception a
    662| // lot more helpful to the developer instead of just the database’s errors.
    663| catch (Exception $e) {
    > 664| throw new QueryException(
    665| $query, $this->prepareBindings($bindings), $e
    666| );
    667| }
    668|

    Exception trace:

    1 Doctrine\DBAL\Driver\PDOException::(“SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘guard_name’ in ‘field list'”)
    /var/www/piGardenWeb/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:63

    2 PDOException::(“SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘guard_name’ in ‘field list'”)
    /var/www/piGardenWeb/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:61

    Please use the argument -v to see more details.

    Lo schema del DB, che deriva dalla prima installazione, è il seguente:

    CREATE TABLE ‘users’ (
    ‘id’ int(10) unsigned NOT NULL AUTO_INCREMENT,
    ‘name’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘email’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘password’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘remember_token’ varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
    ‘created_at’ timestamp NULL DEFAULT NULL,
    ‘updated_at’ timestamp NULL DEFAULT NULL,
    PRIMARY KEY (‘id’),
    UNIQUE KEY ‘users_email_unique’ (‘email’)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE ‘password_resets’ (
    ‘email’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘token’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘created_at’ timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
    KEY ‘password_resets_email_index’ (‘email’),
    KEY ‘password_resets_token_index’ (‘token’)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE ‘permissions’ (
    ‘id’ int(10) unsigned NOT NULL AUTO_INCREMENT,
    ‘name’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘created_at’ timestamp NULL DEFAULT NULL,
    ‘updated_at’ timestamp NULL DEFAULT NULL,
    PRIMARY KEY (‘id’),
    UNIQUE KEY ‘permissions_name_unique’ (‘name’)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE ‘roles’ (
    ‘id’ int(10) unsigned NOT NULL AUTO_INCREMENT,
    ‘name’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘created_at’ timestamp NULL DEFAULT NULL,
    ‘updated_at’ timestamp NULL DEFAULT NULL,
    PRIMARY KEY (‘id’),
    UNIQUE KEY ‘roles_name_unique’ (‘name’)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE ‘permission_roles’ (
    ‘permission_id’ int(10) unsigned NOT NULL,
    ‘role_id’ int(10) unsigned NOT NULL,
    PRIMARY KEY (‘permission_id’,’role_id’),
    KEY ‘permission_roles_role_id_foreign’ (‘role_id’),
    CONSTRAINT ‘permission_roles_permission_id_foreign’ FOREIGN KEY (‘permission_id’) REFERENCES ‘permissions’ (‘id’) ON DELETE CASCADE,
    CONSTRAINT ‘permission_roles_role_id_foreign’ FOREIGN KEY (‘role_id’) REFERENCES ‘roles’ (‘id’) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE ‘icons’ (
    ‘id’ int(10) unsigned NOT NULL AUTO_INCREMENT,
    ‘zone’ varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
    ‘icon_open’ varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
    ‘icon_close’ varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
    ‘enabled’ int(11) NOT NULL DEFAULT 1,
    ‘created_at’ timestamp NULL DEFAULT NULL,
    ‘updated_at’ timestamp NULL DEFAULT NULL,
    PRIMARY KEY (‘id’),
    UNIQUE KEY ‘icons_zone_unique’ (‘zone’)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    CREATE TABLE ‘permission_users’ (
    ‘user_id’ int(10) unsigned NOT NULL,
    ‘permission_id’ int(10) unsigned NOT NULL,
    PRIMARY KEY (‘user_id’,’permission_id’),
    KEY ‘permission_users_permission_id_foreign’ (‘permission_id’),
    CONSTRAINT ‘permission_users_permission_id_foreign’ FOREIGN KEY (‘permission_id’) REFERENCES ‘permissions’ (‘id’) ON DELETE CASCADE,
    CONSTRAINT ‘permission_users_user_id_foreign’ FOREIGN KEY (‘user_id’) REFERENCES ‘users’ (‘id’) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE ‘role_users’ (
    ‘role_id’ int(10) unsigned NOT NULL,
    ‘user_id’ int(10) unsigned NOT NULL,
    PRIMARY KEY (‘role_id’,’user_id’),
    KEY ‘role_users_user_id_foreign’ (‘user_id’),
    CONSTRAINT ‘role_users_role_id_foreign’ FOREIGN KEY (‘role_id’) REFERENCES ‘roles’ (‘id’) ON DELETE CASCADE,
    CONSTRAINT ‘role_users_user_id_foreign’ FOREIGN KEY (‘user_id’) REFERENCES ‘users’ (‘id’) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE ‘migrations’ (
    ‘migration’ varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    ‘batch’ int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    In particolare la tabella “migrations” contiene i seguenti record:
    2014_10_12_000000_create_users_table 1
    2014_10_12_100000_create_password_resets_table 1
    2016_05_10_130540_create_permission_tables 1
    2020_03_21_154649_create_icons_table 2

    Osservo che “2016_05_10_130540_create_permission_tables” non corrisponde al nome del file presente nel file system.

    Segnalo che ora se il parametro ALLOW_MANAGE_USER, nel file .env, viene impostato a false si ha HTTP 500.

    Infine, passando alla configurazione del reverse proxy, ho un paio di dubbi in merito a quanto mi hai consigliato.
    Per il front end indichi “”, ma essendo essendo questo in HTTPS immagino che dovrebbe essere “”.
    Per in web server back end, accessibile esclusivamente tramite il front end, ove è installato piGardenWeb (che è solo HTTP) non capisco perché si dovrebbe impostare a true il parametro APP_FORCE_HTTPS.
    In merito a questo argomento aggiungo un dettaglio che credevo superfluo, ma magari è importante. Il front end viene utilizzato come punto di accesso per diversi siti, per cui piGardenWeb l’ho configurato con degli switch:

    ProxyPass /piGarden http://192.168.50.102 retry=0
    ProxyPassReverse /piGarden http://192.168.50.102
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /piGarden(/.*) ws://192.168.50.102$1 [P,END]

    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /piGarden(/.*) http://192.168.50.102$1 [P,END]

    ProxyHTMLEnable On
    ProxyHTMLExtended On
    ProxyHTMLMeta On

    ProxyHTMLURLMap http://192.168.50.102 /piGarden
    RequestHeader unset Accept-Encoding

    Scusami per il lungo messaggio e grazie in ogni caso.

  171. Ciao @Ivano
    effettivamento c’è un problema sul nome del file relativo alla migrazione della tablla dei permessi.
    Dovresti provare a rinominare il file da 2019_03_28_180133_create_permission_tables.php a 2016_05_10_130540_create_permission_tables.php e successivamente a rilanciare la migrazione. Fammi sapere se così funziopne così provvedo a modifica il nome anche su github. Se invece non dovesse funzionare ti consiglio di ricreare il db da capo.

    Relativamente al reverse proxy il sistema dei commenti si è mangiato uncuni pezzi….
    comunque APP_FORCE_HTTPS impostato a true ti server per far si che piGardenWeb generi le url ai js, css e alle varie pagine con https invece che http, se così non fosse avresti problemi di funzionamento del sito.
    Per quanto riguarda gli switch non penso ci siano particolari problemi, anche se non sono così particolarmente esperto su questo aspetto da potertene assicurare.

  172. Ciao lejubila,
    grazie per aver condiviso tutto il lavoro qui e il codice; grazie anche per rispondere alle richieste di supporto.
    Scrivo perché da pochi giorni ho installato piGarden e piGardenWeb su un raspberry pi 3 del 2015 che avevo usato come mediacenter (poi sostituito con un RPi 4 e stava aspettando un nuovo impiego).
    Complice l’estate e una elettrovalvola di una lavatrice dismessa, ho intrapreso anche io il progetto per irrigare le piante del mio balcone, in particolare se vado in ferie.
    Parte software funziona tutto: ho solo dovuto sistemare in /etc/piGarden.conf il percorso da GPIO=”/usr/local/bin/gpio” a GPIO=”/usr/bin/gpio”.
    Inoltre ho provato ad abilitare il supporto ad https come descritto ma qualcosa non va (non è un problema, non espongo su internet la macchina, dall’esterno entro via VPN casalinga).
    Parte hardware ho un dubbio che mi sta concretamente bloccando e riguarda le due elettrovalvole. Sono due elettrovalvole monostabili installate nello stesso componente (una entrata, due uscite, recuperato da una lavatrice dismessa).
    Il problema è che non ho le specifiche e non c’è proprio scritto a che tensione debbano funzionare.
    Purtroppo a quel tempo ho solo salvato quei componenti che pensavo potessero ritornarmi utili e non ho pensato di controllare questi “dettagli”.
    Ho misurato la resistenza di entrambe e mi danno 4kOhm.
    Dopo aver cercato, negli ultimi giorni, le specifiche tecniche del componente su internet, ho provato a collegarla senza successo a 9VDC, 12VDC e 18VDC.
    Non mi piace rischiare di collegarla alla 220V così solo “per vedere se va!”.
    Cosa puoi/potete suggerirmi in proposito?
    Grazie per il tuo lavoro e per il tuo tempo!

  173. Ciao @Mario,
    da quello che di ci presuppongo che l’elettrovalvola cha hai funzioni a 220V in corrente alternata (forse è simile a questa?)
    Se effettivamente è cosi vedo poche soluzioni, o fai arrivare i 220 all’elettrovalvola oppure la cambi in favore di una che funzioni ad un voltaggio più basso in corrente continua.

  174. Ciao @Lejubila,
    alla fine sono riuscito a trovare qualche indizio di conferma e ho testa le elettrovalvole a 220 e funzionano.
    Ho quindi realizzato e messo in opera le centraline (una interna con in raspberry e i relè) e l’altra all’esterno con l’elettrovalvola sul terrazzo (sono al primo piano).
    Essendo in affitto non ho potuto né voluto lavori di muratura e ho sfruttato il foro di aerazione in cucina per far uscire il tubo dell’acqua (usandone uno per lavatrici da 3,5 metri) e la 220. Tutto grazie al tuo “framework”!! 😉
    Proprio ieri ho concluso il tutto con la posa dei tubi e dei “capillari” che vanno ai vasi e adesso si apre la fase di regolazione dei gocciolatori.
    Sto cercando di capire come attivare le notifiche via mail (ho visto lo script sendmail.sh, ho configurato come indicato ma niente) e anche via Telegram. Hai qualche suggerimento?

  175. Ciao @Lejubila.
    Volevo ringraziare per il tuo lavoro perfettamente funzionante. Lascio testimonianza per futuri fruitori. Avevo due centraline Rainbird, una per due zone del prato l’altra per una zona sola. Quella doppia mi ha abbnndonato definitivamente, per cui ho deciso di cercare un’alternativa e mi sono imbattuto nel tuo lavoro. Spettacolare e veramente comodo. Ho un quesito: non ho capito se esiste un log storico delle aperture/chiusure e delle precipitazioni accadute. E, se si, dove è consultabile? Grazie ancora e complimenti gran bel lavoro….

  176. Ciao scusa
    ho un problema che mi impedisce di far funzionare l’applicazione.
    Durante l’installazione (su jessie) prendo questo errore:

    pi@raspberrypi:~/piGardenWeb $ php artisan key:generate
    PHP Parse error: syntax error, unexpected ‘?’ in /home/pi/piGardenWeb/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 500

    ho visto che si tratta di una sintassi usata nel php7 …. pero’ qui su jessie ho la php5
    cosa posso fare sacondo te ?
    Grazie

  177. Ciao @Mario
    purtroppo lo script che accompagna piGarden per inviare notifiche via telegram non funziona più a causa della chiusura del servizio a cui si appoggiava.
    Per quanto riguarda invece le notifiche mail ti consiglio di leggere questo post relativo alla gestione degli eventi su piGarden e grazze al quale è possibile agganciarvi lo script per l’invio delle mail.

  178. Ciao @Gianmario,
    grazie per i complimenti che sono sempre graditi.
    Per quanto riguarda lo storico delle irrigazioni attualmente non esiste niente di facilmente consultabile.
    Esiste però il file di log su cui piGarden tiene traccia di tutte le operazioni eseguite.
    Lo puoi trovare sotto /home/pi/piGarden/log

  179. Ciao @Gianluigi,
    l-ultima versione piGarrdenWeb necessita del php 7.1.3 o superiori che purtroppo non è presente su jessie.
    Penso che l’unica soluzione sia aggiornare a buster.

  180. @Gianmario
    per i punti:
    1) un log storico delle aperture/chiusure
    2) delle precipitazioni accadute.
    le mie indicazioni (mi faccio pubblicità):
    a) con piGardenSched c’è questa funzionalità
    b) con rainsensorqty – quindi con sensore/misuratore pioggia – c’è questa possibilità
    A disposizione.
    ciao
    A

  181. Grazie del suggerimento, io sto utilizzando un RPi model B+ mi sembra di averci gia installato Buster… tuttavia approfitto della tua gentilezza: dopo aver installato la parte script bash ho provato a cambiare lo stato delle EV senza aver ancora collegato la scheda rele’, ma rimaneva sempre a 0, inoltre la scheda rele’ che userò è optoisolata ma con logica di Arduino , cioè invertita rispetto allo stato dei GPIO (1=off 0=on) … mi sembra si possa modificare nel .conf o sbaglio ?
    Grazie ancora e vedro’ di farlo funzionare !!!
    🙂

  182. @Gianluigi,
    puoi cambiare lo stato dei gpio in base alle tue necessità intervenendo sulle variabili nel file di configurazione:
    # Stato dei due gpio per impartire l’alimentazione positiva alle elettrovalvole (aperta)
    SUPPLY_GPIO_POS=0

    # Stato dei due gpio per impartire l’alimentazione negativa alle elettrovalvole (chiusa)
    SUPPLY_GPIO_NEG=1

    # Stato di ingresso da assegnare al gpio per chiudere il rele
    RELE_GPIO_CLOSE=0

    # Stato di ingresso da assegnare al gpio per aprire il rele
    RELE_GPIO_OPEN=1

  183. senza apparente motivo da qualche giorno non riesco piu a collegarmi all’interfaccia web… ricevo errore 502 bad gateway e non riesco a capirne il motivo.
    riavviare router pc e raspberry non è servito, il pi è raggiungibile via ssh e vnc
    Raspbian 10, Rasp Pi Model B Plus Rev 1.2
    grazie per l’aiuto

  184. @Stefano
    cosa usi engnx o apache?
    Hai controllato i log del web server?
    Così senza altre informazioni non saprei come aiutarti.

  185. sono questi ?
    error.log
    2020/09/22 01:14:40 [crit] 449#449: *45 connect() to unix:/var/run/php/php7.3-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 83.97.20.33, server: _, request: “GET / HTTP/1.0”, upstream: “fastcgi://unix:/var/run/php/php7.3-fpm.sock:”
    2020/09/22 02:24:33 [crit] 449#449: *49 connect() to unix:/var/run/php/php7.3-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.35.168.251, server: _, request: “GET / HTTP/1.1”, upstream: “fastcgi://unix:/var/run/php/php7.3-fpm.sock:”, host: “88.149.234.179:83”
    2020/09/22 02:24:34 [crit] 449#449: *51 connect() to unix:/var/run/php/php7.3-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.35.168.251, server: _, request: “GET / HTTP/1.1”, upstream: “fastcgi://unix:/var/run/php/php7.3-fpm.sock:”, host: “88.149.234.179:83”

    access.log
    83.97.20.33 – – [22/Sep/2020:01:14:40 +0200] “GET / HTTP/1.0” 502 173 “-” “-”
    192.35.168.251 – – [22/Sep/2020:02:24:33 +0200] “\x16\x03\x01\x00{\x01\x00\x00w\x03\x03’2\x8Ag\x9A\xD8\x9F\xDDP\x8E\x81\x80\xBBN6\xDD[\xEFuT\x95\xB0l\xA8O\xC6\xF8\xA0\xBB1Mg\x00\x00\x1A\xC0/\xC0+\xC0\x11\xC0\x07\xC0\x13\xC0\x09\xC0\x14\xC0” 400 173 “-” “-”
    192.35.168.251 – – [22/Sep/2020:02:24:33 +0200] “GET / HTTP/1.1” 502 173 “-” “-”
    192.35.168.251 – – [22/Sep/2020:02:24:34 +0200] “GET / HTTP/1.1” 502 173 “-” “Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)”

  186. @Stefano
    controlla che il servizio php7.3-fpm sia attivo con il comando
    systemctl status php7.3-fpm

    se non lo è prova a farlo partire con
    systemctl start php7.3-fpm

    e rendilo attivo in modo permanente con
    systemctl enable php7.3-fpm

  187. ciao, dopo aver generato la key, (corettamente ritorna questo errore eseguendo questo comando:
    #php artisan migratephp artisan db:seed
    -bash: br: No such file or directory
    cosa potrebbe essere?
    di conseguenza se apro la pagina di registrazione mi restituisce l’errore in un banner rosso:
    -PiGarden server error
    stdClass Object
    (
    [description] => stream_socket_client(): unable to connect to tcp://localhost:8084 (Connection refused) at line 34 of file /home/pi/piGardenWeb/app/PiGardenSocketClient.php
    [code] => 0
    )

  188. Ciao @Cristian
    il comando dove ti da l’errore è sbagliato, sulla guida errara rimasto un refusio html che mostrava due comandi separati tutti sulla stessa riga:

    I comandi da impartire correttamente sono i seguenti:

    php artisan migrate
    php artisan db:seed

    Per quanto riguarda l’errore succesivo sembra dovuto alla mancata connessione verso il socket server di piGarden.
    l’hai avviato come descritto nella guida?

  189. Ciao,
    grazie per la risposta.
    Scusami, ma il “paste” mi ha fregato, inviando i comandi separati ottengo quell’errore. ho già’ aggiornato FW e RPI a buster.

  190. Buongiorno,
    nel mio piGardenWeb non visualizzo la velocità del vento (Raffiche), la temperatura percepita ed il punto di rugiada che invece vedo su una delle immagini sopra. Cosa devo fare? Grazie.

  191. @Paolo,
    queste informazioni sono disponibili se utilizzi le api di Wunderground (che è diventato a pagamento).
    Con OpenWeatherMap questi dati non vengono forniti.

  192. @lejubila
    Ok grazie. Sono comunque valori che é possibile calcolare con quelli noti. É difficile aggiungere questa cosa?

  193. @Paolo,
    se sai come si calcolano questi valori, non è difficile farli mostrare con openweather.
    Va modificato il file drv/openwathermap/rainonline.include.sh di pigarden andando a popolare le variabili wind_gust_kph, dewpoint_c e feelslike_c.
    Se riesci a implementare questi valori magari passami la modifica che hai fatto al file, così la mettiamo a disposizione di tutti.
    Se invece sai come calcolare i valori ma non te la senti di modificare il codice, lo posso fare io.

  194. Ciao Lejubila,
    Vorrei sapere se piGardenWeb sia raggiungibile a distanza. Esampio:
    casa in campagna in cui piGarden destisce l’orto. Da un’altra citta attraverso piGardenWeb controllo l’orto. Questo scenario è realizzabile con piGarden e piGardenWeb?
    complimenti per la qualità del tuo lavoro.
    Grazie
    Salvatore

  195. Ciao @Salvatore,
    devi configurare leregole di port forwarding sul router della casa di campagna in modo che che le richieste che arrivano alla porta 80 (o 443 se hai attivato l’https) vengano inoltrate all’ip del raspberry dove gira piGardenWeb. In questo modo piGardenWeb sarà accessibile sull’ip pubblicop della casa di campagna.

  196. Ciao Lejubila,
    provo a riassumere quello che ho capito e magari ad aggiungere qualche domanda:
    Nella casa di campagna vi è la centralina con le elettrovalvole pilotate direttamente da raspberry. In Raspberry vengono eseguiti PiGarden e PigardenWeb. Nella casa di compagna vi è un model/router con ip pubblico (non statico).
    Da un’altra città è possibile, digitando nel browser l’ip pubblico del modem in campagna (configurato con port forwarding), raggiungere ed utilizzare l’interfaccia di PiGardenWeb. Questo presuppone di dovere conoscere tutte le volte l’ip della campagna, se ci fosse un momentaneo blackout elettrico, il modem si riavvierebbe con un differente ip. In questo caso, come farei a raggiungere nuovamente PiGardenweb senza dovere conoscere il nuovo IP? si può risolvere solo avendo un IP statico?
    Grazie
    Salvatore

  197. Ciao, ho trovato il tuo progetto e sono molto interessato ad adottarlo, ma su raspian 5.10 (versione di febbraio 2022) si scarica php7.4 e la libreria mcrypt sembra avere qualche problema.
    Alla fine piGarden semprerebbe girare, ma piGardenWeb (sulla stessa pi3b) da errore Bad Gateway (menneno il phpinfo.php funziona)

    ho verificato 2 volte la procedura da te indicata e i diritti, tutto ok…. ma l’unica differenza sembra proprio php7.4….
    ti è capitato? sai come potrei risolvere?
    grazie

  198. Sto provando di installare il tuo progetto ma non riesco installare i pacchetti PHP ” # Per raspbian 10 duster (php7.3)
    sudo apt install nginx php-fpm php-cli php-mcrypt php-sqlite3 git ” non trova il server hai un suggerimento.

  199. sto provando ad installare il tuo progetto, ho dei problemi subito al primo passaggio, non trova i pacchetti, hai degli aggiornamenti visto che siamo arrivati a Debian 12.
    Attendo tue notizie.

    Grazie Mille

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.