Page 1 sur 1

demande entreaide JSON / DZVENTS

Publié : 22 juin 2020, 09:34
par multinet
Bonjour

Je suis à la recherche d'une aide pour extraire en DZVENTS des données de ce retour JSON que j'obtiens de mon appel api netatmo et qui est stocké dans l'objet : item.json (certaines données anonymisée).


J'aimerais récuperer les données contenues dans les dashboard_data (de device et de chaque module). Je n'ai pas réussi à coder en dzvents cette récupération (pour ensuite valoriser mes devices).

Toute aide est la bienvenue :) merci à vous

Code : Tout sélectionner

{
"body": {
"devices": [
            {
                    "_id": "*****",
                    "station_name": "*****",
                    "date_setup": 1359763200,
                    "last_setup": 1359763200,
                    "type": "NAMain",
                    "last_status_store": 1592734332,
                    "module_name": "Salon",
                    "firmware": 177,
                    "last_upgrade": 1486894899,
                    "wifi_status": 50,
                    "reachable": true,
                    "co2_calibrating": false,
                    "data_type": [
                        "Temperature",
                        "CO2",
                        "Humidity",
                        "Noise",
                        "Pressure"
                    ], // data_type
                    "place": {
                          "altitude": 36,
                          "city": "******",
                          "country": "FR",
                          "timezone": "Europe/Paris",
                          "location": [
                                      -0.00000,
                                      00.000000
                                      ]
                    },
                    "dashboard_data": {
                          "time_utc": 1592733109,
                          "Temperature": 23.6,
                          "CO2": 421,
                          "Humidity": 58,
                          "Noise": 45,
                          "Pressure": 1027.7,
                          "AbsolutePressure": 1023.4,
                          "min_temp": 21.5,
                          "max_temp": 23.8,
                          "date_max_temp": 1592730861,
                          "date_min_temp": 1592718251,
                          "temp_trend": "stable",
                          "pressure_trend": "up"
                      },
                      "modules": [
                            {
                                "_id": "*************",
                                "type": "NAModule1",
                                "module_name": "Jardin",
                                "last_setup": 1356994864,
                                "data_type": [
                                    "Temperature",
                                    "Humidity"
                                ],
                                "battery_percent": 100,
                                "reachable": true,
                                "firmware": 50,
                                "last_message": 1592734328,
                                "last_seen": 1592734289,
                                "rf_status": 61,
                                "battery_vp": 6234,
                                "dashboard_data": {
                                    "time_utc": 1592733059,
                                    "Temperature": 23.7,
                                    "Humidity": 61,
                                    "min_temp": 15,
                                    "max_temp": 24.3,
                                    "date_max_temp": 1592730548,
                                    "date_min_temp": 1592713939,
                                    "temp_trend": "down"
                                }
                            },
                            {
                                "_id": "***********",
                                "type": "NAModule3",
                                "module_name": "Pluviomètre",
                                "last_setup": 1522256764,
                                "data_type": [
                                      "Rain"
                                ],
                                "battery_percent": 53,
                                "reachable": true,
                                "firmware": 12,
                                "last_message": 1592734328,
                                "last_seen": 1592734321,
                                "rf_status": 86,
                                "battery_vp": 4962,
                                "dashboard_data": {
                                    "time_utc": 1592733104,
                                    "Rain": 0,
                                    "sum_rain_1": 0,
                                    "sum_rain_24": 0
                                }
                            },
                            {
                                "_id": "****************",
                                "type": "NAModule2",
                                "module_name": "Anémomètre",
                                "last_setup": 1544359768,
                                "data_type": [
                                    "Wind"
                                ],
                                "battery_percent": 84,
                                "reachable": true,
                                "firmware": 25,
                                "last_message": 1592734328,
                                "last_seen": 1592734328,
                                "rf_status": 67,
                                "battery_vp": 5676,
                                "dashboard_data": {
                                    "time_utc": 1592733104,
                                    "WindStrength": 5,
                                    "WindAngle": 313,
                                    "GustStrength": 17,
                                    "GustAngle": 315,
                                    "max_wind_str": 38,
                                    "max_wind_angle": 313,
                                    "date_max_wind_str": 1592731900
                                }
                            }
                        ] // modules
                  } // devices
                ], // devices
  "user": {
      "mail": "**************",
      "administrative": {
          "country": "FR",
          "feel_like_algo": 0,
          "lang": "fr-FR",
          "reg_locale": "fr-FR",
          "unit": 0,
          "windunit": 0
        }
  }
  }, // body
  "status": "ok",
  "time_exec": 0.10169386863708496,
  "time_server": 1592734433
  } // head

Re: demande entreaide JSON / DZVENTS

Publié : 22 juin 2020, 12:39
par Keros
Il n'y a pas beaucoup de différence entre le LUA et le DZvents pour récupérer des infos d'un Json.

Le forum est plein d'exemples. J'utilise des infos Json dans mon Tuto OpenWeatherMap (lien en signature).

La difficulté peut-être au niverau de la récupération des info avec weather = jsonValeur.current.weather[1].description (exemple). Poste nous que tu n'arrives pas à obtenir et on pourra certainement t'aiguiller.

Re: demande entreaide JSON / DZVENTS

Publié : 22 juin 2020, 12:45
par multinet
Merci pour ta réponse

voici mon (bout de) code :

Code : Tout sélectionner

	execute = function(domoticz, item)
	    local msg = domoticz.time.rawTime..'\n\r'..version..'\n\r\n\r'
	    
	    if (item.isTimer) then
	        domoticz.data.dist = 0
	    	-- Lecture des données de ma station
--print("IS TIMER")			
--print("token : "..domoticz.globalData.access_token)
			domoticz.openURL({url = 'https://api.netatmo.com/api/getstationsdata',
				method = 'POST',
				callback = 'meteoNetatmo',
				postData = {
					access_token = domoticz.globalData.access_token,
					device_id = myStation,
					get_favorites = false
				}
			 })
	    end
	
	-- TRAITEMENT de la réponse de NETATMO
	if (item.isHTTPResponse) then
		if (item.ok) then
			if (item.isJSON) then
				if (item.json.body.errors == nil) then
					if (item.callback == 'meteoNetatmo') then
print("INSIDE")	
                        local valeur      = item.json.body.device[1]['dashboard_data']['Temperature']                     
print(valeur)

                end
                end
            end
        end	
    end
Dans la log j'ai bien le message 'INSIDE' qui implique que j'ai un JSON en retour de l'appel api qui est OK

en fait ce que je n'arrive pas a maitriser c'est comment adresser la valeur alors que le json a des tableaux intégrés ?
===> item.json.body.device[1]['dashboard_data']['Temperature']
doit etre sans doute adressé autrement ?

Je vais regardé tes tutos en //

merci

Re: demande entreaide JSON / DZVENTS

Publié : 22 juin 2020, 13:30
par multinet
Rebonjour

c'est bon avec l'aide de ton tuto j'ai trouvé !

local valeur = item.json.body.devices[1].dashboard_data.Temperature

il manquait au passage le s de devices ce qui explique pourquoi je n'étais pas parvenu malgré tout mes essais a trouver.

Encore merci
Multinet

Re: demande entreaide JSON / DZVENTS

Publié : 22 juin 2020, 20:10
par Keros
Tant mieux que tu ai pu trouver la bonne syntaxe.

Bonne continuation ;)