Bloug Posté(e) le 16 octobre 2020 Signaler Posté(e) le 16 octobre 2020 Je souhaite lancer la commande BOOST de mon sèche serviette. j'y arrive Via API TESTER ....mais une fois en lua j'ai une Erreur 400 ... Voila la fonction : function boost() print("> Start Boost...") local JSESSIONVG = fibaro:getGlobalValue("JSESSIONID") local httpClient = net.HTTPClient() httpClient:request( url .. url_send, { success = function(response) if (tonumber(response.status) == 200 or tonumber(response.status) == 201 or tonumber(response.status) == 202) then print(" > Commande Boost OK") else print(" > Connexion KO !") fibaro:debug("Error : " .. response.status) print("Error : " .. response.data) end end, error = function(err) print(" > error = " .. err) end, options = { method = "POST", headers = { ["content-type"] = "application/json", ["cache-control"] = "no-cache", ["Cookie"] = JSESSIONVG }, data = body2 } } ) end et donc dans ma variable body2 qui je pense foire..... : local body2 = '{"actions":[{"deviceURL": "io://0810-4343-0200/13610533#1" ,"commands": [{ "name": "setTowelDryerTemporaryState", "parameters": ["boost"]}]}]}},{"actions":[{"deviceURL": "io://0810-4343-0200/13610533#1" ,"commands": [{ "name": "setTowelDryerBoostModeDuration", "parameters": [10]}]}]}}' dans Api Tester dans la case POST DATA j'ai : {"actions":[{"deviceURL": "io://0810-4343-0200/13610533#1" ,"commands": [{ "name": "setTowelDryerTemporaryState", "parameters": ["boost"]}]}]}},{"actions":[{"deviceURL": "io://0810-4343-0200/13610533#1" ,"commands": [{ "name": "setTowelDryerBoostModeDuration", "parameters": [10]}]}]}} merci
Lazer Posté(e) le 16 octobre 2020 Signaler Posté(e) le 16 octobre 2020 Le JSON de ta variable body2 est mal formé (Notepad++ refuse de le décoder... donc ton sèche-serviette aussi) Je n'ai pas cherché plus loin, je te laisse décomposer les accolades et parenthèses, tu vas trouver facilement je pense.
Bloug Posté(e) le 17 octobre 2020 Auteur Signaler Posté(e) le 17 octobre 2020 j'ai en premier simplifié pour n'envoyer qu'une seule commande, et enlevé les parenthèses et accolades en trop (je pense). J'ai testé le json sur jsonformatter.curiousconcept qui me le donne comme correct : {"actions":{"deviceURL": "io://0810-4343-0200/13610533#1" ,"commands":{ "name": "setTowelDryerTemporaryState", "parameters":"boost"}}} mais j'ai toujours l'erreur 400 dans la hc2 : body2 = '{"actions":{"deviceURL": "io://0810-4343-0200/13610533#1" ,"commands":{ "name": "setTowelDryerTemporaryState", "parameters":"boost"}}}' Dans la variable body2 doit il y avoir un texte en json ou une table lua ? body2 = { actions = { deviceURL = "io://0810-4343-0200/13610533#1", commands = { name = "setTowelDryerTemporaryState", parameters = "boost" } } } car après avoir testé j'ai l'erreur : [ fatal] LUA error: std::exception: 'unable to make cast'
Lazer Posté(e) le 17 octobre 2020 Signaler Posté(e) le 17 octobre 2020 Si tu regardes sur mon tuto : => C'est bien une string qu'il faut envoyer dans la variable data de la requête http Le JSON encodé dans ta variable body2 semble maintenant conforme (en tout cas Notepadd++ la décode proprement), mais peut être que ton sèche serviette n'aime pas les espaces dedans (le code http 400 c'est "bad request", donc tu lui envoies une requête qu'il n'aime pas) Si tu veux être certain d'avoir un JSON correctement formaté, le mieux est encore... de ne pas le faire à la main ! Donc tu prend ta variable de type table, et tu l'encode avec json.encode avant de la mettre dans data Un truc du style : local body2 = { actions = { deviceURL = "io://0810-4343-0200/13610533#1", commands = { name = "setTowelDryerTemporaryState", parameters = "boost" } } } ... data = json.encode(body2)
Bloug Posté(e) le 19 octobre 2020 Auteur Signaler Posté(e) le 19 octobre 2020 Problème réglé, Erreur avec un caractère dans l'url. Merci .
Messages recommandés