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
Entourez votre code source avec les balises Quote grâce au bouton correspondant
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!! . 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:
--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
---------------------------------------------------------------------------
-- 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¶m=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¶m=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 " :
---------------------------------------------------------------------------
-- 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¶m=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¶m=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
commandArray[1]={['OpenURL']=url }
end
end
return commandArray
---------------------------------------------------------------------------
-- 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¶m=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¶m=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
---------------------------------------------------------------------------
-- 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¶m=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¶m=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 " :
---------------------------------------------------------------------------
-- 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¶m=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¶m=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
commandArray[1]={['OpenURL']=url }
end
end
return commandArray
---------------------------------------------------------------------------
-- 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¶m=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¶m=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 ?
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
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..
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 :-/