Ldfa Posté(e) le 30 décembre 2019 Partager Posté(e) le 30 décembre 2019 je souhaitais mettre en place un script pour « surveiller » ma consommation d’eau afin d’etre prévenu en cas de consommation anormale. Les impulsions remontent de mon compteur via snmp sur un compteur virtuel Domoticz, mais il est adaptable à n’importe quel compteur ayant une consommation non permanente (test de la valeur zéro) Possibilité de surveiller plusieurs compteurs.Le principe : Vérification de la consommation d’eau toutes les 5mn par comparaison avec l’index précédent présent dans une variable utilisateur(créé automatiquement lors de la première exécution du script). si l’index compteur et l’index -5mn sont identique le device probabilité est remis à zéro (pas de fuite)si l’index compteur et l’index-5mn sont différents = consommation d’eau, incrémentation du device probabilité de 8% et mise à jour de la variable associéesi une consommation continue pendant une heure le device probabilité aura été incrémenté 12 fois, le device probabilité sera donc à 96% => très forte probabilitéune notification est paramétrée dans Domoticz sur ce device à 80%.Le script est lu toutes les minutes mais ne vérifie les données que toutes les 5 minutes --[[script_time_export_emoncms.lua auteur : papoo version : 1.00 date : 25/04/2016 Principe : vérification de la consommation d'eau toutes les 5mn par comparaison avec l'index précédent présent dans une variable utilisateur (créé automatiquement lors de la première exécution du script). si l'index compteur et l'index -5mn sont identique le device probabilité est remis à zéro (pas de fuite) si l'index compteur et l'index-5mn sont différents = consommation d'eau, incrémentation du device probabilité de 8% et mise à jour de la variable associée si une consommation continue pendant une heure le device probabilité aura été incrémenté 12 fois, le device probabilité sera donc à 96% => très forte probabilité une notification est paramétrée dans Domoticz sur ce device à 80%. Possibilité de surveiller plusieurs compteurs Le script est lu toutes les minutes mais ne vérifie les données que toutes les 5 minutes ]]-- -- -------------------------------- -- Tableau des Variables à éditer ----------------------------------- local debugging = False -- true ou false local url = '192.168.10.240:8080' -- user:pass@ip:port de domoticz local indexArray=0 local les_compteurs = {}; -- 1er compteur : name ="nom du device compteur 1", idx=idx et nom (dummy) du capteur pourcentage probabilité surconsommation associé les_compteurs[1] = {name="Compteur Eau Froide", idx=643, dummy="Probabilité Fuite Eau Froide"} -- 2eme compteur : name ="nom du device compteur 2", idx=idx du capteur pourcentage probabilité surconsommation associé ("" si inexistant) les_compteurs[2] = {name="Compteur Eau Chaude", idx=644, dummy="Probabilité Fuite Eau Chaude"} -- ******************************************************************************** commandArray = {} print('script_time_detec_fuite_eau.lua') function voir_les_logs (s) if (debugging) then print (s); end end function url_encode(str) if (str) then str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^%w %-%_%.%~])", function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") end return str end now=os.date("*t") -- ça commence ici -- ******************************************************************************** -- voir_les_logs ("TempHum1="..otherdevices_svalues['TempHum1']) -- voir_les_logs ("Météo Baromètre="..otherdevices_svalues["Météo Baromètre"]) if now.min % 5 == 0 then voir_les_logs("--- --- --- Detection Fuite d'eau : "..now.hour.. ":" ..now.min,debugging); for i,d in ipairs(les_compteurs) do -- special treatment for headers of multi valued datas : -- check data type v=otherdevices[d.name] -- v is the value attached to device d --voir_les_logs(d.name.." = "..(v or "nil"),debugging); --voir_les_logs("--- --- --- Heure actuelle : "..now.."("..NowInMinutes..")",debugging); if v==nil or v=="" then -- multi valued ? v=otherdevices_svalues[d.name] or "" voir_les_logs("--- --- --- "..d.name.." = "..v,debugging); end if(uservariables[d.name] == nil) then -- Création de la variable car elle n'existe pas voir_les_logs("--- --- --- La Variable " .. d.name .." n'existe pas --- --- --- ",debugging); commandArray['OpenURL']=url..'/json.htm?type=command¶m=saveuservariable&vname='..url_encode(d.name)..'&vtype=2&vvalue=1' adresse = url_encode(d.name) voir_les_logs("--- --- --- adresse " .. adresse .." --- --- --- ",debugging); voir_les_logs("--- --- --- Création de la Variable " .. d.name .." manquante --- --- --- ",debugging); print('script supendu') else --voir_les_logs("--- --- --- la Variable : "..d.name.." existe",debugging); if (tonumber(uservariables[d.name]) < tonumber(v) ) then --La variable est inferieure au compteur => consommation d'eau conso = tonumber(v) - tonumber(uservariables[d.name]) voir_les_logs("--- --- --- sur le "..d.name.." il a été consommé : " .. conso .." Litre(s) --- --- --- ",debugging); commandArray[indexArray] = {['Variable:'..d.name] = tostring(v)} -- Mise à jour Variable indexArray=indexArray+1 if(d.idx ~= "" and d.dummy ~= "") then voir_les_logs("--- --- --- valeur du device % "..otherdevices_svalues[d.dummy].." --- --- --- ",debugging); --tonumber(otherdevices_svalues['lamp dimmer']) local result = tonumber(otherdevices_svalues[d.dummy]) + 8 --result = 8 --local cmd = string.format(d.idx .. "|0|" .. result) commandArray[indexArray] = {['UpdateDevice'] = d.idx .. "|0|" .. result} -- Mise à jour probabilité =>8% /5mn =100% en 1 heure indexArray=indexArray+1 end end if (tonumber(uservariables[d.name]) == tonumber(v) ) then -- aucune consommation if(d.idx ~= "" and d.dummy ~= "") then local result = "0" commandArray[indexArray] = {['UpdateDevice'] = d.idx .. "|0|" .. result} -- Mise à jour probabilité à 0% indexArray=indexArray+1 end voir_les_logs("--- --- --- sur le "..d.name.." aucune consommation --- --- --- ",debugging); end end end end -- if now -- ******************************************************************************** return commandArray --[[script_time_export_emoncms.lua auteur : papoo version : 1.00 date : 25/04/2016 Principe : vérification de la consommation d'eau toutes les 5mn par comparaison avec l'index précédent présent dans une variable utilisateur (créé automatiquement lors de la première exécution du script). si l'index compteur et l'index -5mn sont identique le device probabilité est remis à zéro (pas de fuite) si l'index compteur et l'index-5mn sont différents = consommation d'eau, incrémentation du device probabilité de 8% et mise à jour de la variable associée si une consommation continue pendant une heure le device probabilité aura été incrémenté 12 fois, le device probabilité sera donc à 96% => très forte probabilité une notification est paramétrée dans Domoticz sur ce device à 80%. Possibilité de surveiller plusieurs compteurs Le script est lu toutes les minutes mais ne vérifie les données que toutes les 5 minutes -- -------------------------------- -- Tableau des Variables à éditer ----------------------------------- local debugging = False -- true ou false local url = '192.168.10.240:8080' -- user:pass@ip:port de domoticz local indexArray=0 local les_compteurs = {}; -- 1er compteur : name ="nom du device compteur 1", idx=idx et nom (dummy) du capteur pourcentage probabilité surconsommation associé les_compteurs[1] = {name="Compteur Eau Froide", idx=643, dummy="Probabilité Fuite Eau Froide"} -- 2eme compteur : name ="nom du device compteur 2", idx=idx du capteur pourcentage probabilité surconsommation associé ("" si inexistant) les_compteurs[2] = {name="Compteur Eau Chaude", idx=644, dummy="Probabilité Fuite Eau Chaude"} -- ******************************************************************************** commandArray = {} print('script_time_detec_fuite_eau.lua') function voir_les_logs (s) if (debugging) then print (s); end function url_encode(str) if (str) then str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^%w %-%_%.%~])", function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") return str now=os.date("*t") -- ça commence ici -- ******************************************************************************** -- voir_les_logs ("TempHum1="..otherdevices_svalues['TempHum1']) -- voir_les_logs ("Météo Baromètre="..otherdevices_svalues["Météo Baromètre"]) if now.min % 5 == 0 then voir_les_logs("--- --- --- Detection Fuite d'eau : "..now.hour.. ":" ..now.min,debugging); for i,d in ipairs(les_compteurs) do -- special treatment for headers of multi valued datas : -- check data type v=otherdevices[d.name] -- v is the value attached to device d --voir_les_logs(d.name.." = "..(v or "nil"),debugging); --voir_les_logs("--- --- --- Heure actuelle : "..now.."("..NowInMinutes..")",debugging); if v==nil or v=="" then -- multi valued ? v=otherdevices_svalues[d.name] or "" voir_les_logs("--- --- --- "..d.name.." = "..v,debugging); if(uservariables[d.name] == nil) then -- Création de la variable car elle n'existe pas voir_les_logs("--- --- --- La Variable " .. d.name .." n'existe pas --- --- --- ",debugging); commandArray['OpenURL']=url..'/json.htm?type=command¶m=saveuservariable&vname='..url_encode(d.name)..'&vtype=2&vvalue=1' adresse = url_encode(d.name) voir_les_logs("--- --- --- adresse " .. adresse .." --- --- --- ",debugging); voir_les_logs("--- --- --- Création de la Variable " .. d.name .." manquante --- --- --- ",debugging); print('script supendu') --voir_les_logs("--- --- --- la Variable : "..d.name.." existe",debugging); if (tonumber(uservariables[d.name]) < tonumber(v) ) then --La variable est inferieure au compteur => consommation d'eau conso = tonumber(v) - tonumber(uservariables[d.name]) voir_les_logs("--- --- --- sur le "..d.name.." il a été consommé : " .. conso .." Litre(s) --- --- --- ",debugging); commandArray[indexArray] = {['Variable:'..d.name] = tostring(v)} -- Mise à jour Variable indexArray=indexArray+1 if(d.idx ~= "" and d.dummy ~= "") then voir_les_logs("--- --- --- valeur du device % "..otherdevices_svalues[d.dummy].." --- --- --- ",debugging); --tonumber(otherdevices_svalues['lamp dimmer']) local result = tonumber(otherdevices_svalues[d.dummy]) + 8 --result = 8 --local cmd = string.format(d.idx .. "|0|" .. result) commandArray[indexArray] = {['UpdateDevice'] = d.idx .. "|0|" .. result} -- Mise à jour probabilité =>8% /5mn =100% en 1 heure indexArray=indexArray+1 if (tonumber(uservariables[d.name]) == tonumber(v) ) then -- aucune consommation if(d.idx ~= "" and d.dummy ~= "") then local result = "0" commandArray[indexArray] = {['UpdateDevice'] = d.idx .. "|0|" .. result} -- Mise à jour probabilité à 0% indexArray=indexArray+1 voir_les_logs("--- --- --- sur le "..d.name.." aucune consommation --- --- --- ",debugging); end end -- if now -- ******************************************************************************** return commandArray Afficher l’article complet Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.