Gestion piscine - découverte automatisation

Bonjour à tous,
Je souhaiterai vous solliciter pour avoir votre aide sur le fonctionnement d’une automatisation, et en plus me permettrait de comprendre la logique à avoir, l’arborescence…
J’ai vu sur le forum qu’il en existe déjà des « tout faits », des blueprints également…
Avant de m’attaquer à quelque chose d’aussi pousser, je souhaiterai déjà me faire quelque chose de simple en partant sur un principe de calcul de temps de fonctionnement simple, juste basé sur la température de l’eau.

J’ai une entité temp_pool_veille qui enregistre la valeur maximale de la température de la veille

A 8h30
Si température inférieur à 13°
Fonctionnement pompe sur 1h

A 8H30
si température compris entre 13 et 18°
Fonctionnement pompe sur température/2 -2h

A 8H30
si température compris entre 18 et 28°
Fonctionnement pompe sur température/2

A 8h30
si température supérieur à 28°
Fonctionnement pompe sur température/2 + 2h

A 8h30
si température supérieur à 32°
Fonctionnement pompe température/2 + 4h

Pour le moment je n’en pas rendu à ce niveau de fonctionnement mais c’est là où je souhaiterai arriver. A comprend pour moi avec les if elsif then endif… Merci pour votre aide.

alias: piscine-TEMP-dev
description: ""
trigger:
  - platform: time
    at: "08:30:00"
condition: []
action:
  - if:
      - condition: numeric_state
        entity_id: input_number.temp_pool_veille
        below: 13
    then:
      - action: telegram_bot.send_message
        data:
          message: >
            Temperature actuelle :  {{states('sensor.temperature_piscine')}}°C

            Temperature max piscine :
            {{states('input_number.temp_pool_veille')}}

            Durée filtration : Durée minimum de 60 minutes

      - type: turn_on
        device_id: da2f811fc0a6935fb815c299030b1f5a
        entity_id: 31c1d2b69050010120a365385c15eff3
        domain: switch
        enabled: true
      - delay:
          hours: 1
          minutes: 0
          seconds: 0
          milliseconds: 0
      - type: turn_off
        device_id: da2f811fc0a6935fb815c299030b1f5a
        entity_id: 31c1d2b69050010120a365385c15eff3
        domain: switch
    else:
      - if:
          - condition: numeric_state
            entity_id: input_number.temp_pool_veille
            below: 20
        then:
          - action: telegram_bot.send_message
            data:
              message: >
                Temperature actuelle : 
                {{states('sensor.temperature_piscine')}}°C

                Temperature max piscine :
                {{states('input_number.temp_pool_veille')}}

                Durée filtration : {{states('input_number.temp_pool_veille') |
                int /2 }}

                Durée filtration (min) :
                {{states('input_number.temp_pool_veille') |int*60/2 - 60}}

                Durée filtration en minutes :
                {{states('input_number.duree_pompe') | int- 60}}
      - type: turn_on
        device_id: da2f811fc0a6935fb815c299030b1f5a
        entity_id: 31c1d2b69050010120a365385c15eff3
        domain: switch
        enabled: true
      - delay:
          minutes: "{{ states('input_number.duree_pompe') | int }}"
      - type: turn_off
        device_id: da2f811fc0a6935fb815c299030b1f5a
        entity_id: 31c1d2b69050010120a365385c15eff3
        domain: switch
  - if:
      - condition: numeric_state
        entity_id: input_number.temp_pool_veille
        above: 20.5
    then:
      - action: telegram_bot.send_message
        data:
          message: >
            Temperature actuelle :  {{states('sensor.temperature_piscine')}}°C

            Temperature max piscine :
            {{states('input_number.temp_pool_veille')}}

            Durée filtration : {{states('input_number.temp_pool_veille') | int
            /2 }}

            Durée filtration (min) : {{states('input_number.temp_pool_veille')
            |int*60/2 - 60}}

            Durée filtration en minutes : {{states('input_number.duree_pompe') |
            int- 60}}
      - type: turn_on
        device_id: da2f811fc0a6935fb815c299030b1f5a
        entity_id: 31c1d2b69050010120a365385c15eff3
        domain: switch
        enabled: true
      - delay:
          minutes: "{{ states('input_number.duree_pompe') | int }}"
      - type: turn_off
        device_id: da2f811fc0a6935fb815c299030b1f5a
        entity_id: 31c1d2b69050010120a365385c15eff3
        domain: switch
mode: single

Salut David,

Parlons condition. Je risque d’enfoncer des portes ouvertes mais je préfère être sûr. Quand tu fais un « si températures < 13 sinon » c’est forcément supérieur à 13 tout ce qui suit.
Le second point il faut veiller à l’indentation.

- Si température < 13
  Alors:
    (je fais mes actions 1)
  Sinon:
    - Si température < 18
      Alors:
        (je fais mes actions 2)
      Sinon:
        - Si température < 28
          Alors:
            (je fais mes actions 3)
          Sinon:
            (je fais mes actions 4)

Il faut que tu commences par corriger ça dans ton code

Bonjour @selecus
après 8 mois d’inactivité… désolé, j’espère que a va bien de ton côté.
J’ai avancé sur mon projet de gestion selon température…
J’ai également trouvé l’option dans HA du « choisir » et des blocs e construction faisable… voilà où j’en suis rendu, tu en penserais quoi ?

alias: Pompe-piscine-Temp-Max_dev
description: ""
triggers:
  - at: "10:30:00"
    trigger: time
conditions:
  - condition: state
    entity_id: input_boolean.hivernage_piscine
    state: "off"
actions:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: sensor.tempmaxpool
            below: 15.5
        sequence:
          - action: telegram_bot.send_message
            metadata: {}
            data:
              title: Piscine, température < 15.5°
              message: >-
                Temperature actuelle : 
                {{states('sensor.temperature_piscine')}}°C     Temperature max
                piscine : {{states('input_number.temp_pool_veille')}} Durée
                filtration : {{states('input_number.temp_pool_veille') | int
                /2-2}}hr Durée filtration (min) :
                {{states('input_number.temp_pool_veille') | int *60/2-180 }}
                Durée filtration en minutes :
                {{states('input_number.duree_pompe')}}
          - type: turn_on
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
          - delay:
              minutes: "{{ states('input_number.temp_pool_veille') | int *60/2-180 }}"
            enabled: true
          - type: turn_off
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
      - conditions:
          - condition: numeric_state
            entity_id: sensor.tempmaxpool
            below: 19
        sequence:
          - action: telegram_bot.send_message
            metadata: {}
            data:
              title: Piscine, température < 19°
              message: >-
                Temperature actuelle : 
                {{states('sensor.temperature_piscine')}}°C     Temperature max
                piscine : {{states('input_number.temp_pool_veille')}} Durée
                filtration : {{states('input_number.temp_pool_veille') | int
                /2-2}}hr Durée filtration (min) :
                {{states('input_number.temp_pool_veille') | int *60/2-150 }}
                Durée filtration en minutes :
                {{states('input_number.duree_pompe')}}
          - type: turn_on
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
          - delay:
              minutes: "{{ states('input_number.temp_pool_veille') | int *60/2-150 }}"
            enabled: true
          - type: turn_off
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
      - conditions:
          - condition: numeric_state
            entity_id: sensor.tempmaxpool
            below: 24
        sequence:
          - action: telegram_bot.send_message
            metadata: {}
            data:
              title: Piscine, température < 24°
              message: >-
                Temperature actuelle : 
                {{states('sensor.temperature_piscine')}}°C     Temperature max
                piscine : {{states('input_number.temp_pool_veille')}} Durée
                filtration : {{states('input_number.temp_pool_veille') | int
                /2-2}}hr Durée filtration (min) :
                {{states('input_number.temp_pool_veille') | int *60/2-60 }}
                Durée filtration en minutes :
                {{states('input_number.duree_pompe')}}
          - type: turn_on
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
          - delay:
              minutes: "{{ states('input_number.temp_pool_veille') | int *60/2-60 }}"
            enabled: true
          - type: turn_off
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
      - conditions:
          - condition: numeric_state
            entity_id: sensor.tempmaxpool
            below: 30
        sequence:
          - action: telegram_bot.send_message
            metadata: {}
            data:
              title: Piscine, température < 30°
              message: >-
                Temperature actuelle : 
                {{states('sensor.temperature_piscine')}}°C     Temperature max
                piscine : {{states('input_number.temp_pool_veille')}} Durée
                filtration : {{states('input_number.temp_pool_veille') | int
                /2-2}}hr Durée filtration (min) :
                {{states('input_number.temp_pool_veille') | int *60/2 }} Durée
                filtration en minutes : {{states('input_number.duree_pompe')}}
          - type: turn_on
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
          - delay:
              minutes: "{{ states('input_number.temp_pool_veille') | int *60/2 }}"
            enabled: true
          - type: turn_off
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
      - conditions:
          - condition: numeric_state
            entity_id: sensor.tempmaxpool
            above: 30
        sequence:
          - action: telegram_bot.send_message
            metadata: {}
            data:
              title: Piscine, température > 30°
              message: >-
                Temperature actuelle : 
                {{states('sensor.temperature_piscine')}}°C     Temperature max
                piscine : {{states('input_number.temp_pool_veille')}} Durée
                filtration : {{states('input_number.temp_pool_veille') | int
                /2-2}}hr Durée filtration (min) :
                {{states('input_number.temp_pool_veille') | int *60/2+90 }}
                Durée filtration en minutes :
                {{states('input_number.duree_pompe')}}
          - type: turn_on
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
          - delay:
              minutes: "{{ states('input_number.temp_pool_veille') | int *60/2+90 }}"
            enabled: true
          - type: turn_off
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch
mode: single

Pas de pression bien sur quand tu vois que j’ai mis mois à trouver ça… Bon je n’étais pas derrière non plus tu t’en doutes :grinning:
Merci,

Petit visuel de l’exécution qui est assez explicite je trouve.

Salut David,
Ta structure me parait bien. Elle est fonctionnel. Tu peux t’en servir t’elle que tu l’as écrit.

Je te recommande cependant une modification. Intéresse toi au timer pour remplacer le delay. Actuellement, ton automatisation va attendre parfois plusieurs heures pour éteindre ta pompe. Si entre temps tu as du redémarrer HA (MAJ ou coupure de courant) ta pompe ne sera éteinte que le lendemain. Le timer, contrairement au delay, est conservé au redémarrage ce qui assure l’extinction de la pompe.

Moi qui croyait avoir fini avec ça…
Bon j’ai regardé au timer, j’ai l’impression que c’est bien plus compliqué à mettre en œuvre. :thinking:

Tu peux garder ton code tel quel.

C’est juste une prévention. J’ai moi même trainé des pieds pendant longtemps avant de passer du delay au timer.
Plutôt que de modifier tout ton code tout de suite, entraine toi sur le timer avec une autre automation. Tu peux faire une automatisation qui lance un timer à heure fixe et avec à la fin une notification comme tu sais déjà le faire. Ensuite entraîne-toi à faire varier la durée du timer en fonction de la température et tu auras réussi sans trop de compliquer la vie

yep yep à voir a en effet, mais est-ce que c’est un peu cela :
(aussi simple, cela me paraitrait bizarre loool)

          - action: timer.start
            metadata: {}
            data:
              duration: "{{ states('input_number.temp_pool_veille') | int *60/2-60 }}"

En effet c’est trop simple. Il faut aussi que tu réceptionne la fin du timer. Quand le timer arrive à terme, tu arrêtes ta pompe.

Je te recommande de le détecter dans la même automatisation plutôt que d’en créé une nouvelle.

triggers:
  - at: "10:30:00"
    trigger: time
    id: "on"
  - trigger: state
    entity_id:
      - timer.pompe_piscine_off_timer
    to: idle
    id: "off"
conditions:
  - condition: state
    entity_id: input_boolean.hivernage_piscine
    state: "off"
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - "on"
        sequence:
            # lancement du timer en fonction de le température
          - action: timer.start
            target:
              entity_id: timer.pompe_piscine_off_timer
            data:
              duration: "{{ states('input_number.temp_pool_veille') | int *60/2-60 }}"
      - conditions:
          - condition: trigger
            id:
              - "off"
        sequence:
          # arret de la pompe
          - type: turn_off
            device_id: da2f811fc0a6935fb815c299030b1f5a
            entity_id: 31c1d2b69050010120a365385c15eff3
            domain: switch

Tu remarqueras qu’il y a un ‹ ID › au timer

En effet, dans ton exemple, le trigger est dennomé timer.pompe_piscine_off_timer

par contre sous le trigger « time » at 10:30 tu as un id aussi "on"

et après dans tes actions… je suis perdu lol dans l’appel du timer justement avec son id "on"

A suivre… merci

bon… je me suis fait un peu aidé.
j’ai créer un timer dans mon config.yaml
j’ai modifié l’automatisation avec ce timer
j’ai créé une auto de fin de timer
A voir aujourd’hui comment cela va fonctionner…

En fonction de ce timer, je dois pouvoir récupérer des info pour avoir une barre de progression du temps de fonctionnement non ?

Lancement de l’automatisation, le timer est bien pris en compte, l’envoi de la durée se met bien en « duration » mais par contre le remaining ne bouge pas, il reste à la valeur initiale du « duration »…
embêtant

Besoin d’un coup de main svp :
voici mon code :

- target:
    entity_id: timer.pompe_piscine_timer
  data:
    duration: >
    {% set minutes = (states('input_number.temp_pool_veille') | int
     * 60 / 2 - 180) | int %} {{ '{:02}:{:02}:00'.format(minutes //
     60, minutes % 60) }}
     action: timer.start

Et voici mon timer :

Avec un modèle je peux voir les états du timer, mais remaining ne bouge pas…

{{ state_attr('timer.pompe_piscine_timer', 'remaining') }}
{{ state_attr('timer.pompe_piscine_timer', 'duration') }}
{{ states('timer.pompe_piscine_timer') }}

me donne respectivement :
7:30:00
7:30:00
active

Merci,

Ok, timer mis en place et fonctionnel, je reconnais que c’est nettement plus puissant et secure qu’un delay, merci de m’y avoir dirigé.

avec plaisir david ! et je suis content que tu es trouvé toutes tes solutions

1 « J'aime »

Bonjour @David_PIQUEMAL,

Bravo pour le boulot réalisé ! Je suis pour ma part novice en HA et je me suis mis en tête d’automatiser ma pompe de piscine, y compris l’hier pour le hors-gel car je fais un hivernage actif.

Elle est équipée d’une sonde de température sur le circuit d’eau et d’un “disjoncteur” TONGOU dans le tableau électrique pour commander la pompe.

Dans mon idée, je voudrais faire ça :

3 modes de fonctionnement à choisir avec un switch sur le dashboard :
	- Automatique
		- Eté (T° eau >=16°C)
		- Hiver (T° eau <16°C)
	- Marche forcée
	- Arrêt

Mode automatique été :
	- Démarrage de la pompe pendant 5min à 6h du matin, pour faire circuler l'eau sur le capteur T°
	- Coupure pompe
	- Calcul du temps de filtration selon les plages suivantes :
		- 16 à 20°C = 2h
		- 21 à 25°C = 5h
		- 26 à 30°C = 10h
	- Calcul de l'heure de démarrage de la pompe pour optimisation selon panneaux solaires et heures de baignade :
		- 16 à 20°C = de 12h jusqu'à 14h
		- 21 à 25°C = de 10h jusqu'à 15h
		- 26 à 30°C = de 09h30 jusqu'à 19h30
	- Démarrage de la pompe à l'heure prévue et pour la durée programmée
	- Arrêt de la pompe

Mode automatique hiver :
	- Démarrage de la pompe tous les matins de 5h à 6h
	- Coupure pompe
	- Démarrage de la pompe pendant 5min si la T° de l'eau descend à 0°C
	- Coupure pompe

Serait-il possible d’avoir ton code final pour m’en servir de base STP ?

Merci d’avance.

Bonjour,

Voici ce que j’ai fais : Temps de marche pompe piscine dynamique - #3 par Mars190

Cela peut correspondre à ce que tu souhaites.

Salut,

Vois avec le post de Mars190 et reviens éventuellement vers nous si besoin sans problèmes, si je peux aider, avec plaisir mais je galère pas mal hein, attention à mes conseils mdr !!

Par contre, si tu te sers d’un disjoncteur pour faire du on/off ça, électriquement ce n’est pas bon ! Un disjoncteur n’est pas fait pour cela, c’est un organe de protection, pas de puissance ! Il vaut mieux passer par une prise connectée ou un contacteur connecté qu’un disjoncteur.

Merci à tous les deux pour vos réponses rapides. Il semble que vous n’ayez pas de mode hivernage (du genre : si T° eau = 0°C, alors faire tourner la pompe 5 min) dans vos codes, je vais regarder ça de plus près et tenter de bidouiller.

Pour le “disjoncteur”, je l’avais mis entre guillemets pour simplifier, mais c’est en effet plutôt un interrupteur DIN, qui est lui protégé derrière le disjoncteur de la pompe dans mon tableau. Il s’agit de ce modèle. :wink:

J’ai une automatisation spécifique pour le “grand froid” que voici, elle est très simple mais c’est une automatisation bien à part :

(très simple)

alias: Pompe_Piscine_Gd_Froid
description: «  »
triggers:

at: « 03:00:00 »
trigger: time
conditions:

condition: numeric_state
entity_id: sensor.temperature_sonde_exterieur
below: 0
actions:

type: turn_on
device_id: xxxxxxxxx
entity_id: xxxxxxxxx
domain: switch

data:
message: Grand froid, la pompe de la piscine est allumée
action: telegram_bot.send_message

delay:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0

type: turn_off
device_id: xxxxxxxxx
entity_id: xxxxxxxxx
domain: switch

data:
message: "Grand froid, la pompe de la piscine a fini de fonctionner "
action: telegram_bot.send_message
mode: single

Tu as confiance en cette marque ? J’ai acheté un telérupteur (lumière de mon escalier) de ce marque mais j’ai toujours pas osé la monter dans mon tableau looool je sais pas trop…