mlebech Posté(e) le 22 mars 2019 Signaler Posté(e) le 22 mars 2019 Bonjour, je suis entrain de mettre en place le contrôle des modes vacances de ma HC2 par un VD sur les panels de chauffage. J'ai des comportements bizarres avec le VD qui me crée d'autres panneaux de chauffage à chaque fois que j'active le VD sans modifier les consignes de base. Avez-vous une idée sur le bug de mon code: local Room_ID={} Room_ID=json.decode(fibaro:getGlobalValue("Room_ID")) for k,v in ipairs(Room_ID[1]) do fibaro:debug(Room_ID[3][k]) if tonumber(Room_ID[2][k]) == 1 then HC2 = Net.FHttp("192.168.1.10",80) HC2:setBasicAuthentication("xxxx", "xxxx") response ,status, errorCode = HC2:GET("/api/panels/heating?id="..Room_ID[3][k]) dataTable=json.decode(response) dataTable.properties.vacationTemperature=15 data = json.encode(dataTable) HC2:PUT("/api/panels/heating?id="..Room_ID[3][k],data) end end * room ID correspond à heating panel ID, désolé je ne suis pas un pro... Merci d'avance pour votre aide, Maxime
pepite Posté(e) le 22 mars 2019 Signaler Posté(e) le 22 mars 2019 Bonjour, Tu veux tous tes IDs de panneau dans une variable globale ? Sinon tu peux le faire en plus rapide : local Panel = api.get("/panels/heating/iddupanneaudechauffage") Panel.properties.vacationTemperature = 15 api.put("/panels/heating/iddupanneaudechauffage", Panel)
mlebech Posté(e) le 22 mars 2019 Auteur Signaler Posté(e) le 22 mars 2019 J'ai 2 logements dans ma maison donc 2 groupes de pièces à gérer séparément (gérer dans la var glob Room_ID). Par contre, je ne comprends pas ton code, à quoi correspond ton 'iddupanneaudechauffage' directement l'ID, il faut bien une recherche par ID de ce type : heating?id="..Id? De plus, il faut bien décoder et recoder en Json pour pouvoir communiquer avec la HC2 et lui envoyer des requêtes?
pepite Posté(e) le 22 mars 2019 Signaler Posté(e) le 22 mars 2019 Bonjour, Ce sera plus clair comme ceci : local Panel = api.get("/panels/heating/4") Panel.properties.vacationTemperature = 15 api.put("/panels/heating/4", Panel) Effectivement, tu as raison pour le decodage/encodage, ce sont les fonctions "api.get" et "api.put" qui s'en occupent, ce sont des fonctions internes à nos box. api.get = function(uri) uri = "/api" .. uri local http = Net.FHttp("127.0.0.1", 11111) local result, status, errorCode = http:GET(uri) if result ~= "" then return json.decode(result) else return "" end end 1
pepite Posté(e) le 22 mars 2019 Signaler Posté(e) le 22 mars 2019 api.put = function(uri, data) uri = "/api" .. uri local http = Net.FHttp("127.0.0.1", 11111) local jsonData = json.encode(data) local result, status, errorCode = http:PUT(uri, jsonData) if result ~= "" then return json.decode(result) else return "" end end 1
mlebech Posté(e) le 22 mars 2019 Auteur Signaler Posté(e) le 22 mars 2019 C'est cool, ça fonctionne par contre je n'ai pas l’habitude des raccourcis directs de l'api sans authentification ... Merci,
pepite Posté(e) le 22 mars 2019 Signaler Posté(e) le 22 mars 2019 il y a 7 minutes, mlebech a dit : l'api sans authentification regarde bien la fonction, ce n'est pas sans authentification à proprement parlé, quand tu passes par le localhost port 11111. C'est géré par la fonction mais pour toi 3 lignes ;-)
mlebech Posté(e) le 22 mars 2019 Auteur Signaler Posté(e) le 22 mars 2019 effectivement, merci pour la maitrise et l'aide précieuse. Bon WE,
Lazer Posté(e) le 22 mars 2019 Signaler Posté(e) le 22 mars 2019 Par ailleurs je te déconseille l'ancienne méthode via l'authentification, car avec les nouvelles règles de sécurité mises en place par Fibaro (et c'est tant mieux), cela peut amener à recevoir des emails d'avertissement d'un trop grand nombre de connexions, voire une désactivation du compte. En plus, en terme de sécurité, c'est mauvais, car tu stockes un mot de passe en clair dans le code LUA. Donc utilise la méthode donnée par Pepite, c'est le mieux à faire
Messages recommandés