Lazer Posté(e) le 15 juin 2018 Signaler Posté(e) le 15 juin 2018 (modifié) Ton "options" est mal formaté, c'est plutôt un truc dans ce genre là : local myJson = { "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/' .. myConsigne, { options = { method = 'PUT', data = json.encode(myJson) }, -- la suite ... } Modifié le 15 juin 2018 par Lazer
Bloug Posté(e) le 15 juin 2018 Auteur Signaler Posté(e) le 15 juin 2018 Merci ! j'ai posé la variable myJson sur une seule ligne car sinon j'ai toujours des erreur de { local myJson = '{ "event": { "cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": 0, "device_id": "5a37f4167765621039320000" } }' local myJson = local http = net.HTTPClient() http:request('www.airzonecloud.com/events/?user_email=****&user_token=****' , { options = { method = 'PUT', data = json.encode(myJson) }, fibaro:debug('Retour : '.. myJson) }) [DEBUG] 22:54:20: [1;31m2018-06-15 22:54:20.597466 [ fatal] Unknown exception: /opt/fibaro/scenes/47.lua:15: '}' expected (to close '{' at line 14) near ':' et si je pose en ligne : local myJson = '{ "event": {"cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": 0, "device_id": "5a37f4167765621039320000" }}' local http = net.HTTPClient() http:request('www.airzonecloud.com/events/?user_email=****&user_token=****' , { options = { method = 'PUT', data = json.encode(myJson) }, fibaro:debug('Retour : '.. myJson) }) [DEBUG] 22:53:24: Retour : { "event": {"cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": "0", "device_id": "5a37f4167765621039320000" }} [DEBUG] 22:53:24: �[1;31m2018-06-15 22:52:24.972194 [ fatal] Unknown exception: std::runtime_error: 'Invalid argument'
Bloug Posté(e) le 20 juin 2018 Auteur Signaler Posté(e) le 20 juin 2018 (modifié) @Lazer toc toc toc bon je me doute qu'avec Alexa mon sujet n’intéresse pas grand monde ( visiteur 1 ( moi)) lol mais puis je avoir ton analyse sur le message d'erreur? et vers quel coté chercher ? Est-ce une erreur du coté de la requette qui semble fausse du myjson ou de la 'method' ? merci Modifié le 20 juin 2018 par Bloug
Lazer Posté(e) le 20 juin 2018 Signaler Posté(e) le 20 juin 2018 euh, je crois que c'est juste ton code LUA qui est mal formaté, avec des virgules ou des accolades placées n'importe où. Je t'ai donné un exemple de code, mais désolé je n'ai pas le temps de tester du LUA, donc c'est purement théorique.... Sinon aide toi des nombreux exemples sur le forum. Par exemple le dernier code que j'ai partagé utilisant httpclient() est dans la scène sur le tuto Yamaha MusicCast. Mais ce n'est pas le seul.
Bloug Posté(e) le 20 juin 2018 Auteur Signaler Posté(e) le 20 juin 2018 il y a 50 minutes, Lazer a dit : avec des virgules ou des accolades placées n'importe où. loool impec je regarde cela merci.
Lazer Posté(e) le 20 juin 2018 Signaler Posté(e) le 20 juin 2018 désolé c'était mal formulé Mais c'est en substance ce que te dis le message d'erreur.
Bloug Posté(e) le 20 juin 2018 Auteur Signaler Posté(e) le 20 juin 2018 y'a pas de pb lol C'est la fameuse erreur entre la chaise et le clavier
Lazer Posté(e) le 21 juin 2018 Signaler Posté(e) le 21 juin 2018 Bloug, désolé, toujours pas de code LUA, mais j'ai rédigé un mini tuto qui, je l'espère, t'aidera un peu à y voir plus clair :
Bloug Posté(e) le 21 juin 2018 Auteur Signaler Posté(e) le 21 juin 2018 Oh cool ! Merci beaucoup je vais prendre une aspirine avant
Bloug Posté(e) le 24 juin 2018 Auteur Signaler Posté(e) le 24 juin 2018 Voici mon pb : Je souhaite utiliser des fonctions de mon system AirZone via la HC2 pour combiner des actions ( fenetre ouverte ==> push ==> extinction de la zone ou genre CO2 > xx =>> mode ventilation etc... ) L'API AirZone n'est pas publique mais dans le dernier Airzone m'informent qu'ils y bossent .... ( bientot 1ans ... ) Du coup je me suis amusé avec le sniffer Android : Packet Capture : où j'ai trouver des infos comme les requêtes GET sur mon Groupe Nuit composée de 4 Zones : https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c69&user_email=*****&user_token=***** ou mon Groupe Jour composée d'une seule Zone : https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c6f&user_email=*****&user_token=***** Voici voici un extrait du retour de la requête ( j'ai coupé pour pas la faire trop longue ) Zone NUIT : { "zones": [ { "id": "5b139f1ef51445a30df80c6c", "system_id": "5b139f1ef51445a30df80c69", "device_id": "5a37f4167765621039320000", "modes": "1111111011", "warning": "0", "name": "Alyssa", "system_number": "1", "zone_number": "3", "state": "0", "consign": "25.0", "temp": "25.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": "0", "speed_prog_mode": null, "show_ventilation": "1", "updated_at": 1529765477, "setup_type": "0", "class": "Zone", "last_update": 1529765477, "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", ....................................................... } }, { "id": "5b139f1ef51445a30df80c6a", "system_id": "5b139f1ef51445a30df80c69", "device_id": "5a37f4167765621039320000", "modes": "1111111011", "warning": "0", "name": "Parents", ....................................................... }, { "id": "5b139f1ef51445a30df80c6b", "system_id": "5b139f1ef51445a30df80c69", "device_id": "5a37f4167765621039320000", "modes": "1111111011", "warning": "0", "name": "Sport", } ] } j'ai donc accès avec le GET aux info importante grace au code : local http = net.HTTPClient() http:request('https://airzonecloud.com/zones/' .. myAuthNuit, { options = { method = 'GET' }, success = function(response) if response.status == 200 then if response.data and response.data ~= "" then local jsonTable = json.decode(response.data) -- Alyssa local nameAlyssa = jsonTable.zones[1].name local consAlyssa = jsonTable.zones[1].consign local tempAlyssa = jsonTable.zones[1].temp local modeAlyssa = jsonTable.zones[1].mode local etatAlyssa = jsonTable.zones[1].state local lupdAlyssa = jsonTable.zones[1].last_update -- Etat de la Zone Alyssa if etatAlyssa == "0" then etatAlyssa = " arret " elseif etatAlyssa == "1" then etatAlyssa = " marche " end -- Mode de travail Alyssa if modeAlyssa == "1" then modeAlyssa = " Refroidissement " elseif modeAlyssa == "3" then modeAlyssa = " Chauffage " elseif modeAlyssa == "5" then modeAlyssa = " Deshumidification " elseif modeAlyssa == "7" then modeAlyssa = " Ventilation " end -- Débug Alyssa fibaro:debug( 'Zone Nuit : ' .. nameAlyssa ) fibaro:debug( 'Consigne à :' .. consAlyssa .. '°C -- Température Actuelle : ' .. tempAlyssa .. '°C ' ) fibaro:debug( 'Mode de Fonctionnement :' .. modeAlyssa .. ' -- Etat Actuel : en' .. etatAlyssa ) fibaro:debug( '*************' ) --- Suite ci dessous --- 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 }) Enfin analyser les modifications avec packet caputure sur la mise en marche et arrêt d'une zone j'ai le POST suivant : POST /events/?user_email=********&user_token=******** 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 { "event": { "cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": 0, "device_id": "5a37f4167765621039320000" } } ou j'utilise donc ta scene : local myAuth = ( '?user_email=' .. user_email .. '&user_token=' .. user_token ) -- ====================== Z O N N E N U I T ===================== -- -- Appel HTTPS local http = net.HTTPClient() http:request('https://airzonecloud.com/events/' .. myAuth, { 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) -- Parcours de la table JSON local k, v for k, v in pairs(jsonTable) do fibaro:debug("key = " .. k .. " - type(v) = " .. type(v)) end -- Ici la suite du code, exécuté en asynchrone, donc après la fin de l'exécution du code appelant http:request() -- ... else fibaro:debug("Error : empty response data") end else fibaro:debug("Erreur : status=" .. tostring(response.status)) end end, error = function(err) fibaro:debug("Erreur : " .. err) end, options = { method = 'POST', data = '{"event":{"cgi":"modzona","system_number":"1","zone_number":"4","option":"state","value":1,"device_id":"5a37f4167765621039320000"}}' } }) -- Ici la suite du code, exécuté en synchrone, donc avant l'exécution du contenu de la fonction success() -- ... mais j'ai une Erreur : 401 unauthorized [DEBUG] 09:29:05: Erreur : status=401 déjà pour le data je suis obligé de le réduire en une ligne et de le placer entre des ' ' ( Ôhhh passage, suis passé par le site : https://codebeautify.org/jsonviewer ) data = '{"event":{"cgi":"modzona","system_number":"1","zone_number":"4","option":"state","value":1,"device_id":"5a37f4167765621039320000"}}' sinon j'ai toujours des erreurs, même si je le pose sous la forme : data = { "event": { "cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": 1, "device_id": "5a37f4167765621039320000" } } Donc pour GET je passe par ici : http:request('https://airzonecloud.com/zones/' .. myAuthNuit, { et pour POST par là : http:request('https://airzonecloud.com/events/' .. myAuth, { mais rien dans le navigateur si je colle la ligne : https://airzonecloud/events/?user_email=******&user_token=***** d'où ma question de hier de faire un POST directement après le GET en utilisant le : jsonTable.zones[1].state = "1" sur la requette : https://airzonecloud.com/zones/ et non /events/... j'espère avoir été assez clair :S lol merci.
Lazer Posté(e) le 24 juin 2018 Signaler Posté(e) le 24 juin 2018 Déjà tu as le début de réponse de ton problème dans le message : 401 Utilisateur non authentifié Donc un problème avec ton login/mot de passe. Vu que c'est une adresse email, je te conseille de faire un urlencode() de ton adresse avant de la donner en argument. Tu trouveras le code de la fonction urlencode() sur le forum, par exemple sur le topic de SMS Gateway. Je ne sais pas si ça suffira, mais c'est un début. Une fois que tu auras résolu ton problème d'authentification, il faut passer les data proprement. J'ai bien précisé sur l'autre topic qu'il faut que ça soit une chaine de caractères. Donc ton premier code avec les guillemets devrait être correct. Le second où tu passes un tableau ne peut pas fonctionner, sauf si tu fais un json.encode() de ce tableau. Ce qui devrait te donner la même chaine de caractère qu'au dessus.... à vérifier avec des affichages fibaro:debug()
Bloug Posté(e) le 25 juin 2018 Auteur Signaler Posté(e) le 25 juin 2018 (modifié) merci beaucoup @Lazer pour ton temps ! j'a donc trouvé la fonction urlencode() que j'ai adapté pour l'authentification t local myAuth = ( '?user_email=' .. urlencode(tostring(user_email)) .. '&user_token=' .. user_token ) function urlencode(str) if (str) then str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") end return str end fibaro:debug("urlencode : " .. urlencode(tostring(user_email))) [DEBUG] 06:47:41: Erreur : status=401 <---- mais toujours le meme pb . L'erreur 401 ( unauthorized ) Modifié le 27 juin 2018 par Bloug
Bloug Posté(e) le 25 juin 2018 Auteur Signaler Posté(e) le 25 juin 2018 peut etre une autre piste , en trifouillant le sniffer j'ai trouvé une commande PUT qui change également l’état : PUT /zones/5b139f1ef51445a30df80c6c?user_email=*****&user_token=***** { "zone": { "state": "1" } } voici mon code : --================= IDENTIFICATION =========================================== local serveur = 'airzonecloud.com' local user_email = '*******' local user_token = '*******' local regist_Id = '*******' --============================================================================ local device_ID = '5a37f4167765621039320000' ----- ID du System ------ local espace_Jour = '5b139f1ef51445a30df80c6f' -- Jour local zone_Salon = '5b139f1ef51445a30df80c70' --------------- Salon 0 local espace_Nuit = '5b139f1ef51445a30df80c69' -- Nuit local zone_Parents = '5b139f1ef51445a30df80c6a' --------------- Parents 0 local zone_Sport = '5b139f1ef51445a30df80c6b' --------------- Sport 1 local zone_Alyssa = '5b139f1ef51445a30df80c6c' --------------- Alyssa 2 local zone_Bureau = '5b139f1ef51445a30df80c6d' --------------- Bureau 3 --============================================================================ local myAuthJour = ( '/?format=json&system_id=' .. espace_Jour .. '&user_email=' .. user_email .. '&user_token=' .. user_token ) local myAuthNuit = ( '/?format=json&system_id=' .. espace_Nuit .. '&user_email=' .. user_email .. '&user_token=' .. user_token ) local myAuth = ( '?user_email=' .. urlencode(tostring(user_email)) .. '&user_token=' .. user_token ) function urlencode(str) if (str) then str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") end return str end --fibaro:debug("urlencode : " .. urlencode(tostring(user_email))) -- Appel HTTPS local http = net.HTTPClient() http:request('https://airzonecloud.com/zones/' .. zone_Bureau .. myAuth, { 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) -- Parcours de la table JSON local k, v for k, v in pairs(jsonTable) do fibaro:debug("key = " .. k .. " - type(v) = " .. type(v)) end -- Ici la suite du code, exécuté en asynchrone, donc après la fin de l'exécution du code appelant http:request() -- ... else fibaro:debug("Error : empty response data") end else fibaro:debug("Erreur : status=" .. tostring(response.status)) end end, error = function(err) fibaro:debug("Erreur : " .. err) end, options = { method = 'PUT', data = '{"zone":{"state":"1"}}' } }) -- Ici la suite du code, exécuté en synchrone, donc avant l'exécution du contenu de la fonction success() -- ... malheureusement j'ai également une erreur mais..... différente : [DEBUG] 07:21:31: Erreur : Bad file descriptor peut être qu'ici le pb peut être contourné
Lazer Posté(e) le 26 juin 2018 Signaler Posté(e) le 26 juin 2018 Pour le urlencode(), il faut encoder l'ensemble "email:password" Pour le second exemple, le fonction échoue car tu concatènes la variable myAuth à l'url. Mais cette variable myAuth n'est pas une chaine de caractères, mais un tableau... il faut donc que tu la formates correctement à la main ou avec json.encode
Bloug Posté(e) le 27 juin 2018 Auteur Signaler Posté(e) le 27 juin 2018 (modifié) pour le urlencode() tu parle de "email:password" dans mon cas j'ai une "email" &user_token= "Token" c'est l'ensemble de la ligne que je dois encoder : email&user_token=Token car en encodant chacun de son coté , meme problème. , le token est genre : 3ICzvRojbmRZ-BjuNEOqy0vUQSudNYOMedHwTFt8 Pour la seconde : j'ai modifié avec : https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c6c?user_email=*****&user_token=**** qui me donne du 404 - mais dans le navigateur j'ai : {"error":"Il est nécessaire que vous soyez inscrit afin de pouvoir continuer."} Modifié le 27 juin 2018 par Bloug
Lazer Posté(e) le 27 juin 2018 Signaler Posté(e) le 27 juin 2018 Ah oui tu as raison, je n'avais pas fait attention à l'URL, dans ton cas il n'y a que le email à urlencoder. Je pense que le token n'a pas besoin de l'être (mais tu peux essayer et comparer, je pense que ça sera identique) Par contre là je ne sais pas trop quoi te conseiller de plus.... essayer de sniffer le flux qu'envoie la HC2 pour le comparer avec ce que tu sniffe depuis ton application, pour voire quelles seraient les différences.
Bloug Posté(e) le 27 juin 2018 Auteur Signaler Posté(e) le 27 juin 2018 (modifié) J'avance sur la 2eme solution ! avec deja un piège de la team AirZone ! suite à un coup de tel hier à la hotline le tech c'est connecté dessus et du coup le Token à changé .... donc j'arrive à règler le pb de l'dentification : {"error":"Il est nécessaire que vous soyez inscrit afin de pouvoir continuer."} ensuite mes deux coquilles : https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c6c?user_email=*****&user_token=**** déjà j'ai deux erreurs dans l'url : le ? je pense qu'il faut le remplacer par une & , et le system_id lui est pour le Groupe Nuit et non la "Zone" donc à remplacer par l’étiquette : id https://airzonecloud.com/zones/?format=json&device_id=5b139f1ef51445a30df80c6d&user_email=*****&user_token=***** quand je colle cela dans mon navigateur celui ci m'affiche : {"zones":[]} je pense donc arriver pas trop loin du bon endroit vu que la commande du PUT est : data = '{"zone":{"state":"1"}}' reste à comprendre pourquoi du coté de la HC2 j'ai une erreur 404 Edit : en fait non même avec : https://airzonecloud.com/zones/?format=json&user_email=*****&user_token=***** j'ai le meme retour .... Modifié le 27 juin 2018 par Bloug
Bloug Posté(e) le 27 juin 2018 Auteur Signaler Posté(e) le 27 juin 2018 @Lazer juste pour être sur .... si mon url : https://airzonecloud.com/zones/?format=json&device_id=5a37f4167765621039320000&user_email=*****&user_token=***** me retourne un json tout plein d'info quand je la pose dans un navigateur.... cette meme URL placé dans mon http:request n'est pas censé me retourner une erreur 404 ( not Found ) non ?
Lazer Posté(e) le 27 juin 2018 Signaler Posté(e) le 27 juin 2018 Oui je confirme, deux "?" dans l'URL ce n'est pas possible, il faut remplacer le second par un "&" Effectivement il est étrange que via la HC2 tu obtiennes un code 404 Not Found. Il faut bien penser à urlencoder proprement le user_email
Bloug Posté(e) le 28 juin 2018 Auteur Signaler Posté(e) le 28 juin 2018 je viens de de tout RE-vérifier, j'encode le mail , j'encode le token , je débug l'ensemble et le résultat copier dans le navigateur marche mais avec la HC2 .... 404 [DEBUG] 12:07:58: mail : *****%40*****%2E**[DEBUG] 12:07:58: token : ******%5F******[DEBUG] 12:07:58: auth : ?format=json&device_id=5a37f4167765621039320000&user_email=*****%40*****%2E**&user_token=******%5F***** y'a surement une sécurité c'est pas possible ..... des redirections ou autre...
Lazer Posté(e) le 28 juin 2018 Signaler Posté(e) le 28 juin 2018 Plutôt que de debugguer chaque variable individuellement, tu devrais concaténer tout cela dans une variable url puis tu affiches le contenu de url et enfin tu passes url tel tel en argument de la fonction http() Parce que si ça se trouve, ça coince au moment où tu concatène toutes tes variables au moment de faire l'appel http Et si il y avait une redirection, ce n'est pas un 404, mais un code 302 que tu aurais.
Bloug Posté(e) le 28 juin 2018 Auteur Signaler Posté(e) le 28 juin 2018 local fullurl = ( serveur .. myAuth_DID ) --============================================================================ -- Fonction Urlencode() function urlencode(str) if (str) then str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") end return str end fibaro:debug('<font color="green"> fullurl : </font>' .. fullurl ) -- Appel HTTPS local http = net.HTTPClient() http:request(fullurl, { success = function(response) if response.status == 200 then le débug de la variable fullurl copié dans le navigateur fonctionne parfaitement c'est pas demain que je hack qq moi ..... 1
Lazer Posté(e) le 28 juin 2018 Signaler Posté(e) le 28 juin 2018 bon bah décidément là je ne sais pas....
Bloug Posté(e) le 28 juin 2018 Auteur Signaler Posté(e) le 28 juin 2018 je vais continuer à chercher ! doucemanette Encore merci !
Bloug Posté(e) le 1 juillet 2018 Auteur Signaler Posté(e) le 1 juillet 2018 Bon j'avance ! et bien même Je me suis concentré sur le problème de Token qui change souvent, il faut s'identifier avec un POST qui retourne alors le bon Token et j'ai trouvé comment faire marcher mon POST grace à https://apitester.com/ en fait j'ai besoin du/des bon Headers sinon la requette merdouille et de bidouillé l'encodage du data local http = net.HTTPClient() http:request('https://www.airzonecloud.com/users/sign_in/', { success = function(response) if response.status == 201 then if response.data and response.data ~= "" then --fibaro:debug('Retour : '.. response.data) local jsonTable = json.decode(response.data) local k, v for k, v in pairs(jsonTable) do end fibaro:setGlobal("airzone_Token", jsonTable.user.authentication_token) -- Token envoyé dans une variable else fibaro:debug("Error : empty response data") end else fibaro:debug("Erreur : status=" .. tostring(response.status)) end end, error = function(err) fibaro:debug("Erreur : " .. err) end, options = { method = 'POST', headers = {["Content-Type"] = "application/json;charset=UTF-8",}, data = "{\"email\":\"******\",\"password\":\"********\"}" } }) Enfin j'arrive egalement a reproduire une commande ON ou OFF d'une Zone MAIS je suis obliger de m'identifier avant sur api test.com j'y arrive seulement grace à la fonction STEP en deux étapes : STEP1 : Identification via un POST STEP2 : Demande de modif de zone via un Post ( avec d'autre arguments en header ) le second POST est vers : https://www.airzonecloud.com/events/?user_email=******&user_token=****** avec le data : "{\"event\":{\"cgi\":\"modzona\",\"system_number\":\"1\",\"zone_number\":\"4\",\"option\":\"state\",\"value\":0,\"device_id\":\"5a37f4167765621039320000\"}}" Donc ma question Comment faire cela ? faut il reproduire l'ensemble du code en déut de mon post : comme dans ton tuto sous : -- Ici la suite du code, exécuté en synchrone, donc avant l'exécution du contenu de la fonction success() ou sous : -- Ici la suite du code, exécuté en asynchrone, donc après la fin de l'exécution du code appelant http:request() ou 3eme option un truc de fous d'informaticien ? MErci
Messages recommandés