Печать
Категория: Обзоры
Просмотров: 16138

 

Что такое MQTT?

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

Идеален для использования в контроллерах и датчиках  где требуется небольшой размер кода и есть ограничения по пропускной способности канала. 

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

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

 

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

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

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

Устройства MQTT используют определенные типы сообщений для взаимодействия с брокером, ниже представлены основные:

Топики представляют собой иерархическую структуру, похожую на путь в файловой системе. Например:

myhome/kitchen/temperature

myhome/kitchen/light

Все устройства, которые заинтересованы в получении обновлений информации по всему, например, что происходит на кухне, могут подписаться на топик myhome/kitchen/#  (#-специальный символ, аналогичный "*" в файловых системах) 

Датчик температуры публикует свои измерения в топик /myhome/kitchen/temperature

Выключатель - в топик /myhome/kitchen/light

Преимущества использования MQTT для устройств  

Недостатки и особенности реализации MQTT

Протокол хорошо специфицирует такие операции как подписка на информацию (топик)  и публикацию информации в топик, но сам формат данных оставляет на усмотрение приложений IoT

Это привело к тому, что разные системы используют разные форматы данных и оказываются, на деле, несовместимы между собой

Например, популярные OpenSource системы управления УД: OpenHab, HomeAssistant и IOBroker  поддерживают MQTT. Но при этом напрямую, не совместимы.

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

Начиная с версии 2.4, OpenHab, также, анонсировал новый драйвер MQTT, в том числе, с поддержкой конвенции homie

К сожалению, мои эксперименты с новым драйвером показывают пока только то, что он нестабилен. Старый драйвер стабилен, но достаточно примитивен. Подразумевает использование в качестве  MQTT Payload простых команд: "ON", "OFF", цифровые значения датчиков, разделенные запятыми. Можно прикрутить JSon, но настройка этого крайне неудобна. Также, плоская как блин структура Item-ов OpenHab все еще крайне натянуто ложится на иерархическую структуру мира.

IOBroker имеет более-менее продуманную структуру топиков, но вот беда, его авторам понадобилось зачем-то доработать сам брокер, отступив от стандарта.

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

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

Можно спорить о том, полезная доработка или нет, но она уже привела к тому, что те устройства, которые делаются под IOBroker в принципе, не работают со стандарным Mosquitto, так как не заботятся о правильной архитектуре топиков, уповая на "костыль", внедренный в IOBroker. Любое отступление от стандартов - это всегда плохо. 

 

В своем контроллере LightHub, я уже несколько раз усовершенствовал интерфейс, отвечающий за интерпретацию MQTT. И это не финал.

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

Ждем пока OpenHab 2.4 заработает нормально - и жизнь станет намного легче

Довольно скоро  доработаю контроллер таким образом, чтобы он мог работать одновременно с системами  OpenHab, HomeAssistant и IOBroker. Пока может, но не одновременно, требуя тонкой настройки данных систем. Также, участники сообщества адаптировали контроллер под Domotics.

Данные особенности, тем не менее, не мешают использовать MQTT для межмашинного взаимодействия уже сегодня. 

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

В статье использованы материалы из  Wikipedia и IPC2u 

 

0
0
0
s2sdefault
powered by social2s