Soustraction d'heure

Hello,

Je travaille actuellement sur les horaires de passage de bus, et je souhaite récupérer le temps qu’il reste avant le prochain bus. J’ai la variable

{{ states('sensor.idfm_mm_gdvlp_0') }}

qui me renvoie la valeur

2024-08-27 08:10:41+02:00

Je voudrais pouvoir soustraire cette valeur « 2024-08-27 08:10:41 » à la valeur « now() » et que cela me ressorte le nombre de minutes entre ces deux valeurs.

Comme cela si un bus passe à 00:12 et que nous sommes encore à 23h58 cela puisse toujours m’indiqué le nombre de minutes à patienter.

Ma première idée était de faire ça:

{{ states('sensor.idfm_mm_gdvlp_0', '%H:%M') }} - {{ now().strftime('%d-%m-%y %H:%M') }}

mais j’ai obtenu :

2024-08-27 08:12:13+02:00 - 27-08-24 08:04

J’ai regardé à droite à gauche mais j’ai rien trouvé dans ce sens ou j’ai mal cherché. Après c’est la première fois que je m’amuse avec les variables…

Merci pour le coup de main

La partie gestion de variable typé en date, duration n’est pas évidente si on a pas des notion de programmation en python , …

Si tu crée des variables, je ne peut que fortement de conseiller d’utiliser des formats « standard » et reconnu pour que la variable soit typé et afficher correctement par la suite sans modification
genre exemple :

    - name: Duree Jour
      unique_id: daily_duration
      device_class: duration
      icon: mdi:weather-sunset-up
      unit_of_measurement: s
      state: >
        {{ (states.sun.sun.attributes.next_setting  | as_datetime | relative_time - states.sun.sun.attributes.next_rising  | as_datetime | relative_time).total_seconds()|int(default=0) }}

Tu peut, aussi regarder comment j’ai fait sur la partie automatisation de la partie « Lave-Vaisselle : Fin , Notification » ( notamment la création de la variable time ) : Gestion de lave-vaisselle dans Home assistant

Sinon, tu peut aussi faire des calculs a la volé dans le dashboard et pour ça, tu peut t’aider de la librairie easy_time qui permet de manipuler et afficher « facilement » des dates/durée avec differents format :


{% from 'easy_time.jinja' import custom_time, custom_time_attr, speak_the_days %}

{% if states('sensor.eau_froide_cycle') != '0' %}* 
  {% if as_timestamp(states('input_datetime.eau_froide_0_fin')) == 0 %}En cours d'utilisation depuis {{ (strptime(states('input_datetime.eau_froide_0_debut'),'%Y-%m-%d %H:%M:%S')).strftime('%Hh%M') }}

  {% else %}De {{ (strptime(states('input_datetime.eau_froide_0_debut'),'%Y-%m-%d%H:%M:%S')).strftime('%Hh%M') }} à {{ (strptime(states('input_datetime.eau_froide_0_fin'),'%Y-%m-%d%H:%M:%S')).strftime('%Hh%M') }}
  {% endif %}
, {{ states('sensor.eau_froide_cycle')|round(1, \"ceil\", default = 0) }}L utiliser
{% endif %}

* {% if speak_the_days('input_datetime.eau_froide_1_debut') == \"today\"%}
{% elif speak_the_days('input_datetime.eau_froide_1_debut') == \"1 day ago\"%}Hier : 
  {% elif speak_the_days('input_datetime.eau_froide_1_debut') == \"2days ago\" %}Avant-hier : 
  {% else %}il y a {{ speak_the_days('input_datetime.eau_froide_1_debut')[0:1] }} jours : 
  {% endif %}
De {{ (strptime(states('input_datetime.eau_froide_1_debut'),'%Y-%m-%d%H:%M:%S')).strftime('%Hh%M') }} à {{(strptime(states('input_datetime.eau_froide_1_fin'),'%Y-%m-%d%H:%M:%S')).strftime('%Hh%M') }}, {{ states('input_number.eau_froide_1')|round(1, \"ceil\", default = 0) }}L utiliser
...
...

Dans tout les cas, je te conseil fortement de passer par outils de dev/modèles pour tester, …

Salut,

Tu sais que la lib intègre la traduction :

{{ speak_the_days("2023-04-07 00:00:00", language='fr') }}

Pas quand j’ai commencer a l’utiliser la lib, si je me souvient bien (mais depuis, je vais autrement, donc je l’utilise plus), mais merci de l’info !

++

Hello,

J’ai réussi à faire ce que je voulais en continuant de chercher de mon côté. Merci quand même pour le coup de main

Les operations avec des dates, c’est toujours acrobatique de mon point de vue…

Poste ta solution, ça aidera le suivant…

:+1:

Voici ce que j’ai fait:

J’ai crée un sensor, pour ne récupérer que l’heure:

    - name: horaire_prochain_bus
      state: "{{ as_timestamp(states('sensor.idfm_mm_gdvlp_0')) | timestamp_custom('%H:%M') }}"
      icon: "mdi:calendar-clock"

Le prochain bus passe dans {{ (((as_timestamp(strptime(states(‹ sensor.horaire_prochain_bus ›), « %H:%M »))) - as_timestamp( strptime( now().strftime(« %H:%M »), « %H:%M ») )) /60) | int}} minutes.

1 « J'aime »

Juste pour monter que c’est vachement (plus ?) facile avec la lib

2 « J'aime »

Bonjour,

je me permets de déterrer le sujet. Je viens de faire ceci, dites moi si qq chose est bizarre.

template:
  - sensor:
      - name: "Prochain Bus test"
        state: >
          Prochain bus n° {{ 
          state_attr('sensor.llglamb3_local_stop_zone_place_st_lambert', 'next_departures_lines')[0].route
          }} dans {{ (strptime(state_attr('sensor.llglamb3_local_stop_zone_place_st_lambert', 'next_departures_lines')[0].departure, '%H:%M') - 
            strptime(now().strftime('%H:%M'), '%H:%M')).seconds // 60 
          }} min