将本地设备影子与 Amazon IoT Core 同步 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将本地设备影子与 Amazon IoT Core 同步

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

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

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

先决条件

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

  • iot:GetThingShadow

  • iot:UpdateThingShadow

  • iot:DeleteThingShadow

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

配置影子管理器组件

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

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

注意

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

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

  • 核心设备的经典影子

  • 核心设备的命名 MyCoreShadow

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

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

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

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

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

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

影子合并冲突行为

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

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

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

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

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

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

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