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

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

与客户端设备影子进行交互并进行同步

您可以使用影子管理器组件来管理本地影子,包括客户端设备影子。您可以使用影子管理器来执行以下操作:

  • 在 Greengrass 组件中与客户端设备影子交互。

  • 将客户端设备影子与 Amazon IoT Core 同步。

注意

默认情况下,影子管理器组件不与 Amazon IoT Core 同步影子。您必须配置影子管理器组件以指定要同步的客户端设备影子。

先决条件

要与客户端设备影子交互并与 Amazon IoT Core 同步客户端设备影子,核心设备必须满足以下要求:

启用影子管理器以与客户端设备通信

默认情况下,影子管理器组件不管理客户端设备影子。要启用此功能,您必须在客户端设备和影子管理器组件之间中继 MQTT 消息。客户端设备使用 MQTT 消息来收发设备影子更新。影子管理器组件订阅本地 Greengrass 发布/订阅接口,因此您可以将 MQTT 网桥组件配置为就设备影子主题中继 MQTT 消息。

MQTT 网桥组件使用一系列主题映射,其中每个主题映射都指定一个消息源和一个消息目标。要使影子管理器组件能够管理客户端设备影子,请部署 MQTT 网桥组件,并为客户端设备影子指定影子主题。您必须将网桥配置为在本地 MQTT 和本地发布/订阅之间双向中继消息。

要将 MQTT 网桥组件部署到一台或一组核心设备,请创建包含 aws.greengrass.clientdevices.mqtt.Bridge 组件的部署。在部署的 MQTT 网桥组件配置中指定主题映射 mqttTopicMapping

使用以下示例配置 MQTT 网桥组件,以启用客户端设备与影子管理器组件之间的通信。

注意

您可以在 Amazon IoT Greengrass 控制台中使用这些配置示例。如果您使用 Amazon IoT Greengrass API,则 merge 配置更新需要序列化 JSON 对象,因此您必须将以下 JSON 对象序列化为字符串。有关更多信息,请参阅 更新组件配置

例 示例:管理所有客户端设备影子

以下 MQTT 网桥配置示例允许影子管理器管理所有客户端设备的所有影子。

{ "mqttTopicMapping": { "ShadowsLocalMqttToPubsub": { "topic": "$aws/things/+/shadow/#", "source": "LocalMqtt", "target": "Pubsub" }, "ShadowsPubsubToLocalMqtt": { "topic": "$aws/things/+/shadow/#", "source": "Pubsub", "target": "LocalMqtt" } } }
例 示例:管理客户端设备的影子

以下 MQTT 网桥配置示例允许影子管理器管理名为 MyClientDevice 的客户端设备的所有影子。

{ "mqttTopicMapping": { "ShadowsLocalMqttToPubsub": { "topic": "$aws/things/MyClientDevice/shadow/#", "source": "LocalMqtt", "target": "Pubsub" }, "ShadowsPubsubToLocalMqtt": { "topic": "$aws/things/MyClientDevice/shadow/#", "source": "Pubsub", "target": "LocalMqtt" } } }
例 示例:管理所有客户端设备的已命名影子

以下 MQTT 网桥配置示例允许影子管理器管理所有客户端设备名为 DeviceConfiguration 的影子。

{ "mqttTopicMapping": { "ShadowsLocalMqttToPubsub": { "topic": "$aws/things/+/shadow/name/DeviceConfiguration/#", "source": "LocalMqtt", "target": "Pubsub" }, "ShadowsPubsubToLocalMqtt": { "topic": "$aws/things/+/shadow/name/DeviceConfiguration/#", "source": "Pubsub", "target": "LocalMqtt" } } }
例 示例:管理所有客户端设备的未命名影子

以下 MQTT 网桥配置示例允许影子管理器管理所有客户端设备的未命名影子,但不能管理已命名影子。

{ "mqttTopicMapping": { "DeleteShadowLocalMqttToPubsub": { "topic": "$aws/things/+/shadow/delete", "source": "LocalMqtt", "target": "Pubsub" }, "DeleteShadowPubsubToLocalMqtt": { "topic": "$aws/things/+/shadow/delete/#", "source": "Pubsub", "target": "LocalMqtt" }, "GetShadowLocalMqttToPubsub": { "topic": "$aws/things/+/shadow/get", "source": "LocalMqtt", "target": "Pubsub" }, "GetShadowPubsubToLocalMqtt": { "topic": "$aws/things/+/shadow/get/#", "source": "Pubsub", "target": "LocalMqtt" }, "UpdateShadowLocalMqttToPubsub": { "topic": "$aws/things/+/shadow/update", "source": "LocalMqtt", "target": "Pubsub" }, "UpdateShadowPubsubToLocalMqtt": { "topic": "$aws/things/+/shadow/update/#", "source": "Pubsub", "target": "LocalMqtt" } } }

与组件中的客户端设备影子交互

您可以开发自定义组件,使用本地影子服务读取和修改客户端设备的本地影子文档。有关更多信息,请参阅 在组件中与影子交互

将客户端设备影子与 Amazon IoT Core 同步。

您可以配置影子管理器组件,将本地设备影子状态与 Amazon IoT Core 同步。有关更多信息,请参阅 将本地设备影子与 Amazon IoT Core 同步