Aide format heure

Bonjour,
Je débute et j’ai du mal avec les formats de date et heure:

{{ states.sensor.time.state}}
{{ strptime(states('sensor.ecsheuredeb_template'),'%H:%M:%S' ) }}
{{ states.sensor.ecsheuredeb_template.state[0:5]}}

j’obtiens :

00:03
1900-01-01 00:15:01
0:15:

je n’arrive à formater mon sensor.ecsheuredeb_template pour avoir 00:15 comme le sensor.time.state
donc pour une comparaison dans un déclencheur ça marche pas les heures < 12:00 …
merci de votre aide
cordialement

Hello

C’est toi ta mécanique et ton idée au final ?
Un sensor qui contient un timestamp c’est pas forcément le plus facile et la meilleure solution pour un déclencheur

Bonjour et merci pour ta réponse,
En fait je souhaite déclencher mon chauffe eau en fonction du temps de chauffe (calcul avec l’écart de température actuelle et la consigne) par rapport à une heure de fin déterminée par un input_time (l’heure de mise à dispo). Le but est de calculer l’heure de départ.
Tout fonctionne le calcul du temps, le calcul de l’heur de départ mon sensor.ecsheuredeb_template. et je voudrais déclencher par un automatisme :

{{ states.sensor.time.state == states.sensor.ecsheuredeb_template.state[0:5] }}

mais voilà j’arrive pas à avoir le bon format pour mon sensor à savoir HH:MM comme celui du sensor.time.state.
Je ne sais pas si je suis assez clair ? En fait je reprends l’idée du plugin Chauufe eau de Jeedom, eh oui je viens de jeedom et je galére un peu à migrer mais je suis séduit par HA même s’il faut mettre les mains dans le cambouis …
Ceci dit je fais les calculs avec des sensor template mais je ne suis peut
être pas dans le bon chemin … du moins le plus efficient. J’ai un peu honte mais voilà ma stratégie, mon fichier sensor_template.yaml :

sensors:
  conso_daikin:
    friendly_name: "conso_daikin_kwh"
    unique_id: uniqueid_conso_daikin
    unit_of_measurement: "kWh"
    value_template: "{{ ((states('sensor.conso_daikin_wh') | float / 1000) | round(3)) }}"

  date_template:
    friendly_name: "Date du jour"
    entity_id: sensor.date
    value_template: '{{ as_timestamp(now()) | timestamp_custom("%d.%m.%y", True) }}'

    #calcul du temps de chauffe ECS
    # Formule : 4186 * volume en litres * élévation de température en degrés / puissance en Watts = temps en secondes
  ecscalculch_template:
    friendly_name: "ECS Calcul Chauffe"
    entity_id: sensor.ecs_calculchauffe
    value_template: "{{ (((150*(4180*((states('input_number.ecs_valeur') | float)-(states('sensor.temperature_ecs') |float))))/1200))| round(2) }}"

  ecstempsch_template:
    friendly_name: "ECS Temps Chauffe"
    entity_id: sensor.ecs_tempschauffe
    value_template: "{% set Secondes = states('sensor.ecscalculch_template') | int(0)%}
    {% set FormatTime = timedelta(seconds=Secondes) %} {{ FormatTime }}"

  #calcul de l'heure de début
  ecsheuredeb_template:
    friendly_name: "ECS Heure Debut"
    entity_id: sensor.ecs_heuredebut
    value_template: "{{((strptime(states('input_datetime.ecs_stop'),'%H:%M:%S' ))-(strptime(states('sensor.ecstempsch_template'),'%H:%M:%S' )))}}"

binary_sensor:
  - name: "PAC Power On"
    delay_on:
      minutes: 1
    delay_off:
      minutes: 1
    state: >
      {{ states('sensor.daikin_w')|float > 60 }}

au passage pourquoi studio code server me dit ? :
sensors: Property sensors is not allowed

Cordialement

Ta conversion ne fonctionne pas, tu n’as pas un format HMS mais probablement juste la chaine de départ.
Plus simple c’est de passer par un split

{{ strptime(states('sensor.ecsheuredeb_template'),'%H:%M:%S' ).split(' ')[1] }}

En regardant vite fait, je vois un calcul de durée en secondes mais il n’y a pas input_datetime.ecs_stop
J’ai compris que tu savais faire une simple évaluation de ton temps de chauffe
Perso je ferai tous les calculs à base timestamps (plutôt qu’un format date/heure) , quitte à convertir tout à la fin ou dans les cartes juste pour l’affichage

Normal, c’est sensor sans S

Même si cela ne répond pas exactement à ton besoin, tu peux jeter un oeil içi.

merci de votre aide mais là je patine …
j’ai essayé datetime :

{{states('sensor.ecscalculch_template')}}
#{% set Secondes = states('sensor.ecscalculch_template') | int(0)%}
#{% set FormatTime = timedelta(seconds=Secondes) %}
{{ FormatTime }}
{{ as_timestamp('sensor.ecstempsch_template','echec')}}
{{ as_timestamp('sensor.ecscalculch_template','echec')}}

mais j’obtiens :

12378.03
#
#
3:26:18
echec
echec

je comprends pas le split ?
en fait je pars d’un calcul arithmétique dont le résultat est un nombre de secondes, je souhaite le retrancher à une heure de fin qui est input_datetime.ecs_stop donc bien une heure sous la forme HH:MM:SS … comment obtenir simplement le résultat de cette soustraction sous le même format HH:MM:SS et de cette façon le comparer à sensor.time ??? il me semble être parti sur quelquechose de trop alambiqué … et je tourne en rond

Cordialement

En fait c’est quand même bien plus simple que tout ça :

  • Pour faire des calculs, il faut choisir ce qui est le plus simple soustraires de secondes ou faire des calculs sur des formats horraires… De toutes façon il y a un mix des 2 en entrée)
  • tous les calculs intermédiaires ne sont pas indispensables (date du jour par exemple, ecsheuredeb_template sans doute aussi)
  • sans les valeurs initiales input_datetime.ecs_stop, c’est moins facile de donner un exemple.

Bref, en tout état de cause
Partons du principe que :

  • sensor.ecscalculch_template = 12378 secondes
  • input_datetime.ecs_stop = 7:00:00 (on va supposer que quitte à se simplifer la vie, l’input-date est défini sur un format HH:MM et se passe de date, cf la doc)
  • On se fiche de calculer l’heure du début à la seconde prêt, de toute façon les triggers (et les templates) sont évalués à la minute
    Donc
{% set ecscalculch_template  = 12378 %}
{{ ecscalculch_template }}
{{ states('input_datetime.ecs_stop') }}

# input_datetime permet tout un tas de conversion, dispo dans ses attributs
{% set ecs_start = state_attr('input_datetime.ecs_stop','timestamp') - ecscalculch_template %}
{{ ecs_start }}

{% set ecs_start = strptime(states('input_datetime.ecs_stop'), '%H:%M:%S') - timedelta(minutes=(ecscalculch_template/60)|int(0)) %}
{% set ecs_start_hm = ecs_start.strftime("%H:%M") %}

{{ ecs_start_hm }}


Donc pour avoir une fin de chauffage à 7H00 avec 12378 secondes de temps nécessaire, il faut partir à 3:34
Et tout ça ça tiendrait dans 2, voire 1 template

Bonjour,
merci de votre aide à tous les deux … :pray:

@Pulpy-Luke cependant je n’arrive pas à le mettre dans un seul template … ?
Cordialement

Je prends volontairement un exemple arbitraire et pas forcément fonctionnel
Si tu fais ça

ça crée une entité sensor.date, que tu peux utiliser avec states('sensor.date') ou state_attr('sensor.date','last_update')

Mais tu peux aussi faire

  ecscalculch_template:
    friendly_name: "ECS Calcul Chauffe"
    entity_id: sensor.ecs_calculchauffe
    value_template: >-
      {% set anciensensordate=as_timestamp(now()) | timestamp_custom("%d.%m.%y", True) %}
      {{ (((150*(4180*((states('input_number.ecs_valeur') | float)-(states('sensor.temperature_ecs') |float))))/1200))| round(2) }}

Du coup dans ton code pour ecscalculch_template tu as une variable anciensensordate qui vaut la même chose que sensor.date

La principale différence, c’est que sensor.date embarque la gestion des historique dans la base de données. C’est consommer de la place pour un truc qui ne sert qu’une fois de temps en temps

excuses moi @Pulpy-Luke mais dans ton message, il manque quelque chose entre … tu peux faire: et Mais tu peux aussi faire ?

Effectivement j’ai corrigé la répétition , l’idée c’est de comparer les 2 codes (fonctionnellement)