将本地设备阴影与同步 AWS IoT Core - AWS IoT Greengrass

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将本地设备阴影与同步 AWS IoT Core

通过影子管理器组件 AWS IoT Greengrass ,可以将本地设备影子状态与同步 AWS IoT Core。您必须修改影子管理器组件的配置以包含synchronization配置参数,并为您的设备指定 AWS IoT 事物名称以及要同步的阴影。

当您将影子管理器配置为同步影子时,它会同步指定影子的所有状态更改,不管更改发生在本地影子文档还是云影子文档中。

您还可以指定影子管理器组件是实时同步影子,还是定期同步影子。默认情况下,影子管理器组件会实时同步阴影,因此每次更新发生 AWS IoT Core 时,核心设备都会发送和接收影子更新。您可以配置定期间隔以减少带宽使用量和费用。

先决条件

要与本地阴影同步 AWS IoT Core,必须将 Greengrass 核心设备的策略配置为允许以下影 AWS IoT 子策略操作。 AWS IoT Core

  • iot:GetThingShadow

  • iot:UpdateThingShadow

  • iot:DeleteThingShadow

有关更多信息,请参阅下列内容:

配置影子管理器组件

影子管理器需要一个影子名称映射列表,以便将本地影子文档中的影子状态信息同步到 AWS IoT Core中的云影子文档。

要同步影子状态,请创建一个包含 aws.greengrass.ShadowManager 组件的部署,并在部署的影子管理器配置中以 synchronize 配置参数指定要同步的影子。

注意

要使核心设备能够与客户端设备影子交互,您还必须配置和部署 MQTT 网桥组件。有关更多信息,请参阅启用影子管理器以与客户端设备通信

以下示例配置更新指示影子管理器组件将以下阴影与 AWS IoT Core同步:

  • 核心设备的经典影子

  • 核心设备的命名 MyCoreShadow

  • 名为 MyDevice2 的 IoT 事物的经典影子

  • 名为 MyDevice1 的 IoT 事物的命名影子 MyShadowAMyShadowB

此配置更新指定与阴影实时 AWS IoT Core 同步。如果您使用影子管理器 v2.1.0 或更高版本,则可以将影子管理器组件配置为定期同步影子。要配置此功能,请将同步策略更改为 periodic,然后为间隔指定 delay(以秒为单位)。有关更多信息,请参阅影子管理器组件的策略配置参数

此配置更新指定在 AWS IoT Core 和核心设备之间双向同步影子。如果您使用影子管理器 v2.2.0 或更高版本,则可以将影子管理器组件配置为仅单向同步影子。要配置此功能,请将同步 direction 更改为 deviceToCloudcloudToDevice。有关更多信息,请参阅影子管理器组件的方向配置参数

{ "strategy": { "type": "realTime" }, "synchronize": { "coreThing": { "classic": true, "namedShadows": [ "MyCoreShadow" ] }, "shadowDocuments": [ { "thingName": "MyDevice1", "classic": false, "namedShadows": [ "MyShadowA", "MyShadowB" ] }, { "thingName": "MyDevice2", "classic": true, "namedShadows": [ ] } ], "direction": "betweenDeviceAndCloud" } }

同步本地影子

当 Greengrass 核心设备连接到 AWS IoT 云端时,影子管理器会对您在组件配置中指定的阴影执行以下任务。行为取决于您指定的影子同步方向配置选项。默认情况下,影子管理器使用 betweenDeviceAndCloud 选项来双向同步影子。如果您使用影子管理器 v2.2.0 或更高版本,则可以将核心设备配置为仅单向(cloudToDevicedeviceToCloud)同步影子。

  • 如果影子同步方向配置为 betweenDeviceAndCloudcloudToDevice,则影子管理器将从 AWS IoT Core中的云影子文档中检索已报告的状态信息。然后,它会更新本地存储的影子文档以同步设备状态。

  • 如果影子同步方向配置为 betweenDeviceAndClouddeviceToCloud,则影子管理器会将设备的当前状态发布到云影子文档。

影子合并冲突行为

在某些情况下,例如当核心设备与互联网断开连接时,在影子管理器同步更改之前,本地影子服务和 AWS IoT 云中的影子可能会发生变化。因此,本地影子服务和 AWS IoT 云之间的期望状态和报告的状态会有所不同

当影子管理器同步影子时,它会根据以下行为合并更改:

  • 如果您使用低于 v2.2.0 的影子管理器版本,或者指定 betweenDeviceAndCloud 影子同步方向,则以下行为适用:

    • 当卷影的所需状态下存在合并冲突时,影子管理器会用来自 AWS IoT 云的值覆盖本地卷影文档的冲突部分。

    • 当阴影的报告状态下存在合并冲突时,影子管理器会使用本地卷影文档中的值覆盖 AWS IoT 云中阴影的冲突部分。

  • 当您指定deviceToCloud阴影同步方向时,阴影管理器会使用本地阴影文档中的值覆盖 AWS IoT 云中阴影的冲突部分。

  • 当您指定cloudToDevice阴影同步方向时,阴影管理器会使用来自 AWS IoT 云的值覆盖本地卷影文档中冲突的部分。