Что такое MQTT?
На практике большинство устройств и интеграций в умном доме работают с QoS 0 или QoS 1. QoS 2 — для случаев, когда каждое сообщение критично (финансовые транзакции, медицинские данные). В домашнем контексте таких задач обычно нет.
Ещё одна важная концепция. При публикации сообщения можно установить флаг retain. Брокер запомнит последнее такое сообщение в топике и отдаст его каждому новому подписчику сразу при подключении.
Зачем это нужно? Представьте: вы перезагрузили Home Assistant. Он подключается к MQTT-брокеру и подписывается на топик home/bedroom/light/state. Без retain ему придётся ждать, пока лампочка опубликует своё следующее обновление состояния. С retain — текущее состояние уже ждёт его на брокере. Данные доступны мгновенно.
Retained-сообщения — штука полезная, но требуют аккуратности. Забытые retain-сообщения в неиспользуемых топиках могут создавать путаницу. Периодическая чистка — хорошая практика.
Элегантный механизм для обнаружения отключений. При подключении к брокеру клиент может зарегистрировать «завещание» — сообщение, которое брокер опубликует автоматически, если клиент неожиданно пропадёт (обрыв связи, аварийное отключение).
Типичный пример: устройство при подключении регистрирует LWT-сообщение offline в топик home/sensor/availability. Пока устройство работает, оно периодически публикует online в тот же топик. Если устройство пропало — брокер автоматически публикует offline, и Home Assistant моментально узнаёт, что датчик недоступен.
Простой механизм, но невероятно полезный для мониторинга состояния устройств.
Брокер — единственный обязательный серверный компонент в MQTT-инфраструктуре. Он принимает подключения от клиентов, маршрутизирует сообщения между издателями и подписчиками, хранит retained-сообщения и управляет LWT.
Eclipse Mosquitto — самый популярный MQTT-брокер в домашней автоматизации. Открытый, лёгкий, стабильный. Работает на чём угодно — от Raspberry Pi до полноценного сервера. Потребляет минимум ресурсов: пара мегабайт оперативной памяти и практически незаметная нагрузка на процессор.
В Home Assistant Mosquitto устанавливается как аддон — буквально в пару кликов. Для standalone-установки — через Docker, apt или собран из исходников. Конфигурируется текстовым файлом, документация отличная.
Mosquitto — не единственный вариант.
EMQX — высокопроизводительный брокер, рассчитанный на миллионы подключений. Избыточен для дома, но если вам интересна горизонтальная масштабируемость и кластеризация — вот он.
NanoMQ — ультралёгкий брокер для встраиваемых систем. Интересная штука, но в домашней автоматизации Mosquitto покрывает все потребности.
HiveMQ, VerneMQ — enterprise-решения. Не ваш случай, если вы не управляете десятками тысяч устройств.
Для домашнего использования Mosquitto — безоговорочный стандарт. Работает, не ломается, жрёт мало. Что ещё нужно.
Теперь к практике. Как именно MQTT используется в домашней автоматизации?
Самый наглядный пример. Zigbee2MQTT — программный мост, который берёт данные от Zigbee-устройств (через USB-координатор) и публикует их в MQTT-топики. Каждое Zigbee-устройство получает свой набор топиков: состояние, команды, конфигурация.
Датчик температуры Aqara публикует показания в топик вроде zigbee2mqtt/aqara_temp_living_room. Home Assistant подписан на этот топик и мгновенно получает обновления. Хотите включить лампочку? Home Assistant публикует команду в топик zigbee2mqtt/ikea_bulb_bedroom/set — Zigbee2MQTT принимает её и отправляет команду лампочке по Zigbee.
MQTT здесь — клей между Zigbee-миром и миром IP. Быстрый, надёжный, стандартизированный.
Wi-Fi-устройства с прошивкой Tasmota общаются с миром через MQTT. Каждое устройство — MQTT-клиент, который публикует состояние и принимает команды. Структура топиков у Tasmota стандартизирована: cmnd/, stat/, tele/ — команды, статусы, телеметрия.
ESPHome может работать как через MQTT, так и через нативный API Home Assistant. Но MQTT-режим бывает полезен, если вы используете не только Home Assistant, а например, связку из нескольких систем.
Frigate (NVR с детекцией объектов) публикует события обнаружения в MQTT: распознал человека — опубликовал сообщение. Home Assistant подхватывает и запускает автоматизацию — включает свет, отправляет уведомление, начинает запись.
MQTT идеально подходит как транспорт для передачи метрик в системы мониторинга. Telegraf (сборщик метрик) подписывается на нужные топики, собирает данные и отправляет их в InfluxDB. Grafana строит красивые графики. Вся цепочка — стандартная и хорошо документированная.
Несколько сервисов в вашей домашней инфраструктуре? MQTT — универсальная шина между ними. Node-RED читает данные из MQTT и строит сложные автоматизации. Скрипт на Python публикует результат парсинга в MQTT. Home Assistant реагирует. Никто не привязан к API конкретной платформы — все общаются через брокера.
MQTT сам по себе — протокол без встроенного шифрования. В локальной сети это обычно не проблема, но знать о рисках стоит.
Аутентификация. Mosquitto поддерживает логин и пароль. Настроить — минутное дело, и это нужно сделать обязательно. Без аутентификации любой клиент в вашей сети может подключиться к брокеру, читать все сообщения и отправлять команды любым устройствам.
Шифрование (TLS). Для локальной сети — опционально, но если брокер доступен извне (что само по себе не лучшая идея), TLS обязателен. Mosquitto поддерживает TLS нативно, настройка через конфигурационный файл.
ACL (Access Control Lists). Можно ограничить, какие клиенты имеют доступ к каким топикам. Датчику температуры незачем видеть команды умного замка. ACL решают эту задачу, хотя в домашних инсталляциях этим занимаются редко.
Минимальный набор — логин/пароль на брокере. Для большинства домашних сценариев этого достаточно.
Рано или поздно вам понадобится заглянуть «внутрь» MQTT-потока — понять, что публикуют устройства, какие данные приходят, в каких топиках. Для этого существуют MQTT-клиенты.
MQTT Explorer — графическое приложение для Windows, macOS и Linux. Подключаетесь к брокеру — и видите дерево всех топиков, текущие значения, историю изменений. Незаменимый инструмент для отладки. Если что-то не работает — MQTT Explorer покажет, доходит ли сообщение до брокера и в каком виде.
mosquitto_sub / mosquitto_pub — консольные утилиты, идущие в комплекте с Mosquitto. Быстрый способ подписаться на топик или отправить тестовое сообщение прямо из терминала.
mosquitto_sub -h localhost -t "zigbee2mqtt/#" -u user -P passwordЭта команда покажет всё, что публикует Zigbee2MQTT. Удобно для быстрой диагностики.
Версия 5.0, вышедшая в 2019 году, добавила ряд полезных возможностей:
Причины ошибок. В MQTT 3.1.1 при ошибке клиент просто получал отказ без объяснений. В 5.0 брокер сообщает причину: аутентификация не пройдена, топик не существует, превышена квота.
Свойства сообщений. К сообщению можно прикрепить метаданные: время жизни (Message Expiry), тип содержимого (Content Type), пользовательские свойства (User Properties). Это упрощает интеграцию между сервисами.
Shared Subscriptions. Несколько подписчиков могут разделять нагрузку по обработке сообщений из одного топика. В домашней автоматизации потребность невелика, но для масштабных инсталляций — полезно.
Topic Aliases. Короткие числовые псевдонимы вместо длинных текстовых топиков. Экономит трафик при частых публикациях.
На практике большинство устройств и интеграций в умном доме всё ещё работают на MQTT 3.1.1. Переход на 5.0 идёт постепенно, и для домашнего использования разница пока не критична. Mosquitto поддерживает обе версии одновременно.
Устройство не появляется в Home Assistant. Первым делом — MQTT Explorer. Посмотрите, публикует ли устройство что-то в брокер. Если публикует — проблема в интеграции Home Assistant (неправильный топик, формат данных). Если нет — проблема на стороне устройства или его подключения к брокеру.
Дубликаты сообщений. Если используете QoS 1, дубликаты — нормальное поведение. Автоматизации должны быть к этому готовы. Для команд типа «переключить свет» (toggle) это может быть проблемой — свет включится и тут же выключится. Решение: используйте абсолютные команды (on/off) вместо toggle.
Retained-мусор. Со временем в брокере накапливаются retained-сообщения от давно удалённых устройств. Они не мешают работе, но создают путаницу. Очистка — публикация пустого retained-сообщения в нужный топик.
Брокер недоступен — всё встало. MQTT-брокер — центральное звено. Если он упал, устройства продолжают работать автономно (Zigbee-сеть, например, не зависит от MQTT), но автоматизации на стороне Home Assistant перестают получать данные. Решение: запускайте Mosquitto через Docker с политикой restart: always или через systemd.
MQTT — это клей, который скрепляет компоненты домашней автоматизации в единую систему. Он не конкурирует с Zigbee, Wi-Fi или Thread — он работает поверх них, обеспечивая единообразный, лёгкий и надёжный обмен сообщениями между устройствами, сервисами и платформами.
Протокол прост в освоении, хорошо документирован и поддерживается буквально всем — от крошечных микроконтроллеров до enterprise-систем. Mosquitto как брокер — фактически стандарт для домашних инсталляций: ставится за минуту, работает годами.
Если вы строите умный дом с любой степенью серьёзности — MQTT появится в вашей инфраструктуре неизбежно. Zigbee2MQTT, Tasmota, Frigate, Node-RED, мониторинг — все дороги ведут к брокеру. И это хорошо, потому что протокол действительно заслуживает своего места в центре системы.
Материал носит информационно-образовательный характер и не является рекламой конкретных производителей или продуктов.