Capteur template Home Assistant — filtrer la température utile piscine (valide uniquement si filtration active depuis 15 min)

Bonjour à tous :waving_hand:

Je cherche à fiabiliser un capteur de température d’eau filtrée pour ma piscine, basé sur une sonde Bayrol (connectée via sensor.bayrol_24acl210901_temperature).

Le but est que la température ne se mette à jour que si la filtration est active depuis au moins 15 minutes, et qu’elle ignore les valeurs anormales envoyées par le module Bayrol en cas de coupure wifi.

  • sensor.bayrol_24acl210901_temperature → renvoie parfois 0 °C ou ~0,01 °C lors des transitions (alors que le module reste connecté).
  • sensor.bayrol_24acl210901_flow_in → indique "on" / "off" selon l’état de la filtration.
  • input_select.pompe_filt_mode → peut être sur "Off forcé".
  • Un capteur binaire gère déjà le délai de 15 min :
template:
  - binary_sensor:
      - name: Filtration active depuis 15 min
        unique_id: filtration_active_depuis_15_min
        device_class: running
        state: >
          {{ is_state('sensor.bayrol_24acl210901_flow_in', 'on') }}
        delay_on:
          minutes: 15
        delay_off:
          minutes: 2

Pourriez vous m’aider à corriger ce code qui renvoi unvailable sur le sensor. De manière exceptionnelle, mon ami chatGPT n’a pas reussi à resoudre ma demande :

# Température filtrée (valide uniquement si filtration active)
temperature_eau_utile_filtration:
  unique_id: temperature_eau_utile_filtration
  friendly_name: "Température eau utile filtration"
  unit_of_measurement: "°C"
  icon_template: mdi:coolant-temperature
  value_template: >-
    {% set pompe_mode = states('input_select.pompe_filt_mode') %}
    {% set flow_ok = is_state('binary_sensor.filtration_active_depuis_15_min', 'on') %}
    {% set temp_state = states('sensor.bayrol_24acl210901_temperature') %}
    {% set last = states('sensor.temperature_eau_utile_filtration') | float(default=0) %}

    {# Conversion sécurisée #}
    {% if temp_state not in ['unknown', 'unavailable', 'none'] %}
      {% set temp = temp_state | float %}
    {% else %}
      {% set temp = last %}
    {% endif %}

    {# Rejeter les valeurs aberrantes ou écarts brutaux #}
    {% if temp < 5 or temp > 45 or abs(temp - last) > 5 %}
      {% set temp = last %}
    {% endif %}

    {# Mise à jour uniquement si filtration active depuis 15 min #}
    {% if (pompe_mode != 'Off forcé' or flow_ok) %}
      {{ temp }}
    {% else %}
      {{ last }}
    {% endif %}

La capteur binary_sensor.filtration_active_depuis_15_min devrait résoudre les reprises et arrêts de filtration en rouge.

Il reste cependant à filtrer les moments (en vert) ou sensor.bayrol_24acl210901_temperature devient indisponible ou renvoi des valeurs incohérentes. Dans ce cas, j’aimerai garder la dernière valeur connue.

Merci d’avance.

PS : Tout est à jour dans mon HA.

  1. Méthode d’installation Home Assistant OS
  2. Core 2025.10.2
  3. Supervisor 2025.10.0
  4. Operating System 16.2
  5. Interface utilisateur 20251001.2

Hello @Pika28 ,

Lorsque tu définis un template, tu as un champ availability qui permet de mettre l’entity comme indisponible lorsque les valeurs sont hors plage.

Exemple:

    - name: "Total puissance exportée instantanée (W)"
      icon: mdi:transmission-tower-export
      unique_id: total_power_exportee_w
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      state: >
        {%- set power_net = states('sensor.envoy_122307065303_current_net_power_consumption') | float(default=0) -%}
        {% if power_net < 0 %}
            {{ -power_net }}
        {% else %}
            {{ 0.0 }}
        {% endif %}
      availability: "{{ is_number(states('sensor.envoy_122307065303_current_power_consumption')) }}"

Bonjour @Jean-Marc_Collin. Mon besoin est de garder la dernière valeur connue quand la filtration s’arrête ou que le capteur source est indisponible.

Ok c’est plutôt une automatisation qu’il faut faire alors pour setter un input_number en fonction de conditions, sauvegarder la dernière valeur connue, …