

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

# 与客户端设备影子进行交互并进行同步
<a name="work-with-client-device-shadows"></a>

您可以使用[影子管理器组件](shadow-manager-component.md)来管理本地影子，包括客户端设备影子。您可以使用影子管理器来执行以下操作：
+ 在 Greengrass 组件中与客户端设备影子交互。
+ 将客户端设备阴影与同步 AWS IoT Core。

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

**Topics**
+ [先决条件](#client-device-shadows-prerequisites)
+ [启用影子管理器以与客户端设备通信](#enable-shadow-manager-client-devices)
+ [与组件中的客户端设备影子交互](#interact-with-client-device-shadows)
+ [将客户端设备阴影与同步 AWS IoT Core](#sync-client-device-shadows-with-iot-core)

## 先决条件
<a name="client-device-shadows-prerequisites"></a>

要与客户端设备影子交互并与之同步客户端设备影子 AWS IoT Core，核心设备必须满足以下要求：
+ 除了[支持客户端设备的 Greengrass 组件](connect-client-devices.md#cloud-discovery-components)外，核心设备还必须运行以下组件：
  + [Greengrass Nucleus](greengrass-nucleus-component.md) v2.6.0 或更高版本
  + [影子管理器](shadow-manager-component.md) v2.2.0 或更高版本
  + [MQTT 网桥](mqtt-bridge-component.md) v2.2.0 或更高版本
+ 必须将[客户端设备身份验证](client-device-auth-component.md)组件配置为允许客户端设备就[设备影子主题](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow)进行通信。

## 启用影子管理器以与客户端设备通信
<a name="enable-shadow-manager-client-devices"></a>

默认情况下，影子管理器组件不管理客户端设备影子。要启用此功能，您必须在客户端设备和影子管理器组件之间中继 MQTT 消息。客户端设备使用 MQTT 消息来收发设备影子更新。[影子管理器组件订阅了本地 publish/subscribe Greengrass 接口，因此您可以将 [MQTT 桥接组件配置为在设备影子主题上中继 MQTT](mqtt-bridge-component.md) 消息。](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow)

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

<a name="create-mqtt-bridge-deployment-info"></a>要将 MQTT 网桥组件部署到一台或一组核心设备，请[创建包含 `aws.greengrass.clientdevices.mqtt.Bridge` 组件的部署](create-deployments.md)。在部署的 MQTT 网桥组件配置中指定主题映射 `mqttTopicMapping`。

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

**注意**  
您可以在 AWS IoT Greengrass 控制台中使用这些配置示例。如果您使用 AWS IoT Greengrass API，则`merge`配置更新需要序列化的 JSON 对象，因此必须将以下 JSON 对象序列化为字符串。有关更多信息，请参阅 [更新组件配置](update-component-configurations.md)。

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

```
{
  "mqttTopicMapping": {
    "ShadowsLocalMqttToPubsub": {
      "topic": "$aws/things/+/shadow/#",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "ShadowsPubsubToLocalMqtt": {
      "topic": "$aws/things/+/shadow/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    }
  }
}
```

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

```
{
  "mqttTopicMapping": {
    "ShadowsLocalMqttToPubsub": {
      "topic": "$aws/things/MyClientDevice/shadow/#",
      "source": "LocalMqtt",
      "target": "Pubsub"
    },
    "ShadowsPubsubToLocalMqtt": {
      "topic": "$aws/things/MyClientDevice/shadow/#",
      "source": "Pubsub",
      "target": "LocalMqtt"
    }
  }
}
```

**Example 示例：管理所有客户端设备的已命名影子**  
以下 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"
    }
  }
}
```

**Example 示例：管理所有客户端设备的未命名影子**  
以下 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"
    }
  }
}
```

## 与组件中的客户端设备影子交互
<a name="interact-with-client-device-shadows"></a>

您可以开发自定义组件，使用本地影子服务读取和修改客户端设备的本地影子文档。有关更多信息，请参阅 [在组件中与影子交互](interact-with-shadows-in-components.md)。

## 将客户端设备阴影与同步 AWS IoT Core
<a name="sync-client-device-shadows-with-iot-core"></a>

您可以将影子管理器组件配置为与本地客户端设备影子状态同步 AWS IoT Core。有关更多信息，请参阅 [将本地设备阴影与同步 AWS IoT Core](sync-shadows-with-iot-core.md)。