Page 1 sur 1

[LUA] Script pourcentage eau restante

Publié : 05 juin 2016, 13:33
par gawel3164
Salut,
Je suis en train de finaliser la mise en place un arrosage automatique déclenché par une ZK1PA. La pompe est dans une cuve alimentée par une récupération d'eau pluviale, et l'électronique alimentée par un panneau solaire: 100% développement durable!! :D . Je voulais connaitre le pourcentage d'eau restant dans la cuve. Après mise en place d'un capteur de distance à ultrason mysensors (HC-SR04 Distance sensor), voici le script LUA utilisé pour convertir la hauteur mesurée en pourcentage d'eau disponible. Je n'ai rien inventé, mais adapté un script approchant... mais si ça peut servir à quelqu'un:

Code : Tout sélectionner

--le capteur de distance à ultrason s'appelle ici: Hauteur eau cuve arrosage
-- créer un dummy de type pourcentage. Ici il s'appelle: Pourcentage cuve
-- adapter les id de ces deux switches en fonction de vos id
-- adapter la hauteur totale de votre cuve 
 
 
-- Paramètres d'entrée: capteur de distance entre haut de la cuve et surface de l'eau
depth_sensor = 'Hauteur eau cuve arrosage'
 
-- Paramètres de sortie: pourcentage d'eau restant.
pct_sensor = 'Pourcentage cuve'
pct_sensor_id = 113
 
-- Hauteur de la cuve en cm: 
tank_height = 65

 
-----------------------------------------------------------------------------------
commandArray = {}
 
if (devicechanged[depth_sensor]) then
   -- Use otherdevices_svalues[] because devicechanged[foo_Utility] is not
   -- present when the value is zero
   depth = otherdevices_svalues[depth_sensor]
 
   -- Calcul du pourcentage
   pct = (tank_height - depth) / tank_height * 100
   
      
-- print(string.format("percentage %f", pct))
 
   commandArray[1] = {['UpdateDevice'] = pct_sensor_id .. "|0|" .. pct}
   
end
 
return commandArray

Re: Script pourcentage eau restante

Publié : 09 juin 2016, 00:04
par DumpDos
Salut,

Pour mes premiers scripts LUA, J'ajoute une pierre à l'édifice :D

Ces scripts fonctionnent aussi avec un capteur ultrasonique ( HC-SR04 )

Voici un script pour le pourcentage :

Code : Tout sélectionner

---------------------------------------------------------------------------
-- script_device_cuve.lua -------------------------------------------------
-- DumpDos 2016 -----------------------------------------------------------
---------------------------------------------------------------------------
-- Ce script permet la conversion d'une hauteur en pourcentage ------------
---------------------------------------------------------------------------
-- Il peut être utilisé pour une cuve , un bassin ou toute autre ----------
-- utilisation qui s'y prêterai -------------------------------------------
---------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
----------------------------------------- Variables à Editer ------------------------------------------------
-------------------------------------------------------------------------------------------------------------

local Hauteur_Eau = '150'                -- Hauteur maximale de l'eau en cm
local Marge_Capteur = '20'               -- Marge de votre capteur par rapport à la surface de l'eau en cm
local Distance = 'Distance'              -- Nom du capteur de hauteur
local Domoticz_url = '192.168.0.11:8080' -- Adresse IP:port de Domoticz
local Afficheur = '70'                   -- IDx de l'afficheur du niveau

-------------------------------------------------------------------------------------------------------------
-------------------------------------- Fin des Variables à Editer -------------------------------------------
-------------------------------------------------------------------------------------------------------------


commandArray = {}
-- Détection du changement de valeur --
if (devicechanged[Distance]) then
   
   -- Valeur distance relevée --
   Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])
   
   -- Inversion de la valeur relevée --
   local Niveau_Eau = Hauteur_Eau - ( Mesure_Capteur - Marge_Capteur )
   
   	-- Vérification niveau minimum --
	if Niveau_Eau <= ( 0 ) then
 
		-- Incrémentation du volume à 0 --
		local Pourcentage = ( 0 )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Pourcentage
		commandArray[1]={['OpenURL']=url }
		
	-- Vérification niveau minimum --	
	elseif Niveau_Eau > ( 0 ) then
   
		-- Calcul du pourcentage --
		local Pourcentage_Brut = Niveau_Eau / ( Hauteur_Eau / 100 )
   
		-- Arrondi à l'unité --
		local Pourcentage = math.floor( Pourcentage_Brut )
   
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Pourcentage
		commandArray[1]={['OpenURL']=url }
	end

end
return commandArray
Pensez à créer afficheur virtuel ! ( Dummy )

Voici deux autres scripts pour convertir une hauteur en volume :

Celui-ci est destiné à une cuve " Rectangulaire " :

Code : Tout sélectionner

---------------------------------------------------------------------------
-- script_device_cuve_volumerREC.lua --------------------------------------
-- DumpDos 2016 -----------------------------------------------------------
---------------------------------------------------------------------------
-- Ce script permet la conversion d'une hauteur en volume en fonction de --
-- la largeur et la longueur d'une cuve -----------------------------------
---------------------------------------------------------------------------
-- Il peut être utilisé pour une cuve , un bassin ou toute autre ----------
-- utilisation qui s'y prêterai -------------------------------------------
---------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
----------------------------------------- Variables à Editer ------------------------------------------------
-------------------------------------------------------------------------------------------------------------

local Hauteur_Eau = '150'                -- Hauteur maximale de l'eau en cm
local Marge_Capteur = '20'               -- Marge de vôtre capteur par rapport à la surface de l'eau en cm
local Longueur = '100'                   -- Longueur de la cuve en cm
local Largeur = '100'                    -- Largeur de la cuve en cm
local Distance = 'Distance'              -- Nom du capteur de hauteur
local Domoticz_url = '192.168.0.11:8080' -- Adresse IP:port de Domoticz
local Afficheur = '77'                   -- IDx de l'afficheur du niveau

-------------------------------------------------------------------------------------------------------------
-------------------------------------- Fin des Variables à Editer -------------------------------------------
-------------------------------------------------------------------------------------------------------------


commandArray = {}
-- Détection du changement de valeur --
if (devicechanged[Distance]) then
	
	-- Valeur distance relevée --
	Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])
	
	-- Inversion de la valeur relevée --
	local Niveau_Eau = Hauteur_Eau - ( Mesure_Capteur - Marge_Capteur )
	
	-- Vérification niveau minimum --
	if Niveau_Eau <= ( 0 ) then
 
		-- Incrémentation du volume à 0 --
		local Volume = ( 0 )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
		
	-- Vérification niveau minimum --	
	elseif Niveau_Eau > ( 0 ) then
	
		-- Calcul de l'aire --
		local Aire = ( Longueur * Largeur)
	
		-- Calcul du volume --
		local Volume_Brut = ( Aire * Niveau_Eau )
	
		-- Conversion de Cm3 à L --
		local Volume_Brut_Litres = Volume_Brut / 1000
	
		-- Arrondi à l'unité --
		local Volume = math.ceil( Volume_Brut_Litres )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
	end

end
return commandArray
Celui-ci est destiné à une cuve " Cylindrique " :

Code : Tout sélectionner

---------------------------------------------------------------------------
-- script_device_cuve_volumeCyl.lua ---------------------------------------
-- DumpDos 2016 -----------------------------------------------------------
---------------------------------------------------------------------------
-- Ce script permet la conversion d'une hauteur en volume en fonction de --
-- du diamètre de la cuve -------------------------------------------------
---------------------------------------------------------------------------
-- Il peut être utilisé pour une cuve , un bassin ou toute autre ----------
-- utilisation qui s'y prêterai -------------------------------------------
---------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
----------------------------------------- Variables à Editer ------------------------------------------------
-------------------------------------------------------------------------------------------------------------

local Hauteur_Eau = '150'                -- Hauteur maximale de l'eau en cm
local Marge_Capteur = '20'               -- Marge de vôtre capteur par rapport à la surface de l'eau en cm
local Diametre = '100'                   -- Diamètre de la cuve en cm
local Distance = 'Distance'              -- Nom du capteur de hauteur
local Domoticz_url = '192.168.0.11:8080' -- Adresse IP:port de Domoticz
local Afficheur = '77'                   -- IDx de l'afficheur du volume

-------------------------------------------------------------------------------------------------------------
-------------------------------------- Fin des Variables à Editer -------------------------------------------
-------------------------------------------------------------------------------------------------------------


commandArray = {}
-- Détection du changement de valeur --
if (devicechanged[Distance]) then
	
	-- Valeur distance relevée --
	Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])
	
	-- Inversion de la valeur relevée --
	local Niveau_Eau = Hauteur_Eau - ( Mesure_Capteur - Marge_Capteur )
	
	-- Vérification niveau minimum --
	if Niveau_Eau <= ( 0 ) then
 
		-- Incrémentation du volume à 0 --
		local Volume = ( 0 )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
		
	-- Vérification niveau minimum --	
	elseif Niveau_Eau > ( 0 ) then
	
		-- Calcul de l'aire --
		local Aire = math.pi * (( Diametre / 2 ) ^ 2 )
	
		-- Calcul du volume --
		local Volume_Brut = ( Aire * Niveau_Eau )
	
		-- Conversion de Cm3 à L --
		local Volume_Brut_Litres = Volume_Brut / 1000
	
		-- Arrondi à l'unité --
		local Volume = math.ceil( Volume_Brut_Litres )
	
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
	end
	
end
return commandArray
Pour ces derniers vous devrez créer un " Custom Sensor " . ( Dummy )

Re: Script pourcentage eau restante

Publié : 26 nov. 2017, 17:34
par frenesik
DumpDos a écrit :Salut,

Pour mes premiers scripts LUA, J'ajoute une pierre à l'édifice :D

Ces scripts fonctionnent aussi avec un capteur ultrasonique ( HC-SR04 )

Voici un script pour le pourcentage :

Code : Tout sélectionner

---------------------------------------------------------------------------
-- script_device_cuve.lua -------------------------------------------------
-- DumpDos 2016 -----------------------------------------------------------
---------------------------------------------------------------------------
-- Ce script permet la conversion d'une hauteur en pourcentage ------------
---------------------------------------------------------------------------
-- Il peut être utilisé pour une cuve , un bassin ou toute autre ----------
-- utilisation qui s'y prêterai -------------------------------------------
---------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
----------------------------------------- Variables à Editer ------------------------------------------------
-------------------------------------------------------------------------------------------------------------

local Hauteur_Eau = '150'                -- Hauteur maximale de l'eau en cm
local Marge_Capteur = '20'               -- Marge de votre capteur par rapport à la surface de l'eau en cm
local Distance = 'Distance'              -- Nom du capteur de hauteur
local Domoticz_url = '192.168.0.11:8080' -- Adresse IP:port de Domoticz
local Afficheur = '70'                   -- IDx de l'afficheur du niveau

-------------------------------------------------------------------------------------------------------------
-------------------------------------- Fin des Variables à Editer -------------------------------------------
-------------------------------------------------------------------------------------------------------------


commandArray = {}
-- Détection du changement de valeur --
if (devicechanged[Distance]) then
   
   -- Valeur distance relevée --
   Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])
   
   -- Inversion de la valeur relevée --
   local Niveau_Eau = Hauteur_Eau - ( Mesure_Capteur - Marge_Capteur )
   
   	-- Vérification niveau minimum --
	if Niveau_Eau <= ( 0 ) then
 
		-- Incrémentation du volume à 0 --
		local Pourcentage = ( 0 )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Pourcentage
		commandArray[1]={['OpenURL']=url }
		
	-- Vérification niveau minimum --	
	elseif Niveau_Eau > ( 0 ) then
   
		-- Calcul du pourcentage --
		local Pourcentage_Brut = Niveau_Eau / ( Hauteur_Eau / 100 )
   
		-- Arrondi à l'unité --
		local Pourcentage = math.floor( Pourcentage_Brut )
   
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Pourcentage
		commandArray[1]={['OpenURL']=url }
	end

end
return commandArray
Pensez à créer afficheur virtuel ! ( Dummy )

Voici deux autres scripts pour convertir une hauteur en volume :

Celui-ci est destiné à une cuve " Rectangulaire " :

Code : Tout sélectionner

---------------------------------------------------------------------------
-- script_device_cuve_volumerREC.lua --------------------------------------
-- DumpDos 2016 -----------------------------------------------------------
---------------------------------------------------------------------------
-- Ce script permet la conversion d'une hauteur en volume en fonction de --
-- la largeur et la longueur d'une cuve -----------------------------------
---------------------------------------------------------------------------
-- Il peut être utilisé pour une cuve , un bassin ou toute autre ----------
-- utilisation qui s'y prêterai -------------------------------------------
---------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
----------------------------------------- Variables à Editer ------------------------------------------------
-------------------------------------------------------------------------------------------------------------

local Hauteur_Eau = '150'                -- Hauteur maximale de l'eau en cm
local Marge_Capteur = '20'               -- Marge de vôtre capteur par rapport à la surface de l'eau en cm
local Longueur = '100'                   -- Longueur de la cuve en cm
local Largeur = '100'                    -- Largeur de la cuve en cm
local Distance = 'Distance'              -- Nom du capteur de hauteur
local Domoticz_url = '192.168.0.11:8080' -- Adresse IP:port de Domoticz
local Afficheur = '77'                   -- IDx de l'afficheur du niveau

-------------------------------------------------------------------------------------------------------------
-------------------------------------- Fin des Variables à Editer -------------------------------------------
-------------------------------------------------------------------------------------------------------------


commandArray = {}
-- Détection du changement de valeur --
if (devicechanged[Distance]) then
	
	-- Valeur distance relevée --
	Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])
	
	-- Inversion de la valeur relevée --
	local Niveau_Eau = Hauteur_Eau - ( Mesure_Capteur - Marge_Capteur )
	
	-- Vérification niveau minimum --
	if Niveau_Eau <= ( 0 ) then
 
		-- Incrémentation du volume à 0 --
		local Volume = ( 0 )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
		
	-- Vérification niveau minimum --	
	elseif Niveau_Eau > ( 0 ) then
	
		-- Calcul de l'aire --
		local Aire = ( Longueur * Largeur)
	
		-- Calcul du volume --
		local Volume_Brut = ( Aire * Niveau_Eau )
	
		-- Conversion de Cm3 à L --
		local Volume_Brut_Litres = Volume_Brut / 1000
	
		-- Arrondi à l'unité --
		local Volume = math.ceil( Volume_Brut_Litres )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
	end

end
return commandArray
Celui-ci est destiné à une cuve " Cylindrique " :

Code : Tout sélectionner

---------------------------------------------------------------------------
-- script_device_cuve_volumeCyl.lua ---------------------------------------
-- DumpDos 2016 -----------------------------------------------------------
---------------------------------------------------------------------------
-- Ce script permet la conversion d'une hauteur en volume en fonction de --
-- du diamètre de la cuve -------------------------------------------------
---------------------------------------------------------------------------
-- Il peut être utilisé pour une cuve , un bassin ou toute autre ----------
-- utilisation qui s'y prêterai -------------------------------------------
---------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
----------------------------------------- Variables à Editer ------------------------------------------------
-------------------------------------------------------------------------------------------------------------

local Hauteur_Eau = '150'                -- Hauteur maximale de l'eau en cm
local Marge_Capteur = '20'               -- Marge de vôtre capteur par rapport à la surface de l'eau en cm
local Diametre = '100'                   -- Diamètre de la cuve en cm
local Distance = 'Distance'              -- Nom du capteur de hauteur
local Domoticz_url = '192.168.0.11:8080' -- Adresse IP:port de Domoticz
local Afficheur = '77'                   -- IDx de l'afficheur du volume

-------------------------------------------------------------------------------------------------------------
-------------------------------------- Fin des Variables à Editer -------------------------------------------
-------------------------------------------------------------------------------------------------------------


commandArray = {}
-- Détection du changement de valeur --
if (devicechanged[Distance]) then
	
	-- Valeur distance relevée --
	Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])
	
	-- Inversion de la valeur relevée --
	local Niveau_Eau = Hauteur_Eau - ( Mesure_Capteur - Marge_Capteur )
	
	-- Vérification niveau minimum --
	if Niveau_Eau <= ( 0 ) then
 
		-- Incrémentation du volume à 0 --
		local Volume = ( 0 )
		
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
		
	-- Vérification niveau minimum --	
	elseif Niveau_Eau > ( 0 ) then
	
		-- Calcul de l'aire --
		local Aire = math.pi * (( Diametre / 2 ) ^ 2 )
	
		-- Calcul du volume --
		local Volume_Brut = ( Aire * Niveau_Eau )
	
		-- Conversion de Cm3 à L --
		local Volume_Brut_Litres = Volume_Brut / 1000
	
		-- Arrondi à l'unité --
		local Volume = math.ceil( Volume_Brut_Litres )
	
		-- Mise a jour de l'afficheur --
		local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
		commandArray[1]={['OpenURL']=url }
	end
	
end
return commandArray
Pour ces derniers vous devrez créer un " Custom Sensor " . ( Dummy )
Salut,

Avant tout merci de ton partage, hors je rencontre un soucis voici un bout du log, as tu apporté des modifications depuis ?

Code : Tout sélectionner

script_device_cuve.lua:35: attempt to perform arithmetic on global 'Mesure_Capteur' (a nil value)
Merci :)

Re: Script pourcentage eau restante

Publié : 27 nov. 2017, 21:06
par DumpDos
Bonjour,
frenesik a écrit : Salut,

Avant tout merci de ton partage, hors je rencontre un soucis voici un bout du log, as tu apporté des modifications depuis ?
Je n'ai pas apporté de modifications sur le script puisque je ne l'utilise plus aujourd'hui.

D'après l'erreur que tu affiches, la valeur que retourne de ton capteur semble "nulle". As-tu vérifié cette valeur ? ll me faut plus de précisions sur ton capteur et la valeur affichée dans DZ pour pouvoir t'aider. ;)

DumpDos

Re: Script pourcentage eau restante

Publié : 16 août 2019, 22:25
par CR_B
Je rajoute ma pierre a l'edifice.

La ligne :
-- Valeur distance relevée --
Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])

est a remplacer par :
-- Valeur distance relevée --
Mesure_Capteur = tonumber(otherdevices_svalues[Distance])

Sinon c'est le capteur distance et nom le capteur de la variable distance qui est interrogé.

Du coup ca marche nickel, merci pour le script :)

Re: Script pourcentage eau restante

Publié : 23 févr. 2020, 12:46
par linkiwearth
Bonjour,

Je suis actuellement en train de voir comment mesurer la hauteur d’eau dans une cuve de récupération d’eau de pluie.
Il me semble donc que vos scripts peuvent parfaitement faire l’affaire :)
Cependant je me pose une question, comment récupérer la valeur du capteur dans domoticz ?
J’ai fait quelques essais avec le capteur à ultrason et raspberry, j’arrive, via un script python à lire une distance, mais je ne sais pas comment faire pour l’envoyer à domoticz..

Pouvez vous me dire comment vous avez fait ?

Merci à vous 😃

Re: Script pourcentage eau restante

Publié : 17 mai 2020, 07:43
par TG76
Bonjour,

Jusqu'à quelle distance profondeur peut on espérer réussir a mesurer avec l'un de ces deux capteurs ?
D'avance merci

Re: Script pourcentage eau restante

Publié : 17 mai 2020, 12:30
par aleph0
Avec un hc-sr04, je mesure correctement un puit d'1,20m de diamètre jusqu'à 2~2,5m de profondeur. Au delà, les échos que les parois perturbent trop la mesure pour être utilisable :-/

Envoyé de mon moto g(6) en utilisant Tapatalk


Re: Script pourcentage eau restante

Publié : 21 mai 2020, 22:03
par TG76
merci beaucoup, donc valable pour une petite citerne ou un cuve a eau pluviale.