Récupérer l'heure du premier événement de la journée dans un calendrier

Objectif :
Régler l’heure du réveil (développé dans HA - enceinte+lumière) de mon fils avec le calendrier de son emploi du temps d’école (déjà importé dans HA)

Mon problème :
Je cherche donc a récupérer l’heure du premier événement de la journée dans le calendrier (emploi du temps importé dans HA). Et ensuite il me restera a régler l’heure de réveil du réveil avec ça.
Mais comment récupérer l’heure du premier événement d’une journée dans un calendrier de HA ?
je vois que des choses qui attende que l’heure arrive pour déclencher une automatisation - mais moi je ne peux pas attendre car il faut que je déclenche 1H avant (pour se préparer et aller à l’école)

Mais pourtant si j’arrive à récupérer cela ça devient simple :
je lance un script à 00:01 qui récupère l’heure du premier event du calendar, je soustrait une heure et j’applique cette heure au réveil

Merci pour votre aide !

Salut,

Pour proposer une piste, il faut plus d’informations.
Quel calendrier HA (il y en a plusieurs) ? Et quels sont les informations de ton évènement ?

Par exemple, chez moi

Merci @Pulpy-Luke

Pour ce qui est du calendrier, c’est un CalDav importé de iCloud
Dans iCloud j’ai 2 calendriers :

  • Family (qui est juste affiché sur le Dashboard)
  • EdT : emploi du temps de mon fils que j’ai rempli sur iCloud aussi
    C’est dans ce 2eme que je veux récupérer le premier event de la journée

Les informations d’un event : juste le nom et l’heure !
Mais je ne peux récupérer cette information QUE quand un evenement est en cours !
C’est à dire quand un cours a démarré (car le calendrier contient les cours de l’emploi du temps : math de 9 à10, français de 10 à 11…)

calendar:
  - platform: caldav
    url: https://caldav.icloud.com
    username: "monemail@icloud.com"
    password: "xxxx-xxxx-xxxx-xxxx"
    calendars:
      - "Family"
      - "Edt"

Bon j’ai pas caldav je vais être un peu sec en indices.
Par contre, ça reste globalement la même trâme :

  • trouver le contenu de ton entité : status et attributs (tel que vu à 1h du mat par ex)
  • extraire les dates - filtré par jour
  • tri par ordre croissant - filter la 1ere
  • récupérer l’heure

Je mettrai cette date heure dans un sensor (via une automatisation) et celui-ci dans un second sensor qui calcule la différence de temps avec l’heure actuelle. Quand la différence est de 60 minutes par exemple, c’est qu’il faut déclencher l’alarme

Tout ça à base d’un template/modèle
tu peux faire des essais à cet endroit :

merci mais en fait, je ne récupère aucune information du calendrier tant qu’il ya a pas un event en cours
Un calendar à un state à off et en attribut que le friendly_name TANT QU’il n’y pas d’évent en cours
Dès qu’on rentre dans une heure de cours, le State passe à « on » et j’ai d’autres attributs

Je veux donc savoir si c’est possible d’extraire la date du prochain event d’un calendar (ça parait simple)

Si c’est vide c’est pas drôle.
Regarde du coté de la valeur offset_reached et all_day:

en fait, les attributs n’existe pas tant qu’un event n’est pas en cours…
Mais je viens de trouver ça :wink:

je teste…

1 « J'aime »

Regarde par ici

https://forum.hacf.fr/t/calendrier-next-event-anniversaire/6006/2

@Felix62 : Merci !! je vais tester ça ! :wink:

@Felix62 : merci ! ça marche !
Et bien c’est une pratique pas très connue ni répandue…mais pour trouver l’heure du prochain event dans un calendrier, il faut donc faire un custom_calendar avec un search !

calendar:
  - platform: caldav
    url: url_du_caldav
    username: "user_caldav"
    password: "password_caldav"
    days: 30
    custom_calendars:
      - name: "NomduFiltre"
        calendar: "NomDuCalendrier"
        search: ".*"  

Ceci recherche donc le prochain événement et si on interroge avec le developper tools on obtient qqchose du genre :

message: Test
all_day: false
start_time: '2021-12-05 13:00:00'
end_time: '2021-12-05 14:00:00'
location: null
description: null
offset_reached: false
friendly_name: NomDuCalendrier

C’est un bon début !
Attention quand même, tu as besoin du 1er évènement du jour. C’est pas systématiquement le même que le prochain évènement

En fait, si je lance le script à 00h01 alors j’aurai le premier évent du jour :wink:

Pas dans 100% des cas : Le lundi 0h01, ça marche… mais le samedi à 0H01, c’est pas dit :wink:
Et puis il y a les vacances à vérifier si c’est pas dans le calendrier… Donc oui, c’est un bon début mais il faut ajouter quelques contrôles
Et par expérience je mettrai ça plus tard vers 4H du matin… (Heure d’été, hiver et compagnie)

yes :wink:
par contre, la mise a jour ne se fait pas…si je rajoute une event avant le premier event, rien ne change quand j’interroge le calendar via le developer tool :frowning:

C’est normal

The WebDAV calendar get updated roughly every 15 minutes.

hum…sur mon calendrier qui est affiché sur le Dashboard (le Family), la modification est instantanée ???

Etonnant, mais c’est pas gênant (sauf un peu pour les tests). Il faut considérer que l’info est à jour 15minutes après ajout d’une info dans le calendrier.