SebDel Posté(e) le 29 décembre 2014 Signaler Posté(e) le 29 décembre 2014 Bonjour à tous, Je viens d'installer un module eco-devices de GCE qui s'occupe de capter pour l'instant la consommation de deux compteurs d'eau. L'intégration avec la HC2 c'est assez bien passé puisque j'ai pu créer un module virtuel qui interroge périodiquement l'éco-devices et renseigne dans des variables la consommation instantanée et moyenne glissante sur une période plus large pour détecter les puisages ponctuels ou les douches/bains plus important. Sur la requête local response ,status, err = HC2:GET("/api/xdevices.json?cmd=10") le retour json est erroné : {"product":"Eco-devices","T1_PTEC":"----","T1_PAPP":0,","T2_PTEC":"----","T2_PAPP":0,","INDEX_C1":592,"INDEX_C2":431} au lieu de {"product":"Eco-devices","T1_PTEC":"----","T1_PAPP":0,"T2_PTEC":"----","T2_PAPP":0,"INDEX_C1":592,"INDEX_C2":431} il faut donc le corriger pour l'instant comme ceci response2=string.gsub(response,"\"T1_PAPP\":0,\",\"T2_PTEC\":\"----\",\"T2_PAPP\":0,\"","\"T1_PAPP\":0,\"T2_PTEC\":\"----\",\"T2_PAPP\":0") Ensuite et au bout d'un certain temps le json.decode deconne (c'est un jeu de mot) ! Malgré les excellents tutos sur le sujet avec les tests nil du result + protection divers et surtout l'appel avec le pcall revu et corrigé le module virtuel fini par planter et la boucle cesser... Voici pour ceux qui pourront m'aider le code que j'ai dans le module virtuel if (not ED) then SelfId = fibaro:getSelfId() local EcoDevIP = fibaro:get(SelfId, "IPAddress") local EcoDevPort = fibaro:get(SelfId, "TCPPort") function EcoDevices(initHostPort) local self = { UserPwd = "", TabEauF = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, TabEauC = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, LastEauF=0, LastEauC=0 } function self.init() LastEauF=0 LastEauC=0 end function self.Main() local tmpeauf = tonumber(fibaro:getGlobalValue("EcoDev_EF")) local tmpeauc = tonumber(fibaro:getGlobalValue("EcoDev_EC")) local difeauf=0 local difeauc=0 local moy10f=0 local moy10c=0 HC2=Net.FHttp(EcoDevIP) HC2:setBasicAuthentication("admin","xxxxxxxxx") local response ,status, err = HC2:GET("/api/xdevices.json?cmd=10") if (tonumber(status) == 200 and tonumber(err)==0) then --fibaro:debug(response) if response ~= nil then response2=string.gsub(response,"\"T1_PAPP\":0,\",\"T2_PTEC\":\"----\",\"T2_PAPP\":0,\"","\"T1_PAPP\":0,\"T2_PTEC\":\"----\",\"T2_PAPP\":0") if response2~=response then result=json.decode(response2) if(tmpeauf>0) then difeauf=tonumber(result.INDEX_C1)-tmpeauf end if(tmpeauc>0) then difeauc=tonumber(result.INDEX_C2)-tmpeauc end difeauf=difeauf-difeauc HC2=Net.FHttp("api.thingspeak.com") response=HC2:GET("/update?api_key=xxxxxxxxxxxxxxxxx&field1="..tostring(difeauf).."&field2="..tostring(difeauc)) fibaro:debug(response) for tmpi = 20 , 1 , -1 do ED.TabEauF[tmpi]=ED.TabEauF[tmpi-1] ED.TabEauC[tmpi]=ED.TabEauC[tmpi-1] end ED.TabEauF[1]=difeauf ED.TabEauC[1]=difeauc moy10f=0 moy10c=0 for tmpi = 1 , 20 , 1 do moy10f=moy10f+ED.TabEauF[tmpi] moy10c=moy10c+ED.TabEauC[tmpi] end fibaro:call(SelfId, "setProperty", "ui.lblInstantf.value", difeauf) fibaro:call(SelfId, "setProperty", "ui.lblInstantc.value", difeauc) fibaro:call(SelfId, "setProperty", "ui.lblM10F.value", moy10f) fibaro:call(SelfId, "setProperty", "ui.lblM10C.value", moy10c) fibaro:setGlobal('EcoDev_EF', result.INDEX_C1) fibaro:setGlobal('EcoDev_EC', result.INDEX_C2) fibaro:setGlobal('EcoDev_GliF', moy10f) fibaro:setGlobal('EcoDev_GliC', moy10c) fibaro:log("F="..difeauf.." C="..difeauc.." GF="..moy10f.." GC="..moy10c) end end else fibaro:debug(string.format("<font color=\"red\">Error: %s</font>", "Error code: " .. err)) return false end --fibaro:sleep(60*1000) return true end self.init() return self end if EcoDevIP == nil or EcoDevIP == "" then fibaro:debug(string.format("<font color=\"red\">Error: %s</font>", "Please specify the IP of the virtual device")) else if EcoDevPort == nil or EcoDevPort == "" then EcoDevPort = "80" fibaro:debug(string.format("<font color=\"green\">Info: %s%s:%s</font>", "Initialize EcoDev controler on", EcoDevIP, EcoDevPort)) end ED = EcoDevices(EcoDevIP..":"..EcoDevPort) fibaro:debug(string.format("<font color=\"green\">Info: %s</font>", "EcoDevices succesfully loaded")) end end if ED then local status, err, value = pcall(function () resInt = ED.Main(); end) if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end fibaro:sleep(60*1000) end Bonnes fêtes de fin d'année à tous. Séb
HANSOLO Posté(e) le 29 décembre 2014 Signaler Posté(e) le 29 décembre 2014 Tu est en quelle version sur ton eco-device?
SebDel Posté(e) le 29 décembre 2014 Auteur Signaler Posté(e) le 29 décembre 2014 Bonjour HANSOLO, J'ai téléchargé la dernière version : Web Version: 1.05.06 Prog. Version: 1.05.05 J'ai changé le json.decode avec string.sub pour prendre les valeurs bruts... Amicalement Séb
HANSOLO Posté(e) le 29 décembre 2014 Signaler Posté(e) le 29 décembre 2014 Tu devrais être en 1.05.06 pour les deux (Web et Prof)
SebDel Posté(e) le 29 décembre 2014 Auteur Signaler Posté(e) le 29 décembre 2014 Je ne sais pas comment mettre àjour le prog En fait j'ai fait un upload du .bin seulement. Je n'ai pas vu de procédure pour mettre àjour le firmware. Il y a un bien un .hex mais je ne vois pas trop comment le mettre àjour sur l'eco-devices
HANSOLO Posté(e) le 29 décembre 2014 Signaler Posté(e) le 29 décembre 2014 Ca fait longtemps que j'ai fait la maj, me souvient plus en détail ! Faut le faire en 2 fois
SebDel Posté(e) le 29 décembre 2014 Auteur Signaler Posté(e) le 29 décembre 2014 Bon je viens de trouver... EN fait c'est en utilisant l'utilitaire mais celui ci ne fonctionne qu'en scan local et malheureusement je n'ai pas de machine sous Windows sur le réseau de l'écodevice. Je n'y accède que par le WAN et donc pas de possibilité de flasher le programme. J'ai vu dans les notes que le correctif avait été fait. Il va falloir que je prenne un portable, que je l'installe sur le réseau et ensuite je ferai la mise àjour du WEB + PROG. Pas cool le scandevice juste en local... Merci pour la piste du web différent du prog. Séb
Messages recommandés