У меня в использовании (на момент написания заметки) есть два 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.