

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 與用戶端裝置影子互動和同步
<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 核 v](greengrass-nucleus-component.md)2.6.0 或更新版本
  + [Shadow Manager](shadow-manager-component.md) 2.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 訊息來接收和傳送裝置陰影更新。影子管理員元件會訂閱本機 Greengrass 發佈/訂閱介面，因此您可以設定 [MQTT 橋接器元件](mqtt-bridge-component.md)，以在[裝置影子主題](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-shadow)上轉送 MQTT 訊息。

MQTT 橋接器元件會使用主題映射清單，每個主題映射都會指定訊息來源和訊息目的地。若要讓影子管理員元件管理用戶端裝置影子，請部署 MQTT 橋接器元件，並指定用戶端裝置影子的影子主題。您必須設定橋接器，在本機 MQTT 和本機發佈/訂閱之間雙向轉送訊息。

<a name="create-mqtt-bridge-deployment-info"></a>若要將 MQTT 橋接器元件部署至核心裝置或核心裝置群組，[請建立包含 元件的部署](create-deployments.md)。 `aws.greengrass.clientdevices.mqtt.Bridge`在 部署的 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)。