@Clemalex, effectivement mon découpage des fichiers de configuration est « un peu » extrême
mais j’ai dans l’optique que j’ai petit morceau peu être réutilisé une autre fois et je ne veux pas avoir à modifié à 2 endroits. Et, je suis d’accord avec toi, c’est un peu dur à lire …
Voici donc la comparaison entre un flow NodeRed et la configuration dans HA.
La surveillance de batteries
Sous Nodered
Le flow complet
Le noeud events: state « Control Center »
Le noeud delay « Limite message »

Le noeud call service « Notif. Batterie faible Control Center »
Sous Home Assistant
Le fichier configuration.yaml
L’appel à l’automation ce fait via le fichier configuration.yaml
puisque c’est le fichier unique, un fichier pour les gouverner tous 
configuration.yaml
homeassistant:
...
packages: !include_dir_named integrations
...
l’appel à la directive packages
permet de regrouper la configuration de différents composants (ex: automation
, sensor
, bdd
, freebox
, etc. ). Vous pouvez ainsi séparer vos fichiers de configuration pour que chaque fichier regroupe les informations de configuration d’un thème.
voir la documentation officiel de packages pour plus d’informations.
La directive !include_dir_named
permet d’inclure à l’emplacement de son utilisation le contenu des fichiers listés dans un répertoire. Dans mon cas, tous les fichiers du répertoire integrations
.
voir la documentation officiel de !include_dir_named pour plus d’informations.
Le fichier integrations/automation.yaml
Ce fichier me permet d’inclure dans les automatisations les automations créées par l’IHM et celle créées par les fichiers de configuration.
integrations/automation.yaml
#
# https://www.home-assistant.io/docs/automation/
#
# This include is for the automations editor/UI
automation: !include ../automations.yaml
automation split: !include_dir_merge_list ../automations/list
automation: !include ../automations.yaml
permet d’inclure les automations crées par l’IHM
automation split: !include_dir_merge_list ../automations/list
permet d’inclure tous les fichiers du répertoire ../automations/list
comme une liste au niveau de automation split:
. C’est par cette directive que je vais appeler l’automation qui nous intéresse.
Le fichier automations/list/control_center_notify.yaml
automations/list/control_center_notify.yaml
# Notification batterie faible sur Control Center
# Une notification est envoyée toutes les 10 minutes
# tant que la charge de la batterie est inférieure à 30%
- mode: single
alias: "Notification sur batterie faible du Control Center"
description: "Notification sur batterie faible sur Control Center"
trigger:
# Evènement : état du Control Center
- platform: state
entity_id: sensor.controlcenter_niveau_de_batterie
condition: []
action:
- choose:
- conditions:
# Condition : Batterie du Control Center inférieure à 30%
- alias: "Batterie du Control Center inférieure à 30%"
condition: numeric_state
entity_id: sensor.controlcenter_niveau_de_batterie
below: 30
sequence:
- repeat:
while:
# Condition : Batterie du Control Center inférieure à 30%
- alias: "Batterie du Control Center inférieure à 30%"
condition: numeric_state
entity_id: sensor.controlcenter_niveau_de_batterie
below: 30
sequence:
- service: script.notify_sm_a530f_sg
data:
# Message : Batterie faible sur Control Center
title: 'Control Center'
message: >-
⚠️ Control Center ⚡ Batterie faible !
- delay:
hours: 0
minutes: 10
seconds: 0
milliseconds: 0
- condition: not
conditions:
# Condition : Batterie du Control état inconnu
- alias: "Batterie du Control état inconnu"
condition: state
entity_id: sensor.controlcenter_niveau_de_batterie
state: "unknown"
# Condition : Batterie du Control état indisponible
- alias: "Batterie du Control état indisponible"
condition: state
entity_id: sensor.controlcenter_niveau_de_batterie
state: "unavailable"
default: []
-
mode: single
permet de contrôler ce qui se passe lorsque l’automatisation est déclenchée alors que les actions sont toujours en cours d’exécution depuis un déclenchement précédent. Ici single
ne relance pas l’automation si elle est déjà lancée (pour plus de précision).
-
alias: "Notification sur batterie faible du Control Center"
l’alias
définit le texte qui sera visible dans le menu Automatisations
de HA (Menu latéral, cliquez sur Configuration
puis Automatisations
).
-
trigger:
# Evènement : état du Control Center
- platform: state
entity_id: sensor.controlcenter_niveau_de_batterie
Ce bloc définit à partir de quel entité surveillée l’automatisation va pouvoir être déclenché. Si seulement entity_id
est renseigné, le déclenchement aura lieu pour tous les changements d’état ou attributs. C’est l’état (via state
) du capteur « niveau de batterie du Control Center » (via entity_id
) qui sera surveillé (pour plus de précision).
-
action:
L’action d’une règle d’automatisation est ce qui est exécuté lorsqu’une règle se déclenche (pour plus de précision).
-
choose:
Cette action vous permet de sélectionner une séquence d’autres actions dans une liste de séquences. L’imbrication est entièrement prise en charge (pour plus de précision).
-
- conditions:
# Condition : Batterie du Control Center inférieure à 30%
- alias: "Batterie du Control Center inférieure à 30%"
condition: numeric_state
entity_id: sensor.controlcenter_niveau_de_batterie
below: 30
Ce bloc définit à partir de quel condition le bloc action
va pouvoir être déclenché. C’est la valeur de l’état (via numéric_state
) du capteur « niveau de batterie du Control Center » (via entity_id
) qui lorsque qu’elle sera inférieure (vai below
) à 30 déclenchera la sequence
suivante (pour plus de précision).
-
sequence
Cette directive devrait permettre d’exécuter les actions qui sont définies sous ce bloc si la condition précédente est vrai (cette définition est à valider car je n’ai pas trouver de documentation officielle sur cette directive).
-
repeat
Cette directive devrait permettre de répéter les actions qui sont définies sous ce bloc tant que la condition contenue sous le while
est vrai (pour plus de précision).
-
while:
# Condition : Batterie du Control Center inférieure à 30%
- alias: "Batterie du Control Center inférieure à 30%"
condition: numeric_state
entity_id: sensor.controlcenter_niveau_de_batterie
below: 30
Ce bloc définit à partir de quel condition le bloc repeat
devra être répété. C’est la valeur de l’état (via numeric_state
) du capteur « niveau de batterie du Control Center » (via entity_id
) qui tant qu’elle sera inférieure (vai below
) à 30 déclenchera la sequence
suivante (pour plus de précision).
-
sequence:
- service: script.notify_sm_a530f_sg
data:
# Message : Batterie faible sur Control Center
title: 'Control Center'
message: >-
⚠️ Control Center ⚡ Batterie faible !
- delay:
hours: 0
minutes: 10
seconds: 0
milliseconds: 0
Ce bloc définit les actions qui seront exécuter dans que la directive while
sera vrai. Ici on appellera (via service
) un script (via script.
) qui enverra une notification sur le mobile. Nous verrons en détail plus loin le script notify_sm_a530f_sg
.
Cette exécution du script sera limitée par la directive delay
qui permet de n’exécuter le service que toutes les 10 minutes ici (via minutes: 10
).
-
- condition: not
conditions:
# Condition : Batterie du Control état inconnu
- alias: "Batterie du Control état inconnu"
condition: state
entity_id: sensor.controlcenter_niveau_de_batterie
state: "unknown"
# Condition : Batterie du Control état indisponible
- alias: "Batterie du Control état indisponible"
condition: state
entity_id: sensor.controlcenter_niveau_de_batterie
state: "unavailable"
Ce bloc permet de ne pas exécuter (via condition: not
) le bloc sequence
qui est a son niveau si les états (via state
) du capteur « niveau de batterie du Control Center » (via entity_id
) sont unknown
ou unavailable
.
Le fichier scripts/notify_sm_a530f_sg.yaml
scripts/notify_sm_a530f_sg.yaml
#
# Script de notification sur A8 (Sylvain)
#
notify_sm_a530f_sg:
description: 'Envoi une notification'
fields:
title:
description: 'Le titre de la notification'
example: 'L''état a changé'
message:
description: 'Le contenu du message'
example: 'La lampe est allumée !'
sequence:
- service: notify.mobile_app_sm_a530f_sg
data:
title: "{{ title }}"
message: "{{ message }}"
-
notify_sm_a530f_sg:
correspond au nom du script. C’est ce nom que l’on retrouvera dans le menu Scripts
de HA (Menu latéral, cliquez sur Configuration
puis Scripts
).
-
fields:
Cette directive va définir les champs utilisé par le script. Dans mon cas title
qui définira le titre de la notification et message
qui définira le contenu du message de la notification.
-
sequence:
Cette directive va définir les actions que le script va effectuer. Dans mon cas l’appel à un service
-
- service: notify.mobile_app_sm_a530f_sg
data:
title: "{{ title }}"
message: "{{ message }}"
Ce bloc va faire appel au service de notification (via notify.
) de l’appareil mobile_app_sm_a530f_sg
. Cette notification aura pour titre le contenu du champ title
défini à chaque appel à ce script et pour message le contenu du champ message
.
Voilà pour l’explication très détaillée d’un exemple de migration d’un flow NodeRed vers les automatisations Home Assistant.
J’espère que ces explications sur les automatisations vous permettront des mieux vous en sortir sur HA et ses fichiers de configuration 
Un GRAND MERCI à @Clemalex pour son aide sur les automatisations sous HA 
Mise à jour effectuée suite au message et message de précision de @Clemalex