Dans un précédent article qui date mais que tu peux retrouver sur ce lien, on avait vu comment mettre en place une automatisation facilement en utilisant les Blueprints. Maintenant, nous allons voir comment créer soit-même sont automatisation en allant écrire directement dans les fichiers YAML.
Les Blueprints ne nécessitent pas d’avoir un grand niveau de maîtrise mais sont limitées à ce qui a été prévu dans le modèle, pour un ajout ou une modification, il faut aller modifier le modèle quitte à bousculer toutes les automatisations qui les utilisent.
Organisation des automatisations
Les automatisations se situe dans le dossier config de votre système, il écrit dans des fichiers YAML.
Pour avoir accès à tes dossiers HA sous Windows, je t’invite à suivre les étapes de cette page (si ce n’est pas déjà fait)
Je ne vais pas détailler tous les dossiers et fichiers présents, ceux qui nous intéressent sont :
- configuration.yaml
- automations.yaml
Le premier contient la configuration de ton HA :
Dans ce fichier, vous allez pouvoir y mettre vos automatisations, cependant, cela peut rapidement devenir incompréhensible. Pour cette raison, tu peux inclure des fichiers (ligne 15 à 18). Ces inclusions vont te permettre de mettre un peut d’ordre à tes dossiers et t’y retrouver rapidement.
De base, un fichier automations.yaml vide est créé et inclus dans le système.
C’est dans ce fichier que nous allons venir intégrer nos automatisations.
Ma première automatisation par l’exemple
Pour montrer comment doit être construit une automatisation, on va prendre un exemple : allumer une lumière à la présence d’un mouvement entre 19 heures et 7 heures. La lumière s’éteint dès qu’il n’y a plus de mouvement.
Les prérequis
Pour suivre cet article, vous allez avoir besoin :
- Home Assistant installé sur une machine (type Raspberry)
- Une ampoule, la mienne est de la gamme Aqara et permet de régler la chaleur et l’intensité lumineuse, ici.
- Un détecteur de mouvement Xiaomi, ici.
Que ce soit pour le capteur ou la lampe, j’utilise le protocole de communication Zigbee, pour le Raspberry, j’utilise la passerelle Zigate, disposnible sur ce lien.
Le code et les explications
J’ai pris un exemple facilement utilisable et transposable, nombreux sont les kits disposant d’un capteur et d’une lampe, de plus ce genre d’automatisation est l’une des plus fréquentes (éclairage porte d’entrée, toilettes …)
- id: Light-with-mvt alias: Lumière avec mouvement trigger: - platform: state entity_id: binary_sensor.lumi_lumi_sensor_motion_81807f04_ias_zone from: 'off' to: 'on' condition: - condition: time after: "19:00:00" before: "07:00:00" action: - service: light.turn_on target: entity_id: light.lumi_lumi_light_aqcn02_c4865d04_level_light_color_on_off data: color_temp: 200 brightness_pct: 25 - wait_for_trigger: platform: state entity_id: binary_sensor.lumi_lumi_sensor_motion_81807f04_ias_zone from: "on" to: "off" - delay: seconds: 60 - service: light.turn_off target: entity_id: light.lumi_lumi_light_aqcn02_c4865d04_level_light_color_on_off mode: restart max_exceeded: silent
Tout d’abord, vous devez choisir un id unique pour chacune de vos automatisations du fichier automations.yaml. Cet ID est automatiquement générer lorsque tu passes par le générateur de code automatique.
L’alias sera utilisé dans l’affichage de toutes tes automatisations dans la liste disponible Configurations/Automations.
Le trigger (ou les triggers) permet le déclenchement de l’automatisation. Dans notre cas, le capteur de mouvement détecte une occupation dans la zone (changement d’état):
trigger: - platform: state entity_id: binary_sensor.lumi_lumi_sensor_motion_81807f04_ias_zone from: 'off' to: 'on'
La condition (ou les conditions) identifie les circonstances pour lesquelles le trigger est pris en compte. J’ai mis une condition de temps (après 19h00 et avant 07h00), en dehors de cette plage horaire, le mouvement est bien détecté mais ne lance pas l’automatisation :
condition: - condition: time after: "19:00:00" before: "07:00:00"
Dernier point, les actions, quant à elles, décrivent ce qui va se passer. Pour notre exemple, au déclenchement, la lumière s’allume, on attend un trigger pendant 60 secondes (en l’occurance, un changement d’état sur le capteur de mouvement) et on éteint la lumière si il n’y a pas de mouvement.
action: - service: light.turn_on target: entity_id: light.lumi_lumi_light_aqcn02_c4865d04_level_light_color_on_off data: color_temp: 200 brightness_pct: 25 - wait_for_trigger: platform: state entity_id: binary_sensor.lumi_lumi_sensor_motion_81807f04_ias_zone from: "on" to: "off" - delay: seconds: 60 - service: light.turn_off target: entity_id: light.lumi_lumi_light_aqcn02_c4865d04_level_light_color_on_off
On finit par les deux dernières lignes qui permettent de gérer le mode de re-déclenchement, à partir d’un nouveau trigger et si les conditions sont respectées, les actions redébutent, sans nombre de fois limites :
mode: restart max_exceeded: silent
Fait attention à l’indentation, elle est la principale cause d’erreur dans la non-exécution de ton automatisation
Conclusion
Voilà une petite automatisation qui fait partie (à mon avis) de la base de ce que tout débutant souhaite faire. Je m’en servirai pour d’autres exemples, améliorations.