Протокол 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:
- HiveMQ: broker.hivemq.com
- Затмение Москитто: test.mosquitto.org
- Eclipse IoT: iot.eclipse.org
В этом примере я использую бесплатный онлайн-брокер 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 или сравнении протоколов, просто дайте мне знать :-)