Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 间接连接设备使用AWS物联网_Amazon Web Services_Aws Iot - Fatal编程技术网

Amazon web services 间接连接设备使用AWS物联网

Amazon web services 间接连接设备使用AWS物联网,amazon-web-services,aws-iot,Amazon Web Services,Aws Iot,我正在考虑将AWS IoT用于一个应用程序,其中在(可能数百个)分布式网关(PC或Raspberry Pi)后面有数千个小型位图显示器(通过专有无线协议连接) 到目前为止,我提出了以下概念: 网关PC终止MQTT会话。它没有自己的设备表 thingname=\uu 显示位图存储在S3上(文件名=thingname) 更新显示器只是替换S3文件,然后在设备阴影的所需状态下更新位图版本(例如SHA) 网关必须订阅更新,如/update/# 将有一条规则从/update/重新发布到/update/(因

我正在考虑将AWS IoT用于一个应用程序,其中在(可能数百个)分布式网关(PC或Raspberry Pi)后面有数千个小型位图显示器(通过专有无线协议连接)

到目前为止,我提出了以下概念:

  • 网关PC终止MQTT会话。它没有自己的设备表

  • thingname=\uu

  • 显示位图存储在S3上(文件名=thingname)

  • 更新显示器只是替换S3文件,然后在设备阴影的所需状态下更新位图版本(例如SHA)

  • 网关必须订阅更新,如
    /update/#

  • 将有一条规则从
    /update/
    重新发布到
    /update/
    (因为thingnames不能包含斜杠,MQTT中的通配符必须是完整的路径组件)

  • 对于收到的每条消息,网关将从S3下载位图,将其发送到显示器,然后将报告的状态更新为新版本

  • 如何处理断开连接的网关,这些网关会重新联机

    订阅不是持久性的,因此我不知何故需要查找所有东西(从该网关),其中包含所需的状态!=报告状态并再次更新它们

    有没有这样的规则?其想法是让网关在重新联机时发布重新连接消息(如
    /reconnect/
    )。该规则必须找到该网关的所有设备阴影,其中包含所需的状态!=报告状态并发布它们

    NB:我知道我可以在没有设备阴影的情况下使用自己的数据库对机制进行编程。但这一想法是利用物联网机制实现的

    另一个问题:
    创建位图的速度非常快(可能是每秒1000次),发送到显示器的速度可能非常慢(尤其是发送一组位图中的第一个位图可能需要一分钟)。因此,在确认第一条消息之前,可能会创建数千个位图(对于一个网关)。这是一个问题吗?

    如果我正确理解您的用例,我认为可能需要对您的概念进行一些更改,以使其更好地工作。我将试着回答你们的问题,把它们分成几个小部分

  • 状态同步:由于您的显示器与AWS IoT没有直接通信,因此最好将您的网关视为
    事物
    ,并将每个显示器视为相应网关
    事物
    的属性(例如
    )。这样,每当需要将新图像上载到显示器时,只需将图像的
    所需状态
    更新到相应的显示属性(例如,嵌套到
    )。您可以使用
    thing shadow
    UPDATE
    主题(例如
    $aws/things//shadow/UPDATE
    )完成此操作。您可以使用Lambda触发一条消息到
    UPDATE
    主题,以检测何时已将新版本的显示位图上载到S3

  • 图像下载:每当位图的新版本上载到S3时,网关就会通过
    对象的
    接受更新
    主题(例如
    $aws/things//shadow/UPDATE/ACCEPTED
    )接收特定位图版本的显示属性的新的
    所需状态,下载新位图,通过专有无线协议更新显示,并更新
    thing shadow
    更新
    主题中属性的
    报告状态

  • 处理断开连接的网关:是的,订阅不是持久性的,但是如果您将网关视为
    事物
    ,并将每个显示作为该
    事物
    的一个属性,每当它重新联机时,它都可以将消息发布到
    获取
    主题(例如
    $aws/things//shadow/GET
    ),检查
    ACCEPTED GET
    主题(
    $aws/things//shadow/GET/ACCEPTED
    )上的
    对象的当前状态,然后继续下载新版本的位图

  • 处理大数据量:如果您需要每秒用几个位图更新网关的每个显示,考虑到每个网关有数千个显示,我认为您可能遇到的问题是带宽瓶颈,并将所有这些MQTT消息与
    主题同步。如果您只需要每隔一段时间更新一次每个显示,我认为您的概念可以很好地工作

  • 需要考虑的一些事项:

  • AWS IoT MQTT实施无法保证安全性。如果您需要以特定的顺序接收消息,则必须在应用程序上实现这一点

  • AWS IoT仍然是一个标准,因此许多实施细节可能会发生变化


  • 谢谢你的回复。2个问题:我可以在一个网关后面有几千个显示器。但是设备阴影只有8KB。第二个问题:我不是每秒钟都更改一次显示,但我可能会在短时间内更改一个网关后面的多个/所有显示(此后数小时内不再更改)。哎呀,我忘记了设备阴影大小的8 KB限制。如果我能想出另一个解决方案,我会更新我的答案。考虑到8KB的限制,您可以将网关的显示器分组到设备集群中,而不是将网关的每个显示器嵌套到单个
    thing shadow
    。每个集群都有自己的
    阴影
    。这不是一个理想的解决方案,但我认为它比您最初的概念更容易实现。