MQTT протокол: устройство, описание, принцип работы
В мире, где вещей становится больше, чем людей, критически важен лёгкий и надёжный способ обмена информацией. MQTT (Message Queuing Telemetry Transport) — это открытый протокол, который разработан именно для таких сценариев. Он создан компанией IBM в 1999 году, а сегодня поддерживается консорциумом OASIS и является стандартом де-факто для IoT.

Что такое MQTT и зачем он нужен?
Протокол для Интернета вещей: философия и задачи
Философия MQTT проста: минимальный оверхед, максимальная эффективность. Протокол работает поверх TCP/IP, поддерживает TLS/SSL для шифрования, но при этом остаётся невероятно «лёгким». Заголовок пакета может занимать всего два байта. Это позволяет использовать MQTT даже в сетях с низкой пропускной способностью и на устройствах с ограниченными ресурсами — от датчиков температуры до промышленных контроллеров.
MQTT решает основные задачи Интернета вещей: доставка телеметрии, управление удалёнными системами, синхронизация состояний. Он применяется там, где важна надёжная доставка данных при нестабильной связи. Благодаря архитектуре publish/subscribe издатель и подписчик не взаимодействуют напрямую — их развязывает центральный брокер. Это делает архитектуру гибкой и масштабируемой.
Принцип работы: издатель, подписчик и брокер
В основе MQTT лежит триада участников: издатель (publisher), подписчик (subscriber) и брокер (broker). Клиент, который отправляет данные, называется издатель. Он публикует сообщения в определённый топик — именованный канал, похожий на путь в файловой системе. Подписчик — это клиент, который принимает сообщения из интересующих его топиков. А брокер — это сервер, который контролирует весь обмен: принимает публикации, фильтрует их по подпискам и отправляет данные нужным адресатам.
Схема работы выглядит так: издатель подключается к брокеру и публикует message в топик home/light/status. Подписчик, заранее оформивший подписку на этот топик, получит сообщение автоматически. При этом издатель и подписчик не знают друг о друге — их связывает только брокер. Такая модель позволяет легко добавлять новых участников системы без изменения кода существующих.
Протокол предлагает три уровня качества доставки (QoS — Quality of Service):
- QoS 0 (At most once) — «отправил и забыл». Подтверждения доставки нет, потеря сообщения возможна. Подходит для телеметрии, где важна скорость, а не каждое отдельное значение.
- QoS 1 (At least once) — гарантированная доставка, но сообщение может прийти несколько раз. Используется, когда потеря данных недопустима.
- QoS 2 (Exactly once) — ровно один раз. Максимальная надёжность, но и максимальные затраты на обмен служебными пакетами. Нужен в критичных сценариях, например, при управлении финансами.
Брокер также поддерживает механизм Retained Messages: если издатель отправляет сообщение с флагом retain, брокер запомнит его. Когда позже подключится новый подписчик, он сразу получит последнее сохранённое значение. Это полезно для параметров состояния, которые должны быть доступны сразу после подключения.
Где применяется MQTT
MQTT в АСУТП: промышленный мониторинг
В промышленных системах автоматизации (АСУТП) надёжность и предсказуемость — на первом месте. MQTT идеально подходит для мониторинга оборудования: датчики давления, расхода, вибрации отправляют данные на брокер, а SCADA-система или аналитическая платформа подписывается на эти топики. Благодаря лёгкости протокол работает даже на старых контроллерах с малым объёмом памяти.
Протокол поддерживает аутентификацию по логину/паролю и защиту канала через TLS/SSL, что важно для безопасности промышленных сетей. Механизм Last Will and Testament (LWT) позволяет брокеру автоматически отправить сообщение, если клиент внезапно отключился — это помогает быстро обнаружить проблемы с оборудованием. В IIoT-сценариях MQTT часто используется вместе с OPC UA, создавая гибкий мост между OT и IT-мирами.
MQTT для умного дома: свет, датчики и сценарии
Умный дом — одна из самых популярных сфер применения MQTT. Датчики движения, освещённости, влажности и температуры публикуют свои показания в топики вида home/sensor/temperature. Исполнительные устройства — реле, диммеры, приводы штор — подписываются на команды в топики home/actuator/light/command. Брокер выступает в роли центрального хаба, который маршрутизирует весь трафик.
Платформы вроде Home Assistant или Node-RED легко интегрируются с MQTT, позволяя пользователю создавать сложные сценарии без написания кода. Например, можно сделать правило: «Если датчик движения сработал после заката, включить свет в коридоре на два минуты». Гибкий протокол позволяет добавлять новые устройства и изменять логику «на лету», не перепрошивая контроллеры.
MQTT в интернете вещей: телеметрия и управление
В масштабных IoT-проектах — от логистики до умного города — MQTT обеспечивает эффективную передачу телеметрии. Тысячи устройств отправляют небольшие объёмы данных с высокой частотой. Лёгкий заголовок и бинарный формат протокола экономят трафик и заряд батарей. Облачные платформы (cloud) — AWS IoT, Azure IoT Hub, Google Cloud IoT — поддерживают MQTT как основной транспорт для подключения устройств.
Технологии обработки потоковых данных (Apache Kafka, Spark) часто принимают информацию именно через MQTT-брокер. Это позволяет строить гибкие архитектуры, где данные сразу попадают в аналитику, машинное обучение или системы оповещения. Важно, что протокол разработан с учётом нестабильной связи: клиент может переподключаться, а брокер — буферизовать сообщения согласно выбранному QoS.
Легкий старт: публичный брокер и MQTT Explorer
Устанавливаем MQTT Explorer
Скачиваем и устанавливаем бесплатную программу MQTT Explorer — простой и наглядный инструмент для работы с MQTT. Этот клиент доступен для Windows, macOS и Linux. После установки вы получаете визуальное «дерево» всех топиков, доступных на подключённом брокере. Инструменты вроде MQTT Explorer позволяют быстро разобраться в структуре сообщения, проверить параметры подключения и отладить логику публикации/подписки.
Подключаемся к публичному брокеру
Запускаем программу и подключаемся к любому публичному брокеру. Например, к test.mosquitto.org (логин и пароль не нужны) или к wqtt.ru (после быстрой регистрации). Mosquitto — это популярный открытый брокер, который часто используется для тестов. При подключении нужно указать параметры: адрес сервера, порт (обычно 1883 для plain TCP или 8883 для TLS), при необходимости — логин и пароль для аутентификации.
Экспериментируем с топиками
В MQTT Explorer сразу видно дерево топиков. Пробуем публиковать сообщения, подписываться, смотреть как меняются значения. Всё наглядно и понятно — лучший способ быстро разобраться, как работает MQTT. Например, можно отправить в топик test/temp значение {"value": 23.5} и сразу увидеть, как это сообщение появится у всех подписчиков. Эксперименты с разными QoS, retain-флагами и структурой топиков помогают понять особенности протокола на практике.
Собираем свой стенд: образ с сайта avtomatika.ru
Быстрый старт с готовым образом для Raspberry Pi
На сайте avtomatika.ru скачиваете готовый образ для контроллера на базе Raspberry Pi (подробности в уроке 2). Этот специальный образ ОС уже содержит предустановленный MQTT-брокер (Mosquitto), платформу автоматизации Node-RED и все необходимые библиотеки для работы с датчиками и реле. Загружаете его через USB и получаете полностью настроенный стенд с MQTT-брокером и Node-RED. Всё уже работает из коробки — не нужно вручную устанавливать пакеты, настраивать сервисы или писать код для базовой интеграции.
Онлайн-конструктор avtomatika.ru предлагает гибкий подход: вы можете спроектировать схему подключения устройств, выбрать контроллер, модули и датчики, сформировать спецификацию и автоматически сгенерировать часть кода для контроллера. Это значительно ускоряет разработку и упрощает интеграцию системы без необходимости ручного программирования. Для начинающих это идеальный вариант: после загрузки образа вы сразу получаете рабочую среду для экспериментов с MQTT, IoT и автоматизацией.
Первая подписка: слушаем брокера в Node-RED
Простейший поток для понимания основ: узел mqtt in (подписка на топик) → узел debug. Смотрим, как приходят сообщения от локального брокера. В Node-RED нужно перетащить узел подписки, указать адрес брокера (обычно localhost:1883) и имя топика, например, home/sensors/#. При появлении нового сообщения его содержимое отобразится в панели отладки. Это позволяет быстро проверить, работает ли обмен данными, и увидеть структуру payload.
Отправляем команду: включаем виртуальную лампочку
Симметрия с подпиской — публикация. Создаем узел inject, отправляем JSON-команду в топик, а виртуальный переключатель на дашборде меняет состояние. Появляется ощущение реального управления. Например, можно отправить в топик home/light/command сообщение {"state": "ON"} и увидеть, как на панели Node-RED загорается индикатор. Такой подход позволяет моделировать реальные сценарии до подключения физического оборудования, что экономит время и снижает риск ошибок.
Важные мелочи, которые нужно знать с самого начала
Топики: как не запутаться в именах
MQTT использует иерархическую структуру топиков, похожую на пути в файловой системе: уровень1/уровень2/уровень3. Разделитель — прямой слэш /. Важно заранее продумать схему именования, чтобы избежать путаницы при росте системы. Например, home/floor1/light/kitchen явно указывает на устройство. Брокер поддерживает wildcards: + заменяет один уровень (home/+/light), # — все последующие (home/floor1/#). Это позволяет подписываться на группы топиков одним запросом.
QoS: три уровня надежности
Мы уже упоминали QoS, но важно знать детали. Выбор уровня качества сервиса зависит от задач. QoS 0 — минимальная нагрузка на сеть, но без гарантий. QoS 1 — подтверждение доставки, возможна дубликация. QoS 2 — ровно один раз, но с четырёхэтапным рукопожатием. Важно: более высокий QoS увеличивает трафик и задержку. Для датчиков, отправляющих данные каждую секунду, часто достаточно QoS 0. Для команд управления, где потеря недопустима, нужен QoS 1 или 2.
Retained messages: для тех, кто опоздал
Если устройство отправило сообщение с флагом retain, брокер запомнит его. Когда позже подключится новый подписчик, он сразу получит последнее сохранённое значение. Это полезно для параметров состояния, которые должны быть доступны сразу после подключения. Например, датчик температуры может отправить retain-сообщение при старте, и любой новый клиент сразу увидит актуальное значение, не дожидаясь следующего обновления. Важно: в одном топике может быть только одно retained сообщение, новое перезаписывает старое.
Почему MQTT легкий: заглядываем под капот
MQTT экономит трафик: одно сообщение — несколько байт плюс payload. Протокол бинарный, заголовки минимальные, не требует подтверждения доставки (если не нужно) — именно поэтому он живет на слабых батарейках годами и работает даже на медленных каналах. Поддержка transport как TCP/IP делает его универсальным. В сравнении с HTTP, здесь нет лишних схем или запросов — чистая передача. Флаги в заголовке кодируют QoS, retain, дубликацию. Отсутствие сложных механизмов повторной передачи на уровне протокола снижает нагрузку на клиент. Благодаря этому MQTT подходит для устройств с малым объёмом памяти и низкой частотой процессора.