如何在AWS IoT Device Shadow中拒绝desired状态变更并清除delta消息?
AWS IoT Device Shadow清除desired状态报错问题解决
背景流程
我们使用AWS IoT Device Shadow服务同步云端后端与嵌入式设备的设置:
- 设备通过主题
$aws/things/xxx/shadow/update上报自身reported状态,格式如下:{ "state": { "reported" : ... } } - 后端修改设备设置时,向同一主题发布
desired状态,格式如下:{ "state": { "desired" : ... } } - 设备订阅
$aws/things/xxx/shadow/delta主题接收delta消息,此同步流程运行正常。
问题现象
当设备需要拒绝过时、不可靠的desired变更(避免持续收到重复delta消息),我们参考AWS论坛方案,尝试从设备向$aws/things/xxx/shadow/update发送以下JSON:
{"state" : {"desired" : null } }
但请求被服务器拒绝,在$aws/things/xxx/shadow/update/rejected主题收到错误响应:
{ "code": 400, "message": "Payload contains invalid json" }
注:该JSON格式合法,通过AWS控制台的在线MQTT客户端发送时,可成功清除设备影子中的desired部分。
排查结论与解决方法
经定位,报错根源是设备端客户端线程错误导致发送的消息乱码。
推荐调试手段:在AWS控制台订阅$aws/things/xxx/shadow/update主题,查看设备实际发送的消息内容,验证消息格式是否正常。
确认:将desired设为null的JSON指令,确实是清除设备影子中desired变更的有效方式。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

