Accueil » Automatisations et scénarios Z-Wave » Scénarios avancés Z-Wave : conditions imbriquées, variables et boucles

Scénarios avancés Z-Wave : conditions imbriquées, variables et boucles

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'