В становлении интернета вещей важны не только совершенно новые технологии. Неоценимую роль здесь играет возможность интеграции с разработками прошлых лет. А ключевой момент такой интеграции – связь. Существует немало протоколов, которые позволяют огромному количеству разнообразных «вещей» подключаться к интернету и взаимодействовать друг с другом.

image

Сегодня мы расскажем о паре взаимодополняющих протоколов, которые нашли применение в IoT. Первый – это Modbus. Он служит для организации связи между устройствами, расположенными недалеко друг от друга. Второй – MQTT. Он обладает гораздо более широкими возможностями, поддерживает работу в локальных сетях и в Интернете. С его помощью можно организовать обмен данными между «вещами» в глобальных масштабах.

Modbus – это последовательный протокол обмена данными, который появился в 1979 году и стал стандартом де-факто для организации связи между промышленными устройствами. MQTT появился на 20 лет позже, но, несмотря на разницу в возрасте, совместное использование этих двух протоколов позволяет дать узкоспециализированным интегрированным устройствам все возможности, которые доступны при подключении к интернету.

На рисунке ниже показана схема взаимодействия этих протоколов, а также – устройство, которое позволяет такое взаимодействие организовать – шлюз для интернета вещей.


Шлюз для интернета вещей позволяет объединить возможности MQTT и Modbus

Рассмотрим подробнее Modbus и MQTT, изучим их особенности и возможности их совместного использования в IoT-решениях.

Modbus


Modbus, за десятилетия существования, развился в широкий набор протоколов, использующих различные способы физической связи устройств (например, интерфейс RS-485). В основе всех этих реализаций – последовательный протокол, построенный по модели «ведущий – ведомый». Ведущее устройство отправляет ведомому запрос, а ведомое на этот запрос отвечает. В стандартной сети Modbus присутствует один главный, ведущий узел и до 247 подчинённых –ведомых. Однако, надо отметить, что двухбайтовая система адресации способна значительно ослабить это ограничение.

С использованием интерфейса RS-485 связь между главными и подчинёнными устройствами осуществляется с помощью пакетов, которые содержат код функции и данные. Этот код указывает на то, какое действие необходимо предпринять, например, на необходимость прочесть дискретные входные данные, прочесть данные из FIFO-очереди, выполнить диагностическую операцию. Подчинённое устройство, получив команду и исполнив её, отвечает, отправляя пакет, структура которого очень проста. Благодаря низкой вычислительной нагрузки, которую создаёт взаимодействие по Modbus, «общаться» с его использованием могут очень разные устройства: от интеллектуальных контроллеров до обычных датчиков.

Из описания можно судить о крайней простоте Modbus, но его открытость сделала этот протокол стандартном де-факто для индустриальных и SCADA-систем.

MQTT


MQTT (Message Queuing Telemetry Transport) – это простой открытый протокол, разработанный специально для IoT и применяемый для обмена данными между устройствами. MQTT-сеть включает в себя MQTT-брокера, который служит посредником во взаимодействии MQTT-агентов – издателей и подписчиков. Издатели публикуют информацию, предназначенную для подписчиков.


Брокер, издатель и подписчик в MQTT-сети

MQTT разработан в расчёте на маломощные встроенные устройства, поэтому вычислительные требования для его реализации минимальны. В дополнение к очень низкой нагрузке на системы, MQTT отличается высокой эффективности связи даже в сетях с низкой пропускной способностью. При этом в структуре передаваемых с его помощью данных очень мало служебной информации, то есть, в сравнении со многими другими протоколами, например – с HTTP, он почти не нагружает сети передачей информации, которая нужна лишь для функционирования протокола. По измерениям, сделанным в 3G-сетях, пропускная способность MQTT в 93 раза выше, чем протокола REST (Representational State Transfer), работающего поверх HTTP.

MQTT реализует модель «издатель – подписчик», используя минимальное количество методов. Они служат для указания действий, которые нужно выполнять. Эти действия сводятся к взаимодействию с брокером и к работе с темами и сообщениями. Агенты подключаются к брокеру, а затем либо публикуют темы и сообщения в них, либо подписываются на темы и получают сообщения, в этих темах опубликованные. Завершив работу, агент отключается от брокера. Вот как выглядят методы MQTT:

  • Connect – установить соединение с брокером.
  • Disconnect – разорвать соединение с брокером.
  • Publish – опубликовать тему на брокере.
  • Subscribe – подписаться на тему на брокере.
  • Unsubscribe – отписаться от темы на брокере.

Вот как выглядит упрощённая схема взаимодействия между подписчиком и издателем с использованием MQTT-брокера.


Взаимодействие подписчика и издателя

Издатель, который является источником неких данных, подключается к брокеру. Подписчик, потребитель информации, делает то же самое и подписывается на тему, которая представлена здесь как «/home/alarms/1/status». В данном примере в этой теме публикуются сведения об изменениях состояния домашней сигнализации в некоей «зоне №1». Когда у издателя есть новые данные, он обращается к брокеру и публикует сообщение в этой теме. Брокер же, в свою очередь, передаёт опубликованное сообщения всем, кто на эту тему подписан.

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

MQTT, кроме того, позволяет пользоваться подстановочными символами, что упрощает процесс подписки. Если подписчик, например, желает знать о состояниях всех датчиков сигнализации, он может подписаться на тему следующего вида: «/home/alarms/+/status». В результате, он будет уведомлён о срабатываниях сигнализации во всех зонах, а не только в «зоне №1», как в вышеприведённом примере. Подписаться на целое поддерево тем можно с помощью шаблонна со знаком «#». Например, подписка на «/home/#» позволит получать сообщения обо всём, что происходит в темах, находящихся ниже узла «/home».

Качество обслуживания


MQTT поддерживает указание уровня качества обслуживания (QoS). А именно, существуют три таких уровня:

  • QoS 0. Этот уровень задействует стратегию «максимум однократная доставка сообщений». Приёмник сообщения не подтверждает их получение, отправитель, соответственно, передаёт сообщение лишь раз, не предпринимая попыток по их повторной передаче. Это – метод «отправил и забыл».

  • QoS 1. Здесь применяется подход «минимум однократная доставка сообщений». Гарантируется, что приёмник получит сообщение хотя бы один раз. При этом подписчик может получить одно и то же сообщение несколько раз. А отправитель будет предпринимать повторные попытки отправки до тех пор, пока не получит подтверждение в успешной доставке сообщения.

  • QoS 2. Этому уровню качества обслуживания соответствует самая медленная процедура доставки сообщений, но при этом он – самый надёжный. Его основная особенность – реализация стратегии «однократная доставка сообщений». При его использовании применяется четырёхступенчатая процедура подтверждения доставки сообщений.

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

MQTT-брокеры и шлюзы Intel для интернета вещей


Растущая популярность MQTT в роли важного элемента построения IoT-проектов привела к тому, что создано немало реализаций MQTT с открытым исходным кодом, он применяется во множестве аппаратных разработок. Шлюзы Intel для интернета вещей – это одно из продвинутых решений промышленного уровня, которое поддерживает MQTT.

Это семейство продуктов позволяет налаживать безопасные подключения между датчиками, IoT-устройствами и облачными службами. Шлюзы тщательно протестированы и готовы к установке на них программного обеспечения, необходимого для функционирования конкретного проекта. Они отличаются отличной управляемостью, высоким уровнем безопасности и широким набором поддерживаемых способов связи с внешним миром. Среди этих способов, помимо традиционного проводного Ethernet и беспроводного Wi-Fi, можно найти и ZigBee, и поддержку сотовых сетей, и USB, и, конечно, MQTT и Modbus.

Если говорить о сетевых возможностях, то существует три варианта шлюзов Intel для интернета вещей, они имеют различные конфигурации подсистем ввода-вывода информации. Это деление основано на потребностях рынка. Среди таких потребностей, которые могут учитываться как по отдельности, так и в комбинациях, можно отметить создание стационарных решений промышленного класса, экономичное потребление энергии, разработка решений для подвижных объектов. Но, даже обладающие разными характеристиками, все шлюзы поддерживают функции управления и конфигурирования, обеспечивают безопасность передачи и хранения данных, предоставляют среду для исполнения приложений. При этом стандартной ОС шлюзов является безопасная и стабильная Wind River Linux.

Очень важное преимущество шлюзов Intel для интернета вещей заключается в поддержке технологий безопасности McAfee Embedded Control. В частности, благодаря этим технологиям становится возможным отслеживать изменение состояния устройства, основываясь на политике безопасности. Подобное наблюдение за состоянием устройства, отслеживание всех событий, происходящих с ним, позволяет организовать полностью прозрачную, непрерывно действующую систему аудита, отчётам которой можно доверять.

Заключение


MQTT и Modbus – технологии очень разные, но вместе они помогают строить надёжные IoT-решения. Modbus используется в качестве локального интерфейса для взаимодействия с устройствами, роль MQTT – организация глобальных связей между компонентами системы. Каждый из них играет важную роль. При этом шлюзы Intel для интернета вещей поддерживают оба этих протокола, помимо других средств связи и технологий, обеспечивающих стабильность и безопасность функционирования проектов. С помощью таких шлюзов можно быстро создавать надёжные современные IoT-решения, которые останутся актуальными и в будущем.
Поделиться с друзьями
-->

Комментарии (11)


  1. ITMatika
    28.06.2016 11:28

    А какие сейчас есть устройства для умного дома, которые поддерживают MQTT из коробки?


    1. den_po
      28.06.2016 12:37

      Не то, чтобы изначально разрабатывались для умного дома, но с чем сталкивался я — панели Weintek


      1. ITMatika
        29.06.2016 06:27

        Работал немного с Винтеком. Дороговатое решение )


    1. JonBAL
      28.06.2016 21:51

      Тоже не очень из коробки, но весьма просто: Клиент — ESP8266 с прошивкой ESPEasy, и сервер — Domoticz. Заводятся с пол пинка, очень удобно для первого ознакомления.


      1. ITMatika
        29.06.2016 06:28

        Спасибо! Нужно попробовать.


  1. smirnoffal
    28.06.2016 11:29

    Topics, на мой взгляд, всё-таки лучше называть топиками, а не темами. Так более привычно.


  1. neco
    28.06.2016 11:39

    А поясните вот какой момент, в MQTT же идет поверх TCP, как я понял из диаграммы, так TCP же и так гарантирует доставку, на каком уровне работает и зачем тогда нужен QoS? поясните пожалуйста непонятливым?


    1. av0000
      28.06.2016 12:42

      MQTT, как протокол, не обязан идти поверх TCP, но тут, как мне видится, несколько хитрее — некая изоляция «кухни» отправки данных от логики клиента/сервера/брокера:

      во-первых, может пропасть связь в процессе отправки, тогда датчик может дождаться возврата связи и повторить, причем, ему не надо «думать» о сохранении значений и т.п.

      во-вторых, у брокера есть очередь, которую он может доставить подписчикам после их пере-подключения. У того же mosquitto настраивается как/что/сколько хранить в очереди для отправки в зависимости от QoS или «чистоты» отключения клиента (логофф или отвал связи например)

      ну и в-третьих, из своего кода я могу сказать что-то типа mqtt.publish(MQTT::Publish("/sens/sensor1/prop", "{new value:12345}").set_qos(1)) в тот момент, когда вовсе нет связи с внешним сервером, а данные будут отправлены где-то mqtt.loop() в тот момент, когда связь появится…

      UPD: ну и по-факту, с QoS=0 довольно часто терялись записи на плохом канале, установка в 1 реально помогала…


    1. den_po
      28.06.2016 12:45

      TCP/IP гарантирует доставку до брокера, а не получателя.


      1. vdmitriyev
        29.06.2016 14:20

        Думается что все таки гарантирует доставку сетевого пакета, а что потом с пакетом или пакетами дальше происходит решают уже QoS MQTT.


  1. ulole
    28.06.2016 16:18

    А вы можете привести какие-либо примеры готовых решений на базе MQTT, или, может быть, примеров внедрения где-нибудь на производстве, охранных комплексах, системах мониторинга etc. Насколько сложно и/или дорого будет использовать эту технологию, например, в рамках «умного дома»?