Автоматизация управление освещением в HomeAssistant выключателями Matter от IKEA

8 марта, 2026

Набирающий популярность в системах умного дома стандарт Matter заставил меня немного попрактиковаться в этом вопросе, если кто не в курсе то вкратце есть Matter ower WiFi (Ethernet) и Matter owet Thread

Matter это протокол передачи, в нем нет транспорта, то есть сам по себе он не может работать, ему надо ещё что то по чему он будет передаваться, теоретически это может быть любая сеть, в настоящее время в качестве сетей по которым работает Matter это Ethentet (WiFI) и Thread

Что такое Ethernet и WiFi думаю объяснять не надо, устройство Matter соединяется с Вашим умным домом подключившись к WiFi, недостатком этого является то, что устройство умного дома Matter должно быть в зоне действия WiFi роутера и если до роутера не дотягивает то надо ставить WiFi повторитель. Thread же это сеть работающая на той же частоте что и WiFi но с более низким энергопотреблением и имеет ячеистую структуру (mash), то есть Вы можете поставить один Thread роутер и усилителем (ретранслятором) будут все Thread устройства которые имеют постоянное электрическое питание, а не батарейки, будут работать и как усилители (ретрансляторы) сети Thread. Кто знаком с Zigbee то уже понимает знает как работает mesh сеть. Zigbee это и протокол и сеть, то есть применительно к Matter ower Thread структуре то Zigbee это Zigbee over Zigbee.

При этом любой Thread роутер (ещё называется пограничный маршрутизатор) просто создает Thread сеть не привязываясь к производителю. Например у меня есть умный замок Aqara U200 с пограничным Thread маршрутизатором Aqara HUB M100 которые добавлены в родное приложение Aqara, но Aqara HUB M100 теперь подключен к моей WiFi сети и любое устройство Matter owrt Thread может через него подключиться к системе умного дома будь то HomeAssistant, Apple Home, Google Home или другие системы. Пограничных маршрутизаторов может быть несколько. В качестве пограничного маршрутизатора могут выступать следующие устройства

HomePod mini, HomePod (2nd generation),Apple TV 4K (2nd generation), Apple TV 4K (3rd generation), Google Nest Hub (2nd gen), Google Nest Hub Max, Nest WiFi, Nest WiFi Pro, Google TV Streamer 4K, Amazon Echo (4th generation), Echo Show 8 (3rd gen), Echo Studio, Echo Hub, Samsung SmartThings Hub (v3), Aeotec Smart Home Hub, SmartThings Station, Aqara Hub M3, Aqara Hub M100, Aqara Camera Hub G5 Pro

Matter ower WiFi устройства могут подключаться и без пограничных маршрутизаторов, однако устройств с питанием от батареек (сценические выключатели, датчики открытия двери и т.п.) Matter ower WiFi нет поскольку WiFi достаточно энергозатратный чтобы питаться от батареек, по этому все устройства Matter на батарейках делают Matter over Thread. А вот например лампочки, умные розетки и прочие устройства которые питаются от сети могут быть Matter over WiFi.

Купил я пару кнопок IKEA, ни на коробке ни на сайте не написано что это Matter over Thread, написано что это Matter, если быть точным то это Matter over Thread. Купил я их для тестов, так как у меня есть уже сеть Zigbee я предпочитаю использовать сценические выключатели Zigbee, поскольку по форме они выглядят как привычные выключатели. По адекватной цене выключателей Matter формой как существующие я не нашел, а вот икеевские выключатели очень даже примечательны по цене, но вот форма не позволяет их везде удобно использовать.

Выключатели стоят 5,99 и 7,99 евро, один двухкнопочный (однакратное, двухкратное, долгое нажатие) и выключатель крутилка, где кнопка нажимается одно, двух и трехкратно и долгое нажатие, крутилка это две кнопки с от 1 до 8 нажатий, вправо это одна кнопка и влево это вторая кнопка, при этом имеет три режима которые переключаются нижней кнопкой и имеют индикацию в воде светодиодов, если первый светодиод горит то при нажатии на кнопку или крутилку отправляется событие 1,2,и третьей кнопки ,если второй светодиод то 4, 5 и 6-й кнопки, если третий светодиод то 7, 8 и 9-й кнопки.

Мне надо написать автоматизации управления разными светильниками (light), но поскольку светильников много, то писать много автоматизаций лень, надо сделать чтобы можно было писать карту, а автоматизация в соответствии с картой делала соответствующее действие.

у меня получилась следующая карта:
entity id кнопки — название события кнопки — источник света которым управляем — что с этим светом делаем (включаем ,выключаем, переключаем, устанавливаем яркость, меняем яркость)

alias: Universal button light control
description: ""
triggers:
  - entity_id:
      - event.button11s1
      - event.button11s2
      - event.button12s1
      - event.button12s2
      - event.button12s3
    trigger: state
actions:
  - if:
      - condition: template
        value_template: "{{ rule is not none }}"
    then:
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ action_type == 'TOGGLE' }}"
            sequence:
              - action: light.toggle
                target:
                  entity_id: "{{ light_entity }}"
          - conditions:
              - condition: template
                value_template: "{{ action_type == 'ON' }}"
            sequence:
              - action: light.turn_on
                target:
                  entity_id: "{{ light_entity }}"
          - conditions:
              - condition: template
                value_template: "{{ action_type == 'OFF' }}"
            sequence:
              - action: light.turn_off
                target:
                  entity_id: "{{ light_entity }}"
          - conditions:
              - condition: template
                value_template: "{{ action_type == 'multi_press_plus' }}"
            sequence:
              - action: light.turn_on
                target:
                  entity_id: "{{ light_entity }}"
                data:
                  brightness: "{{ new_brightness_plus | int }}"
          - conditions:
              - condition: template
                value_template: "{{ action_type == 'multi_press_minus' }}"
            sequence:
              - action: light.turn_on
                target:
                  entity_id: "{{ light_entity }}"
                data:
                  brightness: "{{ new_brightness_minus | int }}"
          - conditions:
              - condition: template
                value_template: "{{ action_type is number }}"
            sequence:
              - action: light.turn_on
                target:
                  entity_id: "{{ light_entity }}"
                data:
                  brightness: "{{ (action_type / 100 * 255) | int }}"
mode: queued
variables:
  event_type: "{{ trigger.to_state.attributes.event_type }}"
  button: "{{ trigger.entity_id }}"
  config:
    event.button12s2:
      multi_press_1:
        light: light.l4
        action: multi_press_minus
      multi_press_2:
        light: light.l4
        action: multi_press_minus
      multi_press_3:
        light: light.l4
        action: multi_press_minus
      multi_press_4:
        light: light.l4
        action: multi_press_minus
      multi_press_5:
        light: light.l4
        action: multi_press_minus
      multi_press_6:
        light: light.l4
        action: multi_press_minus
      multi_press_7:
        light: light.l4
        action: multi_press_minus
      multi_press_8:
        light: light.l4
        action: multi_press_minus
    event.button12s1:
      multi_press_1:
        light: light.l4
        action: multi_press_plus
      multi_press_2:
        light: light.l4
        action: multi_press_plus
      multi_press_3:
        light: light.l4
        action: multi_press_plus
      multi_press_4:
        light: light.l4
        action: multi_press_plus
      multi_press_5:
        light: light.l4
        action: multi_press_plus
      multi_press_6:
        light: light.l4
        action: multi_press_plus
      multi_press_7:
        light: light.l4
        action: multi_press_plus
      multi_press_8:
        light: light.l4
        action: multi_press_plus
    event.button12s3:
      multi_press_1:
        light: light.l4
        action: TOGGLE
      multi_press_2:
        light: light.l4
        action: 20
      long_press:
        light: light.l4
        action: 100
    event.button11s1:
      multi_press_1:
        light: light.l4
        action: TOGGLE
      multi_press_2:
        light: light.l4
        action: 20
      long_press:
        light: light.l4
        action: 100
    event.button11s2:
      multi_press_1:
        light: light.l5
        action: TOGGLE
      multi_press_2:
        light: light.l5
        action: 20
      long_press:
        light: light.l5
        action: 100
  rule: "{{ config.get(button, {}).get(event_type) }}"
  light_entity: "{{ rule.light if rule else none }}"
  action_type: "{{ rule.action if rule else none }}"
  current_brightness: |
    {{ state_attr(light_entity, 'brightness') | int(0) }}
  press_count: |
    {{ event_type.split('_')[-1] | int(0) }}
  step: "{{ press_count * 13 }}"
  new_brightness_plus: |
    {{ [current_brightness + step, 255] | min }}
  new_brightness_minus: |
    {{ [current_brightness - step, 3] | max }}

в автоматизацию нам надо добавить в начало все entity id кнопок

triggers:
  - entity_id:
      - event.button11s1
      - event.button11s2
      - event.button12s1
      - event.button12s2
      - event.button12s3
    trigger: state

И заполнить карту:

    event.button12s3:
      multi_press_1:
        light: light.l4
        action: TOGGLE
      multi_press_2:
        light: light.l4
        action: 20
      long_press:
        light: light.l4
        action: 100

В данном отрывке событие кнопки event.button12s3 при событии multi_press_1 переключает light.l4, при событии multi_press_2 и long_press устанавливает соответствующую яркость.

но мне нужно было ещё убавлять и прибавлять яркость, поскольку яркость я буду менять крутилкой, то я посмотрел события которые выдает крутилка (multi_press_1, multi_press_2, multi_press_3, multi_press_4, multi_press_5, multi_press_6, multi_press_7, multi_press_8) для этого в action я ввел 2 параметра: multi_press_plus и multi_press_minus, которое в зависимости от индекса нажатий (числа в конце события крутилки) прибавляет или убавляет яркость на величину равной 5% умноженное на число в конце события (от 1 до 8), для этого для всех событий надо action сделать одинаково, вот эта часть убавляет яркость при кручении налево (event.button12s2):

    event.button12s2:
      multi_press_1:
        light: light.l4
        action: multi_press_minus
      multi_press_2:
        light: light.l4
        action: multi_press_minus
      multi_press_3:
        light: light.l4
        action: multi_press_minus
      multi_press_4:
        light: light.l4
        action: multi_press_minus
      multi_press_5:
        light: light.l4
        action: multi_press_minus
      multi_press_6:
        light: light.l4
        action: multi_press_minus
      multi_press_7:
        light: light.l4
        action: multi_press_minus
      multi_press_8:
        light: light.l4
        action: multi_press_minus

Эта часть увеличивает яркость при кручении направо (event.button12s1)

    event.button12s1:
      multi_press_1:
        light: light.l4
        action: multi_press_plus
      multi_press_2:
        light: light.l4
        action: multi_press_plus
      multi_press_3:
        light: light.l4
        action: multi_press_plus
      multi_press_4:
        light: light.l4
        action: multi_press_plus
      multi_press_5:
        light: light.l4
        action: multi_press_plus
      multi_press_6:
        light: light.l4
        action: multi_press_plus
      multi_press_7:
        light: light.l4
        action: multi_press_plus
      multi_press_8:
        light: light.l4
        action: multi_press_plus

В action могут быть следующие значения: TOGGLE, ON, OFF, яркость от 1 до 100, multi_press_plus, multi_press_minus