Бөлісу құралы:


Разработка собственных модулей IoT Edge

Применимо к:IoT Edge 1.5 флажок IoT Edge 1.5

Внимание

IoT Edge 1.5 LTS — это поддерживаемый выпуск. IoT Edge 1.4 LTS достиг срока окончания службы 12 ноября 2024 года. Если вы используете более ранний выпуск, ознакомьтесь с Update IoT Edge.

модули Azure IoT Edge могут подключаться к другим службам Azure и вносить свой вклад в более крупный облачный конвейер данных. В этой статье описывается, как разрабатывать модули для взаимодействия с средой выполнения IoT Edge и IoT Hub и, следовательно, остальной частью облака Azure.

среда выполнения IoT Edge

Среда выполнения IoT Edge предоставляет инфраструктуру для интеграции функциональных возможностей нескольких модулей IoT Edge и развертывания их на IoT Edge устройствах. Любую программу можно упаковыть в виде модуля IoT Edge. Чтобы воспользоваться всеми преимуществами функций связи и управления IoT Edge, программа, запущенная в модуле, может использовать пакет SDK для устройств Azure IoT для подключения к локальному центру IoT Edge.

Упаковка программы в виде модуля IoT Edge

Чтобы развернуть программу на устройстве IoT Edge, необходимо сначала контейнеризировать ее и запустить с помощью подсистемы, совместимой с Docker. IoT Edge использует Moby, проект с открытым исходным кодом, лежащий в основе Docker, как движок, совместимый с Docker. Вы можете передать те же параметры, которые вы использовали с Docker в модули IoT Edge. Дополнительные сведения см. в разделе Как настроить параметры создания контейнеров для модулей IoT Edge.

Использование центра IoT Edge

Концентратор IoT Edge предоставляет две основные функциональные возможности: прокси-сервер для IoT Hub и локальных коммуникаций.

Подключение к центру IoT Edge из модуля

Подключение к локальному центру IoT Edge из модуля включает те же шаги подключения, что и для всех клиентов. Для получения дополнительной информации см. Подключение к концентратору IoT Edge.

Чтобы использовать маршрутизацию IoT Edge через AMQP, можно использовать ModuleClient из Azure IoT SDK. Создайте экземпляр ModuleClient для подключения модуля к концентратору IoT Edge, работающему на устройстве, аналогично тому, как экземпляры DeviceClient подключают устройства Интернета вещей к IoT Hub. Дополнительные сведения о классе ModuleClient и его методах связи см. в справочнике по API для предпочитаемого языка SDK: C#C, Python, Java или Node.js.

Примитивы IoT Hub

IoT Hub видит экземпляр модуля аналогично устройству. Экземпляр модуля может:

Сейчас модули не могут получать сообщения из облака на устройство или использовать функцию передачи файлов.

При разработке модуля вы можете подключиться к концентратору IoT Edge и использовать основные функции IoT Hub, как и при работе с приложением устройства. Единственное различие между модулями IoT Edge и приложениями устройств Интернета вещей заключается в том, что с модулями необходимо ссылаться на идентификатор модуля вместо идентификатора устройства.

Отправка сообщений с устройства в облако

Модуль IoT Edge может отправлять сообщения в облако через центр IoT Edge, который выступает в качестве локального брокера и распространяет сообщения в облако. Чтобы обеспечить сложную обработку сообщений из устройства в облако, модуль IoT Edge может перехватывать и обрабатывать сообщения, отправленные другими модулями или устройствами в локальный IoT Edge концентратор. Затем модуль IoT Edge отправляет новые сообщения с обработанными данными. Таким образом можно создать цепочки модулей IoT Edge для создания локальных конвейеров обработки.

Для отправки сообщений телеметрии устройства в облако с помощью маршрутов:

  • Используйте класс ModuleClient класса Azure IoT SDK. Каждый модуль имеет конечные точки ввода и вывода .
  • Чтобы отправить сообщения на выходную конечную точку модуля, используйте метод отправки сообщений из ModuleClient класса.
  • Чтобы отправить эту выходную конечную точку в IoT Hub, настройте маршрут в модуле edgeHub устройства.

Обработка сообщений с помощью маршрутов:

  • Настройте маршрут для отправки сообщений из другой конечной точки (модуля или устройства) в входную конечную точку модуля.
  • Слушайте сообщения на входной конечной точке вашего модуля. Каждый раз при возврате нового сообщения Azure IoT SDK активирует функцию обратного вызова.
  • Обработайте сообщение с помощью этой функции обратного вызова и (необязательно) отправьте новые сообщения в очередь конечной точки модуля.

Примечание.

Дополнительные сведения о объявлении маршрута см. в статье Learn, как развертывать модули и устанавливать маршруты в IoT Edge.

Двойники

Twins являются одним из примитивов, предоставляемых IoT Hub. Двойники — это документы JSON, которые хранят сведения о состоянии, включая метаданные, конфигурацию и условия. У каждого модуля или устройства есть собственный двойник.

  • Чтобы получить двойник модуля с помощью метода Azure IoT SDK вызовите метод ModuleClient.getTwin.
  • Чтобы получить патч двойника модуля с помощью Azure IoT SDK, реализуйте функцию обратного вызова и зарегистрируйте ее с помощью метода ModuleClient.moduleTwinCallback, чтобы ваша функция обратного вызова активировалась каждый раз, когда приходит патч двойника.

Получить прямые методы

Чтобы получить прямой метод с помощью метода Azure IoT SDK, реализуйте функцию обратного вызова и зарегистрируйте ее с помощью метода ModuleClient.methodCallback, чтобы функция обратного вызова активируется при каждом запуске прямого метода.

Поддерживаемые языки и архитектуры

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

Линукс

Для всех языков в следующей таблице IoT Edge поддерживает разработку для AMD64 и большинства контейнеров Linux ARM64. Он также поддерживает контейнеры Debian 11 ARM32.

Язык разработки Средства разработки
С Visual Studio Code
Visual Studio 2019/2022
C# Visual Studio Code
Visual Studio 2019/2022
Java Visual Studio Code
Node.js Visual Studio Code
Python Visual Studio Code

Примечание.

Для кроссплатформенной компиляции, например компиляции модуля ARM32 IoT Edge на компьютере разработки AMD64, необходимо настроить компьютер разработки для компиляции кода на целевой архитектуре устройства, соответствующей модулю IoT Edge. Дополнительные сведения об архитектуре целевых устройств см. в разделе Tutorial: разработка модулей Azure IoT Edge с помощью Visual Studio Code.

Windows

Корпорация Майкрософт больше не поддерживает контейнеры Windows. IoT Edge для Linux на Windows — рекомендуемый способ запуска IoT Edge на устройствах Windows.

Безопасность модуля

Разработка модулей с учетом безопасности. Дополнительные сведения о защите модулей см. в разделе "Безопасность подсистемы Docker".

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

Разрешить повышенные разрешения Docker

В файле конфигурации на устройстве IoT Edge параметр с именем allow_elevated_docker_permissions управляет повышенными разрешениями Docker. Если установлено значение true, этот флаг активирует флаг и любые другие разрешения, указанные в поле Docker HostConfig в параметрах создания контейнера .

Примечание.

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

Включение CAP_CHOWN и CAP_SETUID

Возможности Docker CAP_CHOWN и CAP_SETUID отключены по умолчанию. Эти возможности могут выполнять запись в защищенные файлы на хост-устройстве и потенциально получить корневой доступ.

Если вам нужны эти возможности, повторно включите их вручную с помощью CapADD параметров создания контейнера.

Следующие шаги