Comment définir une heure de réveil en fonction d'une entrée dans mon agenda

Mon problème

Bonjour,

J’ai défini un agenda avec des horaires variable de mon emplois du temps professionnel. Je cherche à optimiser l’heure de mon réveil en fonction de l’heure à laquelle je dois commencer mon travail. L’heure de mon réveil dépend donc directement du début de l’événement de mon calendrier google ainsi que d’un offset que j’ai décider de définir dans un « input.datetime »

Comment créer un sensor qui me renvoi l’heure de réveil pour faire ce calcul?

J’ai essayé:

{{as_timestamp(state_attr('calendar.lohr', 'start_time'))-state_attr('input_datetime.offset_romain_reveil_travail','timestamp')| float}}

Ca ne fonctionne pas. J’ai le message horodatage invalide.
entité:

calendar.lohr

Attributs:

message: Travail
all_day: false
start_time: '2021-07-22 08:25:00'
end_time: '2021-07-22 17:50:00'
location: ****
description: ''
offset_reached: false
friendly_name: Lohr

et l’input:

input_datetime.offset_romain_reveil_travail

Avec les attribut:

editable: false
has_date: false
has_time: true
hour: 0
minute: 30
second: 0
timestamp: 1800
friendly_name: Décallage Romain Reveil - Travail

Merci pour votre aide.

Ma configuration


System Health

version core-2021.7.3
installation_type Home Assistant OS
dev false
hassio true
docker true
virtualenv false
python_version 3.9.5
os_name Linux
os_version 5.10.17-v8
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4546
Installed Version 1.13.2
Stage running
Available Repositories 911
Installed Repositories 56
Home Assistant Cloud
logged_in true
subscription_expiration 23 juillet 2021, 2:00
relayer_connected true
remote_enabled true
remote_connected true
alexa_enabled true
google_enabled false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 6.1
update_channel stable
supervisor_version supervisor-2021.06.8
docker_version 20.10.6
disk_total 116.5 GB
disk_used 30.3 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Samba share (9.5.1), Home Assistant Google Drive Backup (0.104.3), SSH & Web Terminal (9.0.0), Duck DNS (1.12.5), Mosquitto broker (6.0.1), Visual Studio Code (3.6.0), MariaDB (2.4.0), AppDaemon 4 (0.6.2)
Lovelace
dashboards 2
resources 34
views 14
mode storage
Spotify
api_endpoint_reachable ok
___

Peux tu partager les entités concernées depuis Outils de développement → Onglet ETATS ?

C’est fait. J’ai ajouté les informations manquantes

Il faut utiliser la fonction time_delta.

Un bon point de départ :

Une autre possibilité est d’utiliser les sensors de ton app mobile Home Assistant qui est capable de récupérer la prochaine date/time de ton réveil.
De cette façon, pas d’agenda à tenir, ton Automation va se tenir à ton réveil :slight_smile:

1 « J'aime »

Hello @Stromber
Un exemple d’un ‹ compte à rebours › qui se base sur la valeur de sensor.gm1910_prochaine_alarme obtenue par l’application android

- platform: template
  sensors:
    bob_next_alarm:
      friendly_name: "Prochaine Alarme"
      unit_of_measurement: "m"
      #entity_id: sensor.time
      value_template: >-
        {% set dummy = states("sensor.time") %}
        {{((states('sensor.gm1910_prochaine_alarme')|as_timestamp|int - now()|as_timestamp|int)/60)|int}}
      availability_template: "{{ not is_state('sensor.gm1910_prochaine_alarme','unavailable') }}"
      attribute_templates:
        time: "{{ state_attr('sensor.gm1910_prochaine_alarme','Local Time') }}"

Quand c’est à 0, c’est l’heure…

A toi d’ajouter l’offset dans la formule

Pour répondre à ta demande :

Il te faut donc :

  • une entité input_number.reveil_1_offset représentant l’offset du réveil par rapport à la date/heure de l’évènement du calendrier
  • un calendrier calendar.lohr dans ton cas afin de récupérer la date/heure du prochain évènement
  • une entité input_datetime.reveil_1 représentant la date/heure du réveil calculé à partir de l’évènement du calendrier et de l’offset
  • une automatisation automatisation.reveil_1_mise_a_jour permettant de mettre ç jour l’entité input_datetime.reveil_1
  • une automatisation automatisation.reveil_1 se déclenchant à la date/heure du input_datetime.reveil_1 et exécutant les actions de réveil (jouer de la musique, allumer la lumière, la cafetière, etc.)

Voici le code de l’automatisation de mise à jour de l’entité input_datetime.reveil_1 :

alias: mise_a_jour_de_l'heure_du_reveil
description: Se met à jour lors d'une mise à jour du calendrier
trigger:
  - platform: state
    entity_id: calendar.lohr
condition: []
action:
  - service: input_datetime.set_datetime
    target:
      entity_id: input_datetime.reveil_1
    data:
      datetime: >-
        {{ strptime(state_attr('calendar.lohr','start_time'),'%Y-%m-%d
        %H:%M:%S') + timedelta(minutes=(states('input_number.reveil_1_offset')|int))}}
mode: single

Voici le code de l’automatisation de réveil :

alias: Il est l'heure
description: Réveil en fonction du calendrier et de l'offset
trigger:
  - platform: time
    at: input_datetime.reveil_1
condition: []
action:
  - service: script.turn_on
    target:
      entity_id: script.reveil_01
mode: single

Je pense par contre qu’il faut conditionner l’exécution du réveil avec une entité input_boolean.reveil_01_deja_enclenche qui se met à Vrai dans les actions du réveil.
Il te faudra donc en plus une automatisation à enclencher à minuit (ou 3h ou 4h :wink: ) qui repasse l’enttié input_boolean.reveil_01_deja_enclenche à Faux.
→ Cela afin d’éviter le déclenchement du réveil à chaque évènement du calendrier.

Voilà :+1:

Merci pour ta réponse. Ça semble concluant.
Je suis en vacances. Je regarde dans 15 jours.

Si tu veux profiter des vacances :palm_tree: profite !

Mais si tu veux tester, tu peux tout faire depuis l’interface graphique.

c’est pour l’information :wink: