aggiornamento guide per nuove versioni esp

Discussioni relative al software di monitoraggio energetico METERN
megamarco83
Messaggi: 184
Iscritto il: 22/08/2016, 14:13

aggiornamento guide per nuove versioni esp

Messaggioda megamarco83 » 04/10/2018, 23:24

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!


Avatar utente
Flane
Messaggi: 2084
Iscritto il: 16/01/2016, 15:02

Re: aggiornamento guide per nuove versioni esp

Messaggioda Flane » 05/10/2018, 22:37

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. ;)

megamarco83
Messaggi: 184
Iscritto il: 22/08/2016, 14:13

Re: aggiornamento guide per nuove versioni esp

Messaggioda megamarco83 » 08/10/2018, 11:41

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" ?

sunpower327
Messaggi: 32
Iscritto il: 21/01/2018, 10:50

Re: aggiornamento guide per nuove versioni esp

Messaggioda sunpower327 » 07/04/2019, 14:19

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]*'

megamarco83
Messaggi: 184
Iscritto il: 22/08/2016, 14:13

Re: aggiornamento guide per nuove versioni esp

Messaggioda megamarco83 » 08/04/2019, 14:59

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

sunpower327
Messaggi: 32
Iscritto il: 21/01/2018, 10:50

Re: aggiornamento guide per nuove versioni esp

Messaggioda sunpower327 » 12/08/2019, 23:18

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


Torna a “MeterN”

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti