通过不可靠的连接从云端向设备发送AWS物联网命令



我们正在考虑在即将到来的项目中使用AWS IoT,该项目的设备具有不可靠的网络连接。一个要求是向设备发送命令。命令必须可靠地传递(ack),并且当命令稍后完成时,设备也应该发出成功/失败的信号。考虑到AWS不支持持久会话,似乎仅仅将命令发布到MQTT主题并不能确保消息得到传递——这对吗?

我们一直在猜测将该命令插入到设备阴影的"期望"状态中的命令数组中。然后,设备可以通过在影子的"报告"状态下复制命令来接收命令,并通过在"报告"状态下设置命令内的结果字段来报告成功/失败。

考虑到我们在AWS物联网方面缺乏经验,这似乎是一种明智的方法吗?或者有人能看到更整齐的东西吗?一个令人讨厌的事情是,影子会累积已完成的命令,这可能意味着我最终需要某种清理来删除已完成的命令,以使影子保持在合理的大小。

最后,有没有人知道带宽的使用有多聪明——如果我的服务器向一个包含100个元素的数组中添加一个元素,这个数组深深嵌套在"想要的"状态中,那么有多少数据实际上流经网络?同样,当我的设备将元素移动到'reported'状态时

你是对的,AWS IoT不支持持久化会话和消息保留。

至于使用影子设备来存储命令队列,这实际上取决于您拥有的命令的频率和种类。我能想到的:

  • 如果它只是不经常使用(例如一个月一次),那么从管理和性能的角度来看,使用影子设备可能是好的。但是,如果每隔几分钟只有几个命令,那么它很快就会变得很大。

  • 如果只有几种类型的命令(没有参数),每个命令一次只需要执行一次,那么命令可以是键,而"true"/"false"是值。所需的可以设置为"true"来指示设备应该执行它,然后一旦设备完成工作,它报告"false"。

希望这对你有帮助。

最新更新