Интернет вещей на базе СПО (Антон Бондарев, OSSDEVCONF-2022)

Материал из 0x1.tv

Докладчик
Антон Бондарев.jpg
Антон Бондарев

В докладе рассматривается построение устройств интернета вещей на базе открытой ОС РВ Embox и открытых реализаций протокола MQTT, таких, как Eclipse Paho и подключение этих устройств в инфраструктуру на основе открытого брокера Eclipse Mosquitto.

Видео

Презентация

Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf

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-систему существенно проще и занимает гораздо меньше времени чем разработка сразу под специфичную платформу.



Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022)!.jpg

Примечания и ссылки