设备孪生属性变更时获取完整device twin数据及路由查询错误咨询
问题根因
你遇到的IH400104错误是路由查询语法不符合Azure IoT Hub路由规范导致的,核心错误点有两个:
- 设备孪生属性变更事件的路由查询对应数据源不是
devices,devices是设备到云遥测消息的专属数据源,孪生事件有独立的查询结构 - 你使用的
$body.properties.desired字段路径不符合孪生事件的内置schema规则,DeviceTwinEvents数据源的查询直接访问顶层属性即可,不需要加$body前缀
修正方案
第一步:调整路由基础配置
你的路由的数据源必须选择「设备孪生事件(Device Twin Events)」,不能选择设备遥测类数据源。
第二步:替换正确的查询语句
你可以根据自己的触发场景选择对应的查询规则:
- 仅desired属性变更时触发
SELECT * FROM DeviceTwinEvents WHERE IS_OBJECT(properties.desired)
- desired或reported任意属性变更时触发
SELECT * FROM DeviceTwinEvents WHERE IS_OBJECT(properties.desired) OR IS_OBJECT(properties.reported)
第三步:开启完整孪生数据返回配置
默认设备孪生事件路由仅返回变更的属性片段,要获取完整device twin数据,你需要在当前路由的配置页开启「包含完整设备孪生」的开关,开启后触发事件时会自动将完整的孪生结构包含在消息体中,无需修改查询语句。
内容的提问来源于stack exchange,提问作者Eswar
相关产品推荐
相关产品推荐

