DZVENTS : Electrovanne + capteur de pluie fait maison...

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 <\>.
inter-rupteur
Messages : 25
Inscription : 08 oct. 2020, 08:24

Re: DZVENTS : capteur de pluie fait maison...

Message par inter-rupteur »

Salut Keros,

merci beaucoup pour ses informations !! ;)

Je suis en train de finaliser mon script...


Inter-rupteur
inter-rupteur
Messages : 25
Inscription : 08 oct. 2020, 08:24

Re: DZVENTS : capteur de pluie fait maison...

Message par inter-rupteur »

Ca y est, le script est enfin terminé. Il peut-être certainement amélioré mais il tourne... Un grand merci à Keros pour son aide qui a été précieuse... ;)

Si tu vois qq chose...

Code : Tout sélectionner

return {
    active = true,
    on = 
          {
               timer = {'every 1 minutes'},
               devices = {'MD-WATER-01'},
        },
		       data = { valon = { history = true, maxItems = 20 }},
		       
execute = function(domoticz, stateon)

--------------------------------------------------------------------------------
---------------------------------- Variables -----------------------------------
--------------------------------------------------------------------------------
                local nowdate = domoticz.time.rawDate
                
                local valhistorylat = domoticz.data.valon.getLatest()                
                local hisdatelat = valhistorylat.time.rawDate
                
                local chckbasehour = domoticz.time.dateToDate('09/09/2021 21:00:00','dd/mm/yyyy hh:MM:ss', 'hh:MM:ss')
                local nowhour = domoticz.time.rawTime
                
                print('-----------------------------------------------')
                --print('last date history : ' .. hisdatelat)
                --print('date now : ' .. nowdate)
                
                --print('heure script : ' ..chckbasehour)
                --print('Heure now : ' .. nowhour)
                
                --print('value history last : ' .. valhistorylat.data)
--------------------------------------------------------------------------------                
-------------------------------- Fin Variables --------------------------------- 
--------------------------------------------------------------------------------

            if (stateon.state == 'On') then
                                
                domoticz.data.valon.add(stateon.state)
                domoticz.log('La value "On" a été ajouté dans l\'history du device !')
                domoticz.log('Le : ' .. nowdate)
                domoticz.email('Capteur de pluie : MD-WATER-01', 'Date : ' .. nowdate .. '<br>Il est en train de pleuvoir... <br>MD-WATER-01 a envoyé la value "On".', 'mail@mail.com')
            end

--------------------------------------------------------------------------------
                
            if (nowhour == chckbasehour) then
                
                if (valhistorylat.data == "On") and (hisdatelat == nowdate)  then   
                    domoticz.log('La pluie est tombée aujourd\'hui, MD-WATER-01 a été actif !')
                    domoticz.email('Arrosage 1 (low) OFF', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Journée de pluie...', 'mail@mail.com')
                else
                    
                    domoticz.log('Il n\'a pas plu aujourd\'hui, pas de déclenchement du module MD-WATER-01 !')
                    domoticz.email('Start Arrosage 1 (low)', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Start Electrovanne low a 21 heures.', 'mail@mail.com')
                    --domoticz.devices('Electrovanne - LOW (ARO-01)').switchOn().forMin(3)
                end
            end
                print('-----------------------------------------------')
end

}


Juste pour info et résumé du process :

J'ai deux électrovannes (fait maison) qui arrosent des plantes/fleurs :
  • Electrovanne LOW => arrose des petites plantes/fleurs sur 3 min
  • Electrovanne HIGH => arrose des grandes plantes/fleurs sur 5 min
J'ai un capteur de fuite d'eau à l'origine, transformé en capteur de pluie (fait maison également). Avant, mon arrosage ne s'occupait pas du temps (qu'il fasse soleil ou qu'il pleuve..). Au pire, je devais l'arrêter si il pleuvait (et encore, quand j'y pensais.. pas top..). Grâce à ce capteur et ce script, il gère tout seul l'arrosage maintenant...


Merci
Inter-Rupteur
Dernière modification par Keros le 09 sept. 2021, 18:53, modifié 1 fois.
Raison : Masquage des adresses mails
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: DZVENTS : capteur de pluie fait maison...

Message par Keros »

Bravo !!

Concernant la partie analyse, DzVents permet de gérer les timers très facilement en écrivant par exemple 'at 21h00'. Regarde mon guide, il y a un exemple avec "Every hour" : il y a une condition (.isTimer) qui vérifie que le trigger est le timer.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: DZVENTS : capteur de pluie fait maison...

Message par Neutrino »

En tant que grand fan de bidouillages et autre détournements, je suis curieux de voir tes capteurs/actionneurs. :mrgreen:
Des photos ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
inter-rupteur
Messages : 25
Inscription : 08 oct. 2020, 08:24

Re: DZVENTS : capteur de pluie fait maison...

Message par inter-rupteur »

@Keros, Oui j'ai lu et relue ton précieux sésame et vu la condition (.isTimer), je vais la tester en l'interfaçant avec le script...

Merci à toi... :D :D
Inter-rupteur

Yep Neutrino,

je vais te faire ca demain, des photos de ce que j'ai mis en place.. ;-)

Inter-Rupteur
Dernière modification par inter-rupteur le 10 sept. 2021, 15:23, modifié 2 fois.
inter-rupteur
Messages : 25
Inscription : 08 oct. 2020, 08:24

Re: DZVENTS : capteur de pluie fait maison...

Message par inter-rupteur »

Le système mis en place :

1.png
1.png (842.86 Kio) Consulté 2028 fois
Capteur sous ESPeasy
==> Aliexpress

2.png
2.png (1.77 Mio) Consulté 2028 fois
2 Sonoff (sous ESPeasy) pour les électrovannes
==> Aliexpress

3.png
3.png (1.64 Mio) Consulté 2028 fois
Electrovannes en 220v, en laiton.
Nourrice en laiton également.

==> Aliexpress


4.png
4.png (1.61 Mio) Consulté 2028 fois
Les plastiques transparents, c'est pour les protéger de la pluie...



Inter-rupteur
inter-rupteur
Messages : 25
Inscription : 08 oct. 2020, 08:24

Re: DZVENTS : Electrovanne + capteur de pluie fait maison...

Message par inter-rupteur »

J'ai apporté un lot de modifications au script :

Code : Tout sélectionner

return {
    active = true,
    on = 
          {
               timer = {'at 21:00'},
               devices = {'MD-WATER-01'},
        },
		       data = { valon = { history = true, maxItems = 20 }},
		       
execute = function(domoticz, stateon)


-------------------------------------------------------------------------------------------------------
------- Check si l'history est déjà rempli au moins avec une valeur (off : valeur par defaut) --------- 
-------      => sinon erreur d'index "NIL value" car l'history persistent data est vide ---------------
        
        if domoticz.data.valon.getOldest() == nil then
          domoticz.data.valon.add('Off')
        end
-------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------
---------------------------------- Variables ----------------------------------------------------------
-------------------------------------------------------------------------------------------------------
                local nowdate = domoticz.time.rawDate

                local valhistorylat = domoticz.data.valon.getLatest()
                local hisdatelat = valhistorylat.time.rawDate
                
        
                --local chckbasehour = domoticz.time.dateToDate('10/09/2021 15:17:00','dd/mm/yyyy hh:MM:ss', 'hh:MM:ss')
                local nowhour = domoticz.time.rawTime
                
                print('-----------------------------------------------')
                print('last date history : ' .. hisdatelat)
                print('date now : ' .. nowdate)
                
                print('heure script : ' ..chckbasehour)
                print('Heure now : ' .. nowhour)
                
                print('value history last : ' .. valhistorylat.data)
      
-------------------------------------------------------------------------------------------------------                
-------------------------------- Fin Variables --------------------------------------------------------
-------------------------------------------------------------------------------------------------------

            if (stateon.state == 'On') then
                                
                domoticz.data.valon.add(stateon.state)
                domoticz.log('La value "On" a été ajouté dans l\'history du device !')
                domoticz.log('Le : ' .. nowdate)
                domoticz.email('Capteur de pluie : MD-WATER-01', 'Date : ' .. nowdate .. '<br>Il est en train de pleuvoir... <br>MD-WATER-01 a envoyé la value "On".', 'jhon.mek.ouille@gmail.com')
            end

-------------------------------------------------------------------------------------------------------
             
             if (stateon.isTimer) then
               
                if (valhistorylat.data == "On") and (hisdatelat == nowdate)  then   
                    domoticz.log('La pluie est tombée aujourd\'hui, MD-WATER-01 a été actif !')
                    domoticz.email('Arrosage 1 (low) OFF - Pluie', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Journée de pluie...', 'jhon.mek.ouille@gmail.com')
                    domoticz.email('Arrosage 2 (high) OFF - Pluie', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Journée de pluie...', 'jhon.mek.ouille@gmail.com')
                    --domoticz.data.valon.reset()
                else
                    
                    if  (domoticz.devices('20.Electrovanne - LOW (ARO-01)').state=='Off') then

                         domoticz.log('(ARO-01 - Il n\'a pas plu aujourd\'hui, pas de déclenchement du module MD-WATER-01 !')
                         domoticz.email('Start Arrosage 1 (low)', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Start Electrovanne low a 21:00 heures.', 'jhon.mek.ouille@gmail.com')
                         domoticz.devices('20.Electrovanne - LOW (ARO-01)').switchOn().forMin(3)
                    end
                    
                    if  (domoticz.devices('21.Electrovanne - HIGH (ARO-02)').state=='Off') then

                         domoticz.log('ARO-02 - Il n\'a pas plu aujourd\'hui, pas de déclenchement du module MD-WATER-01 !')
                         domoticz.email('Start Arrosage 2 (high)', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Start Electrovanne high a 21:00 heures.', 'jhon.mek.ouille@gmail.com')
                         domoticz.devices('21.Electrovanne - HIGH (ARO-02)').switchOn().forMin(5)
                    end
                end
            end
                print('-----------------------------------------------')

            
end

}



Inter-Rupteur
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: DZVENTS : Electrovanne + capteur de pluie fait maison...

Message par Neutrino »

Beau boulot ! Bravo :!:
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
inter-rupteur
Messages : 25
Inscription : 08 oct. 2020, 08:24

Re: DZVENTS : Electrovanne + capteur de pluie fait maison...

Message par inter-rupteur »

Merci Neutrino ! :D

Nouvelle correction de script :

Code : Tout sélectionner

local OnTimer1 = 'at 21:00'
local OnTimer2 = 'every 3 minutes' 

return {
    active = true,
    on = 
          {
               timer = {OnTimer1,OnTimer2},
               
               devices = {'MD-WATER-01'},
        },
		       data = { valon = { history = true, maxItems = 20 }},
		       
execute = function(domoticz, stateon)



-------------------------------------------------------------------------------------------------------
------- Check si l'history est déjà rempli au moins avec une valeur (off : valeur par defaut) --------- 
---------    => sinon erreur d'index "NIL value" car l'history persistent data est vide ---------------
        
        if domoticz.data.valon.getOldest() == nil then
          domoticz.data.valon.add('Off')
        end
-------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------
---------------------------------- Variables ----------------------------------------------------------
-------------------------------------------------------------------------------------------------------
              --local chckbasehour = domoticz.time.dateToDate('10/09/2021 15:17:00','dd/mm/yyyy hh:MM:ss', 'hh:MM:ss')
                local emailNotification = 'jhon.mek.ouille@gmail.com'
                
                local nowdate = domoticz.time.rawDate
                local nowhour = domoticz.time.rawTime                
                local valhistorylat = domoticz.data.valon.getLatest()
                local hisdatelat = valhistorylat.time.rawDate
                local hishourlat = valhistorylat.time.rawTime

-------------------------------------------------------------------------------------------------------                
-------------------------------- Fin Variables --------------------------------------------------------
-------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------
------------------------------------ Print ------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

            if domoticz.time.matchesRule(OnTimer2) then
                print('-----------------------------------------------')
              --print('hour now : ' ..chckbasehour)                 
                print('MD-WATER-01')
                print('Last value history : ' .. valhistorylat.data)
                print('Last date history : ' .. hisdatelat)
                print('Last hour history : ' .. hishourlat)
                print('******************************')
                print('Nous sommes le : ' .. nowdate)
                print('Il est : ' .. nowhour)
                print('-----------------------------------------------')
            end
            
-------------------------------------------------------------------------------------------------------
--------------------------------- Fin Print -----------------------------------------------------------
-------------------------------------------------------------------------------------------------------            

-------------------------------------------------------------------------------------------------------
----------------------------------- Code --------------------------------------------------------------
-------------------------------------------------------------------------------------------------------


            if (stateon.state == 'On') then
                                
                domoticz.data.valon.add(stateon.state)
                domoticz.log('La value "On" a été ajouté dans l\'history du device !')
                domoticz.log('Le : ' .. nowdate)
                domoticz.email('Pluie en cours : MD-WATER-01 actif', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Il est en train de pleuvoir... <br>MD-WATER-01 a envoyé la value "On".', emailNotification)
           else
                domoticz.log('Pas de nouvelle value "On" pour le moment.')    
           
           end

-------------------------------------------------------------------------------------------------------
             
            if domoticz.time.matchesRule(OnTimer1) then

                if (valhistorylat.data == "On") and (hisdatelat == nowdate)  then   
                    domoticz.log('La pluie est tombée aujourd\'hui, MD-WATER-01 a été actif !')
                    domoticz.email('[ARO-01] - OFF cause Pluie', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Journée de pluie...', emailNotification)
                    domoticz.email('[ARO-02] - OFF cause Pluie', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Journée de pluie...', emailNotification)
                    --domoticz.data.valon.reset()
                else
                    
                    if  (domoticz.devices('20.Electrovanne - LOW (ARO-01)').state=='Off') then

                         domoticz.log('[MD-WATER-01 => ARO-01] - Pas de pluie aujourd\'hui : déclenchement de l\'arrosage [ARO-01] - LOW.')
                         domoticz.email('Start Arrosage 1 (low)', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Start Electrovanne low a 21:00 heures.', emailNotification)
                         domoticz.devices('20.Electrovanne - LOW (ARO-01)').switchOn().forMin(3)
                    end
                    
                    if  (domoticz.devices('21.Electrovanne - HIGH (ARO-02)').state=='Off') then

                         domoticz.log('[MD-WATER-01 => ARO-02] - Pas de pluie aujourd\'hui : déclenchement de l\'arrosage [ARO-02] - HIGH.')
                         domoticz.email('Start Arrosage 2 (high)', 'Date : ' .. nowdate .. '<br>Heure : ' .. nowhour .. '<br>Start Electrovanne high a 21:00 heures.', emailNotification)
                         domoticz.devices('21.Electrovanne - HIGH (ARO-02)').switchOn().forMin(5)
                    end
                end
            end
                print('-----------------------------------------------')

            
end

}

-------------------------------------------------------------------------------------------------------
----------------------------------- Fin Code ----------------------------------------------------------
-------------------------------------------------------------------------------------------------------

Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: DZVENTS : Electrovanne + capteur de pluie fait maison...

Message par Keros »

Tu peux simplifier ton script et profiter des fonctions DzVents :

J'ai l'habitude de nommer le trigger des scripts item (au lieu de stateon) car item correspond au déclencheur qui peut être un device, un timer, ect... et surtout tu peux utiliser le même nom entre tous tes scripts.
Ensuite, avec la condition if item.trigger == 'xxxxx' then tu peux exécuter des actions en fonction du déclencheur.

Dans ton cas :

Code : Tout sélectionner

execute = function(domoticz, item)
      
      if item.trigger == 'OnTimer1' then
      
      elseif item.trigger == 'OnTimer2' then
      
      elseif item.trigger == 'MD-WATER-01' then
      
      end
end
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre