我们正在考虑将AWS IoT用于即将推出的具有不可靠网络连接的设备的项目。一个要求是向设备发送命令。必须可靠地传递命令(确认),并且当命令稍后完成时,设备还应指示成功/失败。鉴于AWS不支持持久会话,似乎只是将命令发布到MQTT主题并不能确保传递消息 - 这是对的吗?
我们一直在推测将命令戳入设备阴影“所需”状态内的一系列命令。然后,设备可以通过在阴影的“报告”状态中复制命令来确认收到命令,并通过在“报告”状态下设置命令中的结果字段来报告成功/失败。
鉴于我们缺乏AWS IoT的经验,这看起来是一种理智的方法吗?或者任何人都可以看到整洁的东西?关于这一点的一个令人讨厌的事情是,阴影累积完成的命令,这可能意味着我最终需要某种管理来移除已完成的命令以使阴影保持合理的大小。
最后,有没有人知道带宽的使用是多么聪明 - 如果我的服务器将一个元素添加到一个嵌入在“所需”状态内的一百个元素的数组中,实际上有多少数据通过线路流动?同样,当我的设备将元素移动到“报告”状态时。
答案 0 :(得分:0)
您是对的,AWS IoT不支持持久性会话,也不支持邮件保留。
至于使用影子设备来存储命令队列,它实际上取决于你拥有的命令的频率和种类。我能想到的是:
如果它不经常使用(例如每月一次),那么从管理和性能的角度来看,可能使用影子设备是很好的。但是,如果每隔几分钟就有少量命令,那么它会迅速变大。
如果只有少数类型的命令(没有参数),并且每个只需要一次执行一次,那么命令可以是键,而“true”/“false”是值。所需的设置为“true”表示设备应该执行它,然后一旦设备完成作业,它就会报告“false”。
希望这会对你有所帮助。