Hauteur d'eau du puits - graphique

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
nico81
Messages : 8
Inscription : 17 sept. 2017, 20:39

Hauteur d'eau du puits - graphique

Message par nico81 »

Bonjour,
J'ai fabriqué une 'sonde' avec un Arduino et un module rf433 qui me renvoie dans domoticz la hauteur d'eau en mm qu'il y a dans mon puits. J'utilise dans l'Arduino la bibliothèque x10rf et dans domoticz je récupère parfaitement la hauteur avec mon module rfxcom via un dispositif rfxmeter. Le problème c'est l'affichage de cette hauteur. Rfxmeter me semble être fait que pour gérer les compteurs (mais je n'en suis pas sûr). Du coup domoticz affiche des histogrammes et des mm d'eau (consommée peut être...je ne comprends pas leur signification) alors que je souhaiterais avoir une courbe du niveau de l'eau comme celle qu'on a avec les températures par exemple.
Comment faire ? Auriez vous une solution ?
Merci par avance à tous
aleph0
Messages : 328
Inscription : 27 avr. 2016, 08:06
Localisation : Hérault (34)

Re: Hauteur d'eau du puits - graphique

Message par aleph0 »

Salut !

Pour avoir une courbe, il vaut mieux utiliser un custom sensor sur lequel tu spécifie l'unitée voulue (mm dans ton cas) plutôt qu'un rfxmeter. Ce dernier est justement fait pour gérer un compteur, c'est à dire une valeur qui s'accumule dans le temps et non quelque chose qui va et vient comme un niveau de puit.

J'ai une question pour toi : quel capteur utilise-tu pour la mesure ? J'ai fais un truc similaire avec un hc-sr04 mais à partir d'un certain niveau j'ai des écho dans le puit qui m'empèchent de mesurer plus bas :( As-tu rencontré un problème similaire ? comment l'as tu résolu ?
nico81
Messages : 8
Inscription : 17 sept. 2017, 20:39

Re: Hauteur d'eau du puits - graphique

Message par nico81 »

Merci pour l'info je vais regarder cela (je découvre domoticz... ).
Pour ma sonde, c'est juste un système de flotteur avec un contre poids qui fait tourner un potard 10 tours enfermé dans un pot de confiture (cf photo). Il n'y pas le flotteur sur la photo. J'ai une course de 2m. La précision doit être de l'ordre du cm au final.
Pièces jointes
IMG_20170911_182205-1296x2304.jpg
IMG_20170911_182205-1296x2304.jpg (437.53 Kio) Consulté 7372 fois
nico81
Messages : 8
Inscription : 17 sept. 2017, 20:39

Re: Hauteur d'eau du puits - graphique

Message par nico81 »

OK, j'ai créé mon Custom sensor. Mais comment faire pour qu'il reçoive le même nombre que mon device rfxmeter ?
nico81
Messages : 8
Inscription : 17 sept. 2017, 20:39

Re: Hauteur d'eau du puits - graphique

Message par nico81 »

J'ai trouvé la réponse à ma question : C'est en faisant un script LUA avec commandArray['UpdateDevice']
Ça marche super. Merci
aleph0
Messages : 328
Inscription : 27 avr. 2016, 08:06
Localisation : Hérault (34)

Re: Hauteur d'eau du puits - graphique

Message par aleph0 »

Super !

C'est pas mal comme idée le flotteur et l'encodeur. Je vais voir si je peux me bricoler un truc dans le genre ! Merci du tuyau :-)
mannewman
Messages : 28
Inscription : 25 mai 2019, 11:43

Re: Hauteur d'eau du puits - graphique

Message par mannewman »

Bonjour
Je reviens sur ce sujet un peu ancien évoqué par nico81 et pour avoir votre aide pour corriger un script LUA
J'ai moi même fabriqué un capteur de pression absolue dans un puit de 10m acquis par un arduino NANO (je peux détailler pour serait intéressé)
J'utilise la bibliothèque X10RF pour envoyer en RF 433 Mhz la data hauteur d'eau à Domoticz pour NAS
Je la visualise ensuite dans Domoticz comme un RFXMETER en mode compteur
Mais la valeur exacte n'est pas affichée dans le champ en haut à droite mais dans celui du bas en petit et pas exploitable pour la traiter par la ensuite.
La solution donnée semble de coller un script en LUA dans "Evenement" de Domoticz en créant un nouveau "custom sensor" qui va capter la donnée dans le champ du bas de RFXMETER compteur existant
Je ne connais pas le langage LUA et J'ai tenté ce script à l'aveugle mais bien sur il ne fonctionne pas
Quelqu'un pourrait il m'aider à corriger ce script très court ?
Je vous remercie

depth_sensor = 'hauteur RFXMETER'
pct_sensor = 'hauteur CUSTOM SENSOR '
pct_sensor_id = 54
---------------------------------------
commandArray = {}
if (devicechanged[depth_sensor])
then depth = otherdevices_svalues[depth_sensor]
commandArray[1] = {['UpdateDevice'] = depth}
end
return commandArray
nico81
Messages : 8
Inscription : 17 sept. 2017, 20:39

Re: Hauteur d'eau du puits - graphique

Message par nico81 »

Code : Tout sélectionner

--
-- Domoticz passes information to scripts through a number of global tables
--
-- otherdevices, otherdevices_lastupdate and otherdevices_svalues are arrays for all devices: 
--   otherdevices['yourotherdevicename'] = "On"
--   otherdevices_lastupdate['yourotherdevicename'] = "2015-12-27 14:26:40"
--   otherdevices_svalues['yourotherthermometer'] = string of svalues
--
-- uservariables and uservariables_lastupdate are arrays for all user variables: 
--   uservariables['yourvariablename'] = 'Test Value'
--   uservariables_lastupdate['yourvariablename'] = '2015-12-27 11:19:22'
--
-- other useful details are contained in the timeofday table
--   timeofday['Nighttime'] = true or false
--   timeofday['SunriseInMinutes'] = number
--   timeofday['Daytime'] = true or false
--   timeofday['SunsetInMinutes'] = number
--   globalvariables['Security'] = 'Disarmed', 'Armed Home' or 'Armed Away'
--
-- To see examples of commands see: http://www.domoticz.com/wiki/LUA_commands#General
-- To get a list of available values see: http://www.domoticz.com/wiki/LUA_commands#Function_to_dump_all_variables_supplied_to_the_script
--
-- Based on your logic, fill the commandArray with device commands. Device name is case sensitive. 
--
commandArray = {}
offset = 0 -- offset a régler en accord avec l'arduino et la hauteur d'eau reelle du puits
Nbas  = tonumber(uservariables['seuil min puits'])  -- niveau min pour l'alerte
Nhaut = tonumber(uservariables['seuil ok puits'])  -- niveau haut pour l'alerte
Npuits = tonumber(uservariables['niveau puits'])   -- niveau actuel du puits


print ("All based event fired");
-- loop through all the devices
for deviceName,deviceValue in pairs(otherdevices) do
--    if (deviceName=='myDevice') then
--        if deviceValue == "On" then
--            print("Device is On")
--        elseif deviceValue == "Off" then
--            commandArray['a device name'] = "On"
--            commandArray['Scene:MyScene'] = "Off"
--        end
--    end
end
--print(otherdevices['puits'])
--print(otherdevices[' puits'])
if (devicechanged['dummy puits']) 
   then 
        print("dummy puits changé")
        print(tonumber(otherdevices_svalues['dummy puits']))
        if tonumber(otherdevices_svalues['dummy puits'])>10000 
           then -- Il s'agit d'une communication qui n'est pas en rapport à la hauteur d'eau qui qui signifie qu'il y a eu une micro coupure, il faut donc renvoyer l'ordre aux prises
                print("coupure détectée") -- ecriture dans le log
                commandArray['coupure courant détectée']="On" --Bascule du bouton d'alarme sur On pour garder une trace
                if otherdevices['Inter pompe']=='Off' -- on remet le relais dans le meme état que dans domoticz avant la coupure
                   then commandArray['Inter pompe'] = "Off"
                   else commandArray['Inter pompe'] = "On"
                end       
           else 
               if math.abs(tonumber(otherdevices_svalues['dummy puits'])-offset-Npuits)>25  --on filtre
                  then 
                      Npuits  = (otherdevices_svalues['dummy puits']-offset+Npuits)/2
                      commandArray['Variable:niveau puits']= tostring(Npuits)
                      commandArray['UpdateDevice']='394|0|'..tostring(Npuits)  
                  else commandArray['UpdateDevice']='394|0|'..tostring(Npuits)
               end
                 
               local niveau = tonumber(otherdevices_svalues['dummy puits'])-offset;
               --print(otherdevices['Alertes email puits'])
               -- GESTION D'ENVOI D'EMAIL POUR LES ALERTES DU NIVEAU DU PUITS
               if (otherdevices['Alertes email puits']=='On') 
                  then 
                      if (niveau<= Nbas) 
                         then
                             commandArray['Alertes email puits'] = "Off" -- on desactive l'envoi d'email pour ne pas saturer la boite
                             print("Le niveau est bas")
                             commandArray['SendEmail']='Alerte puits#Le niveau est bas#nicolas.deshaies@live.fr'
                         else 
                             if (niveau>= Nhaut) 
                                then
                                    commandArray['Alertes email puits'] = "Off"
                                    print("Le niveau est bon")
                                    commandArray['SendEmail']='Alerte puits#Le niveau est ok#nicolas.deshaies@live.fr'
                                end
                         end
                  end
               -- GESTION DE LA COUPURE DE L'INTER DE LA POMPE EN FONCTION DU NIVEAU D'EAU
               if (otherdevices['coupure pompe automatique']=='On') 
                  then
                      if (niveau<= Nbas) and (otherdevices['Inter pompe']=='On')
                         then
                             commandArray['Inter pompe'] = "Off" 
                             print("Pompe coupée")
                             commandArray['SendEmail']='Alerte puits#La pompe du puits a été coupée automatiquement#nicolas.deshaies@live.fr'
                         else 
                             if (niveau>= Nhaut)and (otherdevices['Inter pompe']=='Off')
                                then
                                    commandArray['Inter pompe'] = "On" 
                                    print("La pompe est remise en service")
                                    commandArray['SendEmail']='Alerte puits#La pompe a été remise en service#nicolas.deshaies@live.fr'
                                end
                         end
                  end           
           end
   end


    
    -- loop through all the variables
    for variableName,variableValue in pairs(uservariables) do
    --    if (variableName=='myVariable') then
    --        if variableValue == 1 then
    --            commandArray['a device name'] = "On"
    --            commandArray['Group:My Group'] = "Off AFTER 30"
    --        end
    --    end
    end
return commandArray

nico81
Messages : 8
Inscription : 17 sept. 2017, 20:39

Re: Hauteur d'eau du puits - graphique

Message par nico81 »

bonjour,
Ci dessus tout mon script de "gestion" du puits.
Ce qui vous intéresse surtout est cette commande :

commandArray['UpdateDevice']='394|0|'..tostring(Npuits)

394 est l'idx de mon custom sensor correspondant au niveau d'eau dans le puits
mannewman
Messages : 28
Inscription : 25 mai 2019, 11:43

Re: Hauteur d'eau du puits - graphique

Message par mannewman »

Encore merci !
Effectivement c'est cette commande qu'il me faut pour récupérer le niveau d'eau du compteur RFXMETER
Après dans mon cas le script est beaucoup plus court car c'est l'Arduino qui fait la gestion de la pompe et d'une électrovanne de trop plein.
Domoticz va juste me servir à afficher le niveau du puits sur mon téléphone et ensuite je teste ce niveau pour m'envoyer des alertes SMS donc avec Blockly c'est simple et pas besoin de me plonger dans LUA. :lol:
Je vais tester quand j'aurais du temps et je vous fais un retour
Merci
Répondre