Коротко: MQTT это способ передать в Home Assistant состояние устройства и команду ему, когда производитель не дал нормальной интеграции. Работает через посредника: брокер принимает сообщения от одних устройств и раздаёт их другим. Ниже порядок настройки от установки брокера до первой автоматизации и разбор того, что чаще всего ломается.
Что такое MQTT и зачем он в умном доме
MQTT это протокол обмена короткими сообщениями по модели издатель-подписчик. Одно устройство публикует сообщение в тему, другое подписывается на эту тему и получает его. Прямой связи между ними нет, и знать адреса друг друга им не нужно.
В умном доме это решает три задачи. Первая: подключить устройство, для которого нет готовой интеграции, но есть MQTT. Вторая: убрать облако производителя из цепочки, чтобы свет и климат работали при обрыве интернета. Третья: связать между собой устройства разных производителей, которые иначе друг о друге не знают.
Протокол экономный: сообщение это несколько байт плюс короткий заголовок. Поэтому его тянут даже микроконтроллеры с крошечной памятью, и поэтому же MQTT стал стандартом для самодельных датчиков.
Из чего состоит система
Компонентов ровно три.
Брокер это сервер, который принимает все сообщения и рассылает их подписчикам. Он не знает, что означает содержимое, и не хранит историю (кроме одного исключения ниже). В большинстве домашних сборок эту роль играет Mosquitto.
Клиенты это устройства и программы: датчик, реле, интеграция Home Assistant, скрипт на компьютере.
Темы это адреса, по которым идёт обмен. Тема выглядит как путь через слэш: home/livingroom/temperature. Иерархия важна, потому что подписка бывает с подстановочными знаками: + заменяет один уровень, # заменяет все оставшиеся. Подписка на home/livingroom/# поймает и температуру, и влажность, и состояние лампы в этой комнате.
Отдельно стоит запомнить про retained-сообщения. Если публикация помечена как retained, брокер запоминает последнее сообщение в этой теме и отдаёт его каждому новому подписчику сразу при подключении. На этом механизме держатся и состояние датчиков, и автообнаружение устройств.
Установка брокера
Порядок зависит от того, как установлен Home Assistant.
На Home Assistant OS и Supervised брокер ставится как дополнение Mosquitto broker из магазина дополнений. После установки нужно создать пользователя в Home Assistant и выдать ему доступ, затем включить дополнение и запустить его. Никаких конфигов руками писать не требуется.
В Docker-сборке Mosquitto поднимают отдельным контейнером с файлом конфигурации и томом для данных. Здесь важно сразу продумать две вещи: где лежит файл паролей и куда пишутся логи.
Порты брокера, которые встречаются в типовых конфигурациях: 1883 для обычного подключения, 8883 для шифрованного, а для веб-сокетов их два — 1884 без шифрования и 8884 с ним. Наружу в интернет открывать 1883 нельзя без шифрования и пароля, об этом ниже.
Подключение Home Assistant к брокеру
Дальше в Home Assistant открываем Настройки, затем Устройства и службы, добавляем интеграцию MQTT и заполняем поля: адрес брокера, порт, имя пользователя и пароль. Если ставили дополнение, адрес брокера это локальный хост, а имя пользователя то, которое создали в Home Assistant.
После подключения интеграция сразу готова принимать устройства. Появляются ли сущности, зависит от того, умеет ли устройство объявлять себя. Если умеет, оно публикует в специальную тему описание себя, и Home Assistant создаёт объекты автоматически. Если не умеет, сущности добавляют руками через YAML или через интерфейс.
Проверить связь проще всего так: подписаться в интерфейсе MQTT на # и посмотреть, идут ли сообщения. Любая активность в топиках означает, что брокер жив и клиенты подключены.
Автообнаружение: как устройство само себя описывает
Автообнаружение это главная причина, по которой MQTT в Home Assistant выглядит удобно. Устройство публикует в тему вида homeassistant/<тип>/<идентификатор>/config небольшой JSON с описанием: как называется, какие у него поля, где брать состояние. Home Assistant читает этот JSON и создаёт сущность.
Практический вывод: если устройство поддерживает автообнаружение, добавлять его руками не нужно. Если сущностей не появилось, причина почти всегда в одном из трёх: отключён префикс автообнаружения в настройках интеграции, устройство опубликовало конфиг до того, как Home Assistant подключился, или публикация была не retained и потерялась. Лечится перезапуском устройства, чтобы оно опубликовало конфиг заново.
Три типовых сценария
Zigbee-устройства через Zigbee2MQTT. Координатор подключается к компьютеру, программа читает с него события и публикует их в MQTT. Home Assistant подписывается и получает датчики и выключатели. Так работает большинство недорогих Zigbee-устройств без родного шлюза.
Прошивка Tasmota на готовых реле и розетках. Устройство получает по воздуху новую прошивку, после чего само работает с MQTT, а настройки задаются веб-интерфейсом. Тема сценарий для тех, у кого есть розетки и реле с ESP-модулем внутри.
Самодельные датчики на ESP32 и ESP8266. Плата с датчиком публикует измерения в свой топик. Прошивка пишется в ESPHome или в Arduino-скетче, и Home Assistant видит обычную сущность. Как это выглядит на практике, разобрано в статье про ESP32 в Home Assistant.
Автоматизации на сообщениях
Home Assistant умеет использовать MQTT как триггер автоматизации. Триггер срабатывает на сообщение в конкретной теме, при желании с проверкой содержимого.
Осмысленные сценарии обычно такие:
- включить свет при срабатывании датчика движения в топике коридора;
- отправить уведомление, если датчик протечки сообщил о воде;
- выключить обогреватель, когда температура в комнате превысила порог;
- фиксировать в журнал открытие входной двери;
- останавливать полив, если датчик влажности почвы показал норму.
Отдельно полезен механизм последней воли. Устройство заранее сообщает брокеру: если я отключусь, опубликуй в мой топик доступности слово offline. Home Assistant видит это и помечает сущность недоступной, а автоматизация может отправить уведомление. Без этого выключенный датчик выглядит как работающий.
Собирать такие связки удобнее вместе с остальными сценариями дома, примеры собраны в статье про сценарии умного дома.
Безопасность
По умолчанию Mosquitto может принимать анонимные подключения. Для дома, где в сети есть хоть один посторонний человек, это плохая идея: любой в той же сети сможет читать все топики.
Минимальные меры выглядят так. Включить запрет анонимных подключений, завести файл паролей и выдать каждому клиенту свой логин. Не публиковать брокер в интернет напрямую. Если доступ снаружи нужен, использовать VPN или шифрованное подключение с сертификатом, а не проброс порта. Пароли не хранить в открытом виде в конфигурациях, которые лежат в облачных резервных копиях.
Есть и менее очевидная угроза: устройство с MQTT часто управляет нагрузкой на 220 вольт. Ошибка в правах доступа означает не чтение температуры, а возможность включить реле. Поэтому права стоит раздавать по минимуму, а не одним общим логином на всё.
Диагностика: что смотреть, когда не работает
Порядок проверки от простого к сложному.
Первое: идут ли сообщения вообще. Подписка на # показывает всё, что летает по брокеру. Тишина означает проблему с брокером или с сетью, а не с устройством.
Второе: видно ли сообщения от конкретного устройства. Подписка на его префикс отделяет проблему одного клиента от общей.
Третье: есть ли retained-сообщение с конфигом автообнаружения. Если конфига нет, сущность не появится, сколько ни перезапускай Home Assistant.
Четвёртое: не конфликтуют ли имена. Два устройства с одинаковым идентификатором перезапишут сущности друг друга, и поведение будет выглядеть случайным.
Пятое: совпадают ли типы данных. Если устройство присылает текст, а сущность ждёт число, значение появится как некорректное. Это частая причина жалоб вида «датчик показывает неизвестно».
Для просмотра топиков удобно держать отдельный клиент вроде MQTT Explorer на компьютере: он показывает дерево тем целиком и сразу видно структуру.
Когда MQTT не нужен
Не всякое устройство стоит тянуть в MQTT. Если у устройства есть нормальная локальная интеграция, проще ею и пользоваться: меньше звеньев, меньше точек отказа. MQTT оправдан там, где альтернатива это облако производителя или отсутствие поддержки вообще.
Второй случай, когда MQTT лишний, это одна-две железки. Ради двух датчиков поднимать брокер, следить за паролями и обновлять его смысла мало. Порог полезности начинается там, где устройств становится больше пяти и появляются разные производители.
Частые вопросы
Нужен ли интернет для работы MQTT
Нет. Брокер и клиенты общаются внутри локальной сети, поэтому свет, климат и датчики продолжают работать при обрыве интернета. Внешний доступ нужен только для управления извне дома.
Чем MQTT лучше родной интеграции
Он не лучше, он универсальнее. Родная интеграция обычно удобнее и полнее, если она существует. MQTT выручает, когда интеграции нет или когда производитель закрывает облако.
Можно ли ставить один брокер на весь дом
Да, и так обычно и делают. Один брокер обслуживает и Zigbee-устройства, и самодельные датчики, и интеграцию Home Assistant. Разделять брокеры имеет смысл только при очень большом числе устройств или при желании изолировать гостевые устройства.
Безопасно ли открывать брокер в интернет
Напрямую нет. Порт без шифрования и без пароля даёт постороннему доступ к управлению устройствами, включая те, что коммутируют нагрузку. Для удалённого доступа используют VPN или шифрованное подключение с проверкой сертификата.
Почему устройство не появляется в Home Assistant
Обычно потому, что не пришло сообщение автообнаружения. Проверьте, включён ли префикс обнаружения в настройках интеграции, публикует ли устройство конфиг вообще и был ли этот конфиг retained. Помогает перезапуск устройства при уже подключённом Home Assistant.
Что почитать дальше
- Home Assistant: с чего начать общая сборка системы с нуля.
- Автоматизации Home Assistant как из триггеров собирать сценарии.
- Локально или облако что именно остаётся работать без интернета.




Комментарии
Войдите, чтобы оставить комментарий.