➣ 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 %}