MQTT — это легкий сетевой протокол обмена сообщениями. Он часто используется в системах умного дома, IoT-устройствах, датчиках, контроллерах и инженерном оборудовании.
MQTT удобен там, где нужно передавать небольшие сообщения между устройствами: состояния, команды, показания датчиков и события.
MQTT работает через центральный узел — broker.
Устройство → MQTT broker → другое устройство или система
Устройства не общаются напрямую друг с другом. Они публикуют сообщения в определенные темы, а другие устройства подписываются на эти темы и получают сообщения.
Topic — это адрес сообщения.
Пример:
home/livingroom/temperature
home/kitchen/light
home/bathroom/humidity
Одно устройство может отправить температуру в topic, а система умного дома может подписаться на этот topic и использовать значение в сценариях.
В MQTT используются два основных действия:
| Действие | Значение |
|---|---|
| Publish | Отправить сообщение в topic |
| Subscribe | Подписаться на topic и получать сообщения |
Пример:
Датчик публикует температуру:
home/room1/temperature = 23.5
Система подписана на этот topic и получает значение 23.5
В системе умного дома MQTT может использоваться для:
В системе умного дома любой канал может передавать информацию о своем состоянии в топики брокера MQTT.
Для включения данной функции необходимо в настройках параметров выбранного канала включить опцию Использовать MQTT.
Топик для передачи формируется следующим образом:
cluster/mqttapi/devices/device <DeviceId> : <DeviceAdress>
DeviceID - ID устройства на шине RS-485
DeviceAdress - номер канала внутри модуля (от 1 до 10)
Пример
Для работы с реле на канале 3:7 нужно подписаться на топик cluster/mqttapi/devices/device3:7
Сервер умного дома по умолчанию подписан на топик cluster/mqttapi/devices/set
Для передачи значений необходимо в данный топик записать информацию в JSON формате в соответствии с таблицей
| Тип устройства | Формат сообщения | Описание |
|---|---|---|
| Реле | {"DeviceID":3,"DeviceAdress":6,"Value":1} | Для канала 3:6 типа Реле будет установлено значение 1. Value может принимать значения 0 (выключено), 1 (включено) |
| Светодиодная подсветка | {"DeviceID":4,"DeviceAdress":8,"Value":60} | Для канала 4:8 типа Светодиодная подсветка будет установлено значение 60%. Value может принимать значения от 0 до 100 |
| RGB | {"DeviceID":5,"DeviceAdress":8,"R":60,"G":0,"B":255} | Для канала 5:8 типа RGB будет установлено значение цвета (60:0:255). R, G, B могут принимать значения от 0 до 255 |