У меня в использовании (на момент написания заметки) есть два ZigBee\BLE шлюза Xiaomi Gateway 3, оба интегрированы в ХА с помощью прекрасного компонента от AlexxIT.
При этом один из них уже достаточно давно работает в режиме Mi Home, а вот второй я решил попробовать использовать в режиме ZHA.
И с этого момента мне пришлось познакомиться с концепцией устройств (devices) в ХА.
Основной момент который поначалу ввел меня в ступор — отсутствие привычных мне объектов (entity), их состояний (states) и атрибутов (attribute). Т.е. всего того, что можно найти на странице developer-tools/state.
По задумке, данная модель подразумевает использование исключительно веб-интерфейса ХА для составления автоматизаций, скриптов и прочих вещей, а наличие в интерфейсе выбора возможностей устройства лежит на плечах авторов компонента, который это устройство добавляет.
Мне же больше по душе YAML, поэтому захотелось найти способ использовать именно его.
Для экспериментов я выбрал кубик Aqara (как самый бесполезный из моих устройств) и решил сделать с его использованием автоматизацию.
Смысл автоматизации состоит в изменении яркости лампы в соответствии с величиной угла, на который поворачивается кубик.
Повернул вправо на 123 градуса — увеличил яркость на 123 единицы, повернул влево на 43 — уменьшили на 43.
Все достаточно просто.
Для начала стоит посмотреть как строится автоматизация на основе объектов (или сущностей) и их состояний.
- alias: Aqara Cube Rotate
mode: queued
max: 5
max_exceeded: silent
trigger:
platform: state
entity_id: sensor.0x158d0005292ad9_action
to: 'rotate'
action:
- service: light.turn_on
data_template:
entity_id: light.0x86bd7fffe616b72_light
brightness: >-
{{ (state_attr('light.0x86bd7fffe616b72_light', 'brightness') | int) +
(state_attr('sensor.0x158d0005292ad9_action', 'angle') | int) }}
Все необходимые для триггера параметры можно найти в developer-tools, все коротко и ясно.
Дальше вариант с триггером по device_id.
Такой формат в принципе не предназначен для написания руками, это то, что генерит в итоге веб-интерфейс (немного измененный руками уже после).
- alias: Aqara Cube Rotate
mode: queued
max: 5
max_exceeded: silent
trigger:
- device_id: 1b77e179c20997a9730f634809b9853d
domain: zha
platform: device
type: device_rotated
subtype: right
- device_id: 1b77e179c20997a9730f634809b9853d
domain: zha
platform: device
type: device_rotated
subtype: left
action:
- service: light.turn_on
entity_id: light.0x86bd7fffe616b72_light
data:
brightness: >-
{{ (state_attr('light.0x86bd7fffe616b72_light', 'brightness') | int) +
(trigger.event.data.args.relative_degrees | int) }}
Параметры type и subtype можно узнать в веб-интерфейсе создания автоматизации, переключив его в YAML.
Не удобно, но девайсы в целом и ZHA в частности заточены под веб.
Но, так же есть и еще один способ — триггер по событию (event):
- alias: Aqara Cube Rotate
mode: queued
max: 5
max_exceeded: silent
trigger:
- platform: event
event_type: zha_event
event_data:
device_ieee: "00:15:8d:00:05:29:2a:d9"
command: "rotate_left"
- platform: event
event_type: zha_event
event_data:
device_ieee: "00:15:8d:00:05:29:2a:d9"
command: "rotate_right"
action:
- service: light.turn_on
entity_id: light.0x86bd7fffe616b72_light
data:
brightness: >-
{{ (state_attr('light.0x86bd7fffe616b72_light', 'brightness') | int) +
(trigger.event.data.args.relative_degrees | int) }}
Здесь все немного более интересно =)
В случае с ZHA, найти необходимые эвенты и посмотреть их параметры можно на странице developer-tools/event, подписавшись на zha_event:

После нажатия на кнопку подписаться, ниже начнут появляться события, которые создают устройства подключенные через ZHA.
Если покрутить кубик туда-сюда, будут появляться такие сообщения:
{
"event_type": "zha_event",
"data": {
"device_ieee": "00:15:8d:00:05:29:2a:d9",
"unique_id": "00:15:8d:00:05:29:2a:d9:3:0x000c",
"device_id": "1b77e179c20997a9730f634809b9853d",
"endpoint_id": 3,
"cluster_id": 12,
"command": "rotate_left",
"args": {
"relative_degrees": -116.16000366210938
}
},
"origin": "LOCAL",
"time_fired": "2021-01-28T11:01:44.495696+00:00",
"context": {
"id": "9f1e70fbbfd7bef8ea3bf1c9b3438291",
"parent_id": null,
"user_id": null
}
}
{
"event_type": "zha_event",
"data": {
"device_ieee": "00:15:8d:00:05:29:2a:d9",
"unique_id": "00:15:8d:00:05:29:2a:d9:3:0x000c",
"device_id": "1b77e179c20997a9730f634809b9853d",
"endpoint_id": 3,
"cluster_id": 12,
"command": "rotate_right",
"args": {
"relative_degrees": 55.959999084472656
}
},
"origin": "LOCAL",
"time_fired": "2021-01-28T11:00:29.404901+00:00",
"context": {
"id": "5c1be2dd60c5890b3ae42310484312b8",
"parent_id": null,
"user_id": null
}
}
Здесь видны все данные которые есть в событии и на основе которых можно строить автоматизации.
В примере выше триггер срабатывает при наличии в событии определенных device_id и command, но можно использовать любые свойства и их комбинации.
В действии (action) используется атрибут relative_degrees, получить который можно через обращение к trigger.event.data.args.relative_degrees.