MQTT (англ. message queuing telemetry transport) — упрощённый сетевой протокол, работающий поверх TCP/IP, ориентированный для обмена сообщениями между устройствами по принципу издатель-подписчик.
Первая версия разработана Энди Стэнфорд-Кларком (IBM) и Арленом Ниппером (Arcom) в 1999 году и опубликована под лицензией со свободой от роялти. Спецификация MQTT 3.1.1 была стандартизирована консорциумом OASIS в 2014 году.
Протокол MQTT ориентируется на простоту в использовании, невысокую нагрузку на каналы связи, работу в условиях постоянной потери связи, лёгкую встраиваемость в любую систему. Основное предназначение — работа с телеметрией от различных датчиков, устройств, использование шаблона подписчика обеспечивает возможность устройствам выходить на связь и публиковать сообщения, которые не были заранее известны или предопределены, в частности, протокол не вводит ограничений на формат передаваемых данных.
 
Основные особенности протокола MQTT:
Асинхронный протокол
Компактные сообщения
Работа в условиях нестабильной связи на линии передачи данных
Поддержка нескольких уровней качества обслуживания (QoS)
Легкая интеграция новых устройств
Протокол MQTT работает на прикладном уровне поверх TCP/IP и использует по умолчанию 1883 порт (8883 при подключении через SSL).
 
Обмен сообщениями в протоколе MQTT осуществляется между клиентом (client), который может быть издателем или подписчиком (publisher/subscriber) сообщений, и брокером (broker) сообщений (например, Mosquitto MQTT).
Издатель отправляет данные на MQTT брокер, указывая в сообщении определенную тему, топик (topic). Подписчики могут получать разные данные от множества издателей в зависимости от подписки на соответствующие топики.
 
Устройства MQTT используют определенные типы сообщений для взаимодействия с брокером, ниже представлены основные:
Connect – установить соединение с брокером
Disconnect – разорвать соединение с брокером
Publish – опубликовать данные в топик на брокере
Subscribe – подписаться на топик на брокере
Unsubscribe – отписаться от топика
 
Семантика топиков
Топики представляют собой символы с кодировкой UTF-8. Иерархическая структура топиков имеет формат «дерева», что упрощает их организацию и доступ к данным. Топики состоят из одного или нескольких уровней, которые разделены между собой символом «/».
 
Пример топика в который датчик температуры, расположенный в гаражепубликует данные брокеру:
/home/garage/garage1/temperature
Подписчик может так же получать данные сразу с нескольких топиков, для этого существуют wildcard. Они бывают двух типов: одноуровневые и многоуровневые. Для более простого понимания рассмотрим в примерах каждый из них:
Одноуровневый wildcard. Для его использования применяется символ «+»
Пример топика в который датчик температуры, расположенный в спальной комнате публикует данные брокеру:
/home/living-space/living-room1/temperature
 
В результате получаем данные с топиков:
 
/home/living-space/living-room1/temperature
/home/living-space/living-room2/temperature
/home/living-space/living-room3/temperature
 
Многоуровневый wildcard. Для его использования применяется символ «#»
 
К примеру, чтобы получить данные с различных датчиков всех спален в доме:
/home/living-space/#
 
В результате получаем данные с топиков:
 
/home/living-space/living-room1/temperature
/home/living-space/living-room1/light1
/home/living-space/living-room1/light2
/home/living-space/living-room1/humidity
/home/living-space/living-room2/temperature
/home/living-space/living-room2/light1
 

Нет прав для добавления комментария