Exemple de gestion du volet roulant de ma cuisine

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

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

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"
    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"
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 (voir mon article sur la gestion des présences) - 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

input_number:
  # 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: "%"

L'automatisation du volet roulant

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

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) }}"
    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

Les conditions pour lesquelles le volet doit se positionner immédiatement sont en cas d'absence ou lorsqu'il y a un changement dans les différents modes.

  • 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, cependant, il manque 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.home_mode
          - 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