Bonjour,
Je voulais vous faire partager un mini coup de gueule sur la difficulté de gérer les dates dans home assistant.
Dans cette exemple, je récupère les dates et heures, depuis du multiscrape, des prochaines bus de ma ligne favorite sur une API :
Je souhait donc les afficher dans un dashboard mais il semble que la gestion des object datetime est quelques peut chaotique :
Mon sensor est de type timestamp
name: 'Bus 23 : 6eme'
value_template: "{{ strptime(((today_at('00:00') + timedelta(seconds= (value_json[0].times[5].scheduledArrival | int) )) | string), '%Y-%m-%d %H:%M:%S%z') }}"
device_class: timestamp
( l’api où je me connecte donne l’horaire en seconde depuis 0h00, je la converti donc en « vrai champ datetime » )
Donc, très facilement, je peut les utilisers comme ça :
title: Bus ligne 23
show_header_toggle: false
state_color: false
type: entities
entities:
- entity: sensor.bus_23_0
name: Départ immédiat
secondary_info: last-updated
- entity: sensor.bus_23_1
name: Prochiane départ
- entity: sensor.bus_23_2
name: Prochiane départ
- entity: sensor.bus_23_3
name: Prochiane départ
- entity: sensor.bus_23_4
name: Prochiane départ
- entity: sensor.bus_23_5
name: Prochiane départ
- entity: button.bus_23_refresh
name: Refresh data
L’affichage est pas (trop) mal, mais imprécise :
Donc je me dit que ça serait bien de mettre 2 écriture différentes en même temps, genre : Dans 2 heures (à 11h34)
- easy_time permet d’afficher la 1er partie (mais pas la 2eme) ( la traduction en français ne semble pas fonctionné mais peut importe pour l’instant)
{%- set default_language = 'fr' %}
{% from 'easy_time.jinja' import easy_time %}
{{ easy_time('sensor.bus_23_5') }} --> 1 hour
Pour la 2éme partie ( à 11h34m
), si je comprend bien, il faut utiliser strftime(« %Hh%M ») sur un objet datetime
même si object_call est timestamp
(ou date
) , j’ai une erreur si je tente de faire un
{{ (states('sensor.bus_23_5')).strftime("%Hh%M") }} --> UndefinedError: 'str object' has no attribute 'strftime'
Pour lui, c’est visiblement une string, alors qu’il a était crée avec le bon format et en datetime.
Donc obliger de le reconvertir en datetime pour l’afficher « proprement » :
{{ strptime(states('sensor.bus_23_5'), '%Y-%m-%dT%H:%M:%S%z').strftime('%Hh%M') }}