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