【问题标题】:How to receive a device update via azure-iot-sdk-c如何通过 azure-iot-sdk-c 接收设备更新
【发布时间】:2022-01-14 12:50:00
【问题描述】:

我目前正在为运行嵌入式 Linux 的物联网设备制定更新策略。使用适用于 IoT 中心的 Azure 设备更新。
我已经阅读了很多关于这个主题的 MS 文档。但是我错过了如何将所有服务连接在一起的部分,所以他们做我想做的事。

我所知道的:

我想要什么:

  • 为设备发送遥测数据
  • 在设备上调用方法
  • 从中心点 (IoT Hub) 将更新映像部署到我的 IoT 设备。
  • 新补丁可用时自动开始下载。
  • 拥有一个可以完成所有这些工作的客户端应用程序。

我有什么:

  • 更新的客户端是通过 rauc 实现的。我只是需要一种将更新文件传送到设备的方法。
  • 我可以使用 iot-sdk-c 发送遥测、编辑设备孪生和调用方法。
  • 我使用设备更新创建了一个 IotHub,并将我的设备与Device Update Agent 连接
  • 我创建了一个更新工件和imported,并为我的target group 创建了一个新的deployment
  • 我能够使用AducIotAgent 模拟成功下载。

我的问题:

我不知道如何将所有这些部分连接在一起,以便在我部署新工件时,所有兼容的设备都会自行开始下载,或者我什至在正确的路径上。 我的下一步将是简单地调用一个方法来下载更新文件并将其传递给我的 rauc 更新程序,但这会破坏设备更新和更新代理的目的,至少在我目前对它们的理解中是这样。 我在github 上解释过的设备代理还有一个问题,但我不认为这是相关的。

此外,我读到设备更新使用PnP interfaces,在此guide 他们使用iot-dps 注册新设备,但在我进一步阅读这些主题之前,我想知道是否适合我的案例。

This Question on MS.

【问题讨论】:

标签: azure azure-iot-hub azure-iot-sdk azure-iot-hub-device-update


【解决方案1】:

感谢您的提问,请参阅下面的一些回复。

  1. 根据您的反馈,您似乎已成功完成对 IoT 设备的 OTA 更新。恭喜!
  2. 我们支持使用安装程序的 OTA 更新,例如:用于映像 (A/B) 更新的 swUpdate 和用于基于包的更新的 apt。因此,如果其中任何一个满足您的需求,您就不需要使用 RAUC 更新程序。如果没有,我们很想听听您的用例和关于我们将来如何改进平台的反馈。 一个。以下是各种更新教程供参考: 一世。 Image Update: Getting Started with Raspberry Pi 3 B+ Reference Yocto Image
    ii. Package Update: Getting Started using Ubuntu Server 18.04 x64 Package agent iii.Device Update for Azure IoT Hub tutorial for Azure-Real-Time-Operating-System
  3. 我们尚不支持动态部署功能,即兼容设备只需开始下载更新,而无需有人从门户(或 API)手动启动新部署。我们将在未来的版本中考虑此功能。
  4. 设备无需启用 PnP 即可使用 IoT 中心的设备更新。但是,他们确实需要安装设备更新代理,该代理通过 IoT 中心与设备更新服务通信,使用 PnP 设备孪生属性来协调更新。
  5. 设备注册:设备可以使用 DPS(在生产场景中)或使用连接字符串手动注册到 IoT 中心(用于测试)。根据您的使用案例,您可以使用具有首选身份验证(SAS、TPM、X509 证书)的 DPS 注册设备。接下来,您必须使用IoT Identity Service 或使用配置文件为您的设备提供设备更新代理访问权限以进行测试。可以在here 找到有关如何配置设备更新代理的详细信息。

【讨论】:

  • 1.目前只有在我的开发机器上,当一切都按预期工作时才会进行交叉编译。 2. swUpdate 是一个选项,但 RAUC 更适合我们的用例。 3. 也许我的解释不够清楚。手动部署部分形成后端应用程序或集线器很好。我只是不想在每台设备上手动启动下载过程。 4.所以设备代理是一个单独的程序,除了我的客户端应用程序之外,还需要在每个设备上运行? 5. 完成初始测试后,下一步将是自动化整个更新设置。
  • 对于 #3:您可以在 IoT 中心对设备进行分组,以同时将更新部署到多个设备。这将启动从设备更新服务到组中所有设备上的设备更新代理的下载过程。了解如何对设备进行分组here。此外,查看 this 教程中的端到端更新也会很有帮助,该教程介绍了对设备进行分组和部署更新的流程。
  • 对于#4:设备更新代理与服务一起协调管理来自云的更新。如果您的客户端应用程序包含设备更新代理,则您不需要单独的程序。
  • 感谢您的澄清。在我的客户端应用程序中包含更新代理正是我想要的。我如何实现这一目标的指南将非常有帮助。
【解决方案2】:

目前,我们没有关于如何将您现有的应用程序/客户端/模块与更新代理集成的通用指南,我们正在努力尽快添加这些内容。现在我可以向您推荐我们文档中的一些相关指针,这将帮助您入门:

更新代理即插即用接口:https://docs.microsoft.com/en-us/azure/iot-hub-device-update/device-update-plug-and-play

更新代理工作流程:https://docs.microsoft.com/en-us/azure/iot-hub-device-update/understand-device-update#device-update-agent

工作流代码参考:https://github.com/Azure/iot-hub-device-update/blob/main/src/agent/adu_core_interface/src/agent_workflow.c

请注意,对于安装特定的实现,我们有一个“处理程序”的概念,它映射到一个特定的“更新类型”。这是相关的指针: https://docs.microsoft.com/en-us/azure/iot-hub-device-update/device-update-agent-overview#update-handlers

此类处理程序的一个示例是 APT 或 SWUpdate,它们位于此处: https://github.com/Azure/iot-hub-device-update/tree/main/src/content_handlers/swupdate_handler

【讨论】:

  • 感谢您的回答。我已经查看了这些文件,同时我认为对代理的工作方式以及我可以在哪里添加他应该执行的其他任务有一个基本的了解。我很期待看到预期的方式是什么。这个“很快”会是什么时候有一个粗略的估计吗?
  • 一切就绪并运行后,我会将其发布在我的解决方案中。但是你的回答向我保证,我没有遗漏一些明显的东西。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多