Протокол IoT, объясненный с помощью Python

Почему вам следует потратить 5 минут своей жизни на чтение этой истории? Потому что после прочтения этого…

  • … У вас есть базовое представление о протоколе MQTT
  • … Вы знаете, когда использовать MQTT
  • … У вас есть практический опыт и вы можете следовать предоставленным примерам, используя бесплатный брокер MQTT Mosquitto и клиентскую библиотеку Python MQTT Paho-MQTT.

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

Основы MQTT

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

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

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

  • Межмашинное взаимодействие

Это довольно просто. Одна система должна обмениваться информацией с другими системами. В контексте Интернета вещей потребность в обмене данными между устройствами резко возрастает.

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

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

  • Публикация / подписка на транспортный протокол обмена сообщениями

MQTT - это протокол со специальной реализацией публикации / подписки. Устройства напрямую не общаются друг с другом. Вместо этого общение структурировано по темам и осуществляется через центральный сервер (брокер).

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

→ Пример 1. Взгляните на картинку выше. Смартфон может публиковать свое текущее положение в теме Позиция. Заинтересованные устройства могут подписаться на эту тему и получать информацию о каждом новом сообщении.

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

→ Пример 2: датчик наружной температуры может публиковать данные о температуре наружного воздуха в теме Температура, и ваши нагревательные устройства могут подписаться на него. Как только наружная температура опускается ниже определенного значения, нагревательные приборы могут включаться.

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

  • Высокая задержка и низкая пропускная способность сети

Протокол MQTT легкий, эффективный и занимает мало места. Это делает его идеальным выбором для устройств и сценариев Интернета вещей, которые часто работают в нестабильных средах и используют проводные соединения, такие как Wi-Fi, Bluetooth или спутник.

Теперь хватит чтения. Давайте перейдем к примеру реализации с использованием брокера MQTT Mosquitto и клиентской библиотеки Python MQTT Paho-MQTT.

Пример реализации с Mosquitto MQTT и Python

Подготовка

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

В этом примере я использую бесплатный онлайн-брокер MQTT Mosquitto (test.mosquitto.org), к которому вы можете легко подключиться (опубликовать и / или подписаться) с помощью клиента MQTT. В качестве клиента мы используем Python Paho-MQTT, который можно установить с помощью команды cmd pip install paho-mqtt

Публикация в теме

Мы воспользуемся примером с изображения выше и напишем два приложения Python, которые публикуют информацию в теме Температура. Первое приложение опубликует внутреннюю температуру по этой теме.

  • Сначала мы импортируем клиент Python MQTT paho-mqtt (строка 1) и две вспомогательные библиотеки random & time (строки 2–3), которые необходимы только для создания этого пример
  • нам нужно определить местонахождение брокера MQTT (строка 5). Я использую бесплатный онлайн-брокер Eclipse Mosquitto, но вы можете использовать любой
  • Мы настраиваем новый клиент MQTT (строка 7) и говорим клиенту подключиться к брокеру (строка 8), который был указан ранее.
  • Наконец, мы настраиваем цикл while (строки 10–14), который будет публиковать текущую внутреннюю температуру в теме «Температура» каждую секунду (строка 14). Внутренняя температура будет случайным числом с плавающей запятой от 20 до 21 (строка 11), которое публикуется в теме «Температура» (строка 12), а затем выводится на консоль ( строка 13).

Если вы запустите сценарий в консоли, он будет выглядеть так.

Мы делаем то же самое снова - на этот раз с наружной температурой. Я думаю, что никаких дополнительных объяснений не требуется, только строка 11 отличается от приведенной выше кодировки, которая устанавливает температуру на случайное целое число от 0 до 10. Кроме того, клиент получает другое имя ( строка 7).

В консоли это будет выглядеть так.

Подписка на тему

Теперь пора использовать сообщения, опубликованные в теме «Температура». Давайте посмотрим, как мы можем настроить подписчика с помощью Python Paho-MQTT.

Некоторые шаги очень похожи по сравнению с реализацией клиентов публикации ...

  • Снова нам нужно сначала импортировать клиент Python MQTT paho-mqtt (строка 1). Кроме того, мы импортируем время как вспомогательную библиотеку (строка 2).
  • нам нужно определить местоположение брокера MQTT (строка 7) и настроить новый клиент MQTT (строка 9), который подключается к брокеру (строка 10 )

… Но следующие шаги относятся к подписывающимся клиентам MQTT

  • команда client.subscribe (строка 14) определяет тему для подключения и уже подписывает клиента на тему брокера. На самом деле мы уже будем получать опубликованные сообщения, но пока не увидим.
  • Каждый раз, когда подписанный клиент получает сообщения, он генерирует обратный вызов on_message. Чтобы просмотреть полученные сообщения, нам нужно указать функцию обратного вызова on_message (строки 7–8) и запустить ее в цикле (строки 12–18).

В консоли это будет выглядеть так.

Резюме

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

Вы можете следовать приведенным выше примерам или просто скачать мой код с GitHub. Надеюсь, вам понравилось мое краткое введение. Если вы хотите узнать больше о MQTT, HTTP или сравнении протоколов, просто дайте мне знать :-)