script détection fuite d'eau

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

script détection fuite d'eau

Message par papoo »

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?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: script détection fuite d'eau

Message par papoo »

bon ben j'ai bricolé un petit script en utilisant des variables, si ça intéresse

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&param=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
On peut traiter plusieurs compteurs. il en résulte une probabilité de fuite (via un device pourcentage)
Dernière modification par papoo le 20 juil. 2016, 22:31, modifié 1 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
js-martin
Messages : 487
Inscription : 22 mars 2015, 22:08
Contact :

Re: script détection fuite d'eau

Message par js-martin »

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...
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
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: script détection fuite d'eau

Message par papoo »

js-martin a écrit :Tu devrais expliquer ta méthode : je n'ai pas bien compris ta probabilité de fuite.
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)
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%.
js-martin a écrit :
Si un truc n'est pas clair sur mon script, n'hésites pas...
ce n'est pas un problème de clarté, mais de python. je ne suis pas à l'aise avec. Mais merci pour la proposition
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
js-martin
Messages : 487
Inscription : 22 mars 2015, 22:08
Contact :

Re: script détection fuite d'eau

Message par js-martin »

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 ?
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
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: script détection fuite d'eau

Message par papoo »

js-martin a écrit : Tu peux nous mettre une capture de l’évolution du pourcentage sur 48H ?
je veux bien mais je n'ai qu'un graphique sur 24 heures. question bête : comment afficher un graphique sur 48 heures STP?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: script détection fuite d'eau

Message par papoo »

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
2016-05-02 18_15_28-Domoticz.png
2016-05-02 18_15_28-Domoticz.png (63.53 Kio) Consulté 10791 fois
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: script détection fuite d'eau

Message par papoo »

sur plusieurs jours
2016-05-04 18_30_26-Domoticz.png
2016-05-04 18_30_26-Domoticz.png (93.78 Kio) Consulté 10762 fois
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: script détection fuite d'eau

Message par papoo »

Je viens de mettre à jour mon script pour permettre la gestion et le seuil des notifications directement depuis celui-ci
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
js-martin
Messages : 487
Inscription : 22 mars 2015, 22:08
Contact :

Re: script détection fuite d'eau

Message par js-martin »

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 ?
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
Répondre