Интернет вещей на базе СПО (Антон Бондарев, OSSDEVCONF-2022) — различия между версиями

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

м (StasFomin переименовал страницу Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022) в [[Интернет вещей на базе СПО (Антон Бондарев, OSSDEVCONF-2022)]…)
 
(не показаны 2 промежуточные версии этого же участника)
;{{SpeakerInfo}}: {{Speaker|Антон Бондарев}}
<blockquote>
В докладе рассматривается построение устройств интернета вещей на базе открытой ОС РВ Embox и открытых
реализаций протокола MQTT, таких, как Eclipse Paho и подключение этих устройств в инфраструктуру на основе открытого
брокера Eclipse Mosquitto.
</blockquote>

{{VideoSection}}

{{vimeoembed|989844101|800|450}}
{{youtubelink|}}
|67jFTBElYsU}}
{{SlidesSection}}
[[File:Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022).pdf|left|page=-|300px]]

{{----}}

== Thesis ==

* http://embox.github.io/

Интернет вещей (Internet of Things (IoT)) проникает во всё большее количество сфер нашей жизни. Если раньше понятие IoT
ассоциировалось в основном с «умными» чайниками или лампочками, весь «ум» которых заключался в возможности управления
ими при помощи смартфона, то со временем, появилась возможность использовать механизм взаимодействия между умными
устройствами и умные алгоритмы управления на основе этих данных, причём при минимальном участии человека. Кроме того
идеи «Интернета вещей» нашли своё место в промышленности (промышленный «Интернет вещей» (IIoT)) и во многих других областях
деятельности человека.

Для взаимодействия в IoT могут использоваться совершенно разные протоколы. На сегодняшний день самым распространённым в
обычном IoT является [https://mqtt.org/ MQTT] (''message queuing telemetry transport''). Данный протокол позволяет
организовать общение между устройствами с помощью сообщений по принципу издатель-подписчик. Сеть MQTT подразумевает
наличие брокера (сервера) и различных терминальных устройств (клиентов). Любое терминальное устройство может быть как
издателем или подписчиком, так и совмещать обе эти роли.

Протокол MQTT имеет уже несколько версий стандартов. Кроме того, в оригинальную версию MQTT реализованную поверх TCP,
добавили версию стандарта для работы по UDP MQTT-SN (sensor network).

Существуют различные реализации брокера MQTT как открытые так и проприетарные, разработанные на разных языках и имеющие
различный функционал. На сегодняшний день наиболее популярным является [https://mosquitto.org Mosquitto].

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

Существует множество библиотек разработанных на различных языках для реализации клиентской части устройств. Часть из них
является специализированными и оптимизированы для запуска на одной встроенной RTOS или на конкретной платформе, например,
Arduino или mbed. Подобные версии имеют ограниченный по сравнению с универсальными версиями функционал и не полностью
соответствуют стандартам.

Большинство реализаций не являются специфичными для какой-то платформы и ориентированы на применение в универсальных платформах.
Наиболее распространённым является проект [https://www.eclipse.org/paho/ Eclipse paho], имеющий реализации для
нескольких языков, а C и C++ версии адаптированы под ряд специфичных платформ.

[https://github.com/embox/embox Embox] свободная ОС для встроенных систем. Основная идея — запуск ПО Linux на любых
платформах, в том числе микроконтроллерах. Это, в частности, позволяет использовать для терминальных устройств
универсальные версии клиентских библиотек MQTT, в частности, полноценные версии проектов с открытым кодом [https://github.com/eclipse/paho.mqtt.c paho.mqtt.c]
и [https://github.com/eclipse/paho.mqtt.cpp paho.mqtt.cpp].

В системе сборки Embox предусмотрен механизм для упрощения работы с внешними проектами. Он позволяет описывать в
Makefile аналог традиционных команд (<tt>./configure; make; make install</tt>). Пример <tt>Makefile</tt> для paho.mqtt.c

<pre>
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 $@
</pre>

Для его использования в <tt>Mybuild</tt> используется следующее описание:

<pre>
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
}
</pre>

Из этого видно, что можно выбирать, какой именно версией библиотеки хочет воспользоваться разработчик: libpaho-mqtt3c.a или libpaho-mqtt3a.a.

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




{{----}}
[[File:{{#setmainimage:Интернет вещей на базе СПО (Антон Бондарев, OSEDUCONF-2022)!.jpg}}|center|640px]]
{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->

<references/>

[[Категория:OSSDEVCONF-2022]]
[[Категория:Draft]]

Текущая версия на 17:03, 2 августа 2024

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

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

Видео

on youtube

Презентация

Интернет вещей на базе СПО (Антон Бондарев, 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

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