Automatisation, comment ça marche




Home Assistant permet de créer des automatisations pour gérer des appareils connectés, en déclenchant des actions selon des événements ou des conditions. Les configurations YAML, bien qu'optionnelles, offrent une flexibilité avancée pour des scénarios complexes, tandis que l'interface graphique convient aux besoins plus simples. Cette double approche s'adapte à tous les niveaux d'expertise.




Pour créer des automatisation:


Pour se randre dans le menu Automatisations dans votre instance Home Assistant, utilisez ce bouton My:


Open your Home Assistant instance and show your automations.


Puis cliquez sur Créer une automatisation puis Créer une nouvelle automatisation



Pour les Déclencheurs, Quand (triggers):


Choisissez d'abord le type de déclencheur (quand) dans la section Déclencheurs. Dans la situation actuelle, c'est le changement d'état d'une entité qui lancera l'action donc choisissez Entité puis État. Il est nécessaire de préciser l'entité qui lancera l'action et dans quel état elle doit se trouver. Dans cette situation, le détecteur de mouvement du détecteur 5-en-1 doit passer de l'état non détecté à l'état détecté correctement. Notez que si vous n'entrez rien dans les zones De et À, le déclenchement se produira dès qu'il y a un changement d'état, peu importe lequel.


La zone Pendant indique que le déclencheur doit avoir été dans cet état pendant une durée minimale pour être pris en compte.



Déclenchement lorsqu'une valeur numérique est , ou :


Si le déclencheur nécessite de vérifier si une valeur numérique est supérieure ou inférieure à une autre valeur, deux choix s'offrent à vous. Première option : vous pouvez utiliser un déclencheur de type État numérique . L'interface vous offrira d'entrer la valeur au-dessus de laquelle ou au-dessous de laquelle l'entité doit être.





Deuxième option : vous pouvez utiliser un modèle (Template):






Déclenchement lors du démarrage de Home Assistant

Si vous désirez que l'automatisation se lance automatiquement au démarrage de Home Assistant, vous devez choisir le déclencheur nommé Home Assistant.


Travailler avec plusieurs déclencheurs

Vous pouvez ajouter plusieurs déclencheurs. L'action sera exécutée si l'un OU l'autre des déclencheurs est activé, par exemple si la porte est ouverte OU si un mouvement est détecté.


Conditions, Et si

En plus du ou des déclencheurs, il est envisageable d'ajouter une ou plusieurs conditions. Une condition ressemble énormément à un déclencheur. Mais l'évaluation de la condition ne se fait qu'après le déclenchement de l'automatisation. L'action sera effectuée si l'un des déclencheurs est évalué à vrai et si la condition est évaluée à vrai. Dans le cas où plusieurs conditions sont présentes, l'action sera effectuée si l'un des déclencheurs est évalué à vrai et si TOUTES les conditions sont effectivement évaluées à true. (déclencheur1) OU déclencheur2) condition1 condition2 Lorsqu'il existe des conditions de type OU : (déclencheur1) OU déclencheur2) ET (condition 1 OU condition 2).



Actions, Alors faire :

Il est maintenant temps de spécifier l'action ou les actions à exécuter par l'automatisation. Il est possible qu'il y ait plusieurs méthodes pour configurer une même action. Dans notre exemple, nous allons choisir le type d'action Appareil puisque nous désirons modifier l'état de la prise intelligente. Choisissez ensuite quel appareil doit être activé dans la liste déroulante puis l'action qui sera exécutée sur cet appareil. On aurait obtenu le même résultat avec le type d'action Service, le service switch.turn_on (Commutateur:Alllumer) puis cliquer sur Choisir une entité pour choisir la cible.



Cliquez sur Enregistrer puis donnez un nom significatif à votre automatisation, par exemple « Allumer lumière quand mouvement détecté ».


Code YAML :

Une fois l'automatisation sauvegardée, vous verrez qu'elle a été enregistrée au format YAML dans le fichier automations.yaml , qui est d'ailleurs importé dans configuration.yaml .




Voici des exemples variable en YAML :


Capteur avec attributs :


Certains capteurs ont plusieurs attributs.
Pour le savoir, utilisez un modèle qui constiste en le mot states suivi d'un point puis de l'identifiant du capteur.

voici la variable: pour l'etat du capteurs

{{ states.weather.forecast_maison }}

On voit d'un coup tous les attributs disponibles.


Identifiants d'objets non conformes


Si, lorsque vous testez un tel modèle dans l'éditeur, vous obtenez un message du genre « TemplateSyntaxError: expected token 'end of print statement', got '... », c'est peut-être parce que l'identifiant de l'identifiant de l'objet (ce qui suit le point dans l'identifiant de l'entité) débute par un caractère non autorisé, par exemple un chiffre.Pour régler ce problème, vous pouvez utiliser cette syntaxe (remplacez sensor par le domaine et l'identifiant de l'entité par l'identifiant de l'objet) :

voici la variable: pour l'etat du capteurs

 {{states('sensor.temperature') }} 

Retrouver un attribut particulier

voici la variable: Pour travailler avec un attribut particulier

 {{ state_attr('weather.forecast_maison', 'humidity') }} 

Avec des Conditions:

voici la variable: Avec is_state_attr(), on peut vérifier si un attribut a une valeur donnée :

 {{ is_state_attr('weather.forecast_maison', 'temperature', 20 ) }} 

Avec le test conditionnel combiné à states(), state_attr(), is_state() ou is_state_attr() offre plus de souplesse :

voici la variable: On teste si l'état est à « on » ; on modifie « on » par « ouverte » ou sinon on indique « fermée ».

{% if is_state('input_boolean.porte_virtuelle', 'on') %}
  ouverte
{% else %}
  fermée
{% endif %}
#ou = fermée


Avec le test conditionnel combiné à states(), state_attr(), is_state() ou is_state_attr() offre plus de souplesse :

voici la variable: On teste si l'état est à « open » ; on modifie « open » par « ouvert » .

{% if is_state('cover.volet_roulant_salon','open') %}ouvert{% endif %} 

ou

{% if is_state('cover.volet_roulant_salon','open') %}
  ouvert
{% endif %}

Travailler avec des valeurs numériques

Dans le cas où le modèle doit effectuer un test avec une valeur numérique (int ou float), les bonnes pratiques veulent que le modèle utilise un filtre pour assurer que la valeur est du bon type.

voici la variable: Il s'agit d'ajouter une pipe (|) suivie du type.

{% if states('sensor.temperature') | float < 20.0 %}
  Il faut démarrer le chauffage!
{% elif states ('sensor.temperature') | float > 25.0 %}
  Il faut démarrer la climatisation!
{% else %}
  La température est parfaite!
{% endif %}

Parfois, ce n'est pas une question de bonnes pratiques mais bien une question de bon fonctionnement. Par exemple, si vous tentez de comparer la valeur d'un capteur avec une valeur numérique, vous pourriez obtenir une erreur du genre « TypeError: '<' not supported between instances of 'str' and 'int' ». Le message est alors clair : il n'est pas possible de comparer une chaîne et un entier.

voici la variable: La conversion de type est alors une obligation en plus d'être une bonne pratique :

 {{ states('sensor.5_in_1_pir_motion_sensor_air_temperature') | int < 20 }} 

Variables dans un modèle:

voici la variable: Afin de rendre le code plus facile à lire, vous pouvez créer des variables que vous réutiliserez plus loin dans le modèle.

% set humidite = state_attr('weather.forecast_maison', 'humidity') %}
{% if humidite > 40 %}
  Humidité élevée
{% else %}
  Humidité normale
{% endif %}

Boucles dans un modèle:

Un modèle peut effectuer une boucle pour réaliser une opération un nombre défini de fois ou encore pour effectuer une opération sur chaque entité qui répond à un critère.

Par exemple, pour effectuer une opération sur chacun des capteurs virtuels booléens (ici, on ne fait qu'afficher l'identifiant) :

{% for state in states.input_boolean %}
  {{ state.entity_id }}
{% endfor %}

Pour boucler un nombre défini de fois (ici, on ne fait qu'afficher l'index) :

{% for index in range(0,10)%}
  {{ index }}
{% endfor %}