Использование Module Twins Azure IoT Edge для управления состоянием цепей
История
Обзор:
Azure IoT Edge позволяет периодически подключенным устройствам получать желаемые свойства через «Module Twins» (двойники модулей). Эти двойники можно использовать как конфигурацию желаемого состояния для управления поведением внутри Edge-модулей. Edge-модули запускаются как контейнерные рабочие нагрузки, обеспечивая самовосстановление и быстрый деплой без постоянной связности. Когда интернет доступен, устройства могут использовать облачные сервисы для вызова методов внутри модулей.
В этом проекте мы разрабатываем IoT Edge-модуль с Azure IoT NodeJS SDK, который получает желаемое состояние из облака, конфигурируя GPIO-пины Raspberry Pi для выполнения операций на подключенной цепи с помощью Johnny-Five.
Это открывает интересные сценарии:
- Несколько режимов работы для одной цепи путем применения разных конфигураций состояния
- Резервирование железа с двумя устройствами на одной цепи при оркестрации через Kubernetes
Предыстория:
Конфигурация желаемого состояния — популярная концепция для провижининга серверов и обеспечения соответствия в работающих системах. Мы расширяем эту концепцию на цепи, используя сервисы, спроектированные для устойчивости и здоровой работы в зонах с прерывистой связностью. Это позволяет менять поведение подключенной цепи в рантайме и реализовывать сценарии с аппаратной избыточностью.
Azure IoT Edge runtime от Microsoft дает надежную основу. Он работает как сервис на локальном железе и позволяет оркестрацию контейнерных «модулей», конфигурируемых на устройстве в Azure Cloud. Всегда используются два системных модуля: edge-agent (получает и применяет конфигурации деплоя модулей) и edge-hub (кэширует сообщения в облако и обеспечивает межмодульную коммуникацию).
Мы начали с создания Azure IoT Edge модуля на Azure IoT NodeJS SDK. Модуль получает конфигурацию двойника, задающую желаемые и сообщаемые свойства для устройства. Используем Domain Specific Language (DSL), который парсится в конфигурацию Johnny-Five. Это позволяет определить функционирование цепи в облаке и применить к нашему IoT Edge модулю.
Пример конфигурации:
"config": "{\"peripherals\":[{\"type\":\"Led\",\"name\":\"alarm\",\"settings\":{\"pin\":\"GPIO18\"},\"initialState\":{\"method\":\"blink\",\"period\":500},\"outputAlias\":\"alias2\"},{\"type\":\"Button\",\"name\":\"button\",\"settings\":{\"pin\":\"GPIO20\"},\"outputAlias\":\"alias1\"}]}"
Этот пример определяет LED на GPIO18 с initialState — мигание каждые 500 мс. Состояние LED может передаваться другим модулям через outputAlias. Кнопка на GPIO20 публикует изменения состояния в alias1. В такой конфигурации можно независимо реагировать на изменения состояния в дополнительных модулях, маршрутизируя outputAlias.
Сейчас поддерживается конфигурация термометра, LED и кнопки через этот механизм.
Шаги воспроизведения:
Для начала нужна подписка Microsoft Azure с развернутым IoT Hub.
Далее настройте железо: подключите LED к GPIO18 Raspberry Pi. Инструкции здесь.
С готовыми цепью и облачными сервисами установите Azure IoT Edge runtime на Raspberry Pi по этому гайду. Затем вручную провижньте устройство по этим инструкциям.
Создайте специальный деплой в Azure для мигания LED.
Создайте деплой как показано ниже:
URL образа:
toolboc/johnny5onedge:0.0.981-arm32v7
Опции создания контейнера:
{"ExposedPorts":{"9229/tcp":{}},"HostConfig":{"PortBindings":{"9229/tcp":[{"HostPort":"9229"}]},"Privileged":true,"Devices":[{"PathOnHost":"/dev/i2c-1","PathInContainer":"/dev/i2c-1","CgroupPermissions":"rwm"},{"PathOnHost":"/dev/gpiomem","PathInContainer":"/dev/gpiomem","CgroupPermissions":"rwm"}],"Mounts":[{"Type":"bind","Source":"/lib/modules/","Target":"/lib/modules/"}]}}
Desired properties Module Twin:
{
"properties.desired": {
"config": "{\"peripherals\":[{\"type\":\"Led\",\"name\":\"alarm\",\"settings\":{\"pin\":\"GPIO18\"},\"initialState\":{\"method\":\"blink\",\"period\":500},\"outputAlias\":\"alias2\"},{\"type\":\"Button\",\"name\":\"on\",\"settings\":{\"pin\":\"GPIO20\"},\"outputAlias\":\"alias1\"}]}"
}
}
Сохраните. Пропустите «Specify Routes» и «Specify Metrics» до «Target Devices».
Установите Priority 10 и добавьте целевое условие tags.environment='blinK
Читать подробнее… Desired State Configuration for Circuits
Производственный процесс
- Мастерство Kubernetes на Azure: проверенные инструменты, советы и лучшие практики
- Какой путь Azure сертификации подходит вам? Инсайты от экспертов Cloud Institute
- Стоит ли получать сертификацию Azure DevOps? Преимущества и влияние на карьеру
- Как сдать экзамен по сертификации Azure DevOps без формального обучения
- Мастерство управления облачными затрами: проверенные стратегии для AWS, GCP и Azure
- Управляющие цепи: основы, применение и лучшие практики
- Оптимизация конфигураций HMI для высокорисковых операций
- Продвинутые экранированные кабели для сигнальных цепей: практические методы подключения (Часть 2)
- Экранированные кабели для сигнальных цепей: Часть 1 — лучшие практики
- Microsoft анонсирует Azure Edge Zones для питания 5G IoT и ИИ нагрузок