Automatisation Filtration Piscine selon Température

Bonjour à toutes et à tous !

Mon problème

J’ai voulu mettre en place une automatisation de ma filtration piscine, en effet, cette dernière est asservie à l’horloge et désormais à un Shelly Pro2 (ma pompe à chaleur piscine est également pilotable via le shelly)

L’idée étant de faire fonctionner la filtration de la piscine sur la tranche horaire 9h00 - 21h00 max et en fonction de la T° de l’eau :

  • Moins de 20°C : 2 heures de filtration
  • Entre 20°C et 24°C : 6 heures de filtration
  • Entre 24°C et 28°C : 9 heures de filtration
  • Plus de 28°C : 12 heures de filtration

J’ai cherché des intégrations toutes faites ou des Blueprints, mais rien n’a fonctionné ! J’ai donc créé des automatisations pour faire le job et j’aurais besoin de vos retours afin de vérifier/valider ces dernières:

1/ Cette automatisation mesure la température de la piscine à deux moments de la journée et ajuste éventuellement la valeur de input_number.ajusted_pool_temperature.

alias: Mesure de la température piscine à 8h30 et 17h00
description: >-
  Mesure la température de la piscine à 08h30 (initialisation avec +2°C) et à
  17h00 (sans ajustement)
trigger:
  - platform: time
    at: "08:30:00"
  - platform: time
    at: "17:00:00"
condition: []
action:
  - service: switch.turn_on
    entity_id: switch.shellypro2_ec6260918ad8_switch_0
  - delay: "00:30:00"
  - service: switch.turn_off
    entity_id: switch.shellypro2_ec6260918ad8_switch_0
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ now().hour == 8 and now().minute == 30 }}"
        sequence:
          - service: input_number.set_value
            data:
              entity_id: input_number.ajusted_pool_temperature
              value: "{{ (states('sensor.piscine_2_temperature') | float) + 2 }}"
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                La température de la piscine a été mesurée à {{
                (states('sensor.piscine_2_temperature') | float) + 2 }}°C avec
                une pondération de +2°C. Le temps de filtration prévu ce jour
                est de {{ states('sensor.duree_de_filtration_prevue') }} heures.
      - conditions:
          - condition: template
            value_template: "{{ now().hour == 17 and now().minute == 0 }}"
        sequence:
          - service: input_number.set_value
            data:
              entity_id: input_number.ajusted_pool_temperature
              value: "{{ states('sensor.piscine_2_temperature') | float }}"
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                La température de la piscine a été re-mesurée à 17h00 et est de
                {{ states('sensor.piscine_2_temperature') }}°C. Le temps de
                filtration corrigé est donc de {{
                states('sensor.duree_de_filtration_prevue') }} heures.
mode: single

2/ Cette automatisation ajuste la durée de la filtration en fonction de la température de l’eau.

alias: Filtration piscine dynamique selon T° eau
description: |
  Gère la filtration de la piscine en fonction des températures de l'eau
trigger:
  - platform: state
    entity_id: input_number.ajusted_pool_temperature
condition:
  - condition: time
    after: "08:00:00"
    before: "21:00:00"
action:
  - service: switch.turn_on
    target:
      entity_id: switch.shellypro2_ec6260918ad8_switch_0
    data: {}
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: input_number.ajusted_pool_temperature
            below: 20
        sequence:
          - delay:
              hours: 2
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
      - conditions:
          - condition: numeric_state
            entity_id: input_number.ajusted_pool_temperature
            above: 20
            below: 24
        sequence:
          - delay:
              hours: 6
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
      - conditions:
          - condition: numeric_state
            entity_id: input_number.ajusted_pool_temperature
            above: 24
            below: 28
        sequence:
          - delay:
              hours: 9
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
      - conditions:
          - condition: numeric_state
            entity_id: input_number.ajusted_pool_temperature
            above: 28
        sequence:
          - delay:
              hours: 12
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
mode: single

3/ Cette automatisation gère les situations de sécurité telles que le redémarrage de Home Assistant, le dépassement de la durée prévue de filtration à partir de 18h00, et un failsafe en cas de filtration en continu pendant plus de 12 heures.

alias: Gestion de sécurité de la filtration piscine
description: >
  Gère la sécurité de la filtration de la piscine après redémarrage, à partir de
  18h00 et en cas de failsafe
trigger:
  - platform: homeassistant
    event: start
  - platform: time_pattern
    hours: /1
    minutes: "00"
  - platform: time_pattern
    hours: /1
condition: []
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "on"
          - condition: template
            value_template: >
              {% set last_on =
              as_timestamp(states.switch.shellypro2_ec6260918ad8_switch_0.last_changed)
              %} {% set now = as_timestamp(now()) %} {{ (now - last_on) > 43200
              }}  # 12 heures en secondes
        sequence:
          - service: switch.turn_off
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
          - service: logbook.log
            data:
              name: Failsafe
              message: La filtration a été éteinte par le failsafe
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                ⚠️ Le failsafe a été déclenché : la filtration de la piscine a
                été éteinte car elle était allumée depuis plus de 12 heures.
      - conditions:
          - condition: template
            value_template: "{{ now().hour >= 18 }}"
          - condition: template
            value_template: >
              {% set start_time = now().replace(hour=9, minute=0, second=0,
              microsecond=0) %} {% set duration_hours =
              states('sensor.duree_de_filtration_prevue') | float %} {% set
              end_time = start_time + timedelta(hours=duration_hours) %} {{
              now() >= end_time }}
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "on"
        sequence:
          - service: switch.turn_off
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
          - service: logbook.log
            data:
              name: Vérification du temps de filtration
              message: >
                Le temps de filtration prévu de {{
                states('sensor.duree_de_filtration_prevue') }} heures est
                dépassé. La filtration a été coupée.
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                ⚠️ Le temps de filtration prévu de {{
                states('sensor.duree_de_filtration_prevue') }} heures est
                dépassé. La filtration a été coupée.
      - conditions:
          - condition: time
            after: "08:00:00"
            before: "21:00:00"
        sequence:
          - service: input_number.set_value
            data:
              entity_id: input_number.ajusted_pool_temperature
              value: "{{ states('sensor.piscine_2_temperature') | float }}"
mode: single

Enfin un template que j’utilise également pour afficher le temps de filtration sur mon tableau de bord :

# Capteur pour la durée de filtration prévue pour la journée
- sensor:
    - name: "Durée de filtration prévue"
      unit_of_measurement: "heures"
      state: >
        {% set temp = states('input_number.ajusted_pool_temperature') | float %}
        {% if temp < 20 %}
          2
        {% elif 20 <= temp < 24 %}
          6
        {% elif 24 <= temp < 28 %}
          9
        {% else %}
          12
        {% endif %}
      icon_template: mdi:clock-outline

Ma configuration


[center]## System Information

version core-2024.6.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.6.33-haos
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1462
Downloaded Repositories 27
HACS Data ok
Home Assistant Cloud
logged_in true
subscription_expiration 16 janvier 2025 à 01:00
relayer_connected true
relayer_region eu-central-1
remote_enabled true
remote_connected true
alexa_enabled true
google_enabled false
remote_server eu-central-1-2.ui.nabu.casa
certificate_status ready
instance_id 9b1354271d894ddab777f6bfe47bce87
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.4
update_channel stable
supervisor_version supervisor-2024.06.0
agent_version 1.6.0
docker_version 26.1.4
disk_total 28.0 GB
disk_used 7.9 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
board green
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.14.0), Home Assistant Google Drive Backup (0.112.1), Studio Code Server (5.15.0), Mosquitto broker (6.4.1), Samba share (12.3.1), SAIC MQTT Gateway (Python) (0.6.2)
Dashboards
dashboards 3
resources 27
views 11
mode storage
Recorder
oldest_recorder_run 12 juin 2024 à 05:35
current_recorder_run 22 juin 2024 à 05:30
estimated_db_size 422.38 MiB
database_engine sqlite
database_version 3.44.2
Spotify
api_endpoint_reachable ok
[/center]

Bon, j’ai finalement changé mon fusil d’épaule et simplifié le process :

Démarrage tous les jours à 09h00

alias: Démarrer la pompe de filtration tous les jours à 09h00
description: >
  Cette automation démarre la pompe de filtration de la piscine à 09h00 tous les
  jours si elle n'est pas déjà en marche.
trigger:
  - platform: time
    at: "09:00:00"
condition:
  - condition: state
    entity_id: switch.shellypro2_ec6260918ad8_switch_0
    state: "off"
action:
  - service: switch.turn_on
    target:
      entity_id: switch.shellypro2_ec6260918ad8_switch_0
    data: {}
mode: single

Fin de filtration selon T° de la Piscine

alias: >-
  Gestion de fin de filtration en fonction de la température (avec redémarrage
  HA)
description: >
  Cette automation gère l'heure de fin de filtration en fonction de la
  température de la piscine, même après un redémarrage de Home Assistant.
trigger:
  - platform: homeassistant
    event: start
  - platform: time
    at: "19:00:00"
  - platform: time
    at: "20:00:00"
  - platform: time
    at: "21:00:00"
condition:
  - condition: state
    entity_id: switch.shellypro2_ec6260918ad8_switch_0
    state: "on"
  - condition: template
    value_template: >-
      {{ states('sensor.piscine_2_temperature') not in ['unavailable',
      'unknown'] }}
action:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ states('sensor.piscine_2_temperature') | float < 26 }}"
          - condition: template
            value_template: "{{ now().strftime('%H:%M:%S') == '19:00:00' }}"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
      - conditions:
          - condition: template
            value_template: "{{ states('sensor.piscine_2_temperature') | float < 28 }}"
          - condition: template
            value_template: "{{ now().strftime('%H:%M:%S') == '20:00:00' }}"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                La filtration s'est terminée à 20h00 car la température de la
                piscine était de {{ states('sensor.piscine_2_temperature') }}°C.
      - conditions:
          - condition: template
            value_template: "{{ states('sensor.piscine_2_temperature') | float < 30 }}"
          - condition: template
            value_template: "{{ now().strftime('%H:%M:%S') == '21:00:00' }}"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                La filtration s'est terminée à 21h00 car la température de la
                piscine était de {{ states('sensor.piscine_2_temperature') }}°C.
    default:
      - service: switch.turn_off
        target:
          entity_id: switch.shellypro2_ec6260918ad8_switch_0
        data: {}
mode: restart

C’est plus simple à gérer et à comprendre pour moi, pour l’hivernage j’ai déjà créé un automation en conséquence ^^

Re,
j’ai amélioré cela en ajoutant une surveillance avancée de la piscine. Cela permet de gérer la pompe de filtration et la PàC de la piscine, avec des notifications pour les conditions anormales et les besoins de maintenance.

Voici le YAML commenté :

alias: Surveillance avancée de la piscine
description: >
  Gère la pompe de filtration et la PàC de la piscine, avec notifications pour
  les conditions anormales et les besoins de maintenance.
trigger:
  - platform: time_pattern
    hours: /1  # Déclenche toutes les heures
condition:
  - condition: time
    after: "10:00:00"  # Après 10h00
    before: "22:00:00"  # Avant 22h00
  - condition: state
    entity_id: input_boolean.manual_override_pompe
    state: "off"  # Vérifie que le mode manuel de la pompe est désactivé
  - condition: state
    entity_id: input_boolean.manual_override_pac
    state: "off"  # Vérifie que le mode manuel de la PàC est désactivé
action:
  - choose:
      # Démarre la pompe de filtration si elle est éteinte
      - conditions:
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "off"
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >-
                La pompe de filtration a été démarrée automatiquement à {{
                now().strftime('%H:%M:%S') }}.

      # Arrête la pompe de filtration si elle fonctionne après 22h00 ou avant 10h00
      - conditions:
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "on"
          - condition: or
            conditions:
              - condition: time
                after: "22:00:00"
              - condition: time
                before: "10:00:00"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_0
            data: {}
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >-
                La pompe de filtration a été arrêtée automatiquement à {{
                now().strftime('%H:%M:%S') }}.

          # Notifie si la pompe de filtration est arrêtée depuis plus de 2 heures entre 10h00 et 18h00
          - condition: template
            value_template: >
              {{ (as_timestamp(now()) -
              as_timestamp(states.switch.shellypro2_ec6260918ad8_switch_0.last_changed))
              / 3600 > 7200 }}
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >-
                Attention ! La pompe de filtration est arrêtée depuis plus de 2
                heures entre 10h00 et 18h00.

      # Démarre la PàC si la production d'énergie solaire est élevée et la PàC est éteinte
      - conditions:
          - condition: numeric_state
            entity_id: sensor.energy_production_today
            above: 35
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_1
            state: "off"
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_1
            data: {}
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >-
                La PàC a été démarrée automatiquement à {{
                now().strftime('%H:%M:%S') }}.

      # Arrête la PàC si elle fonctionne après 19h00 ou avant 10h00
      - conditions:
          - condition: or
            conditions:
              - condition: time
                after: "19:00:00"
              - condition: time
                before: "10:00:00"
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_1
            state: "on"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: switch.shellypro2_ec6260918ad8_switch_1
            data: {}
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >-
                La PàC a été arrêtée automatiquement à {{
                now().strftime('%H:%M:%S') }}.
  - choose:
      # Notifie si la pompe de filtration fonctionne après 22h00
      - conditions:
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "on"
          - condition: time
            after: "22:00:00"
        sequence:
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                Attention ! La pompe de filtration fonctionne après 22h00.
                Température de l'eau : {{ states('sensor.piscine_2_temperature')
                }}°C.

      # Notifie si la pompe de filtration est arrêtée depuis plus de 2 heures entre 10h00 et 18h00
      - conditions:
          - condition: time
            after: "10:00:00"
            before: "18:00:00"
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "off"
            for:
              hours: 2
        sequence:
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >
                Attention ! La pompe de filtration est arrêtée depuis plus de 2
                heures entre 10h00 et 18h00.

      # Besoin de maintenance : Nettoyage des filtres de la pompe de filtration si elle fonctionne depuis plus de 360 heures
      - conditions:
          - condition: template
            value_template: >
              {{ (as_timestamp(now()) -
              as_timestamp(states.switch.shellypro2_ec6260918ad8_switch_0.last_changed))
              / 3600 > 360 }}
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "on"
        sequence:
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >-
                Besoin de maintenance : Nettoyer les filtres de la pompe de
                filtration.

      # Notifie si les paramètres chimiques de l'eau sont hors normes et que la pompe de filtration est en marche
      - conditions:
          - condition: template
            value_template: |
              {{ not (7 <= float(states('sensor.flipr_f35024ac_ph')) <= 7.5 and
                      600 <= float(states('sensor.flipr_f35024ac_red_ox')) <= 800 and
                      26 <= float(states('sensor.piscine_2_temperature')) <= 30) }}
          - condition: state
            entity_id: switch.shellypro2_ec6260918ad8_switch_0
            state: "on"
        sequence:
          - service: notify.mobile_app_s24_fabrice
            data:
              message: >-
                Attention ! Les paramètres chimiques de l'eau sont hors normes. 
                PH : {{ states('sensor.flipr_f35024ac_ph') }} (attendu entre 7 et 7.5),
                Red OX : {{ states('sensor.flipr_f35024ac_red_ox') }} (attendu entre 600 et 800),
                Température : {{ states('sensor.piscine_2_temperature') }}°C (attendue entre 26 et 30).
mode: single

Merci beaucoup pour ce code :slight_smile: Je viens de l’intégrer pour ma piscine. En espérant que cela fonctionne.

Quel est ton automation pour hivernage :slight_smile: je suis preneur aussi

Salut,
la voici

alias: Hivernage - Activation de la pompe de filtration pdt 2h00
description: >
  Cette automation active la pompe de filtration de la piscine en mode
  hivernage, fonctionnant de 1h00 à 3h00 du matin tous les jours.
trigger:
  - platform: time
    at: "01:00:00"
  - platform: time
    at: "03:00:00"
  - platform: homeassistant
    event: start
condition:
  - condition: state
    entity_id: switch.shellypro2_ec6260918ad8_switch_0
    state: "off"
  - condition: time
    after: "01:00:00"
    before: "03:00:00"
  - condition: time
    after: "22:00:00"
    before: "06:00:00"
action:
  - service: switch.turn_on
    target:
      entity_id: switch.shellypro2_ec6260918ad8_switch_0
    data: {}
  - delay: "02:00:00"
  - service: switch.turn_off
    target:
      entity_id: switch.shellypro2_ec6260918ad8_switch_0
    data: {}
mode: restart

bonjour

ton automatisation m’interresse, et il possible de m’aider pour la mettre en oeuvre??

merci