Home Assistant, comprendre les automatisations manuelles

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.

vue du dossier config

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 :

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.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.