我正在考虑将 AWS IoT 用于一个应用程序,其中在(可能数百个)分布式网关(PC 或 Raspberry Pi)后面有数千个小型位图显示器(与专有无线协议连接)。
到目前为止,我提出了以下概念:
网关 PC 终止 MQTT 会话。它没有自己的设备表。
thingname = <gatewayId>_<displayId>
显示位图存储在 S3 上(文件名 = 事物名)
更新显示只是替换 S3 文件,然后将位图版本(例如 SHA)更新为所需的设备阴影状态。
网关必须订阅更新,例如
/update/<gatewayId>/#
会有一个规则从
/update/<gatewayId>_<displayId>
to重新发布/update/<gatewayId>/<displayId>
(因为thingnames不能包含斜杠,MQTT中的通配符必须是完整的路径组件)对于每条收到的消息,网关将从 S3 下载位图,将其发送到显示器,然后将报告的状态更新为新版本。
如何处理断开连接的网关,然后重新联机?
订阅不是持久的,所以我需要找到所有东西(从那个网关),其中期望的状态!=报告状态并再次更新它们。
可以有一个规则来做到这一点吗?这个想法是让网关/reconnect/<gatewayId>
在它重新联机时发布重新连接消息(如 )。该规则必须找到该网关的所有设备影子,其中期望状态!= 报告状态并发布它们。
注意:我知道我可以在没有设备影子的情况下使用自己的数据库对机制进行编程。但这个想法是为此使用物联网机制。
另一个问题: 创建位图非常快(可能是每秒 1000 个),发送到显示器可能非常慢(尤其是发送一堆的第一个位图可能需要一分钟)。因此,在确认第一条消息之前,可能会创建数千个位图(用于一个网关)。这是一个问题吗?