Автоматизация, homeassistant + mqtt + zigbee
Немного потупил на тему как увязать три сущности homeassistant + mqtt + zigbee, но разобрался.
Во-первых zigbee2mqtt отправляется на свалку истории. В нем нет вообще никакого смысла, мутное тяжеловесное, глючное дерьмо. Постоянно отваливаются датчики, срет ошибками, невменяемый и неадекватный интерфейс.
HA с установленной интеграцией MQTT прекрасно выполняет все задачи.
Например — транслирует данные с Zigbee датчиков в MQTT брокер. Делается это очень просто.
Создаем файл автоматизации (тоже самое можно через gui) с таким содержимым:
- id: 'send_voltage_on_changes'
alias: 'Передача показаний zigbee'
description: ''
trigger:
- platform: time_pattern
seconds: '0'
condition: []
action:
- service: mqtt.publish
metadata: {}
data:
topic: zigbee/kitchen/voltage
payload: "{{states('sensor.zb_kitchenbacklight_voltage')}}"
qos: 2
retain: true
- service: mqtt.publish
metadata: {}
data:
topic: zigbee/kitchen/power
payload: "{{states('sensor.zb_kitchenbacklight_power')}}"
qos: 2
retain: true
- service: mqtt.publish
metadata: {}
data:
topic: zigbee/kitchen/waterleak
payload: "{{states('sensor.zb_waterleak_kitchen_moisture')}}"
qos: 2
retain: true
mode: single
По тексту всё понятно — он запускается каждую минуту и в соответствующие темы кидает значение zigbee датчиков. Не забываем указать qos и retain иначе при нескольких подписантах сообщение можно пропустить.
mode — отвечает за то, что будет если выполнение события затянется и наступит следующее. В случае single следующее не наступит.
Или нужно отправлять MQTT по нажатию кнопки:
- switch:
unique_id: mqtt_switch1
name: "MQTT кнопка"
state_topic: "test/switch1"
command_topic: "test/switch1"
payload_on: "on"
payload_off: "off"
state_on: "on"
state_off: "off"
optimistic: false
qos: 2
retain: true
Здесь важный момент — темы state и command совпадают для того, чтобы HA оперативно отражал изменение статуса другим маршрутом (с другого устройства например).
Ну и последнее действие: когда надо устройство zigbee дрыгнуть по команде mqtt. Опять идем в автоматизацию:
- id: 'change_switch_on_mqtt'
alias: Включение елки через mqtt
description: ''
trigger:
- platform: mqtt
topic: dom/room/pine_switch
payload: 'on'
condition: []
action:
- type: turn_on
device_id: b6954d440bdacd9b4954aecd9ae44ec2
entity_id: d2d540e7a4fa4d8275ec0e1510c7d944
domain: light
mode: single
Для выключения придется продублировать с другим payload. Делал через gui поэтому device_id и entity_id такие. Но там очевидно.