jjacques68 Posté(e) le 11 mars 2017 Signaler Posté(e) le 11 mars 2017 Bonjour tout le monde ! Petite question rapide : (enfin je crois) j'arrive très facilement à récupérer des valeurs grâce à l'API de la HC2, exemple : je récupère la valeur suivante : l'heure défini dans le panneau de chauffage du lundi matin, comme ceci : local Pannel = api.get("/panels/heating/61") print(Pannel.properties["monday"].morning["hour"]) ça marche nickel ! j'utilise souvent cette méthode... Par contre si je veux écrire dans l'API, il faut utiliser un "PUT" ! -> ok mais y a t'il une méthode plus simple que le Net.HTTP ? On peut pas l'attaquer directement comme pour la lecture ? genre api.put .......... merci à vous !
pepite Posté(e) le 11 mars 2017 Signaler Posté(e) le 11 mars 2017 Bonjour, Oui api.put fonctionne :-)
jjacques68 Posté(e) le 11 mars 2017 Auteur Signaler Posté(e) le 11 mars 2017 ??? ha bon ??? avec quelle syntaxe, j'ai essayé et rien donné...
Peter Posté(e) le 11 mars 2017 Signaler Posté(e) le 11 mars 2017 Hello @jjacques68 je pense que c'est cela HC2:PUT("/api/devices/"..deviceID, json) Je suis pas certain attend la confirmation des expert
jjacques68 Posté(e) le 11 mars 2017 Auteur Signaler Posté(e) le 11 mars 2017 ok mais il faut avant faire un HC2 net.httpclient, puis récupérer le json, le décoder, le modifier et le rencoder et seulement après faire le PUT... C'est long...
Peter Posté(e) le 11 mars 2017 Signaler Posté(e) le 11 mars 2017 Oui je pense que tu as tout bon perso je suis nul en lua j'arrive a faire juste quelque truc et en cherchant beaucoup
jjacques68 Posté(e) le 11 mars 2017 Auteur Signaler Posté(e) le 11 mars 2017 ben ce que je pige pas c'est qu'on peut relever les valeurs avec une facilité énorme (voir mon code dans le premier post) et pour les modifier, il faut 30 lignes de code...
Peter Posté(e) le 11 mars 2017 Signaler Posté(e) le 11 mars 2017 La je sais pas pas assez calé en prog pour t'aider
jjacques68 Posté(e) le 11 mars 2017 Auteur Signaler Posté(e) le 11 mars 2017 pareil... ce serait bien qu'un expert passe par là ...
pepite Posté(e) le 11 mars 2017 Signaler Posté(e) le 11 mars 2017 Salut, Qu'est ce que tu veux faire exactement ? Un exemple de tinman pour la suppression d'une alerte template ---============= Suppression alerte Template ================= -- Scene à ne lancer qu'une fois --- local devices = api.get('/devices') for _, dev in ipairs(devices) do if (dev.properties.parametersTemplate == "0") then if (dev.parentId > 3) then -- "execute order 66" (66 was once device with template) -- now it does not have any parameters, so we can use it dev.properties.parametersTemplate = 66 -- set to parent device api.put('/devices/' .. dev.parentId, dev) -- if other slaves exists, do it as well api.put('/devices/' .. dev.id, dev) -- "give fibaro a break" :) fibaro:sleep(1000) -- we have no temmplate, so select to not use any template!!! dev.properties.useTemplate = false api.put('/devices/' .. dev.parentId, dev) -- if other slaves exists, do it as well api.put('/devices/' .. dev.id, dev) -- "give fibaro a break" :) fibaro:sleep(1000) -- and hide parent device (when changing template parent shows up, bug?) dev.visible = false api.put('/devices/' .. dev.parentId, dev) fibaro:debug("changed module: " .. dev.name .. " with id: " .. dev.id) end end end
jjacques68 Posté(e) le 11 mars 2017 Auteur Signaler Posté(e) le 11 mars 2017 Ah bien ton exemple ! Je crois que c'est ce que je cherchais ! J'essaye demain et te tiens au courant... merci !
jjacques68 Posté(e) le 12 mars 2017 Auteur Signaler Posté(e) le 12 mars 2017 alors je viens d'essayer ceci : local Pannel = api.get("/panels/heating/61") print("AVANT modif = "..Pannel.properties["monday"].morning["hour"]) --modification Pannel.properties["monday"].morning["hour"] = "8" api.put(Pannel.properties["monday"].morning["hour"]) print("APRES modif = "..Pannel.properties["monday"].morning["hour"]) et voici le resultat du debug : [DEBUG] 17:44:33: AVANT modif = 7 [DEBUG] 17:44:33: APRES modif = 8 MAIS la valeur dans le panneau de chauffage ne change pas !!! ??? Je sèche, j'ai essayé beaucoup de variante...
pepite Posté(e) le 12 mars 2017 Signaler Posté(e) le 12 mars 2017 Essaie de passer en manuel pour tester. en mettant une duree aussi. 1
Steven Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 C'est quoi ce PUT tout pourri :-) api.put(Pannel.properties["monday"].morning["hour"]) Allez, encore un effort, peut-être ? :-) api.put("/panels/heating/61", Pannel) 1
pepite Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 ah oui, j'avais pas fait attention tiens ;-) 1
Lazer Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 Si ca peut aider : Passage en mode vacances : -- Thermostat : 5°C local HC2 = Net.FHttp("127.0.0.1", 11111) local response, status, errorCode = HC2:GET("/api/panels/heating/1") if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then local jsonTable = json.decode(response) jsonTable.properties.vacationTemperature = 5 local newJson = json.encode(jsonTable) HC2:PUT("/api/panels/heating", newJson) end Passage en mode normal : -- Thermostat : mode normal local HC2 = Net.FHttp("127.0.0.1", 11111) local response, status, errorCode = HC2:GET("/api/panels/heating/1") if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then local jsonTable = json.decode(response) jsonTable.properties.vacationTemperature = 0 local newJson = json.encode(jsonTable) HC2:PUT("/api/panels/heating", newJson) end 1
jjacques68 Posté(e) le 13 mars 2017 Auteur Signaler Posté(e) le 13 mars 2017 Il y a 2 heures, Steven a dit : C'est quoi ce PUT tout pourri :-) je dois être fou mais je comprends toujours pas la syntaxe : Il y a 2 heures, Steven a dit : api.put("/panels/heating/61", Pannel) Ma variable "Pannel" contient le "chemin" pour accéder à la valeur que je souhaite modifier ?? !!! (Pannel.properties["monday"].morning["hour"]) Elle ne contient pas la valeur elle-même !! j'ai essayé cela aussi, mais sans succès : local Pannel = api.get("/panels/heating/61") api.put(Pannel.properties["monday"].morning["hour"], "8") @Lazer : je connais cette méthode, mais je voulais pas utiliser le net.fhttp (L'objectif de ma demande est de pourvoir modifier le panneau de chauffage dynamiquement depuis un VD. Et je vourdrai utiliser la commande api.put)
Lazer Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 Tu fais comme tu veux, moi j'aime bien les Net.Fhttp, mais si tu préfères les coups de PUT... Sinon sur le forum il existe au moins 2 bons exemples de gestion du panneau de chauffage en LUA, écris par @JossAlf et @Jojo.
jjacques68 Posté(e) le 13 mars 2017 Auteur Signaler Posté(e) le 13 mars 2017 @Lazer disons que c'est pour essayer J'ai déjà vu les tutos dont tu parles et m'en suis déjà largement inspiré pour d'autres idées
pepite Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 ben mainteannt faut que tu y arrives@jjacques68 ;-)T'as essayé ce que t'a proposé @Steven
jjacques68 Posté(e) le 13 mars 2017 Auteur Signaler Posté(e) le 13 mars 2017 ben non car, où je mets la valeur que je souhaite ?
pepite Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 (modifié) Il y a 23 heures, jjacques68 a dit : --modification Pannel.properties["monday"].morning["hour"] = "8" ben tu l'as fait, comme avant, en fait faut re"PUT"er tout le json après modif de la valeur local Pannel = api.get("/panels/heating/61") print("AVANT modif = "..Pannel.properties["monday"].morning["hour"]) --modification Pannel.properties["monday"].morning["hour"] = "8" api.put("/panels/heating/61", Pannel) print("APRES modif = "..Pannel.properties["monday"].morning["hour"]) Dans l'exemple de @Lazer, c'est pour cela : "Newjson" ;-) Modifié le 13 mars 2017 par pepite
jjacques68 Posté(e) le 13 mars 2017 Auteur Signaler Posté(e) le 13 mars 2017 oula crash complet de la box, erreur 503... 2x, obliger de redémarrer...
jjacques68 Posté(e) le 13 mars 2017 Auteur Signaler Posté(e) le 13 mars 2017 Punaise mais c'est pas possible !!!! pourtant pas compliquer quand même !!! Je vais finir par flinguer la box... !!! Vais finir par faire du bon vieux net.fhttp...
Messages recommandés