Aller au contenu

Recommended Posts

 

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

Partager ce message


Lien à poster
Partager sur d’autres sites

cette entrée de la table n'existe pas

essaye avec

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

hello world ! @Bloug j'ai l'impression qu'il y en a un autre sur le fofo officiel qui cherche à faire la même chose que toi:

https://forum.fibaro.com/topic/30479-lua-for-airzone-cloud/#comment-151372

Le thread vient de commencer, peut-être quelqu'un apportera t'il une soluce alors je t'ai mis le post zocazou.

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool merci @TonyC ! à voir le cousin italien :D

 

@Lazer  c'est le  HTTPS  ou la redirection ? c'est à dire de passer par une scène ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Va quand même falloir que Fibaro s'y mette avec le https... tous les sites vont y passer !

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites
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)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Essaye plutôt avec 1, car les indices 0 n'existent pas dans les tableaux en LUA.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 "

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×