- PVSM.RU - https://www.pvsm.ru -
Сегодня настроим шлюз для интернета вещей на отправку сообщений MQTT-брокеру (серверу) с использованием Python-скрипта. Сообщения будет принимать компьютер, подписанный на соответствующую тему на брокере. После оформления подписки, сообщения, опубликованные с этой темой, будут поступать на компьютер. В процессе изучения этого материала вы выполните следующие шаги:
Вот схема взаимодействия шлюза, MQTT-брокера и компьютера.
Взаимодействие шлюза, MQTT-брокера и компьютера
MQTT – это протокол обмена сообщениями, который можно использовать для передачи данных со шлюза на локальный или облачный сервер. Сервер перенаправляет данные удалённым клиентам, которые оформили подписку.
Вот, что можно узнать о MQTT из Википедии [1]: «MQTT (ранее известный как MQ Telemetry Transport) это упрощённый сетевой протокол, работающий поверх TCP/IP. Он используется для обмена сообщениями между устройствами по принципу «издатель-подписчик». Протокол разработан для организации связи с удалёнными устройствами, для случаев, когда важно, чтобы код занимал как можно меньше места, а так же – для работы в сетях с небольшой пропускной способностью. Схема взаимодействия «издатель-подписчик» требует наличия брокера, посредника между передающей и принимающей сторонами. Брокер отвечает за доставку сообщений клиентам, которые в этих сообщениях заинтересованы, основываясь на темах сообщений и на оформленных клиентами подписках».
Существуют несколько программных пакетов для создания MQTT-брокеров. Они различаются по набору возможностей, в некоторых из них, поверх стандартного протокола MQTT, реализованы дополнительные функции. Вот [2] сравнение нескольких брокеров.
Mosquitto [3] – это MQTT-брокер с открытым кодом (лицензия BSD), который реализует протокол MQTT версий 3.1. и 3.1.1. В этом руководстве мы будем рассматривать использование Mosquitto для разворачивания MQTT-брокера в локальной сети.
Язык программирования Python [4] можно использовать для создания MQTT-сообщений. Выбор может пасть именно на Python если, например, код, написанный на этом языке, легко встроить в приложение, или если разработчик хорошо знаком с Python. Иногда этот язык удобно использовать из-за того, что программы, написанные на нём, не нуждаются в компиляции. Они интерпретируются на шлюзе во время выполнения.
Интерпретатор Python входит в стандартный набор предустановленного ПО на шлюзах Intel для интернета вещей, работающих под управлением Wind River Linux. Таким образом, Python-скрипты можно исполнять на шлюзах без дополнительной настройки рабочей среды. Так, интерпретатор Python 2.7.2 включён в Wind River Linux 5 и в Intelligent Device Platform XT 2. В Wind River Linux 7 и в Intelligent Device Platform XT 3.1 имеется Python 2.7.3 и 3.3.3.
Python-клиент Paho [5] предоставляет класс клиента с поддержкой MQTT v3.1 и v3.1.1 на Python 2.7 и 3.1.1. Кроме того, он содержит некоторые вспомогательные функции, которые значительно упрощают публикацию MQTT-сообщений.
Рассмотрим настройку компьютера, который планируется использовать для подписки на сообщения с некоей тестовой темой на MQTT-брокере в интернете. После того, как компьютер подпишется на тему, сообщения, опубликованные с этой темой, будут доставлены ему.
Для того, чтобы настроить компьютер, нужно будет, во-первых, установить Paho и сопутствующее ПО, во-вторых, протестировать систему, подключившись к брокеру.
1. Загрузите tar.gz
-архив со свежей версией Paho с eclipse.org [6]. В нашем случае это был файл org.eclipse.paho.mqtt.python-1.1.tar.gz
.
2. Поместите этот файл в выбранную директорию.
3. Распакуйте архив. Например, такой командой:
tar -xf org.eclipse.paho.mqtt.python-1.1.tar.gz
4. Содержимое архива окажется в папке, имя которой совпадает с его именем. Перейдите в эту папку, и, если нужно, переименуйте её.
cd org.eclipse.paho.mqtt.python-1.1
5. Выполните следующие команды python:
python setup.py install
Теперь Paho установлен на компьютере.
Протестируйте Python-скрипт, использующий Paho, а заодно – и подключение к MQTT-брокеру, подписавшись на активную тему. Например, если вас интересует брокер, размещённый в интернете, для тестирования можно воспользоваться брокером test.mosquitto.org
. Это позволит проверить и сетевое соединение, и работу программного обеспечения.
1. Перейдите в директорию с примерами для Paho:
cd org.eclipse.paho.mqtt.python/examples
2. Измените скрипт sub.py
, отредактировав строки mqttc.connect
и mqttc.subscribe
:
mqttc.connect("test.mosquitto.org", 1883, 60)
mqttc.subscribe("#", 0)
Рассмотрим эти команды:
Mqttc.connect
— test.mosquitto.org: Адрес MQTT-брокера, к которому мы хотим подключиться.
— 1883: Порт, который используется для MQTT-сообщений.
— 60: Тайм-аут в секундах
Mqttc.subscribe
— #: подстановочный символ, который указывает на то, что мы подписались на все темы брокера.
— 0: запрошенный уровень качества обслуживания (Quality of Service, QoS).
3. Запустите скрипт:
python sub.py
Если сетевое соединение и программа работают правильно, от MQTT-брокера test.mosquitto.org
начнут поступать сообщения. Их содержание нас сейчас не интересует. Если ничего не приходит, проверьте как следует подключение к интернету и отредактированные строки скрипта sub.py
.
4. Для остановки скрипта воспользуйтесь сочетанием клавиш Ctrl-C
на клавиатуре.
В предыдущем разделе мы установили на компьютере Paho и протестировали его работу. Теперь рассмотрим особенности MQTT-брокеров. Наша цель – работающий брокер, который может принимать сообщения от издателей и отправлять их подписчикам. Существует несколько вариантов организации взаимодействия с брокером, все они подходят для, того, чтобы воспроизвести то, о чём мы расскажем ниже.
Лучше всего, если у вас уже имеется MQTT-брокер, готовый к работе с приложением. Он должен располагаться в выбранной сети, должен быть готов отправлять и принимать сообщения для приложения, у вас должна быть возможность его настраивать. Если готовый к работе брокер у вас уже есть, можете сразу переходить к разделу этого материала, посвященному настройке шлюза.
Если брокер вы пока не настраивали, существует несколько способов обзавестись простым MQTT-брокером для тестирования приложения. Сейчас мы их рассмотрим. Обратите внимание на то, что здесь мы не касаемся вопросов настройки серверов или сетей. Кроме того, из приведённых ниже вариантов работы с существующими брокерами или способов настройки новых, вам понадобится лишь один. Поэтому, выбрав его и настроив систему, так же можете переходить к разделу о настройке шлюза.
В интернете можно найти несколько MQTT-брокеров, которые подойдут для тестирования. Здесь мы воспользуемся брокером, доступным по адресу http://test.mosquitto.org/ [7]. Мы уже рассказывали о нём, тестируя правильность работы системы, не обращая внимания ни на темы, ни на сообщения. Сейчас используем его для более осмысленной работы и с тем, и с другим.
Процедура взаимодействия с данным брокером вам уже знакома, по разделу «Тестирование Paho». Однако здесь мы, вместо подписки на все темы командой mqttc.subscribe("#", 0)
, подпишемся на конкретную тему командой mqttc.subscribe("mytopic", 0)
. Здесь mytopic
– это название MQTT-темы. Брокер автоматически создаст такую тему, если она ещё не существует.
Теперь, если шлюз (или любой другой компьютер) отправит брокеру сообщение с темой mytopic
, брокер перешлёт это сообщение в окно терминала, в котором работает скрипт sub.py
.
Воспользуйтесь этим методом, если хотите, чтобы ваш компьютер играл роль MQTT-брокера, размещённого в локальной сети. Здесь нам понадобятся установленные ранее Python-библиотеки Paho. Процедура настройки, в целом, аналогична уже рассмотренной. Однако, нужно обратить внимание на то, что компьютер и шлюз должны быть в одной и той же локальной сети, и на то, что начало взаимодействия с брокером (в скрипте sub.py
) выглядит так:
mqttc.connect("localhost", 1883, 60)
mqttc.subscribe("mytopic", 0)
То есть, подключаемся мы не к серверу в интернете, а к локальному хосту, к сетевому интерфейсу «внутренней петли» компьютера. Обычно localhost используется как псевдоним для IP-адреса 127.0.0.1.
Если подписаться на тему mytopic
, обратившись к локальному хосту, автоматически будет запущен локальный MQTT-брокер и на нём будет создана такая тема. Если теперь шлюз опубликует сообщение с темой mytopic
, обратившись к компьютеру по его IP-адресу, это сообщение будет отправлено в терминал Linux, в котором исполняется скрипт sub.py
, оформивший подписку на эту тему.
Этот метод, снова, подразумевает использование компьютера разработчика в качестве брокера, размещённого в локальной сети. Но на этот раз мы будем пользоваться Mosquitto.
Подробности о Mosquitto можно узнать здесь [3]. Кроме того, конструкция вида <mosquitto_command> --help
позволяет получать справку по командам этого пакета. Для того, чтобы запустить процесс MQTT-брокера на компьютере, выполните следующие шаги.
1. Откройте новое окно терминала Linux.
Брокер будет исполняться в этом окне, при этом на том же самом компьютере можно получать MQTT-сообщения, только приходить они будут в другое окно терминала.
2. Установите Mosquitto, если вы еще этого не сделали.
sudo apt-get install mosquitto
3. Создайте тему и подпишитесь на неё с помощью команды mosquitto_sub
.
mosquitto_sub -d -h localhost -t mytopic
Рассмотрим эту команду:
-d: включение вывода отладочных сообщений.
-h localhost: обычно – синоним для IP-адреса 127.0.0.1.
-t mytopic: название MQTT-темы. Если она не существует, брокер создаст её автоматически.
4. Проверьте, подключён ли компьютер к той же локальной сети, к которой подключён шлюз.
Локальный MQTT-брокер запустится автоматически после оформления подписки на некую тему. Шлюз, обратившись к брокеру по IP-адресу компьютера, сможет публиковать сообщения с этой темой, которые попадут в терминал Linux, в котором исполняется mosquitto_sub
.
Займёмся настройкой шлюза. Она включает в себя два основных шага:
withtemplate=feature/mqtt
в настройках. Подробности об этом смотрите здесь [8].
Установка Paho на шлюз выполняется так же, как и установка на компьютер. Нужно скачать архив со свежей версией Paho, распаковать его и выполнить команду python setup.py install
.
Процедура проверки работоспособности ПО, установленного на шлюзе, и сетевого соединения, повторяет процедуру проверки компьютера.
Теперь, когда у нас есть готовый к работе MQTT-брокер, настроены компьютер и шлюз, всё готово к тому, чтобы создать скрипт на Python, который будет заниматься публикацией сообщений.
Здесь мы воспользуемся образцами кода из поставки Paho для создания простого скрипта, который можно будет модифицировать позже в соответствии с нуждами конкретного проекта. Скрипт можно создать и непосредственно на шлюзе, и на компьютере. Если скрипт создан на компьютере, его надо будет скопировать на шлюз и запустить там.
Учитывайте следующие соображения при создании и запуске Python-скриптов.
В примере, приведённом ниже, мы исходим из того, что ни IMA, ни белые списки на шлюзе не включены.
1. Перейдите в папку examples
, содержащую образцы кода для Paho:
cd org.eclipse.paho.mqtt.python-1.1/examples
2. Скопируйте и переименуйте скрипт pub-single.py
:
cp pub-single.py my-pub.py
3. Отредактируйте файл my-pub.py
, изменив его последнюю строку таким образом, чтобы сообщение отправлялось существующему MQTT-брокеру и при его отправке использовалась тема, которая была задана тогда, когда мы занимались настройкой компьютера на приём MQTT-сообщений (мы назвали тему «mytopic»):
publish.single("mytopic","Hello", hostname="<broker_location>")
Рассмотрим устройство этой команды:
— "mytopic": название темы, существующей на брокере.
— "Hello": содержание сообщения
— "<broker_location>": адрес MQTT-брокера.
Если в качестве брокера используется компьютер, сюда нужно подставить его IP-адрес в локальной сети. Например, что-то вроде 192.168.1.5. Если брокер находится в интернете, то здесь должен быть либо его IP-адрес, либо доменное имя сервера. Например, test.mosquitto.org
.
4. Если подготовкой скрипта my-pub.py
вы занимались на компьютере, скопируйте его на шлюз.
5. Запустите my-pub.py
на шлюзе для передачи с него сообщения заданному MQTT- брокеру с темой mytopic
:
python my-pub.py
После того, как шлюз опубликует сообщение с какой-нибудь темой, а брокер сообщение получит, он отправит сообщение всем MQTT-клиентам, которые подписаны на тему.
Для публикации, учитывая настройки нашего скрипта, достаточно выполнить на шлюзе команду python my-pub.py
. При её выполнении сообщение «Hello» будет отправлено брокеру, а с него попадёт компьютер. На компьютере же, учитывая то, что на нём открыто окно терминала, ожидающее сообщений от MQTT-брокера, будет принято сообщение такого содержания:
mytopic 0 Hello
Рассмотрим его структуру:
mytopic: название темы.
0: качество обслуживания
Hello: сообщение
Только что вы, используя язык программирования Python, отправили MQTT-сообщение «Hello» с темой «mytopic» MQTT-брокеру, расположенному в локальной сети, а затем приняли это сообщение на компьютере, который подписан на эту тему. Что дальше? Вот несколько идей, которые касаются развития примера из этого материала. Надеемся, они позволят вам расширить использование системы обмена MQTT-сообщения в ваших проектах.
Автор: Intel
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/125032
Ссылки в тексте:
[1] Википедии: https://en.wikipedia.org/wiki/MQTT
[2] Вот: https://github.com/mqtt/mqtt.github.io/wiki/server-support
[3] Mosquitto: http://mosquitto.org/
[4] Python: https://www.python.org/
[5] Paho: http://www.eclipse.org/paho/clients/python/
[6] eclipse.org: http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.python.git/
[7] http://test.mosquitto.org/: http://test.mosquitto.org/
[8] здесь: https://software.intel.com/en-us/SetupGateway-hardware
[9] Источник: https://habrahabr.ru/post/302338/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.