Oui c’est ça. J’ai récupéré la formule utilisée par le plugin piscine de jeedom
Super ! Merci pour ce travail et pour les nombreuses réponses aux questions des utilisateurs. L’installation en mode hivernage fonctionne parfaitement. Mise à l’épreuve pour les autres modes dans les prochains mois dès que la température de l’eau sera baignade.
Je pense que c’est bon en hiver quand tu n’as pas besoin de filtrer des heures. Par contre, en été, un journée maussade avec un pic du soleil a 18h par ex, avec une heure pivot a 18h, tu vas te retrouver a filtrer entre 12h et 2h du mat, pas super quand t’as des panneaux solaires.
Pour ma part, en hiver, l’heure pivot est basé sur le pic de production solaire (Solcast forecast), en été sur l’heure du zenith du soleil (autours des 14h sur bordeaux)
Question @Mikail.
Est ce qu’il est(serait) possible de prendre en compte le volume de la piscine et le débit de la pompe pour le calcul du temps de filtration ?
Merci
La pompe (+filtre a sable) doit etre dimensionné selon le volume de la psicine (+ d’autres parametres type longueur des tuyaux, perte de charge, forme de la piscine, diametre des tuyau). Donc, si la pompe est bien dimensionnée, le mode de filtration courbe doit repondre au besoin.
Bonjour
Comment modifier le temps de filtration en mode hivernage pour le passer de 3h à 1h30? Merci d’avance
Bonsoir,
En mode file editor (/homeassistant/blueprints/automation/mbo18/gestion_piscine_advanced.yaml)
lignes 243-247 il y a la formule de calcul du temps de filtration en mode hivernage. Je pense que c’est là qu’il faut faire la modification.
Bonjour
donc voila mon soucis, je pense que mon blueprint ne doit pas focntionner,
ma pompe se met en route tout le temps selon l’heure programme soit de 0h a 5h pourtant la temperature et en dessous de celle mise pour l hivernage…
voila ce que j’ai
merci de votre aide
voici une partie de mon fichier blueprint,« homeassistant/blueprints/automation/mbo18/gestion_piscine_advanced.yaml »
il me semble vide, normal??
merci
il faut que tu cliques sur ajouter une section, lui donner un titre (exemple : Paramètres)
dans la nouvelle section cliquer sur ajouter une carte, choisir « entités » (avec un S)
Ne pas donner de titre, et choisir chacune des entité à afficher.
@Makai
Merci, Merci, Merci…
C’était MA crainte principale en basculant de Jeedom vers HA.
Le plugin Pisicine de Jeedom était vraiment top et simple de prise en main…
je commence à bien rentrer dans HA, avec ses avantages et ses inconviénients ; et ton blueprint est vraiment top.
Merci pour la doc, merci pour le temps passé à répondre sur ce forum, Merci
Bonjour,
depuis le 25 février ce bleuprint ne fonctionne plus chez moi.
Ma configuration est la suivante:
- Core2025.3.3
- Supervisor2025.03.3
- Operating System15.0
- Interface utilisateur20250306.0
je ne sais pas par où commencer. Tout fonctionnait correctement jusque là
Merci
voici une version mise à jour qui rétabli toutes les fonctions:
blueprint:
name: "Gestion filtration piscine (avancé)"
description: "Gestion automatique de la filtration/pompe de la piscine"
domain: automation
homeassistant:
min_version: 2024.6.0
input:
temperature_piscine:
name: "Capteur de température de la piscine"
description: "La température permet de calculer la durée de filtration"
selector:
entity:
filter:
domain: sensor
device_class: temperature
multiple: false
switch_pompe:
name: "Entité de contrôle de la pompe"
description: "Pour allumer et éteindre la pompe selon les heures calculées de début et fin de filtration"
selector:
entity:
filter:
domain:
- switch
- light
multiple: false
bouton_reset:
name: "Bouton de reset du temps de filtration"
description: "Relance le calcul de la durée et des horaires de filtration"
selector:
entity:
filter:
domain: input_button
multiple: false
parametres_generaux:
name: "Paramètres généraux"
icon: mdi:cog
input:
mode_filtration:
name: "Mode de filtration de la piscine"
description: >
Courbe : Calcul de la durée selon une courbe en fonction de la température de la piscine
Hivernage : Fait marcher la pompe 3h par jour si la température de l'eau est inférieure ou égale 10°C, 24h si la température est en dessous de la température hors gel et le mode hors gel est activé. Au dessus de 10°C, le temps de filtration est égal à la température de l'eau divisée par 3.
Automatique : Combine le mode Courbe et le mode Hivernage afin de ne pas avoir à changer de mode au cours de l'année. Le mode hivernage s'active dès que l'eau passe en dessous de la température configurée
Forcé : Force le fonctionnement de la pompe
Inactif : Coupe la pompe et la gestion de la filtration
selector:
entity:
filter:
domain: input_select
multiple: false
ajustement:
name: "Coefficient d'ajustement du temps de filtration"
description: "Influe à la baisse ou à la hausse le temps de filtration"
selector:
entity:
filter:
domain: input_number
multiple: false
parametres_mode_courbe:
name: "Paramètres du mode Courbe"
icon: mdi:refresh-auto
input:
heure_pivot:
name: "Heure pivot de filtration"
description: "Heure autour de laquelle les horaires de filtration sont calculés"
selector:
entity:
filter:
domain: sensor
device_class: timestamp
multiple: false
duree_coupure:
name: "Durée de coupure de la filtration"
description: "Définit une pause dans la filtration autour de l'heure pivot"
selector:
entity:
filter:
domain: input_number
multiple: false
parametres_mode_hiver:
name: "Paramètres du mode Hivernage"
icon: mdi:snowflake
input:
heure_hivernage:
name: "Heure pivot de filtration en hivernage"
description: "Heure autour de laquelle les horaires de filtration sont calculés en hivernage"
selector:
entity:
filter:
domain: sensor
device_class: timestamp
multiple: false
duree_coupure_hiver:
name: "Durée de coupure de la filtration"
description: "Définit une pause dans la filtration autour de l'heure pivot"
selector:
entity:
filter:
domain: input_number
multiple: false
activation_hors_gel:
name: "Mode hors gel"
description: "En mode hors gel, la filtration est permanente si la température de la piscine est en dessous de la température hors gel"
default: "Activé"
selector:
select:
options:
- "Activé"
- "Désactivé"
temperature_hors_gel:
name: "Température hors gel"
description: "En dessous de cette température la filtration est permanente"
default: 1
selector:
number:
min: -5
max: 5
step: 1
unit_of_measurement: °C
mode: slider
parametres_mode_automatique:
name: "Paramètres du mode Automatique"
icon: mdi:refresh-auto
input:
temp_passage_hiver:
name: "Température de déclenchement du mode Hivernage"
description: "En dessous de cette température, activation du mode Hivernage"
default: 15
selector:
number:
min: 0
max: 20
step: 1
unit_of_measurement: °C
mode: slider
entites_pour_calcul:
name: "Entités pour stocker les données du calcul"
icon: mdi:database
input:
duree_filtration:
name: "Durée de filtration de la piscine"
selector:
entity:
filter:
domain: input_number
multiple: false
heure_debut_filtration_1_piscine:
name: "Heure début 1ère période de filtration"
selector:
entity:
filter:
domain: input_datetime
multiple: false
heure_fin_filtration_1_piscine:
name: "Heure fin 1ère période de filtration"
selector:
entity:
filter:
domain: input_datetime
multiple: false
heure_debut_filtration_2_piscine:
name: "Heure début 2ième période de filtration"
selector:
entity:
filter:
domain: input_datetime
multiple: false
heure_fin_filtration_2_piscine:
name: "Heure fin 2ième période de filtration"
selector:
entity:
filter:
domain: input_datetime
multiple: false
mode: single
max_exceeded: silent
variables:
temp_piscine: !input temperature_piscine
mode_filtration: !input mode_filtration
coef: !input ajustement
activation_hors_gel: !input activation_hors_gel
temp_hors_gel: !input temperature_hors_gel
duree_coupure: !input duree_coupure
duree_coupure_hiver: !input duree_coupure_hiver
heure_p: !input heure_pivot
heure_pivot: "{{ states(heure_p) | as_timestamp | timestamp_custom('%H:%M:%S') }}"
heure_p_h: !input heure_hivernage
heure_pivot_hiver: "{{ states(heure_p_h) | as_timestamp | timestamp_custom('%H:%M:%S') }}"
temp_passage_hiver: !input temp_passage_hiver
duree_de_filtration_courbe: >-
{% set temp = max(states(temp_piscine)|float(10), 10) %}
{% set a = 0.00335 * states(coef)|float / 100 %}
{% set b = -0.14953 * states(coef)|float / 100 %}
{% set c = 2.43489 * states(coef)|float / 100 %}
{% set d = -10.72859 * states(coef)|float / 100 %}
{% set hours = (a * temp**3) + (b * temp**2) + (c * temp) + d %}
{{ min((hours * 60)|round(0), 1440) }}
duree_de_filtration_hivernage: >-
{% set temp = states(temp_piscine)|float(10) %}
{% if activation_hors_gel == 'Activé' and temp <= temp_hors_gel %}
1440
{% elif temp < 10 %}
240
{% else %}
{{ ((temp / 3) * 60)|round(0) }}
{% endif %}
duree_de_filtration_automatique: >-
{% set temp = states(temp_piscine)|float(10) %}
{% if activation_hors_gel == 'Activé' and temp <= temp_hors_gel %}
1440
{% elif temp < 10 %}
240
{% elif temp < temp_passage_hiver %}
{{ ((temp / 3) * 60)|round(0) }}
{% else %}
{% set a = 0.00335 * states(coef)|float / 100 %}
{% set b = -0.14953 * states(coef)|float / 100 %}
{% set c = 2.43489 * states(coef)|float / 100 %}
{% set d = -10.72859 * states(coef)|float / 100 %}
{% set hours = (a * temp**3) + (b * temp**2) + (c * temp) + d %}
{{ min((hours * 60)|round(0), 1440) }}
{% endif %}
triggers:
- trigger: time
at: !input heure_debut_filtration_1_piscine
id: "1"
- trigger: time
at: !input heure_fin_filtration_1_piscine
id: "2"
- trigger: time
at: !input heure_debut_filtration_2_piscine
id: "3"
- trigger: time
at: !input heure_fin_filtration_2_piscine
id: "4"
- trigger: state
entity_id: !input bouton_reset
id: "5"
- trigger: state
entity_id: !input mode_filtration
id: "6"
action:
- if:
- or:
- condition: trigger
id: "4"
- condition: trigger
id: "5"
- condition: trigger
id: "6"
then:
- choose:
- conditions:
- condition: state
entity_id: !input mode_filtration
state: "Courbe"
sequence:
- action: input_number.set_value
target:
entity_id: !input duree_filtration
data:
value: "{{ duree_de_filtration_courbe }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_debut_filtration_1_piscine
data:
datetime: >-
{% set time = today_at(heure_pivot) - timedelta(minutes=duree_de_filtration_courbe/2) - timedelta(minutes=states(duree_coupure)|int/2) %}
{{ time if time >= today_at("00:00:00") else today_at("00:01:00") }}
- action: input_datetime.set_datetime
target:
entity_id: !input heure_fin_filtration_1_piscine
data:
datetime: "{{ today_at(heure_pivot) - timedelta(minutes=states(duree_coupure)|int/2) }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_debut_filtration_2_piscine
data:
datetime: "{{ today_at(heure_pivot) + timedelta(minutes=states(duree_coupure)|int/2) }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_fin_filtration_2_piscine
data:
datetime: >-
{% set time = today_at(heure_pivot) + timedelta(minutes=duree_de_filtration_courbe/2) + timedelta(minutes=states(duree_coupure)|int/2) %}
{{ time if time <= today_at("23:59:00") else today_at("23:59:00") }}
- conditions:
- condition: state
entity_id: !input mode_filtration
state: "Automatique"
sequence:
- action: input_number.set_value
target:
entity_id: !input duree_filtration
data:
value: "{{ duree_de_filtration_automatique }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_debut_filtration_1_piscine
data:
datetime: >-
{% set time = today_at(heure_pivot if states(temp_piscine)|float >= temp_passage_hiver else heure_pivot_hiver) - timedelta(minutes=duree_de_filtration_automatique/2) - timedelta(minutes=states(duree_coupure if states(temp_piscine)|float >= temp_passage_hiver else duree_coupure_hiver)|int/2) %}
{{ time if time >= today_at("00:00:00") and duree_de_filtration_automatique != 1440 else today_at("00:01:00") }}
- action: input_datetime.set_datetime
target:
entity_id: !input heure_fin_filtration_1_piscine
data:
datetime: "{{ today_at(heure_pivot if states(temp_piscine)|float >= temp_passage_hiver else heure_pivot_hiver) - timedelta(minutes=states(duree_coupure if states(temp_piscine)|float >= temp_passage_hiver else duree_coupure_hiver)|int/2) }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_debut_filtration_2_piscine
data:
datetime: "{{ today_at(heure_pivot if states(temp_piscine)|float >= temp_passage_hiver else heure_pivot_hiver) + timedelta(minutes=states(duree_coupure if states(temp_piscine)|float >= temp_passage_hiver else duree_coupure_hiver)|int/2) }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_fin_filtration_2_piscine
data:
datetime: >-
{% set time = today_at(heure_pivot if states(temp_piscine)|float >= temp_passage_hiver else heure_pivot_hiver) + timedelta(minutes=duree_de_filtration_automatique/2) + timedelta(minutes=states(duree_coupure if states(temp_piscine)|float >= temp_passage_hiver else duree_coupure_hiver)|int/2) %}
{{ time if time <= today_at("23:59:00") and duree_de_filtration_automatique != 1440 else today_at("23:59:00") }}
- conditions:
- condition: state
entity_id: !input mode_filtration
state: "Hivernage"
sequence:
- action: input_number.set_value
target:
entity_id: !input duree_filtration
data:
value: "{{ duree_de_filtration_hivernage }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_debut_filtration_1_piscine
data:
datetime: >-
{% set time = today_at(heure_pivot_hiver) - timedelta(minutes=duree_de_filtration_hivernage/2) - timedelta(minutes=states(duree_coupure_hiver)|int/2) %}
{{ time if time >= today_at("00:00:00") and duree_de_filtration_automatique != 1440 else today_at("00:01:00") }}
- action: input_datetime.set_datetime
target:
entity_id: !input heure_fin_filtration_1_piscine
data:
datetime: "{{ today_at(heure_pivot_hiver) - timedelta(minutes=states(duree_coupure_hiver)|int/2) }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_debut_filtration_2_piscine
data:
datetime: "{{ today_at(heure_pivot_hiver) + timedelta(minutes=states(duree_coupure_hiver)|int/2) }}"
- action: input_datetime.set_datetime
target:
entity_id: !input heure_fin_filtration_2_piscine
data:
datetime: >-
{% set time = today_at(heure_pivot_hiver) + timedelta(minutes=duree_de_filtration_hivernage/2) + timedelta(minutes=states(duree_coupure_hiver)|int/2) %}
{{ time if time <= today_at("23:59:00") and duree_de_filtration_automatique != 1440 else today_at("23:59:00") }}
- conditions:
- condition: state
entity_id: !input mode_filtration
state: "Forcé"
sequence:
- action: input_number.set_value
target:
entity_id: !input duree_filtration
data:
value: 1440
- action: input_datetime.set_datetime
target:
entity_id:
- !input heure_debut_filtration_1_piscine
- !input heure_fin_filtration_1_piscine
- !input heure_debut_filtration_2_piscine
- !input heure_fin_filtration_2_piscine
data:
time: "00:00:00"
- action: homeassistant.turn_on
target:
entity_id: !input switch_pompe
- conditions:
- condition: state
entity_id: !input mode_filtration
state: "Inactif"
sequence:
- action: input_number.set_value
target:
entity_id: !input duree_filtration
data:
value: 0
- action: input_datetime.set_datetime
target:
entity_id:
- !input heure_debut_filtration_1_piscine
- !input heure_fin_filtration_1_piscine
- !input heure_debut_filtration_2_piscine
- !input heure_fin_filtration_2_piscine
data:
time: "00:00:00"
- action: homeassistant.turn_off
target:
entity_id: !input switch_pompe
- if:
- "{{ states(mode_filtration) not in ['Forcé', 'Inactif'] }}"
then:
- choose:
- conditions:
- condition: trigger
id: "1"
sequence:
- action: homeassistant.turn_on
target:
entity_id: !input switch_pompe
- conditions:
- condition: trigger
id: "3"
- "{{ states(duree_coupure)|int > 0 }}"
sequence:
- action: homeassistant.turn_on
target:
entity_id: !input switch_pompe
- conditions:
- condition: trigger
id: "2"
- "{{ states(duree_coupure)|int > 0 }}"
sequence:
- action: homeassistant.turn_off
target:
entity_id: !input switch_pompe
- conditions:
- condition: trigger
id: "4"
sequence:
- action: homeassistant.turn_off
target:
entity_id: !input switch_pompe
bonjour
chez moi ça fonctionne toujours pas mais bon…
comment afficher le dashbord correctement??
merci
Bonjour,
Fonctionnement tout à fait satisfaisant du blueprint simplifié chez moi.
J’ai modifié la formule de calcul de la courbe (Je n’utilise que le fonctionnement « Courbe ») pour tenir compte du fonctionnement de mon bassin et de mon électrolyseur datant de 1996.
J’ai notamment calmé la forme exponentielle de la formule qui filtrait trop longtemps au dessus de 28°C.
En tout cas, chapeau pour le travail et merci encore !
Bonjour,
Vous devriez supprimer tout ce que vous avez fait et suivre le 1er post à nouveau. Ce blueprint fonctionne bien chez moi depuis un moment maintenant
Bonjour,
Je vais analyser les différences pour voir ce que vous avez modifié. J’utilise ce blueprint depuis un moment (dans la dernière version) sans avoir rien modifié et j’utilise la dernière version de HA (la bêta en cours en fait)
J’ai vérifié, je ne vois pas ce qui change ?
A part avoir supprimé les commentaires et quelques variables, remplacé « service: » par « action: » et avoir changé les if/else pour les mettre en inline, il n’y a rien qui expliquerait que ça ne fonctionnait plus avant.
Bonjour,
Je viens d’implémenter le blueprint et ça a l’air de fonctionner.
Petit bémol; lorsqu’on passe de Forcé ou Inactif à un autre mode, la pompe reste dans l’état précédent même si on est « en » ou « hors » période de filtration.
Peux tu améliorer le blueprint pour effectuer ces vérifications et mettre automatiquement la pompe dans l’état de fonctionnement attendu ?
En tous cas merci pour ce partage.
Bonsoir @Rantanplan .
J’ai le même problème. Je le gère en passant de marche forcée à Inactif, puis en revenant ensuite sur Automatique.
Sinon, SUPER blueprint qui simplifie énormément la gestion de la filtration. Merci @Makai