Aller au contenu

Messages recommandés

Posté(e) (modifié)

 

me revoila avec une question C** :D

 

je souhaite récupérer des valeurs dans un Json :

 

{
	"zones": [{
		"id": "5b139f1ef51445a30df80c6c",
		"system_id": "5b139f1ef51445a30df80c69",
		"device_id": "5a37f4167765621039320000",
		"modes": "1111111011",
		"warning": "0",
		"name": "Alyssa",
		"system_number": "1",
		"zone_number": "3",
		"state": "0",
		"consign": "24.5",
		"temp": "24.8",
		"mode": "1",
		"velocity": null,
		"show_velocity": null,
		"sleep": "0",
		"lower_conf_limit": "18.0",
		"upper_conf_limit": "30.0",
		"master": null,
		"eco": "0",
		"prog_enabled": "1",
		"speed_prog_mode": null,
		"show_ventilation": "1",
		"updated_at": 1528610421,
		"setup_type": "0",
		"class": "Zone",
		"last_update": 1528610421,
		"next_schedule_number": "0",
		"led": null,
		"offset": null,
		"cold_offset": null,
		"heat_offset": null,
		"scene": null,
		"air_flow": null,
		"humidity": null,
		"coldConsign": "",
		"heatConsign": "",
		"auto": false,
		"temperature_unit": false,
		"config": {
			"id": "5b159daaf51445a30df8123c",
			"cold_values": null,
			"heat_values": null,
			"cold_angle": null,
			"heat_angle": null,
			"swing_horizontal": null,
			"swing_vertical": null,
			"antifreeze": "0",
			"vla": null,
			"zone_number": "3",
			"slave": null,
			"master": null,
			"basic_mode": null,
			"ambient_temp": null,
			"heat_type": null,
			"cold_type": null,
			"heat_type_config": null,
			"cold_type_config": null,
			"ventilation": null,
			"q_weight": null,
			"window": null,
			"presence": null,
			"spray_dew": null,
			"local_vent": null,
			"tact_fw": null,
			"firm_lm": null,
			"manufacturer": null,
			"led": null,
			"confort_cold_consign": null,
			"confort_heat_consign": null,
			"eco_cold_consign": null,
			"eco_heat_consign": null,
			"unocupied_cold_consign": null,
			"unocupied_heat_consign": null,
			"vacation_cold_consign": null,
			"vacation_heat_consign": null,
			"firm_ws": "3.10",
			"offset": null,
			"errors": "0",
			"zone_id": "5b139f1ef51445a30df80c6c",
			"automatic_weight": null,
			"autochange_differential": null,
			"offset_environment_cold": null,
			"offset_environment_heat": null
		}
	}, {
		"id": "5b139f1ef51445a30df80c6d",
		"system_id": "5b139f1ef51445a30df80c69",
		"device_id": "5a37f4167765621039320000",
		"modes": "1111111011",
		"warning": "0",
		"name": "Bureau",
		"system_number": "1",
		"zone_number": "4",
		"state": "0",
		"consign": "27.0",
		"temp": "26.9",
		"mode": "1",
		"velocity": null,
		"show_velocity": null,
		"sleep": "0",
		"lower_conf_limit": "18.0",
		"upper_conf_limit": "30.0",
		"master": null,
		"eco": "0",
		"prog_enabled": "0",
		"speed_prog_mode": null,
		"show_ventilation": "1",
		"updated_at": 1528610421,
		"setup_type": "0",
		"class": "Zone",
		"last_update": 1528610421,
		"next_schedule_number": "0",
		"led": null,
		"offset": null,
		"cold_offset": null,
		"heat_offset": null,
		"scene": null,
		"air_flow": null,
		"humidity": null,
		"coldConsign": "",
		"heatConsign": "",
		"auto": false,
		"temperature_unit": false,
		"config": null
	}, {
		"id": "5b139f1ef51445a30df80c6a",
		"system_id": "5b139f1ef51445a30df80c69",
		"device_id": "5a37f4167765621039320000",
		"modes": "1111111011",
		"warning": "0",
		"name": "Parents",
		"system_number": "1",
		"zone_number": "1",
		"state": "1",
		"consign": "26.0",
		"temp": "26.1",
		"mode": "1",
		"velocity": null,
		"show_velocity": null,
		"sleep": "0",
		"lower_conf_limit": "18.0",
		"upper_conf_limit": "30.0",
		"master": "1",
		"eco": "0",
		"prog_enabled": "0",
		"speed_prog_mode": "0",
		"show_ventilation": "1",
		"updated_at": 1528610421,
		"setup_type": "0",
		"class": "Zone",
		"last_update": 1528610421,
		"next_schedule_number": "0",
		"led": null,
		"offset": null,
		"cold_offset": null,
		"heat_offset": null,
		"scene": null,
		"air_flow": null,
		"humidity": null,
		"coldConsign": "",
		"heatConsign": "",
		"auto": false,
		"temperature_unit": false,
		"config": null
	}, {
		"id": "5b139f1ef51445a30df80c6b",
		"system_id": "5b139f1ef51445a30df80c69",
		"device_id": "5a37f4167765621039320000",
		"modes": "1111111011",
		"warning": "0",
		"name": "Sport",
		"system_number": "1",
		"zone_number": "2",
		"state": "0",
		"consign": "25.0",
		"temp": "26.4",
		"mode": "1",
		"velocity": null,
		"show_velocity": null,
		"sleep": "0",
		"lower_conf_limit": "18.0",
		"upper_conf_limit": "30.0",
		"master": null,
		"eco": "0",
		"prog_enabled": "1",
		"speed_prog_mode": null,
		"show_ventilation": null,
		"updated_at": 1528610421,
		"setup_type": "0",
		"class": "Zone",
		"last_update": 1528610421,
		"next_schedule_number": "0",
		"led": null,
		"offset": null,
		"cold_offset": null,
		"heat_offset": null,
		"scene": null,
		"air_flow": null,
		"humidity": null,
		"coldConsign": "",
		"heatConsign": "",
		"auto": false,
		"temperature_unit": false,
		"config": null
	}]
}

avec mon départ :

 

HC2 = Net.FHttp("airzonecloud.com");
response = HC2:GET("/zones/?format=json&system_id=*********&user_email=******&user_token=************")
response = json.decode(response)
fibaro:debug(' test : ' ..response.name)

avec le retour suivant : 

expected value but found t_end at character 1

 

une idée ?

merci :)

 

 

Modifié par Bloug
Posté(e)

cette entrée de la table n'existe pas

essaye avec

fibaro:debug(' test : ' ..response.zones.name)

 

Posté(e)

Marchera pas non plus, zone est une table, donc il faut donner l'indice :

fibaro:debug(' test : ' ..response.zones[0].name)

Après je ne sais pas ce que tu veux faire, mais il faudra surement écrire une boucle pour parcourir la table à la recherche de la zone désirée.

Posté(e) (modifié)

Désolé messieurs toujours la même erreur :( 

j'ai vérifie le Json sur https://jsonlint.com/ et il le déclare comme correct pourtant

 

C'est pour récupérer les infos des mes blueface airzone et voir à pouvoir envoyer une commande mais c'est mal Barrrrré :D

 

 

Capture.jpg

Modifié par Bloug
Posté(e)

en fait ce n'est pas le fibaro:debug(), mais c'est le json.decode() qui plante non ?

Mets des debugs entre chaque ligne pour identifier la ligne précise

Si c'est bien le json.decoide() qui plante, c'est galère, car je ne vois pas trop ce qu'on peut faire....

Posté(e)

Utiliser :

response, status, errorCode = HC2:GET("/zones/?format=json&system_id=*********&user_email=******&user_token=************")

et tester les valeurs status et errorcode pourrait sans doute aider à progresser...

Posté(e)

merci, voici le retour :

 

HC2 = Net.FHttp("airzonecloud.com");
response, status, errorCode = HC2:GET("/zones/?format=json&system_id=***&user_email=***&user_token=***")
fibaro:debug(' status : ' ..status)
fibaro:debug(' errorCde : ' ..errorCode)
fibaro:debug(' response : ' ..response)
[DEBUG] 06:48:14: status : 302
[DEBUG] 06:48:14: errorCde : 0
[DEBUG] 06:48:14: response :

 

y'a pas un probleme avec le HTTPS ? si je colle le lien en HTTP dans le navigateur il bascule en HTTPS

Posté(e)

302 c'est une redirection permanente, donc tu ne peux rien faire, le site impose le https.

 

Tu peux le faire dans une scène.

Posté(e)

La redirection 302 force les clients à passer en https.

Il est donc impossible de faire du http sur ce serveur.

 

Donc impossible de faire cela depuis un module virtuel avec net.fhttp().

 

La HC2 peut faire du https, mais uniquement dans une scène avec la fonction httpclient(). Voir exemples sur le forum.

 

Posté(e) (modifié)

ok, je regarde donc du coté du httpclient() :) 

merci à tous !

 

Ps c'est quand meme chaud chaud :(

 

local http = net.HTTPClient()
http:request('https://airzonecloud.com/zones/?format=json&system_id=***&user_email=***&user_token=***', {
                 options = { method = 'GET' },
                 success = function(list)
                             fibaro:debug(' Retour : '.. list.data)
                 end,
                 error = function(err)
                            fibaro:debug(err)
                 end
   })

[DEBUG] 07:28:30: Retour : {"zones":[{"id":"5b139f1ef51445a30df80c70","system_id":"5b139f1ef51445a30df80c6f","device_id":"5a37f4167765621039320000","modes":"1111111011","warning":"0","name":"Salon","system_number":"2","zone_number":"1","state":"0","consign":"26.0","temp":"26.3","mode":"1","velocity":null,"show_velocity":null,"sleep":"0","lower_conf_limit":"18.0","upper_conf_limit":"30.0","master":"1","eco":"0","prog_enabled":"1","speed_prog_mode":"0","show_ventilation":"1","updated_at":1528610437,"setup_type":"0","class":"Zone","last_update":1528610437,"next_schedule_number":"0","led":null,"offset":null,"cold_offset":null,"heat_offset":null,"scene":null,"air_flow":null,"humidity":null,"coldConsign":"","heatConsign":"","auto":false,"temperature_unit":false,"config":null}]}

Après j'ai un moyen de "piocher" dans le retour  ? :D  ?

Modifié par Bloug
Posté(e)

Bah tu sais ce qu'on dit sur les modules virtuels, ils sont censés disparaître depuis des lustres.... Et pourtant....

Posté(e)

ils vont peut-être faire le même coup que pour Siri ? Au passage d'un upgrade firmware, tous les VD vont disparaîtrent, et impossible de revenir en arrière !  Vive l'humour polonais :P

Posté(e)

C'était Lili ;)

 

Siri n'a pas encore disparu, même si ils sont à la bourre que Alexa et Assistant.

 

Mais tu as raison, il faut se méfier de la façon de faire des Polonais.

Posté(e)
Il y a 5 heures, Lazer a dit :

Oui, pareil, tu enchaînes sur le json.decode()

:s Désolé 

genre c'est le liste " list.data" ou le "list" de la fonction ?  

 

 

local http = net.HTTPClient()
http:request('https://airzonecloud.com/zones/?format=json&system_id=***&user_email=***&user_token=***', {
                 options = { method = 'GET' },
                 success = function(list)
                             fibaro:debug(' Retour : '.. list.data)
                 end,
                 error = function(err)
                            fibaro:debug(err)
                 end
   })


nameZ1 = json.decode(list.data)
fibaro:debug(' Name Z1 : ' ..nameZ1.zones[0].name)

 

Posté(e)

Attention, request() est une fonction asynchrone, donc la suite de ton code doit se trouver dans ta fonction success().

C'est un mode de fonctionne assez particulier, qui a déjà été abordé sur le forum.

 

Donc ton code devrait ressembler à cela (pas testé) :

local http = net.HTTPClient()
http:request('https://airzonecloud.com/zones/?format=json&system_id=***&user_email=***&user_token=***', {
	options = {
		method = 'GET'
	},
	success = function(response)
		if response.status == 200 then
			if response.data and response.data ~= "" then
				fibaro:debug('Retour : '.. response.data)
				local jsonTable = json.decode(response.data)
				local nameZ1 = jsonTable.zones[0].name
				fibaro:debug('Name Z1 : ' .. (nameZ1 or "nil"))
				-- Ici la suite du code...
			else
				fibaro:debug("Error : empty response data")
			end
		else
			fibaro:debug("Error : status=" .. tostring(response.status))
		end
	end,
	error = function(err)
		fibaro:debug("Error : " .. err)
	end
})

 

  • Like 1
Posté(e)

un Grand merci car là c'est chaud +++ !

 

j'ai toujours une erreur sur la ligne : 

local nameZ1 = jsonTable.zones[0].name

avec l'erreur :

[DEBUG] 20:04:29: [1;31m2018-06-12 20:04:29.062230 [ fatal] LUA error: /opt/fibaro/scenes/47.lua:30: attempt to index field '?' (a nil value)

 

Posté(e) (modifié)

me revoila :D

 

Bon j'avance bien et j'arrive a récupérer toutes les infos de mode etat consigne températures etc ...

 

là je cherche a voir si j'arrive à modifier une consigne. 

La methode est POST mais ne faut il pas utiliser PUT sur la  HC2 ?

dois-je utiliser la même forme que précédemment  :

local http = net.HTTPClient()
http:request('https://airzonecloud.com/events/' .. myConsigne , {
                 options = { method = 'PUT' },
				 data = {
    "event": {
    "cgi": "modzona",
    "system_number": "1",
    "zone_number": "4",
    "option": "state",
    "value": 0,
    "device_id": "5a37f4167765621039320000"
  }
}

 

Je suppose que le : local http = net.HTTPClient()  peut il être supprimé également ? 

c'est la position / ou l'insertion du data = {  que j'ai calqué sur des ex du forum qui me chagrine.

 

 

merci :)

 

 

Modifié par Bloug
Posté(e)

bon nouvelle recette :D j'ai pas d'erreur mais j'ai pas de retour également :

function postMethod(data)

modeOn = ' "event": { "cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": 0, "device_id": "5a37f4167765621039320000" } '

local http = net.HTTPClient()
http:request('https://airzonecloud.com/events/?user_email=****&user_token=****' , {
options = {
method = 'POST',
headers = {},
data = modeOn,
timeout = 1000
},
success = function(status)
fibaro:debug(status)
local result = status.data;
if result.status ~= 1 then
print("failed");
print(status.data);
end
end,
error = function(err)
print('[ERROR] ' .. err)
end
})
end

meme si je vire le timeout j'ai aucun retour

 

 

dans mon sniffage j'ai trouver en POST :

 

POST /events/?user_email=****&user_token=*****8 HTTP/1.1 
Host: www.airzonecloud.com 
Connection: keep-alive 
Content-Length: 131 
Accept: application/json, text/plain, */* 
Origin: file:// 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Linux; Android 8.0.0; SM-G950F Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 Mobile Safari/537.36 
Content-Type: application/json;charset=UTF-8 
Accept-Encoding: gzip, deflate 
Accept-Language: fr-FR,en-US;q=0.9

et  json

 

{
  "event": {
    "cgi": "modzona",
    "system_number": "1",
    "zone_number": "4",
    "option": "state",
    "value": 0,
    "device_id": "5a37f4167765621039320000"
  }
}

 

où l'etat de mon Module Bureau passe de On à OFF grace à " State "

 

×
×
  • Créer...