Home Assistant : Routine le matin avant l’école
Grâce à l’utilisation des événements créés, je pouvais diffuser des messages le matin pour rythmer l’activité de mes enfants pour ne pas être en retard pour l’école. Nous nous réveillons à la même heure, prenons notre petit déjeuner ensemble. Parfois, on pouvait laisser le temps s’écouler tranquillement et ainsi être en retard. De ce fait, cette routine était la bienvenue.
Avant Home Assistant
Comme indiqué dans le second article de la série « Home Assistant, ma domotique open source », j’utilisais les événements dans un calendrier Google Agenda pour lancer des messages. J’utilisais le même principe pour la routine des enfants le matin pour leur autonomie. Ils aiment se préparer sans avoir leurs parents sur le dos. 😊 Je ne les blâmerais pas sur le sujet. Ils ont appris à être autonome très rapidement.
Configuration
Pour la configuration, là encore, tout est expliqué dans mon second article. Nous utilisons :
- Google Agenda
- Les Google Home Mini
- Google Translate TTS
- Les automations HA
- Les scripts HA
Disclaimer
Pour des raisons de « vie privée », je donnerai un exemple de planning commun à un ensemble de parents et d’enfants. Le but n’est pas dire si oui ou non mes enfants ou les enfants en général ont CE programme. L’exemple pourrait très bien être un programme pour un adulte. Ce n’est qu’un scénario de mise en place d’automatisation.
Le principe de fonctionnement
En période scolaire, nos enfants se réveillent à 7h. Puis vont prendre leur petit-déjeuner.
À 7h30, ils doivent aller se préparer dans la salle de bain.
À 7h45, un petit rappel est lancé au cas où ce matin on aurait du mal.
À 8h00, c’est bientôt l’heure d’aller à l’école. Donc, on doit avoir fait les dernières tâches de la matinée.
À 8h10, il est temps de mettre ses chaussures.
À 8h15, on prend son sac à dos et on part à l’école.
Le déroulé est très simple comme vous pouvez le voir. Nous avons le principe suivant :
- Nous sommes un jour d’école primaire
- Nous ne sommes pas en période de vacances
- Nous sommes à une heure précise de la matinée.
Nous avons tous nos critères pour exécuter la routine.
Les capteurs (sensors)
Nous allons créer à minima 2 capteurs :
- Période scolaire : déterminer si nous sommes en vacances ou pas ;
- Jour d’école primaire : dans notre académie, les enfants ont écoles le lundi, mardi, jeudi et vendredi.
Capteurs « Période scolaire »
Pour ce capteur, nous utiliserons 2 calendriers :
- Jours fériés en France. Cf. https://www.data.gouv.fr/fr/datasets/jours-feries-en-france/
- Vacances scolaires de la zone C. Cf. https://www.data.gouv.fr/fr/datasets/le-calendrier-scolaire-2019-2020-et-2020-2021-format-ical/
- Vacances complémentaires, compléments. Ce calendrier est créé manuellement et permet d’indiquer des jours qui ne sont pas « officiels » dans l’un des 2 calendriers précédents. Exemple : un pont, une journée enfant malade, etc.
Vous pouvez ajouter très facilement des calendriers au format ics dans Google Agenda. Ce qui permettra à notre intégration HA de les retrouver. Cf. https://www.home-assistant.io/integrations/calendar.google/
Le calendrier des jours fériés en France sera nommé dans le présent article calendar.jours_feries_en_france
. Et le calendrier des vacances scolaires calendar.calendrier_scolaire_zone_c
.
Pour le calendrier de « vacances scolaires complémentaires », il suffira de créer au besoin un événement sur une journée entière (donc sans horaire) pour indication.
Dans notre fichier configuration.yaml
, je dois indiquer où trouver mes sensors. Je choisis, comme pour les automatisations d’avoir tous mes sensors dans un répertoire :
Cela fait, je crée un fichier periode_scolaire.yaml
dans le répertoire sensors/
Ce capteur vérifie si les 2 calendriers ont la valeur off
pour savoir à quelle période je me trouve. La valeur off
pour ces calendriers signifient qu’il n’y a pas d’événements dans la journée. Donc, pas de vacances, pas de jours fériés, pas de pont du weekend, etc.
Nous serons bien en période scolaire.
Capteurs « jours d’école primaire »
Pour ce capteur ci, nous allons simplement indiquer que nous sommes l’un de ces jours :
- Lundi
- Mardi
- Jeudi
- Vendredi
Le mercredi, l’école primaire n’a pas classe le mercredi dans notre région.
Pour les enfants au collège, on pourrait tout simplement utiliser l’intégration de « workday ». https://www.home-assistant.io/integrations/workday/
Même principe que précédemment, nous créons un fichier jour_ecole_primaire.yaml
dans le répertoire sensors/
:
Nous utilisons les fonctions now()
et weekeday()
qui retourneront, combinées, un chiffre correspondant au numéro de la semaine (Lundi -> 0, mardi -> 1, mercredi -> 2, jeudi -> 3, vendredi -> 4, samedi -> 5 et dimanche -> 6).
On pourrait écrire ce template de façon plus condensée. Mais j’ai voulu privilégier la lisibilité dans le présent article.
L’automatisation
Nous pourrions créer une automatisation par heure de déclenchement… Ça se fait… Mais plus nous avons d’heure de déclenchement, plus nous auront de fichiers à créer et à maintenir.
Nous allons donc créer un fichier d’automatisation et utiliser la méthode choose
de HA. https://www.home-assistant.io/docs/scripts/#choose-a-group-of-actions
Voici le code que j’ai utilisé :
id: automation_ecole_routines
alias: Routines en période scolaire.
trigger:
platform: time_pattern
hours: '*'
minutes: '*'
condition:
- condition: and
conditions:
- condition: state
entity_id: sensor.periode_scolaire
state: 'on'
action:
- choose:
##############################
##############################
## 07:05
- conditions:
- condition: and
conditions:
- condition: template
value_template: "{{ (now().timestamp() | timestamp_custom('%H:%M')) == '07:05' }}"
- condition: state
entity_id: sensor.jour_ecole_primaire
state: 'on'
sequence:
- service: rest_command.mm_showalert
data_template:
titre: '<h2>Attention</h2>'
texte: 'Il est l’heure de se réveiller les enfants. Il faut se réveiller.'
duree: "120000"
- service: script.media_player_notify_all
data_template:
message: >
{{ [
"Il est l’heure de se réveiller les enfants. Il faut se réveiller.",
"Il est l'or! L'or de se réveiller! Il est l'or",
"Bonjour mes amours, il est temps de se lever.",
"Bien grandir, ça commence dès le matin !"
] | random }}
volume: 0.6
##############################
##############################
## 07:35
- conditions:
- condition: and
conditions:
- condition: template
value_template: "{{ (now().timestamp() | timestamp_custom('%H:%M')) == '07:35' }}"
- condition: state
entity_id: sensor.jour_ecole_primaire
state: 'on'
sequence:
- service: rest_command.mm_showalert
data_template:
titre: '<h2>Attention</h2>'
texte: 'Les enfants, il faut aller se préparer maintenant, brossage de dents et des cheveux.'
duree: "120000"
- service: script.media_player_notify_all
data_template:
message: >
{{ [
"Les enfants, il faut aller se préparer maintenant, brossage de dents et des cheveux.",
"L'heure de se pouponner est arrivée.",
"Il est temps de se revêtir de son plus bel apparat!",
"Le soin à son hygiène et son apparence sont très importants! Direction la salle de bain."
] | random }}
volume: 0.6
##############################
##############################
## 07:45
- conditions:
- condition: and
conditions:
- condition: template
value_template: "{{ (now().timestamp() | timestamp_custom('%H:%M')) == '07:45' }}"
- condition: state
entity_id: sensor.jour_ecole_primaire
state: 'on'
sequence:
- service: rest_command.mm_showalert
data_template:
titre: '<h2>Attention</h2>'
texte: '1er rappel, les enfants, il faut aller se préparer maintenant, brossage de dents et des cheveux.'
duree: "120000"
- service: script.media_player_notify_all
data_template:
message: >
{{ [
"1er rappel, les enfants, il faut aller se préparer maintenant, brossage de dents et des cheveux.",
"1er rappel, l'heure de se pouponner est arrivée.",
"1er rappel, il est temps de se revêtir de son plus bel apparat!",
"1er rappel, le soin à son hygiène et son apparence sont très importants! Direction la salle de bain."
] | random }}
volume: 0.6
##############################
##############################
## 08:00
- conditions:
- condition: and
conditions:
- condition: template
value_template: "{{ (now().timestamp() | timestamp_custom('%H:%M')) == '08:00' }}"
- condition: state
entity_id: sensor.jour_ecole_primaire
state: 'on'
sequence:
- service: rest_command.mm_showalert
data_template:
titre: '<h2>Attention</h2>'
texte: "Dernière ligne droite avant l'école, donc tâches ménagères, bisous et câlins."
duree: "120000"
- service: script.media_player_notify_all
data_template:
message: >
{{ [
"Dernière ligne droite avant l'école, donc tâches ménagères, bisous et câlins.",
"Bientôt le départ pour l'école, attenons-nous à nos dernières tâches.",
"Le sourire aux lèvres, tenons-nous prêt pour le départ à l'école.",
"La vie a la couleur que tu lui donnes! Choisie bien la couleur pour que chaque jour soit un kif."
] | random }}
volume: 0.6
##############################
##############################
## 08:10
- conditions:
- condition: and
conditions:
- condition: template
value_template: "{{ (now().timestamp() | timestamp_custom('%H:%M')) == '08:10' }}"
- condition: state
entity_id: sensor.jour_ecole_primaire
state: 'on'
sequence:
- service: rest_command.mm_showalert
data_template:
titre: '<h2>Attention</h2>'
texte: 'Il est 8h10, on met les chaussures. Hop hop hop. Dans la joie et la bonne humeur!'
duree: "120000"
- service: script.media_player_notify_all
data_template:
message: >
{{ [
"Il est 8h10, on met les chaussures. Hop hop hop. Dans la joie et la bonne humeur!",
"Dernière ligne droite avant le départ pour ce lieu de savoir!",
"Mettons nos derniers accessoires, C'est bientôt l'heure du départ."
] | random }}
volume: 0.6
##############################
##############################
## 08:15
- conditions:
- condition: and
conditions:
- condition: template
value_template: "{{ (now().timestamp() | timestamp_custom('%H:%M')) == '08:15' }}"
- condition: state
entity_id: sensor.jour_ecole_primaire
state: 'on'
sequence:
- service: rest_command.mm_showalert
data_template:
titre: '<h2>Attention</h2>'
texte: 'Il est 8h15, on prend son sac à dos et on commence sa journée!'
duree: "120000"
- service: script.media_player_notify_all
data_template:
message: >
{{ [
"Il est 8h15, on prend son sac à dos et on commence sa journée!",
"C'est l'heure du départ des troupes pour l'école! Soyons fort!",
"Ce n'est pas parce que nous nous quittons maintenant, que nous ne nous retrouverons pas mieux ce soir."
] | random }}
volume: 0.6
Je n’explique pas plus ce code car tout a été dit auparavant. Sauf un petit point, un bonus : le service rest_command
. Vous avez pu voir que j’ai un Magic Mirror à la maison. Je l’utilise pour afficher un message selon l’alerte.
RESTful command
Il n’y a rien de complexe ici. J’utilise l’intégration HA des rest_command
. Cf. https://www.home-assistant.io/integrations/rest_command/
Voici mon code inséré dans configuration.yaml
:
J’ai installé sur le MagicMirror le module « MMM Remote Control » pour bénéficier de l’API https://github.com/Jopyth/MMM-Remote-Control/blob/master/API/README.md#basic-examples-for-showing-an-alert-on-the-screen
Je n’offre pas de SAV sur le sujet ☺️ C’est juste un bonus pour cette automatisation.
Pour aller plus loin
On pourrait aller beaucoup plus loin en prenant en compte par exemple des capteurs :
- Est-ce que l’humidité a augmenté dans la salle de bain ? Si oui, c’est qu’elle est en cours d’utilisation, donc, pas la peine de lancer le rappel.
- Est-ce que le capteur de mouvement a perçu une présence dans la salle à manger ou la cuisine ?
- Est-ce qu’il y a encore des personnes à la maison ? Détection d’un téléphone portable sur le réseau ? Non, alors tout le monde est parti.
La seule limite à ces automatisations est notre imagination. Les capteurs sont accessibles financièrement et facilement intégrable à HA. Il faut juste prendre le temps nécessaire pour l’acquérir et l’intégrer. 😁
Voilà. Comme d’habitude, je suis preneur de vos points d’améliorations, de votre vision des choses.
Dans la même série
- #1 Messages envoyés sur les GHM
- #1.1 Routine le matin avant l’école
- #1.2 Routine du soir
- #1.3 L’école à la maison
- #2 Éteindre les lumières
- #3 Baisser le volume des GHM
- #4 Tâches ménagères
- #5 Habit Tracker
Derniers commentaires
# Le 19 octobre à 13:09, par nico
En réponse à : MagicMirror², ma configuration personnalisée
# Le 25 septembre à 12:01, par Teddy Payet
En réponse à : Un Nouveau Chapitre : Mon Admission dans un MBA en Intelligence Artificielle et Data Innovation
# Le 25 septembre à 11:20, par vY
En réponse à : Un Nouveau Chapitre : Mon Admission dans un MBA en Intelligence Artificielle et Data Innovation
# Le 21 juin à 13:49, par Teddy Payet
En réponse à : Home Assistant : Routine le matin avant l’école
# Le 21 juin à 10:47, par Teddy Payet
En réponse à : Ma domotique open source
# Le 16 juin à 17:15, par Eric
En réponse à : Ma domotique open source