Шрифт
Что такое MQTT и для чего он нужен в IIoT? Описание протокола MQTT
Play

Что такое MQTT и для чего он нужен в IIoT? Описание протокола MQTT

С развитием промышленности увеличивается количество устройств, которые нужно контролировать и получать от них различные данные. Для решения проблем взаимодействия большого количества устройств и проблем объединения устройств в одну сеть была создана концепция Интернета вещей (англ. Internet of Things, IoT) – это когда устройства объединяются по какому-то признаку в одну сеть, потом уже несколько подобных сетей объединяются в другую большую сеть и так далее.

Устройства в таких сетях взаимодействуют друг с другом по средствам различных интерфейсов и протоколов передачи данных. Так как мы говорим о промышленном применении концепции IoT, в которой должны использоваться промышленное оборудование со своими протоколами и аппаратными средствами, то мы переходим к концепции IIoT (Промышленного Интернета вещей).

Для взаимодействия между собой устройства используют различные промышленные протоколы, одним из популярных протоколов для этой цели является MQTT.

Что такое MQTT?

MQTT или Message Queue Telemetry Transport – это легкий, компактный и открытый протокол обмена данными созданный для передачи данных на удалённых локациях, где требуется небольшой размер кода и есть ограничения по пропускной способности канала. Вышеперечисленные достоинства позволяют применять его в системах M2M (Машинно-Машинное взаимодействие) и IIoT (Промышленный Интернет вещей).

Также существует версия протокола MQTT-SN (MQTT for Sensor Networks), ранее известная как MQTT-S, которая предназначена для встраиваемых беспроводных устройств без поддержки TCP/IP сетей, например, Zigbee.

Особенности протокола MQTT

  • Асинхронный протокол
  • Компактные сообщения
  • Работа в условиях нестабильной связи на линии передачи данных
  • Поддержка нескольких уровней качества обслуживания (QoS)
  • Легкая интеграция новых устройств

Протокол MQTT работает на прикладном уровне поверх TCP/IP и использует по умолчанию 1883 порт (8883 при подключении через SSL).

Обмен сообщениями в протоколе MQTT осуществляется между клиентом (client), который может быть издателем или подписчиком (publisher/subscriber) сообщений, и брокером (broker) сообщений (например, Mosquitto MQTT).

Издатель отправляет данные на MQTT брокер, указывая в сообщении определенную тему, топик (topic). Подписчики могут получать разные данные от множества издателей в зависимости от подписки на соответствующие топики.

  • Connect – установить соединение с брокером
  • Disconnect – разорвать соединение с брокером
  • Publish – опубликовать данные в топик на брокере
  • Subscribe – подписаться на топик на брокере
  • Unsubscribe – отписаться от топика
Схема простого взаимодействия между подписчиком, издателем и брокером

Семантика топиков

Топики представляют собой символы с кодировкой UTF-8. Иерархическая структура топиков имеет формат «дерева», что упрощает их организацию и доступ к данным. Топики состоят из одного или нескольких уровней, которые разделены между собой символом «/».

Пример топика в который датчик температуры, расположенный в спальной комнате публикует данные брокеру:

Одноуровневый wildcard. Для его использования применяется символ «+»

К примеру, нам необходимо получить данные о температуры во всех спальных комнатах:

/home/living-space/+/temperature

В результате получаем данные с топиков:

Многоуровневый wildcard. Для его использования применяется символ «#»

К примеру, чтобы получить данные с различных датчиков всех спален в доме:

/home/living-space/#

В результате получаем данные с топиков:

Структура сообщений

  • Фиксированный заголовок (присутствует по всех сообщениях)
  • Переменный заголовок (присутствует только в определенных сообщениях)
  • Данные, «нагрузка» (присутствует только в определенных сообщениях)
Фиксированный заголовок

Message Type – это тип сообщения, например: CONNECT, SUBSCRIBE, PUBLISH и другие.

Flags specific to each MQTT packet – эти 4 бита отведены под вспомогательные флаги, наличие и состояние которых зависит от типа сообщения.

Remaining Length – представляет длину текущего сообщения(переменный заголовок + данные), может занимать от 1 до 4 байта.

Всего в протоколе MQTT существует 15 типов сообщений: Тип сообщенияЗначениеНаправление передачиОписание Reserved0000 (0)нетЗарезервирован CONNECT0001 (1)К* -> С**Запрос клиента на подключение к серверу CONNACK0010 (2)К СПубликация сообщения PUBACK0100 (4)К СПодтверждение публикации PUBREC0101 (5)К СПубликация получена PUBREL0110 (6)К СРазрешение на удаление сообщения PUBCOMP0111 (7)К СПубликация завершена SUBSCRIBE1000 (8)К -> СЗапрос на подписку SUBACK1001 (9)К СЗапрос на отписку UNSUBACK1011 (11)К СPING запрос PINGRESP1101 (13)К ССообщение об отключении от сервера Reserved1111 (15) Зарезервирован

*К – клиент, **С – сервер

Четыре старших бита первого байта фиксированного заголовка отведены под специальные флаги:

DUP – флаг дубликата устанавливается, когда клиент или MQTT брокер совершает повторную отправку пакета (используется в типах PUBLISH, SUBSCRIBE, UNSUBSCRIBE, PUBREL). При установленном флаге переменный заголовок должен содержать Message ID (идентификатор сообщения)

QoS – качество обслуживания (0,1,2)

RETAIN – при публикации данных с установленным флагом retain, брокер сохранит его. При следующей подписке на этот топик брокер незамедлительно отправит сообщение с этим флагом. Используется только в сообщениях с типом PUBLISH.

📎📎📎📎📎📎📎📎📎📎