Compte à rebours date et heure

Hello la commu,

je me prend la tête avec un compte à rebours. En effet, je souhaiterais avoir le résultat suivant:

« Départ dans x mois - x jours - x heures - x minutes - x secondes »

J’ai commencé avec ça (en prenant des infos par-ci par-là), peut-être qu’il y a de l’optimisation à faire (je me suis débrouillé):

{% from 'easy_time.jinja' import count_the_days %}

{% set current_timestamp = as_timestamp(now() | as_local ) %}
{% set event_timestamp = as_timestamp(state_attr('calendar.course_a_pied', 'start_time')) %}

{% set delta_seconds = event_timestamp - current_timestamp %}
{% set days = (delta_seconds // (24*60*60)) %}
{% set months = (delta_seconds // (30*24*60*60)) %}
{% set hours = (delta_seconds % (24*60*60)) // 3600 %}
{% set minutes = (delta_seconds % 3600) // 60 %}

Départ dans {{ months |int(0) }} mois - {{ days |int(0) }} jours - {{ hours |int(0) }}h{{ minutes |int(0) }}

J’obtiens ceci:

Départ dans 4 mois - 29 jours - 17h38

alors que sur ce site lien d’exemple

J’obtiens cela:

4 mois, 28 jours, 18 heures, 37 minutes et 17 secondes

On s’aperçoit qu’il y a un delta au niveau des heures, minutes et j’ai oublié d’ajouter les secondes au passage. Bref, un pti coup de main serait top (merci pour votre aide…)

Du coup, tu n’utilise pas la librairie ?

1 « J'aime »

oups un résidu de test, non je ne l’utilise pas car je n’obtenais pas ce que je voulais

il faut regarder du coté des fonctions relative_time plutot que count_the_days dans la même lib car tu peux indiquer le format de sortie

J’ai trouvé avec relative_time_plus


{% from 'relative_time_plus.jinja' import relative_time_plus %}
{% set current_date = now() %}
{{ relative_time_plus(event_timestamp, compare_date=current_date, not_use='wk', always_show=['mth', 'day', 'hour', 'minute', 'seconde'], language='fr') }}

Le problème est que ça m’affiche:

4 mois, 29 jours, 17 heures, 40 minutes et 59 secondes

On se rapproche du but

Comment je fais pour segmenter le résultat et l’utiliser par la suite?

L’utiliser pour faire quoi ?
Là typiquement c’est un truc d’affichage

je voudrais faire un truc comme ça :

countdown

Déjà dans le calcul tu lui demande de compter les mois mais côté affichage tu te limite aux jours…
Ensuite c’est juste une chaîne de caractères, donc tu peux remplacer les unités.

{% from 'relative_time_plus.jinja' import relative_time_plus %}
{% set current_date = now() %}
{% set event_timestamp = 1760898189 %}
{% set str = relative_time_plus(event_timestamp, compare_date=current_date, not_use='wk,mth', always_show=['day', 'hour', 'minute', 'seconde'], language='fr') %}
{{ str | replace(',',' -')  | replace(' et',' -') | replace('s','') | replace(' jour','j') | replace(' heure','h') | replace(' minute','m') | replace(' econde','s') |trim }}

Le screenshot n’est pas exactement le rendu final mais bien avec les mois comme je l’indiquais au-dessus. J’ai adapté en conséquence ton code et je te remercie pour le coup de main au passage.

{% from 'relative_time_plus.jinja' import relative_time_plus %}
{% set event_timestamp = as_timestamp(state_attr('calendar.course_a_pied', 'start_time')) %}
{% set current_date = now() %}
{% set str = relative_time_plus(event_timestamp, compare_date=current_date, not_use=['yr', 'wk'], always_show=['mth', 'day', 'hour', 'minute', 'seconde'], language='fr') %}
{{ str | replace(',',' -')  | replace(' et',' -') | replace('s','') | replace(' moi','M') | replace(' jour','j') | replace(' heure','h') | replace(' minute','m') | replace(' econde','s') |trim }}

Je n’ai plus qu’à gérer le côté graphique maintenant… Encore merci @Pulpy-Luke

Bonsoir à tous.

Je débute sur Ha. Je souhaiterais pouvoir appliquer comme vous un compte à rebours sur un dashboard.

J’ai beau avoir installé la librairie easy_time. Jinja via hacs je n’y arrive pas.

Lorsque je copie colle comme vous dans l’éditeur de modele

{% from 'relative_time_plus.jinja' import relative_time_plus %}
{% set current_date = now() %}
{% set event_timestamp = 1760898189 %}
{% set str = relative_time_plus(event_timestamp, compare_date=current_date, not_use='wk,mth', always_show=['day', 'hour', 'minute', 'seconde'], language='fr') %}
{{ str | replace(',',' -')  | replace(' et',' -') | replace('s','') | replace(' jour','j') | replace(' heure','h') | replace(' minute','m') | replace(' econde','s') |trim }}

Je n’obtient pas de résultat mais une erreur ! :

TemplateNotFound: relative_time_plus.jinja

Pouvez vous aider un newbie Ha svp :smiling_face:

Merci par avance

Salut,
c’est parce que tu n’as pas installé la bonne librarie

{% from 'easy_time.jinja'

au lieu de

1 « J'aime »

Merci @Ludoc effectivement c’est fonctionnel maintenant dans l’outils de dév.

Est ce que je peux te demander comment je pourrais afficher ca sur une tuile HA ?

Encore merci pour ton aide

Stapsien

Salut, dsl pour le retard.

Tu crées un capteur dans un fichier yaml (je suis en mode package)

template:
  - name: "Compte à rebours"
    state: >
      {% from 'relative_time_plus.jinja' import relative_time_plus %}
      {% set current_date = now() %}
      {% set event_timestamp = 1760898189 %}
      {% set str = relative_time_plus(event_timestamp, compare_date=current_date, not_use='wk,mth', always_show=['day', 'hour', 'minute', 'seconde'], language='fr') %}
      {{ str | replace(',',' -')  | replace(' et',' -') | replace('s','') | replace(' jour','j') | replace(' heure','h') | replace(' minute','m') | replace(' econde','s') |trim }}

Et tu l’affiches avec une carte entité ou autre

Par contre, ça ne sert à rien d’afficher les secondes, vu que l’actualisation se fait toutes les minutes.

1 « J'aime »

Hello @Ludoc

J’ai créer une fichier compte_a_rebours.yaml contenu dans mon répertoire packages.

J’ai bien Dans configuration.yaml, ajouter ceci.

homeassistant:
  packages: !include_dir_named packages

J’ai copié collé dans le fichier compte_a_rebours.yaml

template:
  - name: "Compte à rebours"
    state: >
      {% from 'relative_time_plus.jinja' import relative_time_plus %}
      {% set current_date = now() %}
      {% set event_timestamp = 1760898189 %}
      {% set str = relative_time_plus(event_timestamp, compare_date=current_date, not_use='wk,mth', always_show=['day', 'hour', 'minute', 'seconde'], language='fr') %}
      {{ str | replace(',',' -')  | replace(' et',' -') | replace('s','') | replace(' jour','j') | replace(' heure','h') | replace(' minute','m') | replace(' econde','s') |trim }}

MAIS :relieved: je ne retrouve pas mon sensor dans la liste des Etats des entitées .

J’ai une notif d’erreur dans le journal :

Invalid config for ‹ template › at packages/compte_a_rebours.yaml, line 2: ‹ name › is an invalid option for ‹ template ›, check: name Invalid config for ‹ template › at packages/compte_a_rebours.yaml, line 3: ‹ state › is an invalid option for ‹ template ›, check: state

De même dans Studio code server j’ai

A tu une idée du problème ? c’est la syntaxe qui ne va pas ?

Salut
La syntaxe pour un template sensor est :

template:
  - sensor:
      - name: xxxxx
        unique_id: xxxxx
        icon: mdi:xxxxx
        state: >
          {{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[0] |float }}
        device_class: xxxxx
        unit_of_measurement: xxxx

Tu n’est pas obligé de tout mettre mais au minimum name: et state:

1 « J'aime »

Salut,

C’est ma faute, en enlevant ce qui n’avait rien à voir, j’ai viré le - sensor:

template:
  - sensor:
      - name: "Compte à rebours"
        state: >
          {% from 'relative_time_plus.jinja' import relative_time_plus %}
          {% set current_date = now() %}
          {% set event_timestamp = 1760898189 %}
          {% set str = relative_time_plus(event_timestamp, compare_date=current_date, not_use='wk,mth', always_show=['day', 'hour', 'minute', 'seconde'], language='fr') %}
          {{ str | replace(',',' -')  | replace(' et',' -') | replace('s','') | replace(' jour','j') | replace(' heure','h') | replace(' minute','m') | replace(' econde','s') |trim }}

Yes Merci beaucoup !! Très bonne soirée

Bonjour ,
je rebondi également sur ce post … moi je n’arrive pas à mettre de date dans mon compte à rebours … j’ai raté quelque chose ,
Merci