你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
IoT 中心的设备更新和 IoT 即插即用
IoT 中心的设备更新使用 IoT 即插即用以发现和管理支持无线更新的设备。 设备更新服务使用 IoT 即插即用接口在不同设备之间收发属性和消息。
参考信息:
- 了解 IoT 即插即用设备客户端。
- 查看如何实现设备更新代理。
Device Update 模型
模型 ID 是智能设备通过 IoT 即插即用向 Azure IoT 应用程序发布其功能的方式。若要了解如何构建智能设备以向 Azure IoT 应用程序发布其功能的详细信息,请访问《IoT 即插即用设备开发人员指南》。
Device Update for IoT Hub 要求 IoT 即插即用智能设备在设备连接过程中公布模型 ID。 了解如何公布模型 ID。
Device Update 定义了几个支持 DU 功能的 PnP 模型。 Device Update 模型“dtmi:azure:iot:deviceUpdateContractModel;3”支持核心功能,并使用设备更新核心接口向设备发送更新操作和元数据,并从设备接收更新状态。
另一个受支持的模型是 dtmi:azure:iot:deviceUpdateModel;3,该模型可扩展 deviceUpdateContractModel;3 并且还使用其他 PnP 接口来发送设备属性和信息,并启用诊断功能。 详细了解 [Device Update 模型和接口版本] (https://github.com/Azure/iot-plugandplay-models/tree/main/dtmi/azure/iot)。
Device Update 代理使用 dtmi:azure:iot:deviceUpdateModel;3,它支持 1.1.0 版本中的所有最新功能。 此模型支持 V5 清单版本。较旧的清单将适用于最新的代理,但新功能需要使用最新的清单版本。
代理元数据
Device Update 代理使用代理元数据字段将信息发送到 Device Update 服务。
名称 | 架构 | 方向 | 说明 | 示例 |
---|---|---|---|---|
deviceProperties | 映射 | 设备到云 | 一组属性,其中包含制造商、型号和其他设备信息。 | 有关详细信息,请参阅设备属性部分。 |
compatPropertyNames | 字符串(以英文逗号分隔) | 设备到云 | 设备报告用于检查设备兼容性的属性,以针对更新部署。 限制为五个设备属性。 | "compatPropertyNames": "manufacturer,model" |
lastInstallResult | 映射 | 设备到云 | 代理报告的结果。 它包含结果代码、扩展结果代码以及主要更新和其他步骤更新结果的详细信息。 | |
resultCode | integer | 设备到云 | 此代码包含上次更新操作结果的信息。 可能填充成功,也可能填充失败。 | 700 |
extendedResultCode | integer | 设备到云 | 此代码包含结果的其他信息。 可能填充成功,也可能填充失败。 | 0x80004005 |
resultDetails | 字符串 | 设备到云 | 客户定义的自由格式字符串,用于提供更多结果详细信息。 已返回到未解析的孪生体 | |
stepResults | map | 设备到云 | 由包含结果代码、扩展结果代码和步骤更新结果详细信息的代理报告的结果。 | "step_1": { "resultCode": 0,"extendedResultCode": 0, "resultDetails": ""} |
state | integer | 设备到云 | 此整数用于指示 Device Update 代理的当前状态。 | 有关详细信息,请参阅状态部分。 |
工作流 | complex | 设备到云 | 一组值,用于指示代理当前正在处理的部署、当前部署的 ID 以及从服务发送到代理的任何重试请求的确认。 请注意,取消部署后,工作流 ID 会报告“nodeployment”值。 | "workflow": {"action": 3,"ID": "11b6a7c3-6956-4b33-b5a9-87fdd79d2f01","retryTimestamp": "2022-01-26T11:33:29.9680598Z"} |
installedUpdateId | string | 设备到云 | 当前(通过设备更新)安装的更新 ID。 此值是一个字符串,用于捕获更新 ID JSON,对于从未通过 Device Update 进行更新的设备,此值将为 NULL。 | installedUpdateID{"provider":"contoso","name":"image-update","version":"1.0.0"}" |
设备属性
deviceProperties 字段包含设备的制造商和型号信息。
名称 | 架构 | 方向 | 描述 |
---|---|---|---|
制造商 | string | 设备到云 | 设备的制造商,通过 deviceProperties 报告。 可以从两个位置的任何一个位置读取此属性 - DeviceUpdateCore 接口首先尝试从配置文件中读取“aduc_manufacturer”值。 如果未在配置文件中填充该值,默认情况下会报告 ADUC_DEVICEPROPERTIES_MANUFACTURER 的编译时定义。 仅在启动时报告此属性。 默认值:“Contoso”。 |
模型 | string | 设备到云 | 设备的型号,通过 deviceProperties 报告。 可以从两个位置的任何一个位置读取此属性 - DeviceUpdateCore 接口首先尝试从配置文件中读取“'aduc_model”值。 如果未在配置文件中填充该值,默认情况下会报告 ADUC_DEVICEPROPERTIES_MODEL 的编译时定义。 仅在启动时报告此属性。 默认值:“Video” |
contractModelId | string | 设备到云 | 服务使用此属性来标识 Device Update 代理使用的基本模型版本以管理代理并与代理进行通信。 值:“dtmi:azure:iot:deviceUpdateContractModel;3”适用于使用 DU 代理版本 1.1.0 的设备。 注意:使用“dtmi:azure:iot:deviceUpdateModel;2”的代理必须将 contractModelId 报告为“dtmi:azure:iot:deviceUpdateContractModel;3”,因为 deviceUpdateModel;3 扩展自 deviceUpdateContractModel;3 |
aduVer | string | 设备到云 | 设备上运行的设备更新代理的版本。 仅在编译时 ENABLE_ADU_TELEMETRY_REPORTING 设置为 1 (true) 的情况下,才从生成中读取该值。 客户可以通过将该值设置为 0 (false) 选择退出版本报告。 如何自定义设备更新代理属性。 |
doVer | string | 设备到云 | 设备上运行的传递优化代理的版本。 仅在编译时 ENABLE_ADU_TELEMETRY_REPORTING 设置为 1 (true) 的情况下,才从生成中读取该值。 客户可以通过将该值设置为 0 (false) 选择退出版本报告。 如何自定义传递优化代理属性。 |
自定义兼容性属性 | 用户定义 | 设备到云 | 实现者可以定义其他设备属性,以便在针对更新部署时用于兼容性检查。 |
IoT 中心设备孪生示例:
"deviceUpdate": {
"__t": "c",
"agent": {
"deviceProperties": {
"manufacturer": "contoso",
"model": "virtual-vacuum-v1",
"contractModelId": "dtmi:azure:iot:deviceUpdateContractModel;3",
"aduVer": "DU;agent/1.1.0",
},
"compatPropertyNames": "manufacturer,model",
"lastInstallResult": {
"resultCode": 700,
"extendedResultCode": 0,
"resultDetails": "",
"stepResults": {
"step_0": {
"resultCode": 700,
"extendedResultCode": 0,
"resultDetails": ""
}
}
},
"state": 0,
"workflow": {
"action": 3,
"id": "11b6a7c3-6956-4b33-b5a9-87fdd79d2f01",
"retryTimestamp": "2022-01-26T11:33:29.9680598Z"
},
"installedUpdateId": "{\"provider\":\"Contoso\",\"name\":\"Virtual-Vacuum\",\"version\":\"5.0\"}"
},
注意
设备或模块必须添加 {"__t": "c"}
标记以指示元素引用组件。 有关详细信息,请参阅 IoT 即插即用约定。
State
“状态”字段是指从 Device Update 服务接收操作后 Device Update (DU) 代理所报告的状态。 系统会报告状态,以响应从 Device Update 服务发送到 Device Update 代理的操作(有关详细信息,请参阅操作部分)。 若要详细了解在 Device Update 服务和 Device Update 代理之间流动的请求,请参阅概述工作流。
名称 | 值 | 说明 |
---|---|---|
闲置 | 0 | 设备已准备就绪,可以接收来自设备更新服务的操作。 更新成功后,状态返回到 Idle 。 |
DeploymentInprogress | 6 | 正在进行部署。 |
已失败 | 255 | 更新时出错。 |
DownloadSucceeded | 2 | 下载成功。 此状态仅由代理版本为 0.7.0 或更低的设备报告。 |
InstallSucceeded | 4 | 安装成功。 此状态仅由代理版本为 0.7.0 或更低的设备报告。 |
服务元数据
Device Update 服务会使用服务元数据中包含的字段向 Device Update 代理传达操作和数据。
名称 | 架构 | 方向 | 说明 |
---|---|---|---|
action | integer | 云到设备 | 此整数与代理应执行的操作相对应。 有关详细信息,请参阅操作部分。 |
updateManifest | string | 云到设备 | 用于描述更新的内容。 根据导入清单生成。 |
updateManifestSignature | JSON 对象 | 云到设备 | JSON Web 签名 (JWS),具有用于源验证的 JSON Web 密钥。 |
fileUrls | 映射 | 云到设备 | FileID 到 DownloadUrl 的映射。 告知代理要下载的文件以及用于验证文件是否正确下载的哈希。 |
操作
action 字段表示 Device Update 代理按照 Device Update 服务的指示所执行的操作。 Device Update 代理将报告处理收到的操作状态。 若要详细了解在 Device Update 服务和 Device Update 代理之间流动的请求,请参阅概述工作流。
名称 | 值 | 说明 |
---|---|---|
applyDeployment | 3 | 应用更新。 它向设备发出信号以应用已部署的更新 |
cancel | 255 | 停止处理当前操作,并返回到 Idle ,或告知状态为 Failed 的代理返回到 Idle 。 |
下载 | 0 | 下载已发布的内容或更新以及任何其他所需内容。 此操作仅发送到代理版本为 0.7.0 或更旧版本的设备。 |
安装 | 1 | 安装内容或更新。 通常,此操作意味着调用内容或更新的安装程序。 此操作仅发送到代理版本为 0.7.0 或更旧版本的设备。 |
apply | 2 | 完成更新。 必要时,它会指示系统重新启动。 此操作仅发送到代理版本为 0.7.0 或更旧版本的设备。 |
设备信息接口
设备信息接口是 IoT 即插即用体系结构中使用的概念。 它包含设备到云的属性,这些属性提供有关设备硬件和操作系统的信息。 Device Update for IoT Hub 使用 DeviceInformation.manufacturer
和 DeviceInformation.model
属性进行遥测和诊断。 若要了解详细信息,请参阅此设备信息接口示例。
实现此接口时,模型中的预期组件名称是 deviceInformation。 了解 Azure IoT 即插即用组件
名称 | 类型 | 架构 | 方向 | 说明 | 示例 |
---|---|---|---|---|---|
制造商 | 属性 | string | 设备到云 | 设备制造商的公司名称。 此属性可能与原始设备制造商 (OEM) 的名称相同。 | Contoso |
模型 | 属性 | string | 设备到云 | 设备型号名称或 ID。 | IoT Edge 设备 |
swVersion | 属性 | string | 设备到云 | 设备上的软件版本。 swVersion 可能是固件版本。 | 4.15.0-122 |
osName | 属性 | string | 设备到云 | 设备上的操作系统名称。 | Ubuntu Server 18.04 |
processorArchitecture | 属性 | string | 设备到云 | 设备上处理器的体系结构。 | ARM64 |
processorManufacturer | 属性 | string | 设备到云 | 设备上处理器制造商的名称。 | Microsoft |
totalStorage | 属性 | string | 设备到云 | 设备上的可用存储总量(以千字节为单位)。 | 2048 |
totalMemory | 属性 | string | 设备到云 | 设备上的可用内存总量(以千字节为单位)。 | 256 |