MQTT в Home Assistant: Mosquitto, топики и отладка

6 минчтения 13разделов 9.11.2026обновлено Home Assistantрубрика

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

  1. Откройте «Настройки» → «Дополнения» → «Магазин дополнений» и установите Mosquitto broker.
  2. Запустите дополнение и включите «Запускать при старте».
  3. Создайте пользователя для MQTT: add-on Mosquitto по умолчанию проверяет логины среди пользователей Home Assistant, поэтому добавьте отдельного пользователя (без прав администратора) в разделе «Люди».
  4. В «Настройки» → «Устройства и службы» подтвердите автоматически найденную интеграцию 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 и любые самодельные датчики. Для нестандартных сценариев можно заказать автоматизацию на заказ.