Bonjour à tous,
Je souhaite indexer le temp de filtration de ma piscine à la température de l’eau.
Tout les matins à une heure déterminée (9h par exemple) je souhaite calculer le temp de filtration de la piscine pour la journée en fonction de la température de l’eau et lancer la filtration pour cette durée.
J’ai créé un sensor qui calcul en divisant par 2 la température de l’eau :
## calcul tmp filtration piscine
- platform: template
sensors:
tmpfiltrationpiscine:
value_template: "{{ (states('sensor.temp_piscine') | float / 2) | round(1) }}"
- un input date time pour la durée de filtration
- automatisation pour calculer la durée du jour
alias: Calcul tmp filtration piscine
description: ''
trigger:
- platform: time
at: '09:00'
condition: []
action:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.duree_pompe_piscine
data:
time: ' tmpfiltrationpiscine'
mode: single
Il faudrait pouvoir convertir « tmpfiltrationpiscine » en durée pour que cela fonctionne.
Merci par avance de votre aide
System Health
version |
core-2021.12.10 |
installation_type |
Home Assistant OS |
dev |
false |
hassio |
true |
docker |
true |
user |
root |
virtualenv |
false |
python_version |
3.9.7 |
os_name |
Linux |
os_version |
5.10.63-v8 |
arch |
aarch64 |
timezone |
Europe/Paris |
Home Assistant Community Store
GitHub API |
ok |
Github API Calls Remaining |
5000 |
Installed Version |
1.21.0 |
Stage |
running |
Available Repositories |
973 |
Downloaded Repositories |
12 |
Home Assistant Cloud
logged_in |
false |
can_reach_cert_server |
ok |
can_reach_cloud_auth |
ok |
can_reach_cloud |
ok |
Home Assistant Supervisor
host_os |
Home Assistant OS 7.2 |
update_channel |
stable |
supervisor_version |
supervisor-2022.01.1 |
docker_version |
20.10.9 |
disk_total |
29.1 GB |
disk_used |
3.9 GB |
healthy |
true |
supported |
true |
board |
rpi4-64 |
supervisor_api |
ok |
version_api |
ok |
installed_addons |
File editor (5.3.3), Terminal & SSH (9.3.0), Mosquitto broker (6.0.1), Samba share (9.5.1), Samba Backup (5.0.0), Zigbee2mqtt (1.22.2-1), SQLite Web (3.2.1) |
Lovelace
dashboards |
1 |
resources |
10 |
views |
5 |
mode |
storage |
J’avance un peu avec :
value_template: {{ ((states('sensor.temp_piscine') | float / 2 *3600 )) | timestamp_custom("%H:%M", 0) }}
J’obtiens la bonne valeur avec l’outil de dévellopement et avec une température d’eau à 4.3°C : value_template: 02:09
Par contre si je copie la ligne dans le fichier configuration j’ai une erreur :
Error loading /config/configuration.yaml: invalid key: "OrderedDict([('((states(\'sensor.temp_piscine\') | float / 2 *3600 )) | timestamp_custom("%H:%M"', None), ('0)', None)])"
in "/config/sensors.yaml", line 381, column 0
Cela doit venir de la fonction timestamp_custom ?
Il y a cette intégration proposée par @oncleben31, mais je ne l’ai pas testée. Lui devrait pouvoir t’aider.
Jettes aussi un coup d’oeil sur ce post
https://forum.hacf.fr/t/filtration-piscine/3729
Autrement, le calcul de durée / heure pourrait être fait via un sensor template et du code jinja, puis injecté dans une automatisation ou alors le scheduler Schedy (ce serait mon choix).
MAIS perso, j’utilise maintenant une pompe à débit variable qui tourne 24h/24 à vitesse lente (180wh actuellement) et non 9h à vitesse rapide (2800wh avant). Je pilote alors juste la vitesse. La consommation électrique est le carré de la vitesse de filtration / débit, les pertes de charges sont fortes en vitesse rapide, d’où cette différence de consommation monstrueuse. La quantité filtrée en 24h sera la même mais la consommation est 80% en moins et donc amortissement du prix de la pompe en 2 saisons… Du coup, cela peut franchement valoir le coût de regarder cette alternative 
Salut @Argonaute et merci pour ton aide.
Bonne idée pour la pompe de filtration à vitesse variable. Je vais étudier la question.
Concernant l’intégration je souhaite faire plus simple et par moi même si possible.
Ce que je ne comprend pas c’est que cela fonctionne dans l’outil de dev :
Si je copie colle
## calcul tmp filtration piscine
- platform: template
sensors:
tmpfiltrationpiscine:
value_template: "{{ ((states('sensor.temp_piscine') | float / 2 ) * 3600) | timestamp_custom("%H:%M", 0) }}"
en ajoutant des « » j’ai cette erreur :
Error loading /config/configuration.yaml: while scanning for the next token
found character '%' that cannot start any token
in "/config/sensors.yaml", line 381, column 103
Il y a quelque chose à faire pour « activer » le code jinja ?
Salut,
Moi j’utilise une automation qui s’execute tous les matin à minuit, qui définie l’heure de début et l’heure de fin de deux périodes (j’utilise deux périodes pour faire 2h matin et 2h aprem par exemple) et les renseigne dans des input_datetime. Et d’autres automations qui démarrent à l’heure définie pour allumer ou éteindre la filtration.
Voici en brut mon code :
- id: 3fa7e204a9ef472d88e731158a2baab7
alias: durée automatique de filtration piscine
trigger:
- platform: time
at: 00:00:00
- platform: state
entity_id: automation.duree_automatique_de_filtration_piscine
from: 'off'
to: 'on'
condition: []
action:
- service: input_number.set_value
data_template:
entity_id: input_number.duree_cible_filtration
value: "{% if states(\"sensor.temperature_piscine\") < '10' -%}\n 2\n{%- elif\
\ states(\"sensor.temperature_piscine\") < '12'-%}\n 4\n{%- elif states(\"\
sensor.temperature_piscine\") < '16'-%}\n 6\n{%- elif states(\"sensor.temperature_piscine\"\
) < '24'-%}\n 8\n{%- elif states(\"sensor.temperature_piscine\") < '27'-%}\n\
\ 12\n{%- elif states(\"sensor.temperature_piscine\") < '30'-%}\n 20\n{%-\
\ elif states(\"sensor.temperature_piscine\") >= '30'-%}\n 24\n{%- else -%}\n\
\ 2\n{%- endif %}\n"
- service: input_number.set_value
data_template:
entity_id: input_number.nb_periode_filtration
value: "{% if states(\"sensor.temperature_piscine\") < '10' or states(\"sensor.temperature_piscine\"\
) >= '30' -%}\n 1\n{%- else -%}\n 2\n{%- endif %}\n"
- service: input_datetime.set_datetime
data_template:
entity_id: input_datetime.filtration_piscine_p1_on
time: "{% if states(\"sensor.temperature_piscine\") < '10' -%}\n 09:00\n{%-\
\ elif states(\"sensor.temperature_piscine\") < '12'-%}\n 09:00\n{%- elif\
\ states(\"sensor.temperature_piscine\") < '16'-%}\n 08:30\n{%- elif states(\"\
sensor.temperature_piscine\") < '24'-%}\n 08:00\n{%- elif states(\"sensor.temperature_piscine\"\
) < '27'-%}\n 06:00\n{%- elif states(\"sensor.temperature_piscine\") < '30'-%}\n\
\ 02:00\n{%- elif states(\"sensor.temperature_piscine\") >= '30'-%}\n 00:01\n\
{%- else -%}\n 17:00\n{%- endif %}\n"
- service: input_datetime.set_datetime
data_template:
entity_id: input_datetime.filtration_piscine_p1_off
time: "{% if states(\"sensor.temperature_piscine\") < '10' -%}\n 11:00\n{%-\
\ elif states(\"sensor.temperature_piscine\") < '12'-%}\n 11:00\n{%- elif\
\ states(\"sensor.temperature_piscine\") < '16'-%}\n 11:30\n{%- elif states(\"\
sensor.temperature_piscine\") < '24'-%}\n 12:00\n{%- elif states(\"sensor.temperature_piscine\"\
) < '27'-%}\n 12:00\n{%- elif states(\"sensor.temperature_piscine\") < '30'-%}\n\
\ 12:00\n{%- elif states(\"sensor.temperature_piscine\") >= '30'-%}\n 23:59\n\
{%- else -%}\n 17:30\n{%- endif %}\n"
- service: input_datetime.set_datetime
data_template:
entity_id: input_datetime.filtration_piscine_p2_on
time: "{% if states(\"sensor.temperature_piscine\") < '10' -%}\n 09:00\n{%-\
\ elif states(\"sensor.temperature_piscine\") < '12'-%}\n 15:00\n{%- elif\
\ states(\"sensor.temperature_piscine\") < '16'-%}\n 15:00\n{%- elif states(\"\
sensor.temperature_piscine\") < '24'-%}\n 14:00\n{%- elif states(\"sensor.temperature_piscine\"\
) < '27'-%}\n 14:00\n{%- elif states(\"sensor.temperature_piscine\") < '30'-%}\n\
\ 13:00\n{%- elif states(\"sensor.temperature_piscine\") >= '30'-%}\n 00:01\n\
{%- else -%}\n 18:00\n{%- endif %}\n"
- service: input_datetime.set_datetime
data_template:
entity_id: input_datetime.filtration_piscine_p2_off
time: "{% if states(\"sensor.temperature_piscine\") < '10' -%}\n 11:00\n{%-\
\ elif states(\"sensor.temperature_piscine\") < '12'-%}\n 17:00\n{%- elif\
\ states(\"sensor.temperature_piscine\") < '16'-%}\n 18:00\n{%- elif states(\"\
sensor.temperature_piscine\") < '24'-%}\n 18:00\n{%- elif states(\"sensor.temperature_piscine\"\
) < '27'-%}\n 20:00\n{%- elif states(\"sensor.temperature_piscine\") < '30'-%}\n\
\ 23:00\n{%- elif states(\"sensor.temperature_piscine\") >= '30'-%}\n 23:59\n\
{%- else -%}\n 18:30\n{%- endif %}\n"
mode: single
- alias: Filtration piscine p1 ON
trigger:
platform: template
value_template: '{{ states(''sensor.time'') == (state_attr(''input_datetime.filtration_piscine_p1_on'',
''timestamp'') | int | timestamp_custom(''%H:%M'', False)) }}'
condition:
- condition: state
entity_id: automation.filtration_piscine_automatique
state: 'on'
action:
- service: switch.turn_on
data_template:
entity_id: switch.filtration_piscine
- service: notify.mobile_app_iphone
data:
title: Piscine
message: Mise en route de la filtration
id: 2a55ff31ac83431bb1df18c74cb5455a
Je connaissais pas du tout… Quand la mienne lâchera je regarderais ca du coup, merci.
Tu ne peux mettre des doubles quote dans une expression avec des double quote. Utilise les simples quote pour le format. Je te conseille aussi de forcer une valeur à 0 dans la conversion si jamais la température n’est pas définie : float (0).
## calcul tmp filtration piscine
- platform: template
sensors:
tmpfiltrationpiscine:
value_template: "{{ ((states('sensor.fibaro_piscine_temperature_eau') | float(0) / 2 ) * 3600) | timestamp_custom('%H:%M', 0) }}"
L’alternative est d’aller à la ligne pour ne plus avoir de double quote dans l’expression
## calcul tmp filtration piscine
- platform: template
sensors:
tmpfiltrationpiscine:
value_template: ->
{{ ((states('sensor.fibaro_piscine_temperature_eau') | float(0) / 2 ) * 3600) | timestamp_custom("%H:%M", 0) }}
Super !! Ca fonctionne !
Merci beaucoup @Argonaute
Il fallait la trouver 
Je vais essayer de l’inclure dans mon automatisation pour la pompe
Test de l’automatisation OK 
alias: Pompe piscine automatique
description: ''
trigger:
- platform: time
at: input_datetime.heure_demarrage_pompe_piscine
condition:
- condition: state
entity_id: input_boolean.pompe_piscine_auto
state: 'on'
action:
- service: switch.turn_on
target:
entity_id: switch.contact_pompe_piscine
- delay: '{{ states(''sensor.tmpfiltrationpiscine'') }}'
- service: switch.turn_off
target:
entity_id: switch.contact_pompe_piscine
- service: notify.telegram_sg
data:
message: Fin de filtration piscine
mode: single
Paramètre OK du Sensor :
## calcul tmp filtration piscine
- platform: template
sensors:
tmpfiltrationpiscine:
value_template: "{{ ((states('sensor.temp_piscine') | float(0) / 2 ) * 3600) | timestamp_custom('%H:%M', 0) }}"
Merci beaucoup !!
1 « J'aime »
Salut @stephg38,
Alors moi je débarque totalement dans le monde HA. Ce que tu viens de faire pour ta piscine m’intéresse beaucoup et je souhaitais le faire pour la mienne. Mais voilà je ne sais pas où je dois mettre tous les codes que tu as écris. Peux tu me guider ?
Merci @stephg38 !
Je n’ai pas de capteur de température dans ma piscine hors sol mais j’ai néanmoins une prise connectée qui alimente la pompe. La température de l’eau ne variant pas tous les jours non plus, j’ai crée un input number pour « simuler » une valeur de température.
J’ai repris ton sensor et ton automation tout en gardant la main sur la valeur de la température par un sélecteur :
Je viens de voir cet autre post ou tu as amélioré et détaillé ta configuration
tip top merci !
1 « J'aime »
Bonjour, est ce que tu pourrais partager ton code pour cette card ? Merci d’avance
Bonjour,
Splitté en 3 cartes :
type: custom:mushroom-number-card
entity: input_number.temp_piscine
fill_container: false
name: Température de la piscine
type: entities
entities:
- entity: sensor.outside_temp
type: custom:multiple-entity-row
name: Températures
icon: mdi:coolant-temperature
show_state: false
state_color: false
entities:
- entity: sensor.outside_temp
name: Temp ext.
- entity: sensor.sensor_t_sonde_temperature
name: Temp piscine
- entity: input_number.temp_piscine
name: Temp consigne
- entity: switch.prise_lidl_5
type: custom:multiple-entity-row
name: Pompe piscine
icon: mdi:pool
show_state: false
state_color: true
entities:
- entity: switch.prise_lidl_5
name: "On"
toggle: true
- entity: sensor.prise_lidl_5_voltage
type: custom:multiple-entity-row
name: Compteur
icon: mdi:counter
show_state: false
state_color: false
entities:
- entity: sensor.prise_lidl_5_voltage
name: Tension
- entity: sensor.prise_lidl_5_current
name: Amp.
- entity: sensor.prise_lidl_5_power
name: Puiss.
- entity: sensor.prise_lidl_5_energy
name: Conso.
- entity: input_boolean.pompe_piscine_auto
type: custom:multiple-entity-row
name: Pompe piscine auto
icon: mdi:toggle-switch-outline
show_state: false
state_color: false
entities:
- entity: input_datetime.duree_pompe_piscine
name: démarrage
- entity: sensor.tmpfiltrationpiscine
name: durée
- entity: input_boolean.pompe_piscine_auto
name: auto
toggle: true
- entity: switch.prise_lidl_5
type: custom:timer-bar-card
name: Pompe
icon: mdi:pool
sync_issues: ignore
duration:
entity: sensor.tmpfiltrationpiscine
title: null
show_header_toggle: false
state_color: true
type: history-graph
entities:
- entity: switch.prise_lidl_5
name: Pompe piscine
hours_to_show: 48