Меню

MQTT

Протокол Message Queuing Telemetry Transport (MQTT) используется в течение многих лет, но сейчас он особенно актуален благодаря взрывному росту IoT: и потребительские, и промышленные устройства внедряют распределенные сети и граничные вычисления (edge computing), а устройства с постоянной трансляцией данных становятся частью повседневной жизни. Такой интенсивный рост заставляет людей искать способы эффективной передачи данных.

Что такое MQTT

Энди Стэнфорд-Кларк (IBM) и Арлен Ниппер (тогда работавший в Eurotech, Inc.) написали первую версию протокола в 1999 году. Он использовался для мониторинга нефтепроводов в рамках SCADA. Цель состояла в том, чтобы создать протокол, который был бы эффективным с точки зрения пропускной способности, легким и потреблял бы мало энергии от батареи, поскольку устройства были подключены по спутниковой связи, что в то время было чрезвычайно дорого. На данный момент большинство устройств используют версию 5.0.

MQTT - это легкий сетевой протокол с возможностью публикации и подписки, который передает сообщения между устройствами. Протокол обычно работает по протоколу TCP/IP; однако любой сетевой протокол, обеспечивающий упорядоченные двунаправленные соединения без потерь, может поддерживать MQTT. Он предназначен для соединений с удаленными местоположениями, где требуется "небольшой объем кода" или ограничена пропускная способность сети. Протокол является стандартом open OASIS и рекомендацией ISO (ISO/IEC 20922).

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

Таким образом, MQTT стал протоколом для потоковой передачи данных между устройствами с ограниченной мощностью процессора и / или временем автономной работы, а также для сетей с дорогой или низкой пропускной способностью, непредсказуемой стабильностью и высокой задержкой. Вот почему MQTT известен как идеальный протокол для Интернета Вещей. Он построен на протоколе TCP/IP, но существует ветвь MQTT-SN для работы по Bluetooth, UDP, ZigBee и в других сетях Интернета Вещей, отличных от TCP/IP.

Как работает протокол

Модель публикации и подписки

В MQTT есть 2 основных определения : MQTT брокер и клиент MQTT.

MQTT брокер - это сервер, который получает все сообщения от клиентов, а затем рассылает их соответствующим получателям. Проще говоря, брокер действует как почтовое отделение. MQTT не использует адрес предполагаемого получателя, а использует строку под названием “Тема”, и любой, кто хочет получить копию этого сообщения, подпишется на неё. Несколько клиентов могут получать сообщение от одного брокера (возможность "один ко многим"). Аналогично, несколько отправителей могут публиковать темы для одного подписчика (многие к одному).

Клиент MQTT - это любое устройство (от микроконтроллера до полноценного сервера), которое запускает библиотеку MQTT и подключается к MQTT брокеру по сети.

  1. Клиент подключается к брокеру. Он может подписаться на любое сообщение по “темe” в брокере. Это соединение может быть обычным соединением TCP/IP или зашифрованным соединением TLS для конфиденциальных сообщений.
  2. Клиент публикует сообщения по теме, отправляя сообщение и тему брокеру.
  3. Затем брокер пересылает сообщение всем клиентам, подписавшимся на эту тему.

Поскольку сообщения MQTT организованы по темам, разработчик приложения может гибко указывать, что определенные клиенты могут взаимодействовать только с определенными сообщениями. Например, датчики опубликуют свои показания в разделе “sensor_data” и подпишутся на раздел “config_change”. Приложения для обработки данных, которые сохраняют данные датчиков в серверной базе данных, будут подписаны на раздел “sensor_data”. Приложение консоли администратора может получать команды системного администратора для настройки конфигураций датчиков, таких как чувствительность и частота дискретизации, и публиковать эти изменения в разделе “config_change”.

Типы сообщений MQTT

Сеанс MQTT разделен на четыре этапа: подключение, аутентификация, связь и завершение. Клиент начинает с создания соединения Transmission Control Protocol/Internet Protocol (TCP/IP) с брокером, используя либо стандартный порт, либо пользовательский порт, определенный операторами брокера. При создании соединения важно понимать, что сервер может продолжить старый сеанс, если ему будет  повторно предоставлен используемый идентификатор клиента.

Стандартные порты-1883 для незашифрованной связи и 8883 для зашифрованной связи с использованием Secure Sockets Layer (SSL)/Transport Layer Security (TLS). Во время подтверждения SSL/TLS клиент проверяет сертификат и аутентифицирует сервер. Клиент также может предоставить сертификат клиента брокеру во время установления связи. Брокер может использовать это для аутентификации клиента. Хотя это и не является частью спецификации MQTT, для брокеров стало обычным поддерживать аутентификацию клиентов с помощью сертификатов на стороне клиента SSL/TLS.

Поскольку протокол MQTT предназначен для устройств с ограниченными ресурсами и интернета Вещей, SSL/TLS не всегда может быть хорошим вариантом, а в некоторых случаях может быть даже нежелательным. В таких случаях аутентификация представляется в виде открытого текста имени пользователя и пароля, которые отправляются клиентом на сервер - это часть последовательности пакетов CONNECT/CONNACK. Кроме того, некоторые брокеры, особенно открытые, опубликованные в Интернете, будут принимать анонимных клиентов. В таких случаях имя пользователя и пароль просто остаются пустыми

Формат сообщения MQTT

MQTT считается легким протоколом, поскольку все его сообщения имеют небольшой объем кода. Пакет состоит из 2-байтового фиксированного заголовка + переменного заголовка и поля данных. 2-байтовый заголовок фиксирован и всегда будет присутствовать во всех пакетах, а переменный заголовок и поле данных не всегда.

MQTT message

Из двухбайтового фиксированного заголовка первый байт является полем управления. Это 8-разрядное поле управления разделено на два 4-разрядных поля. Первые 4 бита MSB являются полем типа команды. Этот тип определяет действие, которое будет выполнено: клиент хочет подписаться на тему, публикуется новое сообщение для подписчиков и другие.

Следующие 4 бита являются битами флага управления, и они используются командой публикации для остальных зарезервированных команд, и значение будет равно 0.

Второй байт фиксированного заголовка содержит оставшуюся длину, которая равна длине переменного заголовка + длине поля с данными.

Заголовок переменной присутствует не во всех пакетах MQTT. Некоторые команды или сообщения MQTT используют это поле для предоставления дополнительной информации или флагов, и они различаются в зависимости от типа пакета. Идентификатор пакета является общим для большинства типов пакетов.

В концe, пакет может содержать поле с данными. Даже поле данных является необязательным и его наличие зависит от типа пакета. Это поле обычно содержит отправляемую информацию. Например, для пакетов ПОДКЛЮЧЕНИЯ это идентификатор клиента и "имя пользователя и пароль", если они присутствуют. А для пакета ПУБЛИКАЦИИ это сообщение, которое должно быть опубликовано.

Quality of Service

QoS относится к соглашению между отправителем и получателем сообщения. Он действует как ключевая функция в MQTT, предоставляя клиенту возможность выбирать между тремя уровнями обслуживания.

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

  • Самый простой уровень QoS-это неподтвержденный сервис. На этом уровне QoS используется последовательность пакетов ПУБЛИКАЦИИ; издатель один раз отправляет сообщение брокеру, а брокер один раз передает сообщение подписчикам. Не существует механизма, позволяющего убедиться, что сообщение было получено правильно, и брокер не сохраняет сообщение. Этот уровень QoS также может называться “не более одного раза”, “QoS 0” или "выстрелить и забыть".
  • Второй уровень QoS-это передача с подтверждением. Этот уровень QoS использует последовательность пакетов ПУБЛИКАЦИИ/публикации между отправителем и его брокером, а также между брокером и подписчиками. Пакет подтверждает, что содержимое было получено, и механизм повторной попытки отправит исходное содержимое снова, если подтверждение не получено своевременно. Это может привести к тому, что подписчик получит несколько копий одного и того же сообщения. Этот уровень QoS также может называться “по крайней мере один раз” или “QoS1”.
  • Третий уровень QoS-это гарантированная передача. Этот уровень QoS доставляет сообщение с двумя парами пакетов. Первая пара называется PUBLISH/PUBREC, а вторая пара называется PUBREL/PUBCOMP. Эти две пары гарантируют, что, независимо от количества повторных попыток, сообщение будет доставлено только один раз. Этот уровень QoS также может называться “ровно один раз” или “QoS2”.
QoS_MQTT

Преимущества и недостатки

Преимущества:

  • MQTT нейтрален к содержимому пакета. Поле данных протокола MQTT может содержать данные любого типа, такие как двоичные файлы, текст ascii и т.д. Приемник должен уметь интерпретировать и декодировать в соответствии с форматом, используемым передатчиком.
  • Он использует пакет небольшого размера и может использоваться для приложений с низкой пропускной способностью.
  • Он обеспечивает более низкое энергопотребление батареи.
  • Это надежный протокол, поскольку он использует параметры QoS для обеспечения гарантированной доставки. Предназначен для доставки сообщений в соответствии с шаблонами "максимум один раз", "минимум один раз" и "ровно один раз"
  • Масштабируемость благодаря своей модели публикации/подписки.
  • Он предлагает несвязанную конструкцию, так как легко разделить устройство и сервер. Идеально подходит для распределенных коммуникаций "один ко многим" и для отдельных приложений.
  • Устройство публикации может отправлять данные на сервер в любое время, независимо от его состояния.
  • Оснащен функцией LWT (“Последняя воля” и “Завещание”) для уведомления сторон о ненормальном отключении клиента.
  • Полагается на TCP/IP для основных задач связи.

Недостатки:

  • MQTT не поддерживает потоковую передачу видео.
  • Проблемы с задержкой. MQTT имеет более медленные циклы передачи.
  • Безопасность не встроена. MQTT не зашифрован. Вместо этого он использует TLS/SSL (Уровень безопасности транспортного уровня/Уровень защищенных сокетов) для шифрования безопасности.
  • Централизованный брокер может привести к сбою, поскольку клиентские соединения с брокерами постоянно открыты.

Примеры использования MQTT

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

  • Управление автопарком. Организации используют MQTT для создания более интеллектуальных систем управления автопарком, которые улучшают оптимизацию парка, безопасность водителей и снижают затраты на топливо. Новые виды транспорта с использованием беспилотных летательных аппаратов также меняют способ перемещения товаров. Подключение между мобильным устройством, используемым оператором, с телеметрической информацией непосредственно от транспортного средства и интеграция во внутренние системы планирования и маршрутизации обеспечивают видимость, необходимую для улучшения общей работы автопарка.
  • Данные с датчиков окружающей среды. MQTT поддерживает модель доставки сообщений "не более одного раза". В сетях с частичным охватом территории или высокой задержкой это означает, что информация может быть утеряна или дублирована. В областях, где удаленные датчики регистрируют и передают данные с заданными интервалами, это не проблема, поскольку новые показания поступают регулярно. Датчики в удаленных средах обычно являются устройствами с низким энергопотреблением, что делает MQTT идеальным решением для датчиков Интернета вещей с относительно низким приоритетом передачи данных.
  • Данные о работоспособности оборудования: для быстрого реагирования на возникающие проблемы и предотвращения простоев. Например, для ветроэлектростанции нужна гарантированная доставка текущих показателей эффективности местным командам еще до того, как эта информация поступит в центр обработки данных. В таких ситуациях доставка сообщений "хотя бы один раз" гарантирует, что соответствующие флаги будут своевременно замечены необходимыми специалистами, даже если они поступят в виде дубликатов. Это важно для межмашинной связи с более высоким приоритетом.
  • Биллинговые системы: Есть еще более приоритетные и точные сообщения, которые необходимо правильно обрабатывать. В бизнес-ситуациях, когда дублирование записей недопустимо, в том числе в биллинговых системах, флаг QoS передачи "ровно один раз" полезен. Это исключает дублирование или потерю пакетов в платежных или биллинговых системах, уменьшает количество аномалий и ненужных противоречий в соглашении.
  • Приложения для обмена текстовыми сообщениями для общения в режиме реального времени, которые используют низкое потребление данных и энергии MQTT. Например, Facebook использует MQTT для своего приложения Messenger не только потому, что протокол экономит заряд батареи во время обмена сообщениями между мобильными телефонами, но и потому, что протокол позволяет эффективно доставлять сообщения за миллисекунды, несмотря на несогласованные подключения к Интернету по всему миру.

Устройства MQTT, поддерживаемые платформой

  • Xirgo Global FMS500 Light MQTT (IOTM)
  • Xirgo Global FMS500 Light+ MQTT (IOTM)
  • Xirgo Global FMS500 StCAN MQTT (IOTM)
  • BCE FMS500 Light MQTT (IOTM)
  • BCE FMS500 Light+ MQTT (IOTM)
  • BCE FMS500 StCAN MQTT (IOTM)
  • GlobalmatiX xTCU

Как настроить устройства MQTT для работы с Navixy

Конфигурация устройств Xirgo и BCE

Чтобы настроить устройство Xirgo и BCE для работы с MQTT:

  • Внутри FMSET: Choose connectivity → Telemetry server → MQTT broker address settings введите host: mqtt.eu.navixy.com для EU сервера и mqtt.us.navixy.com для US сервера, порт 1883.
  • И добавьте пользователя по умолчанию в MQTT Security -> Authorization:
xirgo MQTT config

Конфигурация устройства Globalmatix

Для настройки устройства Globalmatix на работу с MQTT:

  • Укажите сервер mqtt.navixy.com порт 1883 для EU и mqtt.us.navixy.com порт 1883 для US сервера
  • Имя пользователя/пароль - globalmatix/secretword
  • Тема globalmatix/in

Для настройки устройства Globalmatix на работу с MQTTS:

  • Укажите сервер mqtt.navixy.com порт 8883 для EU и mqtt.us.navixy.com порт 8883 для US сервера
  • Имя пользователя/пароль - globalmatix/secretword
  • Тема globalmatix/in
Миграция с Wialon
Показать
Миграция с Wialon
Перенос пользователей,
трекеров, геозон и истории.
Узнать больше
Скрыть

Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookie.