Soustraire 1h d'une entrée DATETIME

Bonjour,

Je cherche une solution pour soustraire 1h d’une entrée DATETIME.

Actuellement j’ai cela :

{{ states ('input_datetime.reveil') }} = 07:00:00

Et je souhaite obtenir comme résultat :

06:00:00

Merci d’avance

Hello,

Je me sers de ça de mon côté, si des fois ça peut aider :slight_smile:

{{ now() - timedelta(hours=1) }}

Et si ça ne fonctionne pas avec ton format de capteur, tu peux le convertir :

{{ strptime("2024-01-30", '%Y-%m-%d') }}

J’ai essayé cela mais sans succès :

{{ states ('input_datetime.reveil') - timedelta(hours=1) }} = TypeError: unsupported operand type(s) for -: 'str' and 'datetime.timedelta'

Y’a peut-être plus propre, mais ça fonctionne :slight_smile:

{{ as_timestamp(strptime("07:00:00", '%H:%M:%S') - timedelta(hours=1)) | timestamp_custom('%H:%M:%S') }}

Tu remplace juste le « 07:00:00 » par la valeur de ton sensor

@titoumimi ce n’est pas ce que je cherche à faire.

Je m’approche de ce que je veux faire mais je dois maintenant stocker le résultat dans un capteur DATETIME…

{{ states ('input_datetime.reveil') | as_timedelta - timedelta(hours=1) }} = 6:00:00
{{ states('input_datetime.sandbox_dt1') }}

=> 07:00:00

puis tu appelles un service :

service: input_datetime.set_datetime
data:
  time: "{{ as_timestamp(strptime(states('input_datetime.sandbox_dt1'), '%H:%M:%S') - timedelta(hours=1)) | timestamp_custom('%H:%M:%S') }}"
target:
  entity_id: input_datetime.sandbox_dt2

Et ça donne ça :

{{ states('input_datetime.sandbox_dt2') }}

=> 06:00:00

C’est utilisable comme déclencheur d’une automatisation ?

Je dois t’avouer que ça sors de ma zone de confort, je ne m’en suis jamais servi comme déclencheur. (en fait jamais servi des date time avant ce soir pour ton exemple :grin:)

Mais j’aurais tendance à penser que oui, c’est un sensor, on doit pouvoir se baser sur son état…

Je vais abandonner pour ce soir car j’ai du mal à comprendre le processus, je voyais cela beaucoup plus simple : prendre la valeur d’un entrée, lui soustraire 1 heure puis stocker le résultat dans une nouvelle entrée

Merci en tout cas @titoumimi

En déclencheur d auto c’est possible si le formatage est parfait.
Je préfère travailler en false / true, comme cet exemple.
D’ailleurs en 3e ligne, je soustrais 500 minutes.

Donc, notif + annonce 8h20 précisément avant le réveil programmé de mon ado, afin qu’il dépose ses écrans dans mon bureau et file se coucher pour qu’il dorme environ 8 heures.

Zou ! Au lit !

J’ai un peu de mal à saisir ce que tu veux précisément…

Tu veux faire quoi dans ton automatisation ? On aura peut-être une vision plus claire :blush:

1 « J'aime »

J’ai une entrée DATETIME dans mon HA (que je change selon mon heure de réveil) et je souhaite en créer une autre qui est basée sur la première -1h (pour lancer l’allumage d’un sèche serviette avant le réveil), exemple :

  • input_datetime_1 : 7h30
  • input_datetime_2 : 6h30

Ok, donc tu as tout ce qu’il faut au dessus, il te suffit de les compiler :slight_smile:

Dans mon exemple, deux inputs existent :

  • input_datetime.sandbox_dt1
  • input_datetime.sandbox_dt2

Et je créé simplement une automatisation :

  • en trigger, elle observe tout changement d’état sur input_datetime.sandbox_dt1
  • pas de condition
  • en action, elle MAJ input_datetime.sandbox_dt2 en effectuant le calcul souhaité

That’s it :slight_smile:

alias: aaa_sandbox_datetime
description: ""
trigger:
  - platform: state
    entity_id:
      - input_datetime.sandbox_dt1
condition: []
action:
  - service: input_datetime.set_datetime
    data:
      time: >-
        {{ as_timestamp(strptime(states('input_datetime.sandbox_dt1'),
        '%H:%M:%S') - timedelta(hours=1)) | timestamp_custom('%H:%M:%S') }}
    target:
      entity_id: input_datetime.sandbox_dt2
mode: single

Merci beaucoup cela fonctionne :grinning: