Интернет вещей на базе СПО (Антон Бондарев, OSSDEVCONF-2022)
Материал из 0x1.tv
- Докладчик
- Антон Бондарев
В докладе рассматривается построение устройств интернета вещей на базе открытой ОС РВ Embox и открытых реализаций протокола MQTT, таких, как Eclipse Paho и подключение этих устройств в инфраструктуру на основе открытого брокера Eclipse Mosquitto.
Содержание
Видео
Презентация
Thesis
Интернет вещей (Internet of Things (IoT)) проникает во всё большее количество сфер нашей жизни. Если раньше понятие IoT ассоциировалось в основном с «умными» чайниками или лампочками, весь «ум» которых заключался в возможности управления ими при помощи смартфона, то со временем, появилась возможность использовать механизм взаимодействия между умными устройствами и умные алгоритмы управления на основе этих данных, причём при минимальном участии человека. Кроме того идеи «Интернета вещей» нашли своё место в промышленности (промышленный «Интернет вещей» (IIoT)) и во многих других областях деятельности человека.
Для взаимодействия в IoT могут использоваться совершенно разные протоколы. На сегодняшний день самым распространённым в обычном IoT является MQTT (message queuing telemetry transport). Данный протокол позволяет организовать общение между устройствами с помощью сообщений по принципу издатель-подписчик. Сеть MQTT подразумевает наличие брокера (сервера) и различных терминальных устройств (клиентов). Любое терминальное устройство может быть как издателем или подписчиком, так и совмещать обе эти роли.
Протокол MQTT имеет уже несколько версий стандартов. Кроме того, в оригинальную версию MQTT реализованную поверх TCP, добавили версию стандарта для работы по UDP MQTT-SN (sensor network).
Существуют различные реализации брокера MQTT как открытые так и проприетарные, разработанные на разных языках и имеющие различный функционал. На сегодняшний день наиболее популярным является Mosquitto.
Кроме того, существуют ряд облачных решений, доступных онлайн и уже готовых к использованию.
Существует множество библиотек разработанных на различных языках для реализации клиентской части устройств. Часть из них является специализированными и оптимизированы для запуска на одной встроенной RTOS или на конкретной платформе, например, Arduino или mbed. Подобные версии имеют ограниченный по сравнению с универсальными версиями функционал и не полностью соответствуют стандартам.
Большинство реализаций не являются специфичными для какой-то платформы и ориентированы на применение в универсальных платформах. Наиболее распространённым является проект Eclipse paho, имеющий реализации для нескольких языков, а C и C++ версии адаптированы под ряд специфичных платформ.
Embox свободная ОС для встроенных систем. Основная идея — запуск ПО Linux на любых платформах, в том числе микроконтроллерах. Это, в частности, позволяет использовать для терминальных устройств универсальные версии клиентских библиотек MQTT, в частности, полноценные версии проектов с открытым кодом paho.mqtt.c и paho.mqtt.cpp.
В системе сборки Embox предусмотрен механизм для упрощения работы с внешними проектами. Он позволяет описывать в Makefile аналог традиционных команд (./configure; make; make install). Пример Makefile для paho.mqtt.c
PKG_NAME := paho.mqtt.c PKG_VER := v1.3.8 PKG_ARCHIVE_NAME := $(PKG_NAME)-$(PKG_VER).tar.gz PKG_SOURCES := https://github.com/eclipse/paho.mqtt.c/archive/$(PKG_VER).tar.gz PKG_MD5 := 71b9a3070f543afcb818a8c231be6684 PKG_PATCHES := patch.txt include $(EXTBLD_LIB) $(CONFIGURE) : cd $(PKG_INSTALL_DIR) && ( \ CC=$(EMBOX_GCC) \ CFLAGS="$(EMBOX_IMPORTED_CFLAGS)" \ CPPFLAGS="$(EMBOX_IMPORTED_CPPFLAGS)" \ cmake -DPAHO_WITH_SSL=FALSE \ -DPAHO_BUILD_STATIC=TRUE \ -DPAHO_BUILD_SHARED=FALSE \ -DPAHO_BUILD_DOCUMENTATION=FALSE \ -DPAHO_BUILD_SAMPLES=FALSE \ -DPAHO_ENABLE_TESTING=FALSE \ -DPAHO_ENABLE_CPACK=FALSE \ -DCMAKE_C_COMPILER_WORKS=1 \ -DPAHO_HIGH_PERFORMANCE=ON \ $(PKG_SOURCE_DIR)/ \ ) touch $@ $(BUILD) : cd $(PKG_INSTALL_DIR) && ( \ $(MAKE) MAKEFLAGS='$(EMBOX_IMPORTED_MAKEFLAGS)'; \ ) touch $@ $(INSTALL) : cp $(PKG_INSTALL_DIR)/src/libpaho-mqtt3c.a $(PKG_INSTALL_DIR)/libpaho-mqtt3c.a cp $(PKG_INSTALL_DIR)/src/libpaho-mqtt3a.a $(PKG_INSTALL_DIR)/libpaho-mqtt3a.a cp $(PKG_SOURCE_DIR)/src/*.h $(PKG_INSTALL_DIR)/ touch $@
Для его использования в Mybuild используется следующее описание:
package third_party.mqtt.paho_mqtt_c @Build(stage=1,script="$(EXTERNAL_MAKE)") @BuildArtifactPath(cppflags="-I$(abspath $(EXTERNAL_BUILD_DIR))/third_party/mqtt/paho_mqtt_c/libpaho_mqtt3c/install/") static module libpaho_mqtt3c { @AddPrefix("^BUILD/extbld/^MOD_PATH/install") source "libpaho-mqtt3c.a" @NoRuntime depends embox.compat.posix.semaphore } @Build(stage=1,script="$(EXTERNAL_MAKE)") @BuildArtifactPath(cppflags="-I$(abspath $(EXTERNAL_BUILD_DIR))/third_party/mqtt/paho_mqtt_c/libpaho_mqtt3a/install/") static module libpaho_mqtt3a { @AddPrefix("^BUILD/extbld/^MOD_PATH/install") source "libpaho-mqtt3a.a" @NoRuntime depends embox.compat.posix.semaphore }
Из этого видно, что можно выбирать, какой именно версией библиотеки хочет воспользоваться разработчик: libpaho-mqtt3c.a или libpaho-mqtt3a.a.
Преимуществом такого подхода является то, что API и документация на проект относятся к самому проекту, а не к специализированной платформе. Кроме того, нужно отметить, что разработка под обычную Linux-систему существенно проще и занимает гораздо меньше времени чем разработка сразу под специфичную платформу.