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

Что такое MQTT и зачем он нужен?
Протокол для Интернета вещей: философия и задачи
В мире, в условиях, где вещей становится больше, чем людей, критически важен лёгкий и надёжный способ обмена данными. MQTT (Message Queuing Telemetry Transport) — это открытый протокол (protocol), который разработан именно для таких сценариев. Он создан компанией IBM в 1999 году, а сегодня поддерживается консорциумом OASIS и является стандартом де-факто для IoT.
Философия 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 подходит для устройств с малым объёмом памяти и низкой частотой процессора.
В рамках этой статьи мы рассмотрели ключевые аспекты работы MQTT — протокола, который стал фундаментом для современных систем Интернета вещей. В отличие от других решений для межмашинной коммуникации, MQTT предлагает уникальное сочетание лёгкости, гибкости и надёжности, что делает его востребованным как в умном доме, так и в масштабах промышленности.
Протокол имеет продуманную архитектуру, где посердник отвечает за маршрутизацию сообщений между издателями и подписчиками, а каждый клиент (client) может работать даже в условиях нестабильного соединения. Момент отправки данных и выбор уровня QoS определяет баланс между скоростью и гарантией доставки, что особенно важно при передаче критичных телеметрических показателей.
При реализации проекта даже технические ограничения устройств - малый объём памяти, низкая пропускная способность канала или плохой сигнал - не становятся препятствием благодаря минимальному оверхеду протокола. Для повышения безопасности рекомендуется установить TLS-шифрование и использовать систему сертификатов, особенно когда речь идёт о промышленных сетях и инфраструктуре IIOT. С развитием отрасли количество подключаемых устройств растёт в геометрической прогрессии, и масштабируемость MQTT позволяет работать с большим числом абонентов без потери производительности. Последняя версия спецификации расширяет возможность интеграции с облачными платформами, а детальная техническая документация помогает разработчикам быстро разобраться в теме и реализовать проект любой сложности.
На практике протокол поддерживает множество сценариев: от мониторинга удалённой станции до управления распределёнными системами автоматизации. Аппаратные характеристики современных микроконтроллеров вполне достаточны для работы с MQTT, а процесс connect и поддержания сессии оптимизирован для экономии энергии.
Таким образом, выбор MQTT даёт разработчикам гибкий инструмент для построения надёжных и эффективных систем обмена данными, способных адаптироваться к требованиям самых разных задач будущего.
Комментарии (0)
Пока нет комментариев. Будьте первым!