【问题标题】:Send AWS IoT commands from cloud to device over unreliable connections通过不可靠的连接将 AWS IoT 命令从云发送到设备
【发布时间】:2016-09-14 13:18:15
【问题描述】:

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

我们一直在推测将命令插入设备影子的“所需”状态内的命令数组中。然后,设备可以通过在影子的“已报告”状态下复制命令来确认命令的接收,并通过在“已报告”状态下设置命令中的结果字段来报告成功/失败。

鉴于我们缺乏使用 AWS IoT 的经验,这看起来是一种理智的方法吗?或者任何人都可以看到更整洁的东西吗?一件令人讨厌的事情是影子会累积已完成的命令,这大概意味着我最终需要某种内务处理来删除已完成的命令,以将影子保持在合理的大小。

最后,有谁知道带宽使用有多聪明——如果我的服务器将一个元素添加到嵌套在“所需”状态深处的一百个元素的数组中,实际上有多少数据流过网络?同样,当我的设备将元素移动到“已报告”状态时。

【问题讨论】:

  • 将所有网络连接视为“不可靠”是一种很好的设计实践。在物联网领域,所有与设备的连接都必须被视为“不可靠的”。
  • 是的。亚马逊没有完全实现 MQTT 是一个巨大的耻辱:它设计得很好,省略一些部分似乎有点弱。

标签: amazon-web-services mqtt iot aws-iot


【解决方案1】:

你说得对,AWS IoT 不支持持久会话也不支持消息保留。

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

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

  • 如果只有几种类型的命令(没有参数)并且每次只需要执行一次,那么命令可以是键,而“真”/“假”是值。 desired 可以设置“true”表示设备应该执行它,然后一旦设备完成作业,它会报告“false”。

希望这对您有所帮助。

【讨论】:

  • 感谢您的回复。我认为我们几乎决定不使用 IoT:运行我们自己的 MQTT 可能会更好,持久会话可能比 IoT 实际解决的任何问题都更难。
  • AWS IoT Core 现在支持持久会话:docs.aws.amazon.com/iot/latest/developerguide/…
猜你喜欢
  • 2019-07-02
  • 2023-04-01
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2023-03-12
  • 2020-03-27
相关资源
最近更新 更多