【发布时间】:2021-04-22 09:11:06
【问题描述】:
目标是通过 MQTT 在定期退出深度睡眠的 IoT 设备中接收消息。 OTA 更新与任何其他参数更新存在完全相同的注意事项。就我而言,最终,我想同时使用它。
进展
它运行
设备唤醒大约 15 秒。如果在那段时间,我向相关主题发布了一堆消息,则消息成功到达。在 AWS 控制台中,我可以发布到:
$aws/things/<device-name>/shadow/update/delta
{
"state":{
"desired":{
"output":true
}
}
}
增量回调函数为“输出”运行。很好,但对任何人都没有实际用途。
物联网工作
为了解决这个问题,我在控制台中创建了一个自定义 AWS IoT 作业。我的想法是它可能会保留消息以确保传递。在过去的半小时里,我一直在运行这项工作,但到目前为止还没有任何进展。它有 20 次超时,但仍然卡在队列中,甚至还没有进行中……所以,这种方法显然存在缺陷。
AWS CLI 测试
为了完整起见,我尝试从控制台触发 MQTT 消息。它的好处是您可以指定 QOS,(理论上)确保它至少被交付一次。
aws iot-data publish --topic "$aws/things/<device-name>/shadow/update/delta" --qos 1 --payload file://Downloads/outputTrue.json --cli-binary-format raw-in-base64-out
但奇怪的是,这似乎根本不起作用。我根本没有看到消息到达代理:在控制台测试中订阅。
【问题讨论】:
-
将消息留在队列中是正确的解决方案,但您似乎需要修复与 AWS 的 MQTT 连接。睡觉前你会关机吗?
-
您从客户端订阅的 QOS 是什么?
-
订阅 qos=1。会话设置为持久。任何想法需要如何配置 mqtt 连接以使队列工作?
标签: mqtt esp32 aws-iot freertos