电路的所需状态配置
使用特定于域的 LED 闪烁语言通过 Module Twin 应用于在 Raspberry Pi 上运行 Johnny 5 的 Docker 容器。
故事
概述:
Azure IoT Edge 允许间歇性连接的设备通过“模块孪生”获得所需的属性。这些孪生可用作所需的状态配置,以驱动边缘模块内的特定行为。边缘模块作为容器工作负载运行,无需持续连接即可实现自我修复和快速部署。当互联网可用时,设备可以利用云服务调用模块内的方法。
在这个项目中,我们使用 Azure IoT NodeJS SDK 开发了一个 IoT Edge 模块,该模块从云中获取所需的状态,该状态配置 Raspberry Pi 上的 GPIO 引脚以使用以下方法在连接的电路上执行所需的操作约翰尼 5.
这可以允许有趣的用例,例如:* 通过应用不同的状态配置允许单个电路的多种操作模式* 两个设备连接到同一电路时的冗余硬件故障转移,当编排并正确配置时Kubernetes。
背景:
期望状态配置是一个流行的概念,通常在首次配置服务器时使用,并在运行系统中强制执行合规性。我们将这一概念扩展到使用服务的电路,这些服务旨在在网络连接可能间歇性的区域中实现弹性和健康运行。这种方法允许我们在运行时更改连接电路的行为,并允许涉及硬件冗余的有趣场景。
来自 Microsoft 的 Azure IoT Edge 运行时使我们能够为该项目奠定坚实的基础。此运行时在本地硬件上作为服务运行,并允许编排在 Azure 云中按设备配置的容器化“模块”。始终采用两个系统模块,获取和应用模块部署配置的边缘代理和允许缓存消息到云和模块间通信的边缘集线器。
我们首先使用 Azure IoT NodeJS SDK 创建了一个 Azure IoT Edge 模块。该模块接收一个孪生配置,该配置指定给定设备所需的和报告的属性。我们使用解析为 Johny 5 配置的域特定语言。这使我们能够定义电路在云中的工作方式,并将其应用于我们的 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\”}]}”,
此示例在 GPIO18 上定义了一个 LED 设备,其初始状态为每 500 毫秒闪烁一次开/关。 LED 的状态能够使用 outputAlias 传播到其他模块。 GPIO20 上还使用了一个按钮,它将状态更改发布到 alias1。在这样的配置中,我们可以通过路由 outputAlias 来独立响应附加模块中的状态变化。
我们目前支持使用这种机制配置温度计、LED 和按钮设备。
重现步骤:
首先,您需要一个 Microsoft Azure 订阅并部署了 IoT 中心。
接下来,您需要通过将 LED 连接到 Raspberry Pi 的 GPIO18 来开始配置您的硬件。可以在此处找到此过程的说明。
准备好电路和云服务后,您需要按照本指南将 Azure IoT Edge 运行时安装到您的 Raspberry Pi。安装运行时后,您需要按照这些说明手动配置设备。
接下来,我们将在 Azure 中创建一个特殊的部署,让我们可以使 LED 闪烁。
创建如下所示的部署:
图片网址:
toolboc/johnny5onedge:0.0.981-arm32v7
容器创建选项:
{“ExposedPorts”:{“9229/tcp”:{}},“HostConfig”:{“PortBindings”:{“9229/tcp”:[{“HostPort”:“9229”}]},“Privileged”:true ,“设备”:[{“PathOnHost”:“/dev/i2c-1”,“PathInContainer”:“/dev/i2c-1”,“CgroupPermissions”:“rwm”},{“PathOnHost”:“/dev /gpiomem”,“PathInContainer”:“/dev/gpiomem”,“CgroupPermissions”:“rwm”}],“Mounts”:[{“Type”:“bind”,“Source”:“/lib/modules/” ,“目标”:“/lib/modules/”}]}}
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\”}]}”
}
}
完成后保存。然后跳过“指定路由”和“指定指标”部分,直到到达“目标设备”。
将 Priority 设置为 10 并添加 tags.environment='blinK 的目标条件
阅读更多信息.....
电路的期望状态配置
制造工艺