MQTT — что это за протокол и зачем нужен брокер
Датчики, реле и контроллер договариваются через посредника — брокера. Разбираем, как это работает, и чем такая схема лучше десятка устройств, которые стучатся друг к другу напрямую.
Содержание
MQTT — лёгкий протокол обмена сообщениями по модели «публикация — подписка»: устройства не говорят друг с другом напрямую, а публикуют сообщения в темы на брокере, и брокер раздаёт их подписчикам. Брокеру нужен порт 1883 без шифрования или 8883 с TLS: оба порта зарегистрированы в IANA для MQTT (спецификация OASIS, раздел 4.2).
Уровни доставки (QoS) — три: 0 «не больше одного раза», 1 «минимум один раз» и 2 «ровно один раз». Флаг retain заставляет брокер хранить последнее сообщение темы и отдавать его новому подписчику.
Ниже — как устроен обмен, темы и подстановки, QoS и retain, порты и безопасность, какой брокер взять и когда брокер не нужен.
Зачем это нужно

Устройство публикует сообщение в тему, а те, кому оно интересно, подписаны на эту тему. Передаёт всё это брокер — программа, которая принимает сообщения и раздаёт подписчикам. Спецификация и описание протокола — на mqtt.org.
Для умного дома это удобно по трём причинам. Датчику не нужно знать адреса получателей, а нового получателя можно добавить, не трогая датчик. Сам протокол рассчитан на слабые контроллеры вроде ESP8266 и ESP32 и нестабильный Wi-Fi.
Как устроен обмен

Пять понятий описывают весь обмен. Таблица показывает их на примерах.
| Понятие | Что это | Пример |
|---|---|---|
| Брокер | Сервер, через который идут все сообщения | Mosquitto на мини-ПК или малине |
| Клиент | Любое устройство или программа | ESP32 с датчиком, Home Assistant, телефон |
| Тема (topic) | Адрес сообщения, уровни через косую черту | dom/kuhnya/temperatura |
| Публикация | Отправка значения в тему | Датчик шлёт 21.5 |
| Подписка | Запрос на получение сообщений темы | Панель подписана на dom/+/temperatura |
Клиент — это и датчик, и приложение на телефоне: все подключаются к брокеру одинаково.
Темы и подстановочные знаки
В подписке есть два знака. По спецификации (раздел 4.7) + заменяет ровно один уровень темы, а # — родительскую тему и любое число уровней под ней; # ставят в конце фильтра.
Пример из спецификации: фильтр sport/tennis/+ подходит к sport/tennis/player1, но не к sport/tennis/player1/ranking. Так одна подписка dom/+/temperatura забирает температуры из всех комнат.
Уровни доставки и retain
Две настройки, которые стоит знать с первого дня. Они определяют надёжность и память брокера.
- QoS 0.«Не больше одного раза»: сообщение может потеряться, зато нет задержки; подходит для частых показаний датчика.
- QoS 1.«Минимум один раз»: сообщение дойдёт, но возможны повторы; подходит для команд на реле, если повтор команды безвреден.
- QoS 2.«Ровно один раз»: самая медленная схема; в бытовом умном доме нужна редко.
- Retain.Брокер запоминает последнее сообщение темы и отдаёт его новому подписчику сразу; пустое сообщение с retain очищает запомненное.
Без retain панель после перезагрузки показывает пустоту до следующей публикации датчика. Определения QoS и retain — в разделах 3.3.1.2 и 3.3.1.3 спецификации MQTT 3.1.1.
Какой брокер взять

Самый распространённый для дома — Eclipse Mosquitto, открытый и очень скромный по ресурсам. Он работает на любом маломощном компьютере, а Home Assistant умеет ставить его одним дополнением.
Порты и безопасность
Порт 1883 передаёт данные без шифрования, 8883 — с TLS. Спецификация (раздел 5.1, справочный) рекомендует серверам с TLS использовать порт 8883.
Клиент при подключении может передать имя и пароль (раздел 5.4.1): как их проверять, решает брокер. Передача пароля открытым текстом уязвима для перехвата, поэтому для удалённого доступа нужен шифрованный порт или VPN.
Что учесть при настройке:
- Пароли.Включите пароли для клиентов и не оставляйте анонимный доступ.
- Не в интернет.Не выставляйте брокер в интернет «как есть»: для удалённого доступа используйте VPN или порт 8883 с сертификатом.
- Названия тем.Задавайте осмысленные названия тем с самого начала: переименовывать их потом придётся во всех устройствах.
- Постоянное питание.Держите брокер на устройстве, которое включено всегда.
Эти четыре правила закрывают основные риски домашнего брокера.
Когда брокер не нужен
Одно-два устройства, которые никому ничего не отдают, проще оставить на собственной веб-странице, как в метеостанции на ESP32. Брокер начинает окупаться, когда устройств несколько и они должны взаимодействовать.
Тогда датчик включает реле, панель показывает всё сразу, а правила пишутся в одном месте. О том, как собрать систему без дорогой платформы, — в материале умный дом на реле и контроллере.
Типовые ошибки
- Один идентификатор клиента у двух устройств.Брокер отключает то одно, то другое, и они бесконечно переподключаются.
- Брокер без пароля.В общей сети или с пробросом порта наружу.
- Темы без структуры.
temp1,temp2: через полгода никто не помнит, что где. - Реле без retain и обратной связи.После перезагрузки платы состояние рассинхронизируется.
- Брокер на компьютере, который выключают на ночь.Дом теряет связь.
- QoS 2 для всего подряд.Лишняя нагрузка без выгоды для датчиков.
Короткий вывод
MQTT нужен, когда в доме больше трёх-четырёх своих устройств и они должны общаться между собой. Для одного датчика это лишнее.
Начните с Mosquitto на домашнем сервере, продумайте структуру тем и сразу включите пароли.
Частые вопросы
Нужен ли TLS в домашней сети?
Если сеть изолирована и доступ к ней только у вас, можно обойтись паролем. Если брокер доступен снаружи или в сети есть чужие устройства, нужен TLS: пароль открытым текстом можно перехватить.
Порт для TLS — 8883. Для удалённого доступа лучше VPN, чем открытый брокер.
Какой QoS выбрать для команды на реле?
QoS 1: команда дойдёт минимум один раз. Повтор возможен, поэтому команда должна быть безвредной при повторе, например «включить» или «выключить», а не «переключить».
Для показаний датчика хватит QoS 0. QoS 2 для дома нужен редко.
Почему устройства бесконечно переподключаются?
Часто у двух устройств одинаковый идентификатор клиента: по спецификации брокер отключает уже подключённого клиента с таким идентификатором.
Задайте каждому устройству уникальный идентификатор. Проверьте также питание и Wi-Fi.
Можно ли открыть брокер MQTT в интернет, чтобы управлять домом из поездки?
Не стоит: открытый брокер, даже с паролем, уязвим. Для удалённого доступа используйте VPN или шифрованное соединение через порт 8883.
Если нужно управление из другого города, настройте VPN на роутере или используйте проверенный удалённый доступ платформы.
Где взять брокер и на чём его запустить?
Mosquitto устанавливается на мини-ПК, одноплатник или как дополнение Home Assistant. В российских магазинах продаются готовые мини-ПК и одноплатные компьютеры.
Брокер скромен по ресурсам. Главное — держать его на устройстве, которое включено постоянно.






















