Exemple concret : automatiser le volet roulant de ma cuisine

Domotique 7 min de lecture

Un cas d'usage complet du moteur de gestion des volets sous Home Assistant : modes forcés, fermeture si fenêtre ouverte et positionnement précis.

Cuisine
Image de Rudy and Peter Skitterians

Dans cet article, je vais vous montrer un cas concret (simplifié) d'utilisation de la gestion des volets roulants que je vous ai présentée ici : Automatiser ses volets roulants avec Home Assistant.

Le seul prérequis est donc d'avoir lu complètement ce dernier.

⚠️ Cet article a été publié initialement en 2022 et la syntaxe des exemples a vieilli. Avec la version 2024.8 de Home Assistant, service est devenu action dans les automatisations, et la 2024.10 a introduit les formes plurielles triggers, conditions et actions. L'ancienne syntaxe fonctionne toujours pour le moment.

Règles de gestion

  1. Si la maison est en mode « Nuit », mon volet doit se fermer
  2. Je veux pouvoir forcer le positionnement (mode) de tous mes volets
  3. Je veux pouvoir forcer le positionnement (mode) de ce volet uniquement
  4. Si on est absent de la maison et que la fenêtre est restée ouverte, le volet doit se fermer complètement
  5. Le mode « Petits trous » devra se faire précisément
  6. Par défaut, le volet doit être ouvert le jour et fermé la nuit

Mise en place de la gestion automatique

Sous Home Assistant, ce volet roulant correspond à l'entité cover.shelly_2_5_rc_kitchen.

Dans un premier temps, on ajoute toutes les entités dont on va avoir besoin :

# Entités obligatoires
input_datetime:
  # Durée de la suspension (pour tous les volets)
  covers_duration_suspension:
    name: Covers - Duration (min) of roller shutter suspension
    has_date: false
    has_time: true
input_number:
  # Position désirée
  cover_kitchen_desired_position:
    name: Cover - Kitchen - Desired position
    min: "-1"
    max: "100"
    step: "1"
    unit_of_measurement: "%"
  # Temps avant la détection de suspension du volet
  cover_kitchen_detection:
    name: Cover - Kitchen - Time period (s) before suspension
    min: "5"
    max: "600"
    step: "5"
    unit_of_measurement: "s"
  # Position du mode "Petits trous" - Règle de gestion n°5
  cover_kitchen_accurate_position:
    name: Cover - Kitchen - Accurate position
    min: "0"
    max: "100"
    step: "1"
    unit_of_measurement: "%"
timer:
  # Timer pour la suspension du volet
  cover_kitchen:
    name: Cover - Kitchen - Remaining suspension time
    restore: true

# Entités - Règles de gestion
input_select:
  # Mode de la maison - Règle de gestion n°1
  period_of_day:
    name: Period of day
    options:
      - Jour
      - Nuit
      - Nuit - chambres
    icon: mdi:theme-light-dark
  # Modes pour tous les volets - Règle de gestion n°2
  covers_mode:
    name: Covers - Mode
    options:
      - Automatique
      - Manuel
      - Forcer ouverture
      - Forcer fermeture
      - Forcer fermeture - chambres
      - Petits trous
    icon: mdi:window-shutter-open
  # Mode pour le volet de la cuisine - Règle de gestion n°3
  cover_kitchen_mode:
    name: Cover - Kitchen - Mode
    options:
      - Automatique
      - Manuel
      - Forcer ouverture
      - Forcer fermeture
      - Petits trous
    icon: mdi:window-shutter-open

template:
  - binary_sensor:
      # Savoir si au moins une personne est présente à la maison - Règle de gestion n°4
      - name: Presence at home
        state: "{{ is_state('input_boolean.xxx1_at_home', 'on') or is_state('input_boolean.xxx2_at_home', 'on') }}"
        device_class: presence
      # Savoir si on est en mode "Manuel"
      - name: Cover - Kitchen - Check suspension
        state: "{{ not is_state('input_select.cover_kitchen_mode', 'Manuel') and not is_state('input_select.covers_mode', 'Manuel') }}"
        device_class: running

L'automatisation du volet roulant

L'automatisation est assez simple, mais très verbeuse. Il s'agit juste d'une suite de conditions reprenant les différentes règles de gestion pour positionner le volet roulant.

automation:
  - description: Cover - Kitchen
    alias: cover_kitchen_positioning
    id: c598cfbd-e8ff-4f80-8d05-e4a04253e20c
    mode: restart
    trigger:
      - platform: time_pattern
        minutes: "/10"
      - platform: event
        event_type:
          - timer.cancelled
          - timer.finished
        event_data:
          entity_id: timer.cover_kitchen
    condition:
      - condition: state
        entity_id: timer.cover_kitchen
        state: "idle"
      - condition: template
        value_template: "{{ (as_timestamp(now()) - as_timestamp(states.cover.shelly_2_5_rc_kitchen.last_changed) | int(0)) > (states('input_number.cover_kitchen_detection') | int(0)) }}"
    action:
      # Si on est en mode "Manuel", on arrête la gestion automatique
      - condition: template
        value_template: "{{ not is_state('input_select.covers_mode', 'Manuel') }}"
      - condition: template
        value_template: "{{ not is_state('input_select.cover_kitchen_mode', 'Manuel') }}"
      # Règles de gestion
      - choose:
          # Si on est absent et que la fenêtre est ouverte, on ferme le volet
          - conditions:
              - condition: state
                entity_id: binary_sensor.presence_at_home
                state: "off"
              - condition: state
                entity_id: binary_sensor.window_kitchen
                state: "on"
            sequence:
              - service: input_number.set_value
                target:
                  entity_id: input_number.cover_kitchen_desired_position
                data:
                  value: 0
          # Si on est en mode "Forcer ouverture", on ouvre le volet
          - conditions:
              - condition: or
                conditions:
                  - condition: state
                    entity_id: input_select.covers_mode
                    state: "Forcer ouverture"
                  - condition: state
                    entity_id: input_select.cover_kitchen_mode
                    state: "Forcer ouverture"
            sequence:
              - service: input_number.set_value
                target:
                  entity_id: input_number.cover_kitchen_desired_position
                data:
                  value: 100
          # Si on est en mode "Forcer fermeture" ou la maison est en mode "Nuit", on ferme le volet
          - conditions:
              - condition: or
                conditions:
                  - condition: state
                    entity_id: input_select.covers_mode
                    state: "Forcer fermeture"
                  - condition: state
                    entity_id: input_select.cover_kitchen_mode
                    state: "Forcer fermeture"
                  - condition: state
                    entity_id: input_select.period_of_day
                    state: "Nuit"
            sequence:
              - service: input_number.set_value
                target:
                  entity_id: input_number.cover_kitchen_desired_position
                data:
                  value: 0
          # Si on est en mode "Petits trous", on met le volet à la position "input_number.cover_kitchen_accurate_position"
          - conditions:
              - condition: or
                conditions:
                  - condition: state
                    entity_id: input_select.covers_mode
                    state: "Petits trous"
                  - condition: state
                    entity_id: input_select.cover_kitchen_mode
                    state: "Petits trous"
            sequence:
              - service: input_number.set_value
                target:
                  entity_id: input_number.cover_kitchen_desired_position
                data:
                  value: "{{ states('input_number.cover_kitchen_accurate_position') }}"
        # Par défaut, on ferme le volet la nuit et on l'ouvre le jour
        default:
          - if:
              - condition: template
                value_template: "{{ state_attr('sun.sun', 'elevation') < 0 }}"
            then:
              - service: input_number.set_value
                target:
                  entity_id: input_number.cover_kitchen_desired_position
                data:
                  value: 0
            else:
              - service: input_number.set_value
                target:
                  entity_id: input_number.cover_kitchen_desired_position
                data:
                  value: 100

Configuration des blueprints

  1. Cover - Immediate conditions

Le volet doit se positionner immédiatement en cas d'absence ou lorsqu'un des modes change.

  • Immediate conditions : binary_sensor.presence_at_home, input_select.period_of_day, input_select.covers_mode, input_select.cover_kitchen_mode
  • Timer : timer.cover_kitchen
  • Desired roller shutter position : input_number.cover_kitchen_desired_position
  • Roller shutter positioning : automation.cover_kitchen_positioning
  1. Cover - Move

Rien de particulier ici, on active juste le positionnement précis pour le mode « Petits trous ».

  • Roller shutter : cover.shelly_2_5_rc_kitchen
  • Timer : timer.cover_kitchen
  • Desired roller shutter position : input_number.cover_kitchen_desired_position
  • Time to complete a full opening or closing motion : input_number.cover_kitchen_detection
  • Enable accurate positioning : Yes
  • Accurate position : input_number.cover_kitchen_accurate_position
  1. Cover - Suspend

Il ne faut pas oublier de désactiver la suspension lorsque l'on est en mode « Manuel » !

  • Roller shutter : cover.shelly_2_5_rc_kitchen
  • Timer : timer.cover_kitchen
  • Desired roller shutter position : input_number.cover_kitchen_desired_position
  • Duration of roller shutter suspension : input_datetime.covers_duration_suspension
  • Time to complete a full opening or closing motion : input_number.cover_kitchen_detection
  • Enable the verification of a condition before automatic positioning of the roller shutter : Yes
  • Condition to be checked : binary_sensor.cover_kitchen_check_suspension

Une petite dernière pour la route

En l'état, le positionnement du volet roulant va bien fonctionner. Il manque cependant une dernière automatisation pour remettre le volet en mode « Automatique » lorsque les modes de la maison changent.

automation:
  - description: Cover - Kitchen - Back to automated mode
    alias: covers_back_auto_mode
    id: 7f2e0bf7-4649-4f05-833e-dfad5323447c
    mode: restart
    trigger:
      - platform: state
        entity_id:
          - input_select.period_of_day
          - input_select.covers_mode
    action:
      - service: input_select.select_option
        target:
          entity_id:
            - input_select.cover_kitchen_mode
        data:
          option: Automatique

Conclusion

J'espère que ce cas d'utilisation vous permettra de mieux comprendre comment gérer vos volets roulants. N'hésitez pas à me poser vos questions grâce au formulaire de contact ou sur HACF.

Vous avez également accès à l'ensemble des automatisations que j'utilise pour gérer mes volets roulants : Automatisations - Volets roulants