Bloug Posté(e) le 10 juin 2018 Signaler Posté(e) le 10 juin 2018 (modifié) me revoila avec une question C** 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é le 10 juin 2018 par Bloug
jojo Posté(e) le 10 juin 2018 Signaler Posté(e) le 10 juin 2018 cette entrée de la table n'existe pas essaye avec fibaro:debug(' test : ' ..response.zones.name)
Lazer Posté(e) le 10 juin 2018 Signaler Posté(e) le 10 juin 2018 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.
Bloug Posté(e) le 10 juin 2018 Auteur Signaler Posté(e) le 10 juin 2018 (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é Modifié le 10 juin 2018 par Bloug
Lazer Posté(e) le 10 juin 2018 Signaler Posté(e) le 10 juin 2018 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....
Bloug Posté(e) le 10 juin 2018 Auteur Signaler Posté(e) le 10 juin 2018 oui c'est bien le Json.decode :s
Barelle Posté(e) le 10 juin 2018 Signaler Posté(e) le 10 juin 2018 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...
Bloug Posté(e) le 11 juin 2018 Auteur Signaler Posté(e) le 11 juin 2018 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
Lazer Posté(e) le 11 juin 2018 Signaler Posté(e) le 11 juin 2018 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.
TonyC Posté(e) le 11 juin 2018 Signaler Posté(e) le 11 juin 2018 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.
Bloug Posté(e) le 11 juin 2018 Auteur Signaler Posté(e) le 11 juin 2018 Cool merci @TonyC ! à voir le cousin italien @Lazer c'est le HTTPS ou la redirection ? c'est à dire de passer par une scène ?
Lazer Posté(e) le 11 juin 2018 Signaler Posté(e) le 11 juin 2018 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.
Bloug Posté(e) le 12 juin 2018 Auteur Signaler Posté(e) le 12 juin 2018 (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 ? ? Modifié le 12 juin 2018 par Bloug
Lazer Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 Oui, pareil, tu enchaînes sur le json.decode()
BenjyNet Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 Va quand même falloir que Fibaro s'y mette avec le https... tous les sites vont y passer ! 1
Lazer Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 Bah tu sais ce qu'on dit sur les modules virtuels, ils sont censés disparaître depuis des lustres.... Et pourtant....
jojo Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 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
Lazer Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 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.
Bloug Posté(e) le 12 juin 2018 Auteur Signaler Posté(e) le 12 juin 2018 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)
Lazer Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 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 }) 1
Bloug Posté(e) le 12 juin 2018 Auteur Signaler Posté(e) le 12 juin 2018 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)
Lazer Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 Essaye plutôt avec 1, car les indices 0 n'existent pas dans les tableaux en LUA. 1
Bloug Posté(e) le 15 juin 2018 Auteur Signaler Posté(e) le 15 juin 2018 (modifié) me revoila 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é le 15 juin 2018 par Bloug
Bloug Posté(e) le 15 juin 2018 Auteur Signaler Posté(e) le 15 juin 2018 bon nouvelle recette 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 "
Messages recommandés