Практическое программирование MQTT на Python

Гастон К. Хайляр

 

Первая публикация на английском языке: Май 2018

Ссылка на продукт: 1180518

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

При подготовке этой книги были предприняты все усилия чтобы гарантировать точность представленной информации. Тем не менее, информация, содержащаяся в этой книге, продаётся без гарантии в явном или неявном виде. Ни авторы, ни Packt Publishing, ни их дилеры и дистрибьюторы не будут нести ответственность за любые убытки, вызванные или предположительно вызванные прямо или косвенно этой книгой.

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

Опубликовано Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN 978-1-78913-854-2

www.packtpub.com

2018-07-24

 Состав исполнителей

Издания на английском языке
Автор
Гастон К. Хайляр
Редактор выпуска
Кунал Чудхайри
Редактор
Решма Раман
Редактор разработки содержания
Адайти Гур
Технический редактор
Сушмита Джина
Литературный редактор
Safis Editing
Координатор проекта
Хардик Бхинди
Корректор
Safis Editing
Составитель указателя
Теджал Дарувейль Сони
Графика
Джейсон Монтейро
Координатор производства
Шрадха Фейлбхай

 Об авторе

Гастон К. Хайляр

 Рецензент

Бен Хоуис

 www.PacktPub.com

 Содержание

Предисловие
Для кого эта книга
Что охватывает эта книга
Как получить максимальную отдачу от этой книги
Загрузка примеров кода этой книги
Принятые соглашения
Будьте на связи
Отзывы
Опечатки
Незаконное тиражирование
Вопросы
Глава 1. Установка сервера Mosquitto MQTT 3.1.1
Понимание подходящих для протокола MQTT сценариев
Работа с шаблоном издатель- подписчик
Работа с фильтрацией сообщений
Знакомство с мозаикой MQTT - клиенты, серверы и соединения
Установка сервера Mosquitto в Linux
Установка сервера Mosquitto в macOS
Установка сервера Mosquitto в Windows
Связанные с запуском сервера Mosquitto в облачном решении вопросы
Проверьте свои знания
Выводы
Глава 2. Применение инструментов командной строки и GUI для изучения того как работает MQTT
Подписка на темы при помощи инструмента командной строки
Подписка на темы при помощи инструмента GUI
Публикация сообщений при помощи инструмента командной строки
Публикация сообщений при помощи инструмента GUI
Отказ от подписки на темы при помощи инструмента GUI
Изучение наилучшего практического опыта тем
Понимание карт подстановки MQTT
Изучение различных доступных уровней QoS
Работа с доставкой по крайней мере один раз (уровень 1 QoS)
Работа с доставкой в точности один раз (уровень 2 QoS)
Знакомство с накладными расходами при различных уровнях QoS)
Проверьте свои знания
Выводы
Глава 3. Безопасность сервера Mosquitto MQTT 3.1.1
Осознание важности безопасности сервера Mosquitto
Генерация частного сертификата авторизации для использования TLS в Mosquitto
Создание сертификата для Mosquitto
Настройка безопасности транспорта TLS в Mosquitto
Проверка настроек TLS MQTT при помощи инструментов командной строки
Проверка настроек TLS MQTT при помощи инструментов GUI
Создание сертификата для каждого клиента MQTT
Настройка сертификата аутентификации клиента TLS в Mosquitto
Проверка аутентификации TLS клиента MQTT при помощи инструментов командной строки
Проверка настроек TLS MQTT при помощи инструментов GUI
Принудительная установка версии протокола TLS в определённое значение
Проверьте свои знания
Выводы
Глава 4. Написание кода для управление транспортным средством при помощи обмена сообщений Python и MQTT
Знакомство с требованиями управления транспортным средством при помощи MQTT
Определение необходимых тем и команд
Создание виртуальной среды при помощи Python 3.6.x и PEP 405
Понимание имеющейся структуры каталога для виртуальной среды
Активация виртуальной среды
Деактивация виртуальной среды
Установка paho-mqtt для Python
Настройка сертификатов для бортов IoT, которые будут выступать в качестве клиентов
Создание класса для представления некоторого транспортного средства
Получение сообщений в Python
Работа с множеством вызовов в методе loop
Проверьте свои знания
Выводы
Глава 5. Проверка и совершенствование нашего решения управления транспортным средством в Python
Обработка команд при помощи Python
Отправка сообщений через Python
Работа с сетевым зацикливанием в Python
Обработка последнего желания и завещания средствами Python
Работа с удерживаемыми сообщениями последнего желания
Понимание кода с блокировкой и без неё
Применение интерфейса потокового клиента
Проверьте свои знания
Выводы
Глава 6. Мониторинг конкуренции сёрфинга при помощи поставщиков MQTT и Python в реальном времени на базе облачного решения
Основы и требования
Определение тем и полезных нагрузок
Кодирование эмулятора бортового датчика сёрфинга
Настройка интерфейса PubNub MQTT
Выборка опубликованных данных из датчиков в облачный сервер MQTT
Работа со множеством серверов MQTT
Запуск множества клиентов
Построение инструментальной панели на веб основе при помощи freeboard
Проверьте свои знания
Выводы
Дополнение A. Решения
Глава 1. Установка сервера Mosquitto MQTT 3.1.1
Глава 2. Применение инструментов командной строки и GUI для изучения того как работает MQTT
Глава 3. Безопасность сервера Mosquitto MQTT 3.1.1
Глава 4. Написание кода для управление транспортным средством при помощи обмена сообщений Python и MQTT
Глава 5. Проверка и совершенствование нашего решения управления транспортным средством в Python
Глава 6. Мониторинг конкуренции сёрфинга при помощи поставщиков MQTT и Python в реальном времени на базе облачного решения
Дополнение B. Как применять Zabbix в качестве вашего контроллера в MQTT
Часть 1. Инструкция как применять Zabbix в качестве вашего контроллера в MQTT
Часть 2. Автоматическое обнаружение датчиков
Указатель

 Предисловие

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

В большинстве случаев, когда вы работаете со сложными решениями IoT, написанными на современном Python 3.6, вы будете использовать различные бортовые средства IoT, которые могут применять разнообразные операционные системы. MQTT имеет свой собственный словарь особенностей и различные режимы работы. Изучение MQTT является серьёзным вызовом, так как он содержит слишком много абстрактных понятий, которые требуют для ясного понимания примеров из реальной жизни.

Данная книга позволит вам глубже окунуться в самую последнюю версию протокола MQTT: 3.1.1. Вы изучите как работать с самой последней версией сервера MQTT Mosquitto, инструментами командной строки, а также инструментами графического интерфейса (GUI), которые позволят вам понять как всё устроено в MQTT, а также предоставляемые этим протоколом для вашего проекта возможности. Вы изучите наилучшие практические приёмы безопасности и их применение для сервера MQTT Mosquitto.

Затем вы отработаете множество примеров из реальной жизни в Python 3.6. Вы будете управлять транспортным средством, обрабатывать команды, взаимодействовать с силовыми приводами, а также отслеживать конкуренцию сёрферов посредством обмена сообщениями MQTT при помощи библиотеки MQTT клиента Eclipse Paho. Также вы будете работать с поставщиками MQTT в реальном масштабе времени на основе облачных решений.

Вы будете способны запускать все примеры в широком диапазоне современных бортовых средств IoT, таких как Raspberry Pi 3 Model B+, Qualcomm DragonBoard 410c, BeagleBone Black, MinnowBoard Turbot Quad-Core, LattePanda 2G и UP Core 4GB. Однако и все прочие бортовые средства, которые поддерживают Python 3.6 также будут иметь возможность запускать эти примеры.

 Для кого эта книга

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

 Что охватывает эта книга

Глава 1. Установка сервера Mosquitto MQTT 3.1.1 начинает наше путешествие в сторону применения самого предпочтительного протокола обмена сообщениями IoT издателя- подписчика с малым весом в разнообразных решениях IoT в комбинации с мобильными прикладными программами и веб приложениями. Мы изучим как работают MQTT и его легковесная система обмена сообщениями. Мы начнём собирать мозаику MQTT: клиенты, серверы (ранее называвшиеся брокерами) и соединения. Мы изучим основные процедуры установки сервера Mosquitto MQTT 3.1.1 d Linux, macOS и Windows. Мы изучим специальные вопросы относительно запуска сервера Mosquitto в Облачном решении (в Azure, AWS и у прочих поставщиков облачных услуг).

Глава 2. Применение инструментов командной строки и GUI для изучения того как работает MQTT научит нас работе с инструментами командной строки и GUI чтобы подробно исследовать как работает MQTT. Мы изучим основы MQTT, словарь имеющихся особенностей MQTT, а также его режимы работы. Мы будем применять различные утилиты и схемы для понимания наиболее важных понятий, относящихся к MQTT. Мы будем понимать всё что нам нужно знать прежде чем начнём писать код для работы со своим протоколом MQTT. Мы будем работать с различными уровнями качества обслуживания и мы проанализируем и сравним их накладные расходы.

Глава 3. Безопасность сервера Mosquitto MQTT 3.1.1 сосредоточится на том как обезопасить сервер Mosquitto MSQTT 3.1.1. Мы заставим все необходимые конфигурации работать с цифровыми сертификатами для шифрования всех отправляемых данных между клиентами MQTT и их сервером. Мы будем применять TLS и изучим работу с сертификатами клиента для каждого из клиентом MQTT. Мы также изучим как заставить работать с желаемой версией протокола TLS.

Глава 4. Написание кода для управление транспортным средством при помощи обмена сообщений Python и MQTT сосредоточится на написании кода Python 3.x для управления неким транспортным средством при помощи сообщений MQTT, доставляемых поверх шифрованных подключений (TLS 1.2). Мы напишем код, который будет способен запускаться на различных платформах IoT, таких как бортовые системы Raspberry Pi 3. Мы поймём как мы сможем применять свои знания протокола MQTT для построения некоего решения на основе требований. Мы изучим как работать с самой последней версией библиотеки клиента MQTT Python Eclipse Paho.

Глава 5. Проверка и совершенствование нашего решения управления транспортным средством в Python обрисует применение нашего решения управления транспортным средством при помощи обмена сообщениями MQTT и кода Python. Мы изучим как обрабатывать команды, получаемые в сообщениях MQTT при помощи кода Python. Мы напишем код Python для составления и отправки сообщений MQTT с командами. Мы поработаем с блокировками и зацикливаниями сетевых потоков, а также мы разберёмся с их различиями. Наконец, мы молучим преимущества от функциональностей последнего желания и завещания.

Глава 6. Мониторинг конкуренции сёрфинга при помощи поставщиков MQTT и Python в реальном времени на базе облачного решения вы начнёте с написания кода Python для применения PubNub, поставщика MQTT на основе облачного решения в реальном масштабе времени в комбинации с сервером Mosquitto для отслеживания конкуренции сёрфинга. Мы с нуля построим решение проанализировав имеющиеся требования и мы напишем код Python, который мы запустим на водонепроницаемом бортовом IoT, подключённом ко множеству датчиков в бортовой системе сёрфа. Мы определим необходимые темы и команды, а также мы будем работать с сервером MQTT на основе облачного решения в комбинации со своим сервером MQTT Mosquitto, применявшимся в наших предыдущих главах.

Дополнение A. Решения, правильные ответы для всех разделов Проверьте свои знания в каждой главе содержатся в данном дополнении.

 Как получить максимальную отдачу от этой книги

Вам потребуются базовые знания Python 3.6.x и бортовая система IoT.

 Загрузка примеров кода этой книги

Вы можете выгрузить все файлы примеров кода для данной книги из своей учётной записи www.packtpub.com. Если вы приобрели эту книгу в ином месте, будьте добры, пройдите в www.packtpub.com/support и зарегистрируйтесь чтобы иметь эти файлы высланные непосредственно вам по электронной почте.

Вы можете выгрузить все файлы кодов пройдя следующие шаги:

  1. Зайдите зарегистрированным пользователем на www.packtpub.com.

  2. Выберите закладку SUPPORT.

  3. Кликните по Code Downloads & Errata.

  4. Введите название нужной вам книги в блоке Search и следуйте появляющимся на экране инструкциям.

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

  • WinRAR/7-Zip для Windows.

  • Zipeg/iZip/UnRarX для Mac.

  • 7-Zip/PeaZip для Linux.

Пакет кода также размещён на GitHub по адресу https://github.com/PacktPublishing/Hands-On-MQTT-Programming-with-Python. Также у нас имеются и другие пакеты кода из нашего богатого каталога книг и видео, доступные по адресу https://github.com/PacktPublishing/. Следите за изменениями!

 Загрузка цветных изображений этой книги

Мы дополнительно снабжаем вас файлом PDF, который содержит цветные изображения экранных снимков/ схем, использованных в данной книге. Цветные изображения помогут вам лучше понять изменения в выводе. Вы можете загрузить этот файл по адресу: http://www.packtpub.com/sites/default/files/downloads/HandsOnMQTTProgrammingwithPython_ColorImages.pdf.

 Соглашения

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

CodeInText указывает кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter. Вот некий пример: "Смонтируйте выгруженный файл образа диска WebStorm-10*.dmg как другой диск в вашей системе".

Блок кода устанавливается следующим образом:


@staticmethod
    def on_subscribe(client, userdata, mid, granted_qos):
        print("I've subscribed with QoS: {}".format(
            granted_qos[0]))
 	   

Если вы желаете привлечь внимание к определённой части блока кода,соответствующие строки или элементы выделяются жирным:


time.sleep(0.5)
    client.disconnect()
    client.loop_stop()
	

Любой ввод командной строки или её вывод записываются следующим образом:


sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
 	   

Жирно: указывает новый термин, важное слово которые вы видите на экране, например, в меню или блоках диалогов появляются именно так. Вот пример: "Выберите System info в панели Administration.".

[Замечание]Замечание

Предостережения или важные замечания появляются в блоках подобных этому.

[Совет]Совет

Советы и ловкие приёмы возникают таким образом.

 Будьте на связи

Обращения наших читателей всегда приветствуются.

Обычная обратная связь: Пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения. Если у вас имеются вопросы относительно любых сторон данной книги, обратитесь, пожалуйста, по адресу questions@packtpub.com.

Ошибки: Хотя мы и предприняли все меры чтобы гарантировать точность содержимого, ошибки могут иметь место. Если вы обнаружили ошибку в данной книге, мы будем вам признательны если вы сообщите нам о ней. Посетите, пожалуйста, www.packtpub.com/submit-errata, выбрав вашу книгу, кликнув на ссылку Errata Submission Form, и заполнив подробности найденной вами ошибки.

Пиратство: Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на материалы содержащие признаки нарушения авторских прав. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}.

Если вы желаете стать нашим автором: Если у вас существует тема, в которой у вас имеется опыт и вы заинтересованы либо в написании, либо во вкладе в книгу, обратитесь к руководству по адресу authors.packtpub.com.

 Отзывы

Оставляйте, пожалуйста, отзывы. Если вы прочли и воспользовались данной книгой, почему бы вам не оставить отзыв на том сайте, на котором вы её приобрели? Потенциальные читатели затем смогут увидеть и применить ваше беспристрастное суждение чтобы принять решение о приобретении, мы в Packt сможем понять что вы думаете о нашем продукте, а наши авторы увидят обратную связь относительно своей книги. Мы заранее благодарим вас!

Для получения дополнительной информации о Packt посетите, пожалуйста packtpub.com.