
MQTT — протокол обмена сообщениями IoT
Основа обмена сообщениями современного IoT по модели публикации/подписки. Как MQTT вписывается в умный дом и автоматизацию зданий рядом с KNX, DALI и Home Assistant.
Что такое MQTT?
MQTT (Message Queuing Telemetry Transport) — это лёгкий протокол обмена сообщениями по модели публикации/подписки, изначально разработанный для спутниковых каналов в 1990-х годах (IBM/Eurotech). Сегодня это доминирующий протокол для связи устройств с сервером в IoT — от датчиков ESP8266 до промышленных ПЛК.
В отличие от KNX (на основе шины) или Modbus (ведущий/ведомый), MQTT использует модель брокера: устройства публикуют сообщения в топики на центральном брокере (например, Mosquitto), и любой подписчик, слушающий этот топик, получает сообщение. Нет прямой связи между устройствами.
Ключевые понятия:
- Брокер: Центральный сервер, маршрутизирующий все сообщения (Mosquitto, HiveMQ, EMQX). В умном доме = работает на сервере HA или на отдельном Pi.
- Топик: Иерархический строковый путь, например
home/livingroom/light/state - Публикация: Устройство отправляет сообщение в топик
- Подписка: Клиент слушает топик и получает все опубликованные в нём сообщения
- Сохраняемое сообщение: Брокер хранит последнее значение — новые подписчики получают его сразу
- QoS 0/1/2: Не более одного раза / Не менее одного раза / Ровно один раз — гарантия доставки
Спецификация MQTT
| Параметр | Значение |
|---|---|
| Стандарт | ISO/IEC 20922 (MQTT 3.1.1), MQTT 5.0 |
| Транспорт | TCP/IP (порт 1883) или TLS (порт 8883) |
| Топология | Звезда (с центром на брокере) |
| Направление | Двунаправленная публикация/подписка |
| Полезная нагрузка | Любая бинарная/текстовая — обычно JSON или простое значение |
| Разделитель топиков | / (косая черта), например home/floor1/room2/temp |
| Подстановка (один уровень) | + (плюс), например home/+/light |
| Подстановка (несколько уровней) | # (решётка), например home/# |
| QoS 0 | Отправил и забыл — без гарантии доставки |
| QoS 1 | Не менее одного раза — получатель подтверждает (возможны дубли) |
| QoS 2 | Ровно один раз — четырёхэтапное рукопожатие |
| Сохраняемые сообщения | Брокер хранит последнее сообщение по каждому топику |
| Сообщение Will | Отправляется брокером при неожиданном отключении клиента |
| Аутентификация | Имя пользователя/пароль, сертификаты TLS |
| Порт (без шифрования) | 1883 |
| Порт (TLS) | 8883 |
MQTT в умном доме — экосистема
MQTT — это общий язык DIY и полупрофессионального умного дома. Несколько крупных проектов используют его как транспортный уровень:
Zigbee2MQTT
zigbee2mqtt.ioПреобразует радиотелеграммы Zigbee в MQTT. Подключите координатор Zigbee (CC2530, SkyConnect) к HA, запустите Zigbee2MQTT — и более 2500 устройств Zigbee появятся как топики MQTT. Хаб Philips Hue не нужен.
Tasmota / ESPHome
tasmota.github.ioПрошивка с открытым исходным кодом для модулей ESP8266/ESP32. Прошейте недорогое реле Sonoff с Tasmota — и оно станет умным выключателем, публикующим в MQTT. ESPHome нативен для HA.
Интеграция Home Assistant MQTT
home-assistant.ioHA может публиковать в любой топик MQTT и подписываться на него. Настройка через YAML или интерфейс. MQTT Discovery автоматически создаёт сущности HA, когда устройство объявляет о себе через определённый топик.
Node-RED
nodered.orgВизуальное программирование на основе потоков, которое подписывается на топики MQTT, применяет логику и публикует в другие топики или конечные точки KNX/HTTP. Часто используется вместе с HA для сложной маршрутизации.
WirenBoard
wirenboard.comРоссийский контроллер на DIN-рейку использует MQTT как основной протокол. WirenBoard публикует все показания датчиков и принимает управление через топики MQTT. Работает с HA и Node-RED.
Примеры структуры топиков
Пример дерева топиков MQTT (умный дом)
home/
├── livingroom/
│ ├── light/state → "ON" / "OFF"
│ ├── light/brightness → "75" (0-100%)
│ ├── light/color_temp_k → "3000"
│ ├── temperature → "21.5"
│ └── occupancy → "true" / "false"
├── kitchen/
│ ├── light/state → "ON"
│ └── humidity → "45"
├── bedroom/
│ ├── blind/position → "75" (0=open, 100=closed)
│ └── thermostat/setpoint → "20.5"
└── panel/
├── meter/power_w → "1247"
└── meter/energy_kwh → "1852.3"MQTT против KNX — что когда использовать
| Аспект | MQTT | KNX TP |
|---|---|---|
| Инфраструктура | IP-сеть (Ethernet/Wi-Fi) | Выделенный кабель шины TP |
| Надёжность | Зависит от сети и времени работы брокера | Детерминирована, шина всегда активна |
| Задержка | Миллисекунды (IP) + обмен с брокером | <50 мс (прямая телеграмма по шине) |
| Масштабируемость | Неограниченная (горизонтальное масштабирование) | 255 адресов на линию, максимум 15 линий |
| Сложность настройки | Низкая (брокер + публикация/подписка) | Высокая (программирование ETS, адресация) |
| Стоимость оборудования | Низкая (ESP8266 = 2 €) | Высокая (актор KNX = 50–200 €+) |
| Сертификация | Не требуется | Сертификат KNX + лицензия ETS |
| Работает без сервера | ❌ Брокер должен быть запущен | ✅ Локальная шина работает без сервера |
| Лучший сценарий | Данные датчиков, интеграция IoT, гибкое DIY | Критичное к безопасности управление, коммерческое здание |
| Типичный пользователь | Мейкер, интегратор HA, разработчик IoT | Инженер-электрик, специалист по DALI/KNX |
Честный ответ: В хорошо спроектированной премиальной установке KNX отвечает за управление оборудованием (коммутация, диммирование, шторы), а MQTT/IP — за агрегацию данных датчиков и программные интеграции (мониторинг энергии, присутствие, погода). Они дополняют друг друга, а не конкурируют.
Варианты интеграции KNX + MQTT
Home Assistant (интеграции KNX + MQTT)
Интеграции KNX и MQTT работают в HA. Автоматизации могут читать значения датчиков MQTT и запускать акторы KNX — или наоборот. Никакого дополнительного оборудования.
knx-mqtt-bridge (открытый исходный код)
Автономный сервис на Node.js, двунаправленно связывающий групповые адреса KNX с топиками MQTT. Каждый GA KNX сопоставляется с топиком MQTT. Работает на Pi или в Docker.
Узлы Node-RED KNX + MQTT
node-red-contrib-knx + узлы MQTT. Визуальное программирование потоков: топик MQTT → преобразование → телеграмма KNX. Подходит для сложной условной маршрутизации.
Шлюз WirenBoard WB-MGW
Шлюз WirenBoard может транслировать между устройствами RS-485/Modbus и MQTT. Затем HA читает MQTT и публикует в KNX. Распространён в Восточной Европе.
Архитектура KNX + MQTT, спроектированная под ваш проект
Мы интегрируем сенсорные сети MQTT со щитами управления KNX — Zigbee2MQTT, счётчики энергии, датчики ОВиК — всё объединено в одной системе.
Запросить расчёт →