Les automatisations simples couvrent 80 % des besoins. Mais certains scénarios réels nécessitent une logique plus sophistiquée : conditions multiples imbriquées, variables d’état, boucles d’attente, gestion des exceptions. Ce guide aborde les techniques avancées sur Home Assistant et Jeedom.
Limites des automatisations simples
Les automatisations « si X alors Y » atteignent rapidement leurs limites dès qu’on cherche à reproduire une logique conditionnelle réelle. Par exemple : « éteindre les radiateurs de la chambre si la fenêtre est ouverte, sauf si la température extérieure est inférieure à -5 °C, auquel cas envoyer une alerte mais ne pas couper le chauffage ». Cette règle a trois niveaux de conditions imbriquées et deux actions différentes selon le chemin emprunté — impossible à modéliser avec une seule automatisation simple.
Les plateformes Home Assistant et Jeedom proposent toutes deux des mécanismes pour gérer cette complexité : scripts et automations YAML multi-blocs sur HA, blocs de code et expressions conditionnelles avancées sur Jeedom.
Les helpers Home Assistant : l’infrastructure logique
Avant d’aborder les scripts complexes, il faut maîtriser les helpers — les entités virtuelles qui permettent de stocker des états, des valeurs et des paramètres réutilisables dans vos automatisations.
- input_boolean : interrupteur virtuel (on/off). Utilisé pour les modes globaux : mode_absence, mode_nuit, simulation_presence, alarme_active.
- input_number : valeur numérique réglable. Utilisé pour les seuils configurables : temperature_consigne_confort, luminosite_seuil_eclairage.
- input_datetime : date et heure. Utilisé pour mémoriser la dernière occurrence d’un événement ou programmer une action ponctuelle.
- counter : compteur incrémentable/décrémentable. Utilisé pour compter des événements : nombre d’ouvertures de porte, nombre de déclenchements d’alarme.
- timer : minuterie. Utilisé pour les délais complexes : minuterie de présence multi-capteurs, délai d’alerte.
Bonne pratique : créez tous vos helpers dans un fichier helpers.yaml dédié (ou via l’interface HA → Paramètres → Appareils → Helpers) et documentez leur usage.
Les helpers non documentés deviennent rapidement incompréhensibles après quelques mois.
Conditions imbriquées sur Home Assistant
Home Assistant supporte les opérateurs logiques AND, OR et NOT dans les conditions d’automatisation, ainsi que les conditions imbriquées via les blocs « and » et « or ».
# Exemple : chauffage salle de bain
# Allumer le radiateur SI :
# (quelqu'un est présent) ET
# ((il est entre 6h-9h) OU (il est entre 18h-23h)) ET
# (la temperature est inferieure a 21 degres)
condition:
- condition: state
entity_id: group.tous_membres
state: 'home'
- condition: or
conditions:
- condition: time
after: '06:00:00'
before: '09:00:00'
- condition: time
after: '18:00:00'
before: '23:00:00'
- condition: numeric_state
entity_id: sensor.temperature_salle_de_bain
below: 21
Scripts réutilisables et paramètrés
Les scripts Home Assistant permettent de définir une séquence d’actions réutilisable dans plusieurs automatisations, avec des variables passées en paramètre. C’est l’équivalent domotique d’une fonction en programmation.
# Script : notification avec niveau de priorité
script:
notifier_alerte:
alias: 'Envoyer alerte avec priorité'
fields:
message:
description: 'Texte du message'
priorite:
description: 'low / normal / high'
sequence:
- service: notify.mobile_app_smartphone
data:
message: '{{ message }}'
data:
priority: '{{ priorite }}'
- if:
- condition: template
value_template: '{{ priorite == "high" }}'
then:
- service: media_player.play_media # Jouer alarme sonore si haute priorité
target:
entity_id: media_player.enceinte_salon
Gestion avancée sur Jeedom : blocs IF/THEN/ELSE imbriqués
Jeedom permet de créer des scénarios à blocs visuels avec des structures IF/THEN/ELSE imbriquées. La clé est d’utiliser les variables de scénario pour transporter des états entre les blocs.
// Exemple : logique de gestion volet avec exceptions
// Variables : #presence# (0/1), #luminosite# (lux), #vent# (km/h)
SI #presence# == 1
ET #luminosite# > 50000
ET #vent# < 60
ALORS
FERMER volet_salon a 50%
SINON SI #vent# >= 60
ALORS
FERMER volet_salon a 100% // Protection vent fort, priorité absolue
PUSH 'Volets fermés - vent fort détecté : ' + #vent# + ' km/h'
SINON
// Aucune action - conditions non remplies
FIN SI
Boucles et attentes conditionnelles
Certains scénarios nécessitent d’attendre qu’une condition soit remplie (et pas simplement de patienter un délai fixe). Home Assistant propose le bloc « wait_for_trigger » pour cela.
# Attendre que la température dépasse 19°C, avec timeout de 2 heures
action:
- wait_for_trigger:
- platform: numeric_state
entity_id: sensor.temperature_salon
above: 19
timeout: '02:00:00'
continue_on_timeout: true # Continuer même si le timeout est atteint
- choose:
- conditions:
- condition: template
value_template: '{{ not wait.completed }}' # Timeout atteint
sequence:
- service: notify.mobile_app_smartphone
data:
message: 'Chauffage salon : 19°C non atteints après 2h - vérification requise'






