C’est que c’est une chaîne de caractère et non un format temp…
- platform: template
sensors:
temps_restant_programmation:
friendly_name: "Temps restant de la programmation"
value_template: >
{% set end_time = strptime(states('climate.zone_0').attributes.quick_veto_end_date_time, "%Y-%m-%dT%H:%M:%S") %}
{% set remaining_time = (end_time - now()).total_seconds() %}
{% set hours = ((remaining_time // 3600) % 24) %}
{% set minutes = ((remaining_time // 60) % 60) %}
{% set seconds = (remaining_time % 60) %}
{{ '%02d:%02d:%02d' | format(hours, minutes, seconds) if remaining_time > 0 else 'Terminé' }}
Sinon
sensor:
- platform: template
sensors:
quick_veto_end_time:
friendly_name: "Quick veto end time"
value_template: "{{ state_attr('climate.zone_0', 'quick_veto_end_date_time') | as_datetime | strftime('%H:%M:%S') }}"
Ou encore
sensor:
- platform: template
sensors:
quick_veto_end_time:
friendly_name: "Quick veto end time"
value_template: >
{% set end_time = strptime(state_attr('climate.zone_0', 'quick_veto_end_date_time'), "%Y-%m-%d %H:%M:%S") %}
{{ end_time.strftime("%H:%M:%S") }}
Alors,
le 1er NOK
le 2eme fait planté le sensor qui fonctionnait
le 3eme NOK
On va faire un essai de remplacement de caractère
sensor:
- platform: template
sensors:
quick_veto_end_time:
friendly_name: "Quick veto end time"
value_template: >
{{ state_attr('climate.zone_0', 'quick_veto_end_date_time') | regex_replace('T', ' ') | regex_replace('\.\d+$', '') }}
Donc c’était bien une chaîne de caractère
Tu obtient quel résultat ?
Ah
Voilà pour afficher HH:mm
- platform: template
sensors:
quick_veto_end_time:
friendly_name: "Quick veto end time"
value_template: >
{{ state_attr('climate.zone_0', 'quick_veto_end_date_time') | regex_replace('T', ' ') | regex_replace('\.\d+$', '') | regex_replace('^.* ', '') }}
Tu as le résultat voulu ?
Ba, en fait je voulais le temps restant donc ce sensor moins le temps actuel
- platform: template
sensors:
quick_veto_end_time:
friendly_name: "Quick veto end time"
value_template: >
{{ state_attr('climate.zone_0', 'quick_veto_end_date_time') | regex_replace('T', ' ') | regex_replace('\.\d+$', '') | regex_replace('^.* ', '') }}
quick_veto_remaining_time:
friendly_name: "Quick veto remaining time"
value_template: >
{% set end_time = strptime(state_attr('climate.zone_0', 'quick_veto_end_date_time'), '%Y-%m-%dT%H:%M:%S') %}
{% set remaining_time = (end_time - now()).total_seconds() %}
{% set hours = ((remaining_time // 3600) % 24) %}
{% set minutes = ((remaining_time // 60) % 60) %}
{% set seconds = (remaining_time % 60) %}
{{ '%02d:%02d:%02d' | format(hours, minutes, seconds) }}
Le premier sensor quick_veto_end_time
reste inchangé et affiche l’heure de fin du quick veto sous forme de chaîne de caractères.
Le deuxième sensor quick_veto_remaining_time
calcule le temps restant en récupérant l’heure de fin du quick veto à partir de l’attribut de l’entité climate.zone_0
. Ensuite, il calcule la différence entre cette heure de fin et l’heure actuelle avec la fonction now()
, puis il formate le résultat sous forme d’une chaîne de caractères de la forme hh:mm:ss
.
Au cas où
sensor:
- platform: template
sensors:
quick_veto_info:
friendly_name: "Quick veto info"
value_template: >
{% set end_time = state_attr('climate.zone_0', 'quick_veto_end_date_time') | regex_replace('T', ' ') | regex_replace('\.\d+$', '') | regex_replace('^.* ', '') %}
{% set remaining_minutes = ((as_timestamp(end_time) - now().timestamp()) / 60) | int %}
Quick Veto ends at {{ end_time }} (in {{ remaining_minutes }} minutes)
le deuxième
ne fonctionne pas non plus.
On va tenter de convertir en date Time
{% set end_time_str = state_attr('climate.zone_0', 'quick_veto_end_date_time') | regex_replace('T', ' ') | regex_replace('\.\d+$', '') %}
{% set end_time = strptime(end_time_str, '%Y-%m-%d %H:%M:%S') %}
{% set remaining_time = end_time - now() %}
Temps restant : {{ remaining_time.seconds // 3600 }}h {{ (remaining_time.seconds % 3600) // 60 }}m {{ remaining_time.seconds % 60 }}s
Sinon
- platform: template
sensors:
quick_veto_end_time:
friendly_name: "Quick veto end time"
value_template: "{{ state_attr('climate.zone_0', 'quick_veto_end_date_time') }}"
quick_veto_remaining_time:
friendly_name: "Quick veto remaining time"
value_template: >-
{% set end_time = strptime(states('sensor.quick_veto_end_time'), '%Y-%m-%d %H:%M:%S') %}
{% set remaining_time = end_time - now() %}
{{ remaining_time.seconds // 3600 }}h{{ remaining_time.seconds % 3600 // 60 }}m
Après réflexion plutôt celle ci ou on voit bien la demande de conversion
{% set end_time_str = state_attr('climate.zone_0', 'quick_veto_end_date_time') %}
{% set end_time = strptime(end_time_str, '%Y-%m-%dT%H:%M:%S') %}
{% set remaining_time = (end_time - now()).total_seconds() %}
{% set hours = ((remaining_time // 3600) % 24) %}
{% set minutes = ((remaining_time // 60) % 60) %}
{% set seconds = (remaining_time % 60) %}
{{ '%02d:%02d:%02d' | format(hours, minutes, seconds) }}
Aucune ne fonctionne, mais sur la dernière tu ecrit {% set end_time = strptime(end_time_str, '%Y-%m-%dT%H:%M:%S') %}
alors qu’il n’y apas de « T » dans le résultat. Et cette ligne bloque dans modele:
ValueError: Template error: strptime got invalid input '2023-04-25 17:13:00' when rendering template '{% set end_time_str = state_attr('climate.zone_0', 'quick_veto_end_date_time') %}
{% set end_time = strptime(end_time_str, '%Y-%m-%dT%H:%M:%S') %}
Oui c’est a adapter selon l’affichage
{% set end_time_str = state_attr('climate.zone_0', 'quick_veto_end_date_time') %}
{% set end_time = strptime(end_time_str, '%Y-%m-%d %H:%M:%S') %}
Tu peux remplacer par celle ci
Bizarre
On va revérifier si tout est bien en place a adapter selon ton attribut bien sûr
{% set end_time_str = state_attr('climate.zone_0', 'quick_veto_end_date_time') %}
{% set match = end_time_str | regex_match('(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})') %}
{% set end_time = as_timestamp(match[1] ~ '-' ~ match[2] ~ '-' ~ match[3] ~ ' ' ~ match[4] ~ ':' ~ match[5] ~ ':' ~ match[6]) %}
{% set remaining_time = end_time - now().timestamp() %}
{{ '%02d:%02d:%02d' | format((remaining_time // 3600) % 24, (remaining_time // 60) % 60, remaining_time % 60) }}