mqtt
— это один из триггеров которые можно использовать в автоматизациях Home Assistant (список всех триггеров).
mqtt
— это один из триггеров которые можно использовать в автоматизациях Home Assistant (список всех триггеров).
С помощью этого триггера можно запустить автоматизацию по событию в MQTT брокере.
automation:
- trigger:
platform: mqtt
topic: sensor/temperature
action:
service: system_log.write
data:
message: mqtt event
Это автоматизация будет запускаться при любом обновлении топика sensor/temperature
.
Если отправить в топик значение 22.7
, то в логе можно будет увидеть сообщение mqtt event
.
Если отправить еще одно сообщение 22.7
в этот топик, то в логе появится еще одна запись.
Автоматизация запускатся при любом обновлении топика, даже если значение которое пришло
в топик ровно такое же как приходило в прошлый раз.
payload
Можно сделать чтобы автоматизация запускалась только в случае если топик приходит какое-то определенное значение. Вот пример:
automation:
- trigger:
platform: mqtt
topic: sensor/switch
payload: "on"
action:
service: system_log.write
data:
message: mqtt event
Эта автоматизация запустится не при любом изменении топика sensor/switch
, а только если в этот топик придет строка on
.
(При использовании строк on
и off
в yaml их нужно обязательно брать в кавычки)
encoding
Обычно поле encoding
использовать не нужно. Если не указать поле encoding
,
это то же самое что явно сказать encoding: "utf-8"
. При работе со строками и цифрами
это как раз то что нужно. Но в случае работы с бинарными данными (например, если
значение топика — это изображение), нужно явно указать encoding: ''
:
automation:
- trigger:
platform: mqtt
topic: camera/image
encoding: ''
action:
...
trigger
После того как mqtt триггер сработал в блоках condition
и action
становится доступна специальная переменная
с именем trigger
. Вот пример автоматизации которая записывает значение этой переменной в лог:
automation:
- trigger:
platform: mqtt
topic: sensor/temperature
action:
service: system_log.write
data:
message: "{{ trigger }}"
Если отправить в топик sensor/temperature
значение 22.7
, то в логе будет видно что содержится в переменной trigger
:
{
'platform': 'mqtt',
'topic': 'sensor/temperature',
'payload': '22.7',
'qos': 0,
'description': 'mqtt topic sensor/temperature',
'payload_json': 22.7
}
В том случае если значение топика — это json, то в поле payload_json
будет находится разобранный json.
Вот автоматизация которая включает вентилятор если в топик devices/fan
прилетает значение 1
и выключает вентилятор если в топик приходит значение 0
:
automation:
- trigger:
platform: mqtt
topic: devices/fan
action:
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.payload == "1" }}'
sequence:
- service: switch.turn_on
entity_id: switch.fan
- conditions:
- condition: template
value_template: '{{ trigger.payload == "0" }}'
sequence:
- service: switch.turn_off
entity_id: switch.fan
Это пример как можно сделать авто включение-выключение света в туалете с помощью датчика движения (можно использовать разные датчики движения, например "Aqara human body movement and illuminance sensor").
В первую очередь это пример работы MQTT триггера, есть разные способы как делать автоматизацию света, тут показыается пример использования сырых событий от датчика который подключен к Home Assistant через zigbee2mqtt.
timer:
toilet:
automation:
- alias: Turn on light in the toilet by aqara sensor motion
trigger:
platform: mqtt
topic: zigbee2mqtt/0x00158d0004518e15
condition:
condition: template
value_template: "{{ trigger.payload_json.occupancy }}"
action:
- service: light.turn_on
data:
entity_id: light.0xccccccfffe00418e
brightness: "{% if is_state('binary_sensor.night', 'on') %}1{% else %}255{% endif %}"
- service: timer.cancel
data:
entity_id: timer.toilet
- service: timer.start
data:
entity_id: timer.toilet
duration: "0:05:00"
- alias: Turn off light in the toilet by timer
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.toilet
action:
- service: light.turn_off
data:
entity_id: light.0xccccccfffe00418e
transition: 5