Script pourcentage eau restante

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
gawel3164
Messages : 238
Inscription : 07 janv. 2016, 19:51

Script pourcentage eau restante

Messagepar gawel3164 » 05 juin 2016, 13:33

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
Domoticz V3.8153/RFlink V1.1_R45/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


DumpDos
Messages : 69
Inscription : 01 juin 2016, 20:09
Localisation : Grenoble (38)

Re: Script pourcentage eau restante

Messagepar DumpDos » 09 juin 2016, 00:04

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 )
Raspberry Pi 2 - Domoticz bêta- Custom Page - RfxTrx433E - MySensors - Z-Stick Gen 5
6 x DIO 54795 - 4 x DIO 54781 - 2 x Home Confort ECR-100 - 4 X THGR122NX - 1 X OWL Micro+
2 X RGB - 3D - 2 X Switch - 1 X Ir Rx-Tx
1 X Fibaro FGMS-001

frenesik
Messages : 1
Inscription : 26 nov. 2017, 17:28

Re: Script pourcentage eau restante

Messagepar frenesik » 26 nov. 2017, 17:34

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 :)

DumpDos
Messages : 69
Inscription : 01 juin 2016, 20:09
Localisation : Grenoble (38)

Re: Script pourcentage eau restante

Messagepar DumpDos » 27 nov. 2017, 21:06

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
Raspberry Pi 2 - Domoticz bêta- Custom Page - RfxTrx433E - MySensors - Z-Stick Gen 5
6 x DIO 54795 - 4 x DIO 54781 - 2 x Home Confort ECR-100 - 4 X THGR122NX - 1 X OWL Micro+
2 X RGB - 3D - 2 X Switch - 1 X Ir Rx-Tx
1 X Fibaro FGMS-001

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.



Revenir vers « La Bibliothèque Scripts et Tutos »

Qui est en ligne ?

Utilisateurs parcourant ce forum : jacob et 7 invités