Практическое программирование MQTT на Python
Copyright © 2018 Packt Publishing
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: Май 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
2018-07-24
- Автор
- Гастон К. Хайляр
- Редактор выпуска
- Кунал Чудхайри
- Редактор
- Решма Раман
- Редактор разработки содержания
- Адайти Гур
- Технический редактор
- Сушмита Джина
- Литературный редактор
- Safis Editing
- Координатор проекта
- Хардик Бхинди
- Корректор
- Safis Editing
- Составитель указателя
- Теджал Дарувейль Сони
- Графика
- Джейсон Монтейро
- Координатор производства
- Шрадха Фейлбхай
Гастон К. Хайляр
- Предисловие
- Глава 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
- Указатель
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 и зарегистрируйтесь чтобы иметь эти файлы высланные непосредственно вам по электронной почте.
Вы можете выгрузить все файлы кодов пройдя следующие шаги:
-
Зайдите зарегистрированным пользователем на www.packtpub.com.
-
Выберите закладку SUPPORT.
-
Кликните по Code Downloads & Errata.
-
Введите название нужной вам книги в блоке 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.