Pagina 1 di 1

aggiornamento guide per nuove versioni esp

Inviato: 04/10/2018, 23:24
da megamarco83
Ciao con le nuove versioni di espeasy sono cambiati i comandi per quanto rigurada le visualizzazioni dei sensori DH22
fino alle versioni precedenti si aveva:

Codice: Seleziona tutto

pi@raspberrypi:~ $ curl -s http://192.168.0.198/json?tasknr=2
{
"TaskName": "dht22",
"Temperature": 24.10,
"Humidity": 55.30


ora con le nuove versioni si ha:

Codice: Seleziona tutto

pi@raspberrypi:~ $ curl -s http://192.168.0.198/json?tasknr=2
{
"TaskValues": [
{"ValueNumber":1,
"Name":"Temperature",
"NrDecimals":2,
"Value":24.10
},
{"ValueNumber":2,
"Name":"Humidity",
"NrDecimals":2,
"Value":55.30
}],
"TTL":60000,
"DataAcquisition": [
{"Controller":1,
"IDX":21,
"Enabled":"true"
},
{"Controller":2,
"IDX":0,
"Enabled":"false"
},
{"Controller":3,
"IDX":0,
"Enabled":"false"
}],
"TaskInterval":60,
"Type":"Environment - DHT11/12/22  SONOFF2301/7021",
"TaskName":"dht22",
"TaskEnabled":"true",
"TaskNumber":2
}

purtroppo come vedete non si ha più il valore catalogato in Temperature ed Humidity ma in un campo Value

prima in reqsdm si usava:

Codice: Seleziona tutto

} elseif ($argv[1] == 'esp_dht22_temp_primo_piano') {
         $url = 'http://192.168.0.198/json?tasknr=2';
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $outstr = $json_output['Temperature'];
         $outstr = "18($outstr*°C)";        
     } elseif ($argv[1] == 'esp_dht22_umid_primo_piano') {
         $url = 'http://192.168.0.198/json?tasknr=2';
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $outstr = $json_output['Humidity'];
         $outstr = "19($outstr*%)"; 


come si può fare ora a catturare il valore con json avendo un campo che si chiama value per entrambe le grandezze misurate?
grazie!

Re: aggiornamento guide per nuove versioni esp

Inviato: 05/10/2018, 22:37
da Flane
Questo articolo potrebbe essere utile:
How to Use JSON Data with PHP or JavaScript

in particolare il paragrafo "Getting data from nested arrays", cioè "Ottenere dati da array annidati"

Infatti il nuovo formato è proprio un array annidato. ;)

Re: aggiornamento guide per nuove versioni esp

Inviato: 08/10/2018, 11:41
da megamarco83
ciao, sono riuscito a creare la lettura del Json annidato
per chi interessasse:

Codice: Seleziona tutto

      } elseif ($argv[1] == 'esp_dht22_temp_primo_piano_NEW') { //DHT22 su ESP NUOVE versioni espeasy (NON FA BUCHI NELLE LETTURE)
         $url = 'http://192.168.0.198/json?tasknr=2';
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $val    = $json_output['TaskValues'][0]['Value'];
         $outstr = ("18($val*°C)\n");
       } elseif ($argv[1] == 'esp_dht22_umid_primo_piano_NEW') {
         $url = 'http://192.168.0.198/json?tasknr=2';
         $pagina = file_get_contents($url);
         $json_output = json_decode($pagina, true);
         $val    = $json_output['TaskValues'][1]['Value'];
         $outstr = ("19($val*%)\n");


invece se volessi estarlo con uno script sh come potrei fare visto che non legge JSON e che il valore di umifità e temperatura sono all'interno di una variabile che ha lo stesso label: "value" ?

Re: aggiornamento guide per nuove versioni esp

Inviato: 07/04/2019, 14:19
da sunpower327
Con il nuovo espeasy se dai questo comando con uno script shell funziona:

Codice: Seleziona tutto

curl -s http://192.168.1.99/json?tasknr=2 | egrep '"Value"' | egrep -o '[0-9]*(\.)?[0-9]*'

Re: aggiornamento guide per nuove versioni esp

Inviato: 08/04/2019, 14:59
da megamarco83
sunpower327 ha scritto:Con il nuovo espeasy se dai questo comando con uno script shell funziona:

Codice: Seleziona tutto

curl -s http://192.168.1.99/json?tasknr=2 | egrep '"Value"' | egrep -o '[0-9]*(\.)?[0-9]*'

ma nel caso di sensore di umitià e temperatura come ad esempio il DHT22
in cui hai entrambi i valori?

Codice: Seleziona tutto

pi@raspberrypi:~ $ curl -s http://192.168.0.198/json?tasknr=3
{
"TaskValues": [
{"ValueNumber":1,
"Name":"Temperature",
"NrDecimals":1,
"Value":20.3
},
{"ValueNumber":2,
"Name":"Humidity",
"NrDecimals":1,
"Value":46.1
}],
"TTL":10000,
"DataAcquisition": [
{"Controller":1,
"IDX":21,
"Enabled":"true"
},
{"Controller":2,
"IDX":0,
"Enabled":"false"
},
{"Controller":3,
"IDX":0,
"Enabled":"false"
}],
"TaskInterval":10,
"Type":"Environment - DHT11/12/22  SONOFF2301/7021",
"TaskName":"dht22_198",
"TaskEnabled":"true",
"TaskNumber":3
}


se usi il comando:

Codice: Seleziona tutto

pi@raspberrypi:~ $ curl -s http://192.168.0.198/json?tasknr=3 | egrep '"Value"' | egrep -o '[0-9]*(\.)?[0-9]*'
20.3
46.1


ti da entrambi i valori

Re: aggiornamento guide per nuove versioni esp

Inviato: 12/08/2019, 23:18
da sunpower327
si è vero ma se li filtri prendi la riga che vuoi
puoi aggiungere per prendere solo la seconda riga ovvero il secondo valore questo

Codice: Seleziona tutto

pi@raspberrypi:~ $ curl -s http://192.168.0.198/json?tasknr=3 | egrep '"Value"' | egrep -o '[0-9]*(\.)?[0-9]*' | head -n 2  | tail -n 1

mentre per prendere la prima riga

Codice: Seleziona tutto

pi@raspberrypi:~ $ curl -s http://192.168.0.198/json?tasknr=3 | egrep '"Value"' | egrep -o '[0-9]*(\.)?[0-9]*'  tail -n 1

però funziona anche così che può essere interessante per parametrizzare in eventuali elaborazioni in quanto il comando rispetto alla riga 2 cambia solo
in head - n x dove x è il parametro che cambia che indica il numero del sensore.

Codice: Seleziona tutto

pi@raspberrypi:~ $ curl -s http://192.168.0.198/json?tasknr=3 | egrep '"Value"' | egrep -o '[0-9]*(\.)?[0-9]*' | head -n 1  | tail -n 1