Loran Posté(e) le 6 février 2014 Signaler Posté(e) le 6 février 2014 Bonjour, Je suis entrain de faire un module virtuel pour mettre et enlever le mode vacances sur mes zones du panneau de chauffage. exemple pour la mise en route: HC2 = Net.FHttp("192.168.0.21",80) HC2:setBasicAuthentication("xxx", "xxx") local stra = 2 response ,status, errorCode = HC2:GET("/api/panels/heating?id="..stra) jsonTable = json.decode(response) jsonTable.properties.vacationTemperature =7; json = json.encode(jsonTable); HC2:PUT("/api/panels/heating?id="..stra, json) et pareil avec la désactivation en mettant 0 au lieu de 7 mais j'ai 4 zones à faire, et si je répète 4 fois ce code, ça ne marche pas. HC2 = Net.FHttp("192.168.0.21",80) HC2:setBasicAuthentication("admin", "xxx") local strefa = 2 response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa) jsonTable = json.decode(response) jsonTable.properties.vacationTemperature =0; json = json.encode(jsonTable); HC2:PUT("/api/panels/heating?id="..strefa, json) HC2 = Net.FHttp("192.168.0.21",80) HC2:setBasicAuthentication("admin", "xxx") local strefa = 4 response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa) jsonTable = json.decode(response) jsonTable.properties.vacationTemperature =0; json = json.encode(jsonTable); HC2:PUT("/api/panels/heating?id="..strefa, json) HC2 = Net.FHttp("192.168.0.21",80) HC2:setBasicAuthentication("admin", "xxx") local strefa = 6 response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa) jsonTable = json.decode(response) jsonTable.properties.vacationTemperature =0; json = json.encode(jsonTable); HC2:PUT("/api/panels/heating?id="..strefa, json) HC2 = Net.FHttp("192.168.0.21",80) HC2:setBasicAuthentication("admin", "xxx") local strefa = 8 response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa) jsonTable = json.decode(response) jsonTable.properties.vacationTemperature =0; json = json.encode(jsonTable); HC2:PUT("/api/panels/heating?id="..strefa, json) Je débute dans la programmation et je me doute que la syntaxe ou la manière n'est pas là . Autre question: pourquoi passer par des commandes "extérieures HTTP" pour faire changer des données du HC2? On ne peut pas le faire directement avec une commande du style fibaro:get.... ou fibaro:setglobal... ? Au final je veux juste mettre "7" dans la donnée "vacationTemperature" des mes "panels/heating" qui ont les id 2,4,6 et 8 Sinon, pour comprendre un peu mieux le premier code qui marche: HC2 = Net.FHttp("192.168.0.21",80) => donne l'adresse pour se loguer au HC2HC2:setBasicAuthentication("xxx", "xxx") => donne les identifiants local stra = 2 => défini la variable "stra" à 2response ,status, errorCode = HC2:GET("/api/panels/heating?id="..stra) => capture toues les valeurs du panneau de chauffage 2 ?? jsonTable = json.decode(response) => met ces données dans la table appelée jsontable ???jsonTable.properties.vacationTemperature =7; => met le champs "vacationtemperature" à 7 ???json = json.encode(jsonTable); => ??? ré-encode tous les champs?HC2:PUT("/api/panels/heating?id="..stra, json) => remet tous les champs, y compris les modifés dans le panneau de chauffage 2 Voila ce que j'en comprend, est-ce à peut près ça? Merci de votre patiente si vous êtes arrivés jusqu'ici
Shad Posté(e) le 6 février 2014 Signaler Posté(e) le 6 février 2014 Question tu as essayer de creer un array pour tes zones genre {2,4,6,7} Sinon il faut creer une boucle.
lolomail Posté(e) le 6 février 2014 Signaler Posté(e) le 6 février 2014 Cela m'interesse car je n'y suis pas arrivé avec un seul code. J'ai fait un VD avec X jeu de deux boutons pour chaque zone, puis un jeu de bouton appelant tous les autres. J'ai essayé le code suivant de Andrew de Fibaro, sans le slider en fixant la température (j'ai remplacé "_sliderValue_" par "15") mais cela ne marche pas, une seule zone change de statut, pas les autres. local new_temp = _sliderValue_; local heating_section -- your sections from min to max id_sections = {1,3,5 } for var = 1, #id_sections do heating_section =id_sections[var]; --your hc2 ip HC2 = Net.FHttp("192.168.100.xx",80) --your hc2 login data HC2:setBasicAuthentication("admin", "admin") -- get harmonogram fibaro:log("trying for " .. heating_section) fibaro:sleep(1000) response ,status, errorCode = HC2:GET("/api/panels/heating?id="..heating_section) fibaro:log("status = " .. status) fibaro:sleep(3000) if (tonumber(status) == 200) then jsonTable = json.decode(response) if (tonumber(jsonTable.properties.vacationTemperature) == tonumber(new_temp)) then --calling action fibaro:log("you got that temp "..jsonTable.properties.vacationTemperature) else --calling action fibaro:log("setting temp") -- change tabele in Lua jsonTable.properties.vacationTemperature = tonumber(new_temp); -- send back json = json.encode(jsonTable); HC2:PUT("/api/panels/heating?id="..heating_section, json) fibaro:log("Holiday mode set") end else fibaro:log("there is no such section"); fibaro:sleep(1000); end fibaro:log("going to next section"); fibaro:sleep(5000) end
Shad Posté(e) le 6 février 2014 Signaler Posté(e) le 6 février 2014 Tu n'as aucun erreur dans tes logs ???
lolomail Posté(e) le 6 février 2014 Signaler Posté(e) le 6 février 2014 J'ai pas regardé tiens, mais en mode debug de mémoire aucune erreur. Je retesterais ce week end
Arbu-jl Posté(e) le 6 février 2014 Signaler Posté(e) le 6 février 2014 Bonsoir,Pour ma part, le code ci-après fonctionne, une modification avait été faite par Robmac sur le forum officiel. J'ai décalé la ligne pour montrer la différence. Juste après le commentaire --Send back local new_temp = _sliderValue_; local heating_section -- your sections from min to max id_sections = {1,3,5 } for var = 1, #id_sections do heating_section =id_sections[var]; --your hc2 ip HC2 = Net.FHttp("192.168.100.xx",80) --your hc2 login data HC2:setBasicAuthentication("admin", "admin") -- get harmonogram fibaro:log("trying for " .. heating_section) fibaro:sleep(1000) response ,status, errorCode = HC2:GET("/api/panels/heating?id="..heating_section) fibaro:log("status = " .. status) fibaro:sleep(3000) if (tonumber(status) == 200) then jsonTable = json.decode(response) if (tonumber(jsonTable.properties.vacationTemperature) == tonumber(new_temp)) then --calling action fibaro:log("you got that temp "..jsonTable.properties.vacationTemperature) fibaro:sleep(1000) else --calling action fibaro:log("setting temp") fibaro:sleep(1000) -- change tabele in Lua jsonTable.properties.vacationTemperature = tonumber(new_temp); -- send back jsonstr = json.encode(jsonTable); response2 ,status2, errorCode2 = HC2:PUT("/api/panels/heating?id="..heating_section, jsonstr) if (tonumber(errorCode2)==0) then fibaro:log("Holiday mode set Status "..status2) fibaro:sleep(1000) else fibaro:log("Error in send back "..errorCode2) fibaro:sleep(1000) end end else fibaro:log("there is no such section"); fibaro:sleep(1000); end fibaro:log("going to next section"); fibaro:sleep(5000) end 1
pgondot Posté(e) le 4 avril 2014 Signaler Posté(e) le 4 avril 2014 Si quelqu'un suit le sujet, le code ci-dessus fonctionne. Pour info personnelle, si je veux récupérer la valeur du slider dans un autre bouton (slider = réglage et bouton = envoi du réglage) le temp = _sliderValue_ ne fonctionne pas, il faut un figaro:getValue(ID du virtDevice, ID du slider) ? 1
Messages recommandés