tibo789 Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 bonjour, j'ai mis en place l'année dernière le vd de lolomail sur Gestion des délais d'arrosage qui fonctionnait très bien. entre temps je suis passé en 4.120 et en voulant remettre l'arrosage en service cette semaine j'ai retesté le module. Je me suis retrouvé en erreur 503 j'ai du faire un recovry car plus possible d'acceder à la hc2. Apres restauration complète , rebelotte après quelques heures de prise de tête , j'ai réussi a identifier d'ou provenais le problème en isolant a ligne --response ,status, errorCode = HC2:PUT("/api/panels/drenchers", json); et la plus de problème erreur 503 ouf!! Mais le module ne fonctionne plus , ci-joint le code idem tous les bouton HC2 = Net.FHttp("127.0.0.1",11111) response ,status, errorCode = HC2:GET("/api/panels/drenchers") if tonumber(status) == 200 then jsonTable = json.decode(response) fibaro:debug("lecture "..response) else fibaro:debug("Status:" .. status .. " err: " .. errorCode ) end -- change table in Lua for 0 hours delay --jsonTable.rainDelay = 0 -- send back json = json.encode(jsonTable) --response ,status, errorCode = HC2:PUT("/api/panels/drenchers", json); fibaro:debug("ecriture "..json) en utilisant le debug je m'apercois que la lecture et l’écriture sont différents ce qui devait bloquer la Hc2 en 503 Du coup je ne sais plus quoi faire. Quelqu'un a déjà eu un problème similaire avec le Json et le put ? Comment arriver a refaire fonctionner ce module très pratique . merci de votre aide
pepite Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 Bonsoir, Essaie cela, j'ai mis le rainDelay à 2 A tester sans certitude local reponse, status, errorCode = api.get("/api/panels/drenchers") if tonumber(status) == 200 then fibaro:debug("Lecture de REPONSE avant modification: " ..reponse) reponse.rainDelay = 2 api.put("/api/panels/drenchers", reponse) fibaro:debug("Lecture de REPONSE après modification: " ..reponse) else fibaro:debug("Status : " ..status.. " - Erreur : "..errorCode) end
tibo789 Posté(e) le 21 avril 2017 Auteur Signaler Posté(e) le 21 avril 2017 Bonsoir pepite et merci je vient de faire l'essai pas de plantage 503 mais erreur sur la ligne reponse.rainDelay = 2 => "attemp to index global 'reponse' (a nil value)
pepite Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 Ah, bizarre ;-) je dois me tromper ;-) tu as quelquechose dans le début pour "avant modification" ?? Tape ça dans un navigateur : http://IPHC2/api/panels/drenchers Et copie colle le résultat stp
pepite Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 A tester encore, je n'utilise pas le panneau d'arrosage ;-) local json = api.get("/api/panels/drenchers") fibaro:debug("Lecture de json.rainDelay avant modification: " ..json.rainDelay) json.rainDelay = 2 fibaro:debug("json RainDelay : "..json.rainDelay) api.put(api.put("/api/panels/drenchers", json)
tibo789 Posté(e) le 21 avril 2017 Auteur Signaler Posté(e) le 21 avril 2017 ca correspond bien a mes copie d'ecran de lecture {"adjustWater":0,"rainDelay":6171,"cycles":1,"drenchers":[{"id":187,"name":"Haie Laurier","mode":"off","dead":"false","manualTime":0,"days":[],"cycles":[{"hour":2,"minute":10,"duration":3}],"nextDrenching":0,"state":"false"},{"id":188,"name":"Bute","mode":"off","dead":"false","manualTime":0,"days":[],"cycles":[{"hour":2,"minute":20,"duration":3}],"nextDrenching":0,"state":"false"},{"id":201,"name":"Pelouse Etendoir","mode":"off","dead":"false","manualTime":0,"days":[],"cycles":[{"hour":2,"minute":30,"duration":5}],"nextDrenching":0,"state":"false"},{"id":202,"name":"Fleurs Etendoir","mode":"off","dead":"false","manualTime":0,"days":[],"cycles":[{"hour":2,"minute":40,"duration":3}],"nextDrenching":0,"state":"false"},{"id":205,"name":"Pelouse Bassin","mode":"off","dead":"false","manualTime":0,"days":[],"cycles":[{"hour":2,"minute":50,"duration":5}],"nextDrenching":0,"state":"false"},{"id":206,"name":"Haie Cloture","mode":"off","dead":"false","manualTime":0,"days":[],"cycles":[{"hour":3,"minute":0,"duration":3}],"nextDrenching":0,"state":"false"},{"id":329,"name":"Cuisine","mode":"off","dead":"false","manualTime":0,"days":[],"cycles":[{"hour":3,"minute":10,"duration":2}],"nextDrenching":0,"state":"false"}]}
pepite Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 Mets en forme le retour de ton json avec un plugin json viewer dans ton navigateur stp, ça simplifie la lecture. surtout que ton json est complexe :-). Tu vas voir ça change la vie ;-) Que souhaites tu modifier alors ?
tibo789 Posté(e) le 21 avril 2017 Auteur Signaler Posté(e) le 21 avril 2017 J'ai vue impeccable. Je modifiais le raindelay mais cela fonctionnait nickel l'an passé, ils ont du changer qque chose nos amis de fibaro { adjustWater: 0, rainDelay: 0, cycles: 1, drenchers: [ { id: 187, name: "Haie Laurier", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 10, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 188, name: "Bute", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 20, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 201, name: "Pelouse Etendoir", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 30, duration: 5 } ], nextDrenching: 0, state: "false" }, { id: 202, name: "Fleurs Etendoir", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 40, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 205, name: "Pelouse Bassin", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 50, duration: 5 } ], nextDrenching: 0, state: "false" }, { id: 206, name: "Haie Cloture", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 3, minute: 0, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 329, name: "Cuisine", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 3, minute: 10, duration: 2 } ], nextDrenching: 0, state: "false" } ] }
tibo789 Posté(e) le 21 avril 2017 Auteur Signaler Posté(e) le 21 avril 2017 sur le second test encore une erreur ligne 3 'attempt to concatenate field 'raindelay'( a nil value) iIl ne faut decoder le json afin de modifier un champs. le problème de j'ai constaté c'est qu'en encodant la structure est différente
pepite Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 Pourtant json.rainDelay devrait renvoyer 0 ou 6171 d apres tes copies d ecranEnvoyé de mon Nexus 5X en utilisant Tapatalk
tibo789 Posté(e) le 21 avril 2017 Auteur Signaler Posté(e) le 21 avril 2017 j'ai legerement modifier le code : et j'ai maintenant une erreur fttp HC2 = Net.FHttp("127.0.0.1",11111) local response = HC2:GET("/api/panels/drenchers") jsontable = json.decode(response) fibaro:debug("Lecture de json.rainDelay avant modification: " ..jsontable.rainDelay) jsontable.rainDelay = 24 fibaro:debug("json RainDelay : "..jsontable.rainDelay) HC2.PUT("/api/panels/drenchers", jsontable)
tibo789 Posté(e) le 21 avril 2017 Auteur Signaler Posté(e) le 21 avril 2017 ca a replanté restart service a suffit, mais a priori on vois bien le changement de raindelay à 24 mais il n'est pas placé ou il faut après l'encodage HC2 = Net.FHttp("127.0.0.1",11111) local response = HC2:GET("/api/panels/drenchers") jsontable = json.decode(response) fibaro:debug("Lecture de json.rainDelay avant modification: " ..jsontable.rainDelay) jsontable.rainDelay = 24 fibaro:debug("json RainDelay : "..jsontable.rainDelay) ecriture = json.encode(jsontable) fibaro:debug("apres encodage : "..ecriture) --HC2.PUT("/api/panels/drenchers", ecriture)
pepite Posté(e) le 22 avril 2017 Signaler Posté(e) le 22 avril 2017 Bonjour. Alors là :-)... HeuuuEnvoyé de mon Nexus 5X en utilisant Tapatalk
tibo789 Posté(e) le 22 avril 2017 Auteur Signaler Posté(e) le 22 avril 2017 :(. je vais essayer de reconstruit le tableau json !! pour remettre dans l'ordre du type local Message='{"adjustWater"'..":"..''..jsontable.adjustWater..',"rainDelay"'..":"..''..jsontable.rainDelay..',"cycles"'..":"..''..jsontable.cycles..'}'
tibo789 Posté(e) le 22 avril 2017 Auteur Signaler Posté(e) le 22 avril 2017 je bascule sur Gestion des delais d'arrosage en fonction de la météo qui aborde le sujet
tibo789 Posté(e) le 22 avril 2017 Auteur Signaler Posté(e) le 22 avril 2017 https://www.domotique-fibaro.fr/topic/200-gestion-des-delais-darrosage-en-fonction-de-la-mã©tã©o/?page=3
Loizeauc Posté(e) le 22 avril 2017 Signaler Posté(e) le 22 avril 2017 Il y a 5 heures, tibo789 a dit : :(. je vais essayer de reconstruit le tableau json !! pour remettre dans l'ordre du type local Message='{"adjustWater"'..":"..''..jsontable.adjustWater..',"rainDelay"'..":"..''..jsontable.rainDelay..',"cycles"'..":"..''..jsontable.cycles..'}' voilà un morceau de code à mettre dans un VD et qui permet de modifier tous les devices compris dans un panneau en étendant le temps d'arrosage suivant les constantes choisies. (base à développer mais le moteur marche parfaitement, je viens de le tester en 4.120 function SecondsToClock(seconds) local seconds = tonumber(seconds) if seconds <= 0 then return "00:00:00"; else hours = string.format("%02.f", math.floor(seconds/3600)); mins = string.format("%02.f", math.floor(seconds/60 - (hours*60))); secs = string.format("%02.f", math.floor(seconds - hours*3600 - mins *60)); return hours..":"..mins..":"..secs end end local localhost = '127.0.0.1'; local port = 11111; HC2 = Net.FHttp(localhost, port) response ,status, errorCode = HC2:GET("/api/panels/drenchers") jsonTable = json.decode(response) -- données entêtre du panneau rd = jsonTable.rainDelay aw = jsonTable.adjustWater dr = jsonTable.drenchers -- valeur en provenance du VD pa = 1 -- pause entre les cycles en minute (max 60) dun = 1 -- durée d'arrosage (max15) si da = 0 hh = 20 -- heure début du cycle 1 mm = 10 -- minute début du cycle 1 ds = 1 -- 1 : enchaine les arroseurs 0 : tous en même temps da = 0 -- 1 : garde la durée d'arrosage définie dans le module hhn = hh mmn = mm for i = 1, #dr do fibaro:debug("Device : " .. i) id = jsonTable.drenchers.id nd = jsonTable.drenchers.nextDrenching md = jsonTable.drenchers.mode fibaro:call(id, "setDrenchingMode", "auto") cy = jsonTable.drenchers.cycles -- si pas d'enchainage entre les arroseurs alors remise du temps de départ if ds == 0 then hhn = hh -- début du cycle 1 mmn = mm end -- modification de chaque ligne de cycle for c = 1, #cy do jsonTable.drenchers.cycles[c].hour = hhn jsonTable.drenchers.cycles[c].minute = mmn if da == 0 or jsonTable.drenchers.cycles[c].duration == 0 then jsonTable.drenchers.cycles[c].duration = dun end du = jsonTable.drenchers.cycles[c].duration if aw > 0 then awn = math.floor(du * (aw/100) + .5) else awn = 0 end fibaro:debug("Cycle : " .. c .. " H " .. hhn .. ":" .. mmn .. " dur " .. du .. " pause " .. pa .. " tps add " .. awn) mmn = mmn + du + pa + awn if (mmn > 59) then mmn = mmn - 60 hhn = hhn + 1 end if hhn > 23 then hhn = 0 end end end -- Enregistrement des modifications -- Ajouter le raindelay auto en fonction de la pluie -- Ajouter le message comme dans le bouton off response = json.encode(jsonTable) response2 ,status2, errorCode2 = HC2:PUT("/api/panels/drenchers", response) if errorCode2 == 0 then fibaro:debug(status2.." success on PUT") else fibaro:debug("error" .. errorCode2) end
tibo789 Posté(e) le 22 avril 2017 Auteur Signaler Posté(e) le 22 avril 2017 Bonjour Loizauc et merci pour ce code je l'ai testé telque avant de modifier quoique ce soit mais ca m'a planté encore en erreur 503:( j'ai bloquer pour le moment le Put sinon iil trouve bien mes 7 arroseurs avec #dr =7 mais il ne trouve pas l' id = jsonTable.drenchers.id qui devrait être 187 pour le premier donc il plante sur fibaro:call(id, "setDrenchingMode", "auto")
pepite Posté(e) le 22 avril 2017 Signaler Posté(e) le 22 avril 2017 Re, C'est quand même bizarre ce qui se passe. tu devrais avoir un retour au moins de jsonTable.rainDelay Tu as rebooté depuis ?
tibo789 Posté(e) le 22 avril 2017 Auteur Signaler Posté(e) le 22 avril 2017 J'ai bien un retour quand je lis jsonTable.rainDelay . j'arrive a l’écrire jsonTable.rainDelay =24 mais quand je fais l'encodage ecriture = json.encode(jsontable) je vois bien jsonTable.rainDelay à 24 mais pas au bonne endroit. C'est pour cela je pense que je pars en erreur 503 . Je n'ai rien trouvé sur internet montrant un decode et encodage different
pepite Posté(e) le 22 avril 2017 Signaler Posté(e) le 22 avril 2017 oui j'ai vu, mais je ne comprends pas bien ;-), enfin, plutôt pas du tout Avec ce code tu as quelquechose ? local json = api.get("/api/panels/drenchers") fibaro:debug("Lecture de json.rainDelay avant modification: " ..json.rainDelay.. " Cycles : " ..json.cycles) fibaro:debug("Nom 187 : " ..json.drenchers[1].name)
tibo789 Posté(e) le 22 avril 2017 Auteur Signaler Posté(e) le 22 avril 2017 avec ton code j'ai donc modifier le code pour ajouter le decode local response = HC2:GET("/api/panels/drenchers") json = json.decode(response) fibaro:debug("Lecture de json.rainDelay avant modification: " ..json.rainDelay.. " Cycles : " ..json.cycles) fibaro:debug("Nom 187 : " ..json.drenchers[1].name) j'ai l'erreursinon delay et cycles sont ok Comme si json.drenchers était comme un tableau. j'ai trouvé un script qui décode en texte et le résultat est interresant local response = HC2:GET("/api/panels/drenchers") monTableau = json.decode(response) fibaro:debug("api:get "..response) function table.val_to_str ( v ) if "string" == type( v ) then v = string.gsub( v, "\n", "\\n" ) if string.match( string.gsub(v,"[^'\"]",""), '^"+$' ) then return "'" .. v .. "'" end return '"' .. string.gsub(v,'"', '\\"' ) .. '"' else return "table" == type( v ) and table.tostring( v ) or tostring( v ) end end function table.key_to_str ( k ) if "string" == type( k ) and string.match( k, "^[_%a][_%a%d]*$" ) then return k else return "[" .. table.val_to_str( k ) .. "]" end end function table.tostring( tbl ) local result, done = {}, {} for k, v in ipairs( tbl ) do table.insert( result, table.val_to_str( v ) ) done[ k ] = true end for k, v in pairs( tbl ) do if not done[ k ] then table.insert( result, table.key_to_str( k ) .. "=" .. table.val_to_str( v ) ) end end return "{" .. table.concat( result, "," ) .. "}" end fibaro:debug(table.tostring(monTableau))
pepite Posté(e) le 23 avril 2017 Signaler Posté(e) le 23 avril 2017 Bonsoir, je dois me tromper dans la lecture des sous objets/elements du tableau. Je vais me créer un panneau d'arrosage ;-) . faudrait qu'un expert passe par là ,-) C'est quand même très bizarre ce qu'il t'arrive :-)
tibo789 Posté(e) le 23 avril 2017 Auteur Signaler Posté(e) le 23 avril 2017 Bonsoir, je n'arrive pas non plus a lire correctement les sous elements. Je vais faire un mail a fibaro car cela marchais bien avant ,il doit y a avoir un bug car erreur 503 a chaque fois que je fait un put sur l'arrosage pas normal. Je me fais operé des cervicales demain donc je mets en stanby quelques jour cela m'occupera pour la convalescence
pepite Posté(e) le 23 avril 2017 Signaler Posté(e) le 23 avril 2017 Bonne convalescence ;-) Mais on va trouver ;-)
Messages recommandés