script détection fuite d'eau
script détection fuite d'eau
Bonjour,
je souhaiterais mettre en place un script (lua de préférence) 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 Dz. js-martin a bien partagé son script (merci à lui) mais j'ai du mal à l'adapter à mon installation (j'ai beaucoup de mal avec python). vous feriez comment en lua?
je souhaiterais mettre en place un script (lua de préférence) 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 Dz. js-martin a bien partagé son script (merci à lui) mais j'ai du mal à l'adapter à mon installation (j'ai beaucoup de mal avec python). vous feriez comment en lua?
Re: script détection fuite d'eau
bon ben j'ai bricolé un petit script en utilisant des variables, si ça intéresse
On peut traiter plusieurs compteurs. il en résulte une probabilité de fuite (via un device pourcentage)
Code : Tout sélectionner
--[[script_time_detec_fuite_eau.lua
auteur : papoo
version : 1.10
MAJ : 18/07/2016
Création : 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éée 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 il y a 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é
Le seuil de notification est paramétrable via la variable seuil_notification . 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 seuil_notification=75 -- seuil pour envoyer les notifications
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
if s ~= nil then
print ("<font color='#f3031d'>".. s .."</font>");
else
print ("<font color='#f3031d'>aucune valeur affichable</font>");
end
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")
-- ********************************************************************************
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
v=otherdevices[d.name]
--voir_les_logs(d.name.." = "..(v or "nil"),debugging);
--voir_les_logs("--- --- --- Heure actuelle : "..now.."("..NowInMinutes..")",debugging);
if v==nil or v=="" then
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 de la variable pourcentage "..otherdevices_svalues[d.dummy].."% --- --- --- ",debugging); --tonumber(otherdevices_svalues['lamp dimmer'])
local result = tonumber(otherdevices_svalues[d.dummy]) + 8
commandArray[indexArray] = {['UpdateDevice'] = d.idx .. "|0|" .. result} -- Mise à jour probabilité => 8% * (60/5) = 96% 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("--- --- --- Aucune consommation sur le "..d.name.." --- --- --- ",debugging);
end
end
voir_les_logs("--- --- --- Probabilité à ".. otherdevices[d.dummy] .."% sur le "..d.name.." --- --- --- ",debugging);
if tonumber(otherdevices[d.dummy]) > seuil_notification then
commandArray[indexArray] = {['SendNotification'] = 'Alerte surconsommation#surconsommation sur le '..d.name..'!'}
indexArray=indexArray+1
end
end
end -- if now
-- ********************************************************************************
return commandArray
Dernière modification par papoo le 20 juil. 2016, 22:31, modifié 1 fois.
Re: script détection fuite d'eau
Tu devrais expliquer ta méthode : je n'ai pas bien compris ta probabilité de fuite.
Si un truc n'est pas clair sur mon script, n'hésites pas...
Si un truc n'est pas clair sur mon script, n'hésites pas...
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien
Re: script détection fuite d'eau
Je vérifie la consommation d'eau toutes les 5mn par comparaison avec l'index précédent présent dans une variable utilisateur. si l'index compteur et l'index -5mn sont identique je remets le device probabilité à zéro (pas de fuite)js-martin a écrit :Tu devrais expliquer ta méthode : je n'ai pas bien compris ta probabilité de fuite.
si l'index compteur et l'index-5mn sont différents = consommation d'eau, j’incrémente donc le device probabilité de 8% et je mets à jour la variable associée
si j'ai une consommation continue pendant une heure j'aurais incrémenté 12 fois mon device probabilité qui sera donc à 96% => très forte probabilité
j'ai paramétré dans Dz une notification sur ce device à 80%.
ce n'est pas un problème de clarté, mais de python. je ne suis pas à l'aise avec. Mais merci pour la propositionjs-martin a écrit :
Si un truc n'est pas clair sur mon script, n'hésites pas...
Re: script détection fuite d'eau
Je comprends maintenant ta solution : c'est intéressant. Tu as un indice de fuite dès 1H de consommation alors que ma solution est sur 24H.
Tu peux nous mettre une capture de l’évolution du pourcentage sur 48H ?
Tu peux nous mettre une capture de l’évolution du pourcentage sur 48H ?
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien
Re: script détection fuite d'eau
je veux bien mais je n'ai qu'un graphique sur 24 heures. question bête : comment afficher un graphique sur 48 heures STP?js-martin a écrit : Tu peux nous mettre une capture de l’évolution du pourcentage sur 48H ?
Re: script détection fuite d'eau
ayé j'ai trouvé mais je n'ai plus les données de hier.
Je refais une capture dès que j'ai suffisamment de données
Je refais une capture dès que j'ai suffisamment de données
Re: script détection fuite d'eau
sur plusieurs jours
Re: script détection fuite d'eau
Je viens de mettre à jour mon script pour permettre la gestion et le seuil des notifications directement depuis celui-ci
Re: script détection fuite d'eau
Merci pour tes graphiques. C'est intéressant. Le cas où l'eau coule de façon régulière pendant une heure peut arriver (on prépare le repas pendant que toute la famille se douche avec une machine à laver en route). Mais dans ce cas, on saura que c'est une fausse alerte. À part ce cas tordu, ta solution est efficace ! Bravo.
As-tu eu des faux positifs durant ces derniers mois ?
As-tu eu des faux positifs durant ces derniers mois ?
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien