将本地设备影子与 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 开发人员指南》中的 Amazon IoT Core 策略操作
配置影子管理器组件
影子管理器需要一个影子名称映射列表,以便将本地影子文档中的影子状态信息同步到 Amazon IoT Core 中的云影子文档。
要同步影子状态,请创建一个包含 aws.greengrass.ShadowManager 组件的部署,并在部署的影子管理器配置中以 synchronize
配置参数指定要同步的影子。
注意
要使核心设备能够与客户端设备影子交互,您还必须配置和部署 MQTT 网桥组件。有关更多信息,请参阅启用影子管理器以与客户端设备通信。
以下示例配置更新指示影子管理器组件将以下影子与 Amazon IoT Core 同步:
-
核心设备的经典影子
-
核心设备的命名
MyCoreShadow
-
名为
MyDevice2
的 IoT 事物的经典影子 -
名为
MyDevice1
的 IoT 事物的命名影子MyShadowA
和MyShadowB
此配置更新指定实时将影子与 Amazon IoT Core 同步。如果您使用影子管理器 v2.1.0 或更高版本,则可以将影子管理器组件配置为定期同步影子。要配置此功能,请将同步策略更改为 periodic
,然后为间隔指定 delay
(以秒为单位)。有关更多信息,请参阅影子管理器组件的策略配置参数。
此配置更新指定在 Amazon IoT Core 和核心设备之间双向同步影子。如果您使用影子管理器 v2.2.0 或更高版本,则可以将影子管理器组件配置为仅单向同步影子。要配置此功能,请将同步 direction
更改为 deviceToCloud
或 cloudToDevice
。有关更多信息,请参阅影子管理器组件的方向配置参数。
{ "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 或更高版本,则可以将核心设备配置为仅单向(cloudToDevice
或 deviceToCloud
)同步影子。
-
如果影子同步方向配置为
betweenDeviceAndCloud
或cloudToDevice
,则影子管理器将从 Amazon IoT Core 中的云影子文档中检索已报告的状态信息。然后,它会更新本地存储的影子文档以同步设备状态。 -
如果影子同步方向配置为
betweenDeviceAndCloud
或deviceToCloud
,则影子管理器会将设备的当前状态发布到云影子文档。
影子合并冲突行为
在某些情况下,例如当核心设备与互联网断开连接时,在影子管理器同步更改之前,本地影子服务和 Amazon IoT 云中的影子可能会发生变化。因此,本地影子服务和 Amazon IoT 云之间的期望状态和报告状态会有所不同
当影子管理器同步影子时,它会根据以下行为合并更改:
-
如果您使用低于 v2.2.0 的影子管理器版本,或者指定
betweenDeviceAndCloud
影子同步方向,则以下行为适用:-
当影子的期望状态下存在合并冲突时,影子管理器会使用 Amazon IoT 云中的值覆盖本地影子文档的冲突部分。
-
当影子的报告状态下存在合并冲突时,影子管理器会使用本地影子文档中的值覆盖 Amazon IoT 云中影子的冲突部分。
-
-
当您指定
deviceToCloud
影子同步方向时,影子管理器会使用本地影子文档中的值覆盖 Amazon IoT 云中影子的冲突部分。 -
当您指定
cloudToDevice
影子同步方向时,影子管理器会使用 Amazon IoT 云中的值覆盖本地影子文档中影子的冲突部分。