Home Assistant et les télécommandes

Home Assistant et les télécommandes

Pour gérer les télécommandes, j'utilise depuis des années ControllerX qui tourne sous AppDaemon, c'est simple, et ça fonctionne très bien. Problème, s'il en est, d'une part je suis perplexe sur l'avenir de cette solution, et d'autre part je me dis que simplifier et avoir le moins d'addons possible c'est toujours mieux.

En alternative à ControllerX il existe la solution BluePrint. C'est bien et j'en utilise plusieurs, dont certains sont de véritables usines à gaz. C'est parfois utile pour certaines taches complexes pour lesquelles je n'ai pas envie de mes farcir des heures de YAML.

Avec ControllerX je gérait les télécommandes Ikea associés aux Shelley 2.5 de mes volets roulants, c'est simple et ça fonctionne depuis des années :

volet_rc_ikea_07:
  module: controllerx
  class: E1743CoverController
  controller: bc:33:ac:ff:fe:be:50:21
  integration: zha
  cover: cover.vr_baie

Pour remplacer ça j'ai d'abord testé plusieurs BluePrint dédié aux diverses télécommandes, et ça foisonne. Mais aucun ne faisais exactement ce que ControllerX fait, à savoir, exploiter les deux boutons et faire un stop avec un clic supplémentaire. Et puis je me suis dit que je devrais pouvoir gérer tout seul toutes les télécommandes de tous mes volets avec une seule automation, que ça serait plus simple, et donc plus réactif.

Pour chaque télécommande on va exploiter un trigger: qui correspond à l'action de la télécommande (simple ON, double OFF, etc...). Dans ce trigger on y colle un id: baie_on ou la première partie correspond au nom du volet et la seconde à l'action.

Ensuite on s'en sert pour gérer des variables qui correspondent au volet et on exploite ça dans un choose: qui va tester si le volet est en mouvement pour faire un cover.stop_cover et se servir de la seconde partie du trigger.id pour le faire monter ou le descendre.

Avec cette solution il est dans l'absolu possible de gérer un nombre infini de volets et de télécommandes, voire même de gérer autre chose que des volets... Et bien sur les télécommandes peuvent provenir de différentes intégrations (ici Z2M et ZHA).

alias: Remote Covers - Multiples & Stop
description: Gère plusieurs volets et plusieurs télécommandes indépendamment avec fonction Stop
triggers:
  - domain: mqtt
    device_id: 1a4ba8e9b8e66a574e3c688f907e70fd
    type: action
    subtype: "on"
    id: lionel_on
    trigger: device
  - domain: mqtt
    device_id: 1a4ba8e9b8e66a574e3c688f907e70fd
    type: action
    subtype: "off"
    id: lionel_off
    trigger: device

  - device_id: c3c2106f2d457bc86c573fed853f02fc
    domain: zha
    type: remote_button_short_press
    subtype: turn_on
    id: marie_on
    trigger: device
  - device_id: c3c2106f2d457bc86c573fed853f02fc
    domain: zha
    type: remote_button_short_press
    subtype: turn_off
    id: marie_off
    trigger: device
    
actions:
  - variables:
      target_cover: >
        {% if trigger.id.startswith('lionel') %} cover.vr_lionel
        {% elif trigger.id.startswith('marie') %} cover.vr_marie
        {% elif trigger.id.startswith('autre') %} cover.vr_autre
        {% endif %}
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{ is_state(target_cover, 'opening') or
                 is_state(target_cover, 'closing') }}
        sequence:
          - action: cover.stop_cover
            target:
              entity_id: "{{ target_cover }}"
      - conditions:
          - condition: template
            value_template: "{{ trigger.id.endswith('_on') }}"
        sequence:
          - action: cover.open_cover
            target:
              entity_id: "{{ target_cover }}"
      - conditions:
          - condition: template
            value_template: "{{ trigger.id.endswith('_off') }}"
        sequence:
          - action: cover.close_cover
            target:
              entity_id: "{{ target_cover }}"
mode: restart
max_exceeded: silent