MQTT в Home Assistant настраивается так: устанавливаете add-on Mosquitto broker, добавляете интеграцию MQTT, создаёте пользователя для устройств и проверяете обмен сообщениями в «Инструментах разработчика». MQTT — это лёгкий протокол «публикация-подписка», на котором работают Zigbee2MQTT, Tasmota, ESPHome (в части вариантов) и самодельные датчики. Ниже — установка, структура топиков, примеры и отладка.
1Как работает MQTT
В MQTT есть брокер (сервер) и клиенты. Устройства публикуют сообщения в топики, например kuhnya/temperatura, а подписчики получают их. Home Assistant выступает клиентом брокера: подписывается на нужные топики и публикует команды. Топики образуют иерархию с разделителем «/», а подстановки + (один уровень) и # (все вложенные) позволяют подписаться сразу на группу.
| Термин | Что означает |
|---|---|
| Брокер | Сервер, который принимает и раздаёт сообщения (Mosquitto) |
| Топик | Адрес сообщения, например zigbee2mqtt/датчик |
| Payload | Содержимое сообщения: текст или JSON |
| QoS | Уровень доставки: 0, 1 или 2 |
| Retain | Брокер хранит последнее сообщение и отдаёт новым подписчикам |
| Discovery | Автоматическое создание устройств в Home Assistant по специальным топикам |
2Установка Mosquitto
- Откройте «Настройки» → «Дополнения» → «Магазин дополнений» и установите Mosquitto broker.
- Запустите дополнение и включите «Запускать при старте».
- Создайте пользователя для MQTT: add-on Mosquitto по умолчанию проверяет логины среди пользователей Home Assistant, поэтому добавьте отдельного пользователя (без прав администратора) в разделе «Люди».
- В «Настройки» → «Устройства и службы» подтвердите автоматически найденную интеграцию MQTT. Если её нет, добавьте вручную и укажите адрес
core-mosquitto, порт 1883, логин и пароль.
| Порт | Назначение |
|---|---|
| 1883 | MQTT без шифрования |
| 8883 | MQTT с TLS |
| 1884 / 9001 | Часто используются для WebSocket-варианта; зависит от конфигурации |
Если у вас Docker-установка, Mosquitto запускается отдельным контейнером с файлом mosquitto.conf: нужно задать слушатель и файл паролей, иначе версия 2 отклонит анонимных клиентов.
3Проверка работы
Откройте «Инструменты разработчика» → вкладка MQTT (если не видите её, значит интеграция не настроена). В разделе «Прослушать топик» введите # и нажмите «Начать прослушивание»: вы увидите все сообщения. В разделе публикации отправьте тестовое сообщение в топик test/hello с текстом «привет» и убедитесь, что оно приходит. Для внешней проверки используйте программу MQTT Explorer: она показывает дерево топиков и позволяет редактировать сообщения.
Нет времени разбираться? Мы можем настроить Home Assistant под ключ вместе с MQTT-брокером, Zigbee2MQTT и устройствами.
4MQTT Discovery и ручные сущности
Большинство программ (Zigbee2MQTT, Tasmota, ESPHome в режиме MQTT) используют Discovery: они публикуют описание устройства в топик с префиксом homeassistant/, и сущности создаются сами. Для самодельных датчиков можно описать сущность в YAML. Пример датчика температуры, который получает значение из топика:
mqtt:
sensor:
- name: "Температура в гараже"
unique_id: garage_temperature
state_topic: "garage/temperature"
unit_of_measurement: "°C"
device_class: temperature
value_template: "{{ value_json.temp }}"
Блок размещается в configuration.yaml или отдельном файле, подключённом через include. Начиная с 2022 года формат с ключом mqtt: является основным; старый вариант с платформой в разделе sensor: не рекомендуется. После изменения конфигурации проверьте её и перезагрузите раздел MQTT без полной перезагрузки системы.
5Автоматизация по MQTT-сообщению
Можно запускать сценарии прямо от сообщений в топике, не создавая сущностей:
alias: Сообщение от датчика протечки
triggers:
- trigger: mqtt
topic: "sensors/leak/kitchen"
payload: "wet"
actions:
- action: notify.mobile_app_telefon
data:
title: "Протечка"
message: "Сработал датчик на кухне"
Если нужна готовая логика без ручного YAML, воспользуйтесь конструктором автоматизаций.
6Безопасность
- Запретите анонимные подключения и используйте отдельных пользователей для разных устройств.
- Не открывайте порт 1883 в интернет. Для внешних устройств применяйте VPN или TLS на порту 8883.
- Не используйте один и тот же пароль для брокера и учётной записи администратора.
- Ограничьте права пользователей на отдельные топики с помощью ACL, если в сети много сторонних устройств.
7Отладка частых проблем
| Симптом | Причина | Что делать |
|---|---|---|
| Ошибка «Не удалось подключиться» | Неверный адрес, порт или пароль | Проверить логин, адрес core-mosquitto и порт |
| Сущности не создаются | Discovery отключён или другой префикс | Включить обнаружение и проверить префикс homeassistant |
| Дублируются сущности | Меняется unique_id или остались retain-сообщения | Очистить retain-топики Discovery |
| Значения «unknown» после перезапуска | Нет retain у состояния | Публиковать состояние с retain |
8Команды из Home Assistant: пример выключателя
MQTT работает в обе стороны. Например, самодельное реле на ESP-плате принимает команды в топик и отправляет своё состояние в другой. Чтобы управлять им из Home Assistant, опишите сущность-выключатель:
mqtt:
switch:
- name: "Насос полива"
unique_id: garden_pump
command_topic: "garden/pump/set"
state_topic: "garden/pump/state"
payload_on: "ON"
payload_off: "OFF"
retain: true
Параметр retain: true заставляет брокер хранить последнюю команду, и после перезагрузки устройства оно сразу получит нужное состояние. Применяйте его осознанно: для опасных исполнительных устройств (насос, нагреватель) сохранённая команда «включить» после сбоя питания может привести к неожиданному запуску. В таких случаях добавляйте защиту на стороне устройства.
9Как выбрать QoS и retain
Для большинства домашних задач хватает QoS 0 или 1. Уровень 0 не гарантирует доставку, но быстрый и подходит для частых показаний датчиков. Уровень 1 повторяет отправку, пока не придёт подтверждение, и подходит для команд. QoS 2 нужен редко и создаёт лишнюю нагрузку. Что касается retain, сохраняйте состояние и конфигурацию Discovery, но не сохраняйте разовые события вроде нажатия кнопки: при перезапуске подписчик получит старое событие и выполнит действие повторно.
10Мониторинг самого брокера
Mosquitto публикует служебную статистику в топики $SYS/#: число клиентов, объём трафика, uptime. Подпишитесь на них в MQTT Explorer, если подозреваете проблемы с подключениями. В Home Assistant можно создать сенсоры на ключевые значения и получать уведомление, если брокер недоступен. Это особенно важно, когда на MQTT построен весь Zigbee-контур: остановка брокера отключает все датчики сразу.
Следите и за размером журналов add-on’а: при включённой подробной отладке они быстро растут. Включайте детальный лог только на время диагностики, а затем возвращайте обычный уровень.
Чтобы MQTT был надёжной основой, следите за пропускной способностью: слишком частые публикации (например, датчик отправляет значение каждую секунду) создают лишнюю нагрузку на брокер и на базу данных Home Assistant. Настраивайте интервал публикации на устройстве и исключайте шумные сущности из истории. Если вы пишете собственный код для ESP8266 или ESP32, используйте автоматическое переподключение к брокеру и публикацию статуса «online/offline» через механизм Last Will, чтобы Home Assistant сразу видел, когда устройство пропало из сети.
11Когда MQTT нужен, а когда нет
MQTT стоит подключать, если вы используете Zigbee2MQTT, Tasmota, самодельные датчики на ESP или хотите объединить несколько систем через общий брокер. Если у вас только ZHA, ESPHome по нативному API и облачные интеграции, брокер не нужен, и лишний сервис просто добавит точку отказа. Принимайте решение по реальной задаче, а не «на всякий случай». Если же брокер уже есть, обязательно настройте его автозапуск, резервное копирование каталога данных и мониторинг доступности, ведь от него зависят все подключённые устройства.
12Частые вопросы
Нужен ли MQTT, если я использую ZHA?
Нет. ZHA работает без MQTT. Брокер нужен для Zigbee2MQTT, Tasmota и самодельных устройств.
Можно ли использовать внешний брокер?
Да. В интеграции MQTT укажите адрес любого брокера в сети. Это удобно, если у вас уже есть сервер с Mosquitto.
Как очистить старые retain-сообщения?
В MQTT Explorer удалите сообщение в нужном топике или опубликуйте в него пустой payload с флагом retain.
13Итог
Mosquitto и интеграция MQTT занимают несколько минут, а даёт гибкость: подключаются Zigbee2MQTT, Tasmota и любые самодельные датчики. Для нестандартных сценариев можно заказать автоматизацию на заказ.



