Ajout offset à input_datetime

Bonsoir,

ce doit être simple, mais…

comment ajouter x minutes à une heure1 pour donc avoir heure2 = heure1 + x minutes ?

  - service: input_datetime.set_datetime
    entity_id: input_datetime.heure2
    data_template:
      time: '{{states("input_datetime.heure1")}} + xminutes'

merci

Le plus simple reste d’utiliser la fonction timedelta qui permet de faire des calculs sur des objets datetime…

Commence par une recherche du terme timedelta et lis les fils de discussion, tu y apprendras beaucoup :+1:


Pour ajouter 10minutes par exemple :

{{ (strptime(states('input_datetime.test'),'%H:%M:%S' ) + timedelta(seconds=0, minutes=10)).strftime('%H:%M:%S') }}

  1. Conversion en objet datetime
(strptime(states('input_datetime.test'),'%H:%M:%S')  #Conversion en objet datetime pour pouvoir utiliser la fonction timedelta 
  1. Ajout/soustraction d’un temps
timedelta(seconds=0, minutes=10)  #timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
  1. Extraction de l’heure uniquement
.strftime('%H:%M:%S')  #https://docs.python.org/3.8/library/datetime.html#strftime-and-strptime-behavior

merci je vais étudier cela

Je viens de mettre à jour mon post :+1:

Re,

j’avais déjà essayé mais toujours erreur

et validation config :

Error loading /config/configuration.yaml: while parsing a flow mapping
  in "/config/automations.yaml", line 137, column 14
expected ',' or '}', but got '<scalar>'
  in "/config/automations.yaml", line 137, column 66

C’est ma faute, j’avais mis des guillemets et des quotes…

J’ai mis à jour…

Englobe la formule dans des guillemets "

Re,

Super !
Ça fonctionne

Merci :pray:

1 « J'aime »

Bonjour ,

pour plus de clarté pour les débutant comme moi, voici le code qui fonctionne :

  - service: input_datetime.set_datetime
    entity_id: input_datetime.heure2
    data_template:
      time: "{{ (strptime(states('input_datetime.heure1'),'%H:%M:%S' ) + timedelta(minutes=5)).strftime('%H:%M:%S') }}"

Y a t’il un point à expliquer plus profondément dans mon explication ?

salut,

Non, rien tout était clair !
Ma pensée n’était pas là, je vois beaucoup de sujet ou la solution ce trouve dans un message comme le tient avec les apostrophes qui ne saute pas au yeux.
j’ai mis le code final car lui je pense est plus lisible.

En fait je croit que beaucoup lisent les sujet en diagonale, et c’est d’ailleurs pour ça que l’on y arrive pas, et effet c’est comme cela que l’on saute le post le plus important…

merci encore

1 « J'aime »

Bonsoir,

j’ai la solution et j’ai une suite qui me bloque, mais n’étant pas expert en python rien ne m’étonne :

  - service: input_datetime.set_datetime
    entity_id: input_datetime.heure2
    data_template:
      time: '{{ (strptime(states("input_datetime.heure1"), "%H:%M:%S" )) + timedelta(minutes=20)).strftime("%H:%M:%S") }}'
  - service: input_select.select_option
    data:
      entity_id: input_select.heure
      option: '{{ (strptime(states("input_datetime.heure2"), "%H" ) | int ) }}'
  - service: input_select.select_option
    data:
      entity_id: input_select.minutes
      option: '{{ (states("input_datetime.heure_reveil")).minute }}'

je veux sortir de mon datetime l’heure et les minutes chacun dans son input_select
j’affiche deux solution mais je doit être à 20 essais sans succès.

alors je pense que votre aide est la bien venu

merci

{{ strptime(states('input_datetime.energy_viewer'),'%Y-%m-%d') + timedelta(days=3) }}

Bonjour ! Est ce que quelqu’un peu me dire pourquoi j’ai les heures avec ce code ? :
2022-10-24 00:00:00

parce que j’essai d’utiliser le service suivant mais il ne veut le format qu’en « 2020-02-02 » :

service: input_datetime.set_datetime
target:
  entity_id: input_datetime.energy_viewer
data:
  date: {{ strptime(states('input_datetime.energy_viewer'),'%Y-%m-%d').date + timedelta(days=3) }}

C’est bon j’ai trouvé :

service: input_datetime.set_datetime
target:
  entity_id: input_datetime.energy_viewer
data:
  date: >
    {{ (strptime(states('input_datetime.energy_viewer'),'%Y-%m-%d') + timedelta(days=3)).strftime('%Y-%m-%d') }}

j’ai encore un petit soucie, le service fonctionne tres bien dans l’outils developeur mais impossible de le faire tourner dans un button card :

type: horizontal-stack
cards:
  - show_name: false
    show_icon: true
    type: button
    tap_action:
      action: call-service
      service: input_datetime.set_datetime
      target:
        entity_id: input_datetime.energy_viewer
      data:
        date: >
          {{ (strptime(states('input_datetime.energy_viewer')) +
          timedelta(days=1)).strftime('%Y-%m-%d') }}
    entity: input_datetime.energy_viewer
    icon: mdi:chevron-right-circle
    icon_height: 20px

erreur :

Échec d'appel du service input_datetime/set_datetime. Could not parse date for dictionary value @ data['date']

Salut @Uowis

Pas certain que tu puisses le faire depuis une button card standard.

A mon avis le plus simple c’est de mettre la « mécanique » dans un script et de l’appeler avec le bouton.

Allé okay ca marche ! Ca sera plus propre en plus ! merci