Inkew Posté(e) le 16 décembre 2020 Signaler Posté(e) le 16 décembre 2020 Bonjour, Nouveau sur la HC3, je souhaite migrer tout doucement ce que j'avais sur l'eedomus sur la HC3, avant d'aller plus loin. Je m'attaque aux éclairage Hue, je sais qu'il existe une QA pour la HC3, mais lorsque je crée une scène, les lumières s'allument les unes après les autres! Sur l'eedomus, je faisais appel aux scènes créées sur l'app Hue au travers ce genre de requêtes. Est-ce que quelqu'un pourrait m'aider à convertir ça pour la HC3 :
Inkew Posté(e) le 16 décembre 2020 Auteur Signaler Posté(e) le 16 décembre 2020 Merci, Le lien que tu me proposes permet d'utiliser le push (ici un IPX) pour envoyer une valeur vers une QA, j'ai testé chez moi et cela fonctionne (grâce à toi d'ailleurs ;-) même si je n'arrive toujours pas à faire l'inverse!) Ce que je souhaite ici, c'est de faire une requête http vers le pont HUE pour qu'il m'active une scène prédéfinie dans ce pont, mais également connaître l'état de certaines lampes :
jjacques68 Posté(e) le 16 décembre 2020 Signaler Posté(e) le 16 décembre 2020 hmm j'ai pas de HUE, je peux pas t'aider sur ce cas... Mais pour envoyer des requête http depuis un QA : https://manuals.fibaro.com/home-center-3-quick-apps/ Tu trouveras ton bonheur ici, mais faut fouiller...
Inkew Posté(e) le 17 décembre 2020 Auteur Signaler Posté(e) le 17 décembre 2020 J'ai créé un QA Binary Switch (je ne sais pas comment lancer ce code sinon!),et mis ce code : function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) -- An example of a GET inquiry -- self.http must have been previously created by net.HTTPClient local address = "http://192.168.0.11/api/eedomushue/groups/2" self.http:request(address, { options={ headers = { Accept = "application/json" }, checkCertificate = false, method = 'GET' }, success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) if data.contents and data.contents.quotes and data.contents.quotes[1] then local quote = data.contents.quotes[1].quote self:debug(quote) self:updateView("label", "text", quote) end end, error = function(error) self:debug('error: ' .. json.encode(error)) end }) end Dans mon navigateur, http://192.168.0.11/api/eedomushue/groups/2 me retourne ça : {"name":"Salle de bain","lights":["27","28","29","30"],"sensors":[],"type":"Room","state":{"all_on":false,"any_on":false},"recycle":fa ... Comment je peux m'y prendre pour aller chercher la valeur de state/any_on, et m'en servir pour changer d'état (0/1) mon QA par exemple? Merci!!
jjacques68 Posté(e) le 17 décembre 2020 Signaler Posté(e) le 17 décembre 2020 au hasard, si tu fais un : self:debug(response.data.state.any_on) dans le success de ta requete ça donne quoi ? en fait il faudrait que tu postes le debug complet de "response.data", pour voir... PS : utilise l'éditeur du code du fofo (bouton </>) pour poster des lignes de codes, c'est plus lisible
Inkew Posté(e) le 22 décembre 2020 Auteur Signaler Posté(e) le 22 décembre 2020 Bonjour JJacques68, Désolé pour le délai de réponse, j'ai fait des tests entre temps sur autre chose mais je n'arrive à rien. Désolé aussi pour l'éditeur de code, je prend note! J'ai fait ce que tu m'as conseillé, mais ça n'amène pas grand chose: method = 'GET' }, success = function(response) self:updateView("LBL_State", "text", tostring(response.data)) end, self:debug(response.data.state.any_on), error = function(err) self:updateView("LBL_State", "text", tostring(err)) end }) j'ai cette erreur : Si je retire la ligne response.data.state.any_on, le LBL_State me retourne ça : {"name":"Salle de bain","lights":["27","28","29","30"],"sensors":[],"type":"Room","state":{"all_on":false,"any_on":false},"recycle":false,"class":"Bathroom","action":{"on":false,"bri":254,"hue":59969,"sat":205,"effect":"none","xy":[0.4943,0.2638],"ct":443,"alert":"select","colormode":"ct"}} ... une idée?
jjacques68 Posté(e) le 22 décembre 2020 Signaler Posté(e) le 22 décembre 2020 ??? j'ai pas la fin du message d'erreur... et si tu fais : self:debug(response.data.state) sinon l'afficher dans ton label peutêtre ? c'est juste une histoire de formatage, c'est pas grand chose !
Inkew Posté(e) le 22 décembre 2020 Auteur Signaler Posté(e) le 22 décembre 2020 Alors comme je me suis un peu embrouillé, voici mon code (dans turnOn(), je ne sais pas comment lancer le code sinon..) : function QuickApp:turnOn() -- self:Switch(self:getVariable("IpxOutNumber"),1) self.http = net.HTTPClient({timeout=3000}) self.http:request("http://192.168.0.11/api/eedomushue/groups/2", { options = { -- headers = {['Authorization']='Basic '..self:getVariable("password")}, method = 'GET' }, success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) if data.contents and data.contents.quotes and data.contents.quotes[1] then local quote = data.contents.quotes[1].quote self:debug(quote) self:debug(response.data.state) self:updateView("label", "text", quote) end end, error = function(error) self:debug('error: ' .. json.encode(error)) end }) end Dans la console : Et pas de mise à jour dans le label.. Je commence à me demander si je n'attaque pas trop grand pour niveau!!
jjacques68 Posté(e) le 22 décembre 2020 Signaler Posté(e) le 22 décembre 2020 ok donc la condition : if data.contents and data.contents.quotes and data.contents.quotes[1] then ne fonctionne pas. déplace voir self:debug(response.data.state) juste après self:debug("headers:", response.headers["Content-Type"])
Inkew Posté(e) le 26 décembre 2020 Auteur Signaler Posté(e) le 26 décembre 2020 En déplaçant comme tu me le proposes, pas d'évolution du côté du LBL, voici ce que j'obtient dans la console :
jjacques68 Posté(e) le 26 décembre 2020 Signaler Posté(e) le 26 décembre 2020 roah punaise c'est frustrant, on est vraiment pas loin... comme dis, juste un problème de syntaxe, essaye dans le success : success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) self:debug("1 ", response.data) local data = json.decode(response.data) self:debug("2 ", data) end,
Inkew Posté(e) le 26 décembre 2020 Auteur Signaler Posté(e) le 26 décembre 2020 Voici ce que ça me retourne :
jjacques68 Posté(e) le 26 décembre 2020 Signaler Posté(e) le 26 décembre 2020 ah ! et maintenant ? success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) self:debug("1 ", response.data.state) end,
jjacques68 Posté(e) le 26 décembre 2020 Signaler Posté(e) le 26 décembre 2020 success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) self:debug("1 = ", data.state) end, et maintenant ?
jjacques68 Posté(e) le 26 décembre 2020 Signaler Posté(e) le 26 décembre 2020 success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) self:debug("1 = ", json.encode(data.state)) end,
Inkew Posté(e) le 26 décembre 2020 Auteur Signaler Posté(e) le 26 décembre 2020 Ca vient bon on dirait!!
jjacques68 Posté(e) le 26 décembre 2020 Signaler Posté(e) le 26 décembre 2020 punaise oui et maintenant ? success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) self:debug("1 = ", json.encode(data.state)) self:debug("any_on = ", data.state.any_on) self:debug("all_on = ", data.state.all_on) end,
jjacques68 Posté(e) le 26 décembre 2020 Signaler Posté(e) le 26 décembre 2020 maintenant je sais plus ce que tu voulais faire avec
Inkew Posté(e) le 26 décembre 2020 Auteur Signaler Posté(e) le 26 décembre 2020 !! En fait c'est une requête qui me permet de connaitre l'état d'une ou plusieurs de mes ampoules connectées dans une pièce, avant de lancer une "scène d'éclairage". Je viens du monde eedomus, et la solution était pré-machée, en gros j'avais ça: avec un paramètre (la scène en question) : Je ne suis pas spécialiste (ça t'avais compris), mais je crois comprendre que c'est du Json, mais je ne sais pas convertir ça en une requête avec paramètres..
jjacques68 Posté(e) le 26 décembre 2020 Signaler Posté(e) le 26 décembre 2020 (modifié) ok. donc il faudrait stocker cette valeur de any_on dans une variable du QA avec success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) self:debug("any_on = ", data.state.any_on) self:setVariable("anyOn", data.state.any_on) --self:debug("all_on = ", data.state.all_on) end, du coup tu peux utiliser la variable "anyOn" comme tu veux. Modifié le 26 décembre 2020 par jjacques68
Messages recommandés