

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# コンポーネント内のクライアントデバイスとやり取りする
<a name="interact-with-client-devices-in-components"></a>

コアデバイスに接続されたクライアントデバイスとやり取りするカスタム Greengrass コンポーネントを作成できます。たとえば以下を実行するコンポーネントを作成できます。
+ クライアントデバイスからの MQTT メッセージを処理し、 AWS クラウド の送信先にデータを送信します。
+ MQTT メッセージをクライアントデバイスに送信して、アクションを開始します。

クライアントデバイスは、コアデバイス上で動作する MQTT ブローカーコンポーネントを経由して、コアデバイスへの接続と通信を行います。デフォルトでは、クライアントデバイスは MQTT を介してのみ相互に通信でき、Greengrass コンポーネントはこれらの MQTT メッセージの受信や、クライアントデバイスへのメッセージの送信を行うことはできません。

Greengrass コンポーネントはコアデバイスで通信を行うために、[ローカルパブリッシュ/サブスクライブインターフェイス](ipc-publish-subscribe.md)を使用します。Greengrass コンポーネントでクライアントデバイスと通信するには、[MQTT ブリッジコンポーネント](mqtt-bridge-component.md)を設定して以下を実行します。
+ クライアントデバイスからローカルのパブリッシュ/サブスクライブへ MQTT メッセージをリレーします。
+ ローカルのパブリッシュ/サブスクライブからクライアントデバイスへ MQTT メッセージをリレーします。

Greengrass コンポーネント内のデバイスシャドウとやり取りすることもできます。詳細については、「[クライアントデバイスシャドウとやり取りして同期する](work-with-client-device-shadows.md)」を参照してください。

**Topics**
+ [MQTT ブリッジコンポーネントの設定とデプロイ](#deploy-mqtt-bridge-pubsub)
+ [クライアントデバイスから MQTT メッセージを受信する](#receive-client-device-messages)
+ [MQTT メッセージをクライアントデバイスに送信する](#send-client-device-messages)

## MQTT ブリッジコンポーネントの設定とデプロイ
<a name="deploy-mqtt-bridge-pubsub"></a>

MQTT ブリッジコンポーネントは、それぞれメッセージソースとメッセージの送信先を指定するトピックマッピングのリストを使用します。クライアントデバイスと通信するには、MQTT ブリッジコンポーネントをデプロイし、コンポーネント設定で各送信元および送信先のトピックを指定します。

<a name="create-mqtt-bridge-deployment-info"></a>MQTT ブリッジコンポーネントをコアデバイスまたはコアデバイスのグループにデプロイするには、`aws.greengrass.clientdevices.mqtt.Bridge` コンポーネントを含む[デプロイを作成](create-deployments.md)します。デプロイの MQTT ブリッジコンポーネント設定で、トピックマッピング `mqttTopicMapping` を指定します。

以下の例は、クライアントデバイスからローカルのパブリッシュ/サブスクライブブローカーに `clients/MyClientDevice1/hello/world` トピックをリレーするように、MQTT ブリッジコンポーネントを設定するデプロイを定義するものです。`merge` 設定の更新には、シリアル化された JSON オブジェクトが必要です。詳細については、「[コンポーネント設定の更新](update-component-configurations.md)」を参照してください。

------
#### [ Console ]

```
{
  "mqttTopicMapping": {
    "HelloWorldPubsub": {
      "topic": "clients/MyClientDevice1/hello/world",
      "source": "LocalMqtt",
      "target": "Pubsub"
    }
  }
}
```

------
#### [ AWS CLI ]

```
{
  "components": {
    "aws.greengrass.clientdevices.mqtt.Bridge": {
      "version": "2.0.0",
      "configurationUpdate": {
        "merge": "\"mqttTopicMapping\":{\"HelloWorldPubsub\":{\"topic\":\"clients/MyClientDevice1/hello/world\",\"source\":\"LocalMqtt\",\"target\":\"Pubsub\"}}}"
      }
    }
    ...
  }
}
```

------

MQTT トピックワイルドカードを使用すると、トピックフィルターに一致するトピックでメッセージをリレーできます。MQTT ブリッジ v2.2.0 以降を使用していて、ソースブローカーがローカルのパブリッシュ/サブスクライブの場合、MQTT トピックワイルドカードをトピックフィルターで使用できます。詳細については、「[MQTT ブリッジコンポーネントの設定](mqtt-bridge-component.md#mqtt-bridge-component-configuration)」を参照してください。

## クライアントデバイスから MQTT メッセージを受信する
<a name="receive-client-device-messages"></a>

MQTT Bridge コンポーネントがクライアントデバイスからメッセージを受信するように設定した、ローカルのパブリッシュ/サブスクライブトピックにサブスクライブできます。

**カスタムコンポーネントのクライアントデバイスから MQTT メッセージを受信するには**

1. [MQTT ブリッジコンポーネントの設定とデプロイ](#deploy-mqtt-bridge-pubsub)を行い、クライアントデバイスが発行を行う MQTT トピックから、ローカルのパブリッシュ/サブスクライブトピックにメッセージをリレーします。

1. ローカルパブリッシュ/サブスクライブ IPC インターフェイスを使用して、MQTT ブリッジがメッセージをリレーするトピックにサブスクライブします。詳細については、「[ローカルメッセージをパブリッシュ/サブスクライブする](ipc-publish-subscribe.md)」および「[SubscribeToTopic](ipc-publish-subscribe.md#ipc-operation-subscribetotopic)」を参照してください。

[クライアントデバイスの接続とテストのチュートリアル](client-devices-tutorial.md)には、クライアントデバイスからのメッセージにサブスクライブするコンポーネントを作成するセクションがあります。詳細については、「[ステップ 4: クライアントデバイスと通信するコンポーネントを開発する](client-devices-tutorial.md#develop-client-device-subscriber-component)」を参照してください。

## MQTT メッセージをクライアントデバイスに送信する
<a name="send-client-device-messages"></a>

MQTT Bridge コンポーネントがクライアントデバイスにメッセージを送信するように設定した、ローカルのパブリッシュ/サブスクライブトピックに発行できます。

**カスタムコンポーネントのクライアントデバイスに MQTT メッセージを発行するには**

1. [MQTT ブリッジコンポーネントの設定とデプロイ](#deploy-mqtt-bridge-pubsub)を行い、ローカルのパブリッシュ/サブスクライブトピックから、クライアントデバイスがサブスクライブを行う MQTT トピックにメッセージをリレーします。

1. ローカルパブリッシュ/サブスクライブ IPC インターフェイスを使用して、MQTT ブリッジがメッセージをリレーするトピックに発行します。詳細については、「[ローカルメッセージをパブリッシュ/サブスクライブする](ipc-publish-subscribe.md)」および「[PublishToTopic](ipc-publish-subscribe.md#ipc-operation-publishtotopic)」を参照してください。