IoTHub自动配置在设备孪生属性变更后重复触发问题咨询
问题描述
我配置了一个目标条件为*的IoT Hub自动配置,它能正常应用并更新设备孪生中的期望属性。
当我在设备孪生中更新一些不存在于该自动配置内的属性时,出现以下流程:
- 属性在孪生中完成更新
- 设备收到包含所有属性的期望属性更新事件
- 数分钟后,设备再次收到仅包含自动配置中属性的期望属性更新事件
执行最后一步后,我检查孪生配置,发现:
- 属性值未变化
- 版本号已递增
- 元数据中新增了指向该自动配置ID的
$lastUpdatedBy属性
此前从未出现该问题,请问为何会触发最后这一步操作?
补充日志信息
以下是包含C2DTwinOperations和D2CTwinOperations操作的日志表(从表底往上看):我读取并更新了配置,之后触发更新事件,设备读取了配置。随后配置被读取(尽管这是读取操作),但此时孪生被更新,版本号递增,且该操作使用的SDK版本与我所用的不同。之后设备读取了数据,读取大小为3035字节,这恰好是自动配置中属性的大小,即我单独更新的孪生属性未被读取。
| TimeGenerated | Category | OperationName | MessageSize | SdkVersion |
|---|---|---|---|---|
| 2023/6/9 下午4:45:43.000 | C2DTwinOperations | read | 0 | 2020-09-30 |
| 2023/6/9 下午4:45:43.000 | D2CTwinOperations | read | 3035 | .NET/1.42.0 (.NET 6.0.16; Microsoft Windows 10.0.19045 WindowsProduct:0x00000030; X64; |
| 2023/6/9 下午4:43:38.000 | C2DTwinOperations | read | 0 | 2020-09-30 |
| 2023/6/9 下午4:41:27.000 | D2CTwinOperations | read | 3469 | .NET/1.42.0 (.NET 6.0.16; Microsoft Windows 10.0.19045 WindowsProduct:0x00000030; X64; |
| 2023/6/9 下午4:41:27.000 | C2DTwinOperations | update | 3430 | 2021-04-12 |
| 2023/6/9 下午4:41:27.000 | C2DTwinOperations | read | 0 | 2021-04-12 |
原因分析
这种情况是IoT Hub自动配置的周期性重新评估机制触发的,具体细节如下:
- 自动配置的定期校验逻辑
目标条件为*的自动配置会按固定周期(默认数分钟)对所有设备孪生执行评估,确认自身定义的期望属性是否与孪生中的值匹配。当你手动更新孪生中不属于自动配置的属性后,到了评估周期时:
- 自动配置会重新将自身的期望属性模板应用到孪生上
- 由于这些属性的值本身没有变化,孪生的实际属性值不会改动,但版本号会因配置的重新应用操作递增,同时元数据会标记
$lastUpdatedBy为该自动配置的ID
- 日志中的对应证据
从日志可以明确看到:
- 你手动更新孪生(
C2DTwinOperations的update操作,SDK版本2021-04-12)后,设备读取到包含所有属性的完整数据(3469字节) - 数分钟后,出现了SDK版本为2020-09-30的
C2DTwinOperations读取操作,这是IoT Hub服务端的自动配置评估进程在读取孪生数据进行校验 - 随后设备读取的数据大小回到3035字节(仅自动配置的属性),这正是自动配置重新推送自身定义的期望属性导致的设备端事件
- 此前未出现的可能原因
要么是之前的自动配置评估周期未与手动更新的时间点重叠,未被你察觉;要么是近期IoT Hub服务端的评估逻辑或周期有调整;也有可能是你之前手动更新的属性恰好与自动配置的属性存在关联,未触发明显的重新推送行为。
内容的提问来源于stack exchange,提问作者Oleksandr
相关产品推荐
相关产品推荐

