demande entreaide JSON / DZVENTS

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
multinet
Messages : 24
Inscription : 09 févr. 2016, 13:07

demande entreaide JSON / DZVENTS

Message 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
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: demande entreaide JSON / DZVENTS

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
multinet
Messages : 24
Inscription : 09 févr. 2016, 13:07

Re: demande entreaide JSON / DZVENTS

Message 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
multinet
Messages : 24
Inscription : 09 févr. 2016, 13:07

Re: demande entreaide JSON / DZVENTS

Message 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
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: demande entreaide JSON / DZVENTS

Message par Keros »

Tant mieux que tu ai pu trouver la bonne syntaxe.

Bonne continuation ;)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre