クライアントデバイスシャドウとやり取りして同期する - AWS IoT Greengrass

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

クライアントデバイスシャドウとやり取りして同期する

シャドウマネージャーコンポーネントを使用して、クライアントデバイスシャドウを含むローカルシャドウを管理できます。シャドウマネージャーを使用して次の操作ができます。

  • Greengrass コンポーネント内のクライアントデバイスシャドウとやり取りします。

  • クライアントデバイスシャドウを AWS IoT Core と同期させる。

注記

デフォルトでは、シャドウマネージャーコンポーネントはシャドウを AWS IoT Core と同期させません。シャドウマネージャーコンポーネントを設定して、同期させるクライアントデバイスシャドウを指定する必要があります。

前提条件

クライアントデバイスシャドウとやり取りし、クライアントデバイスシャドウを AWS IoT Core と同期させるには、コアデバイスは次の要件を満たしている必要があります。

シャドウマネージャーがクライアントデバイスと通信できるようにする

デフォルトでは、シャドウマネージャーコンポーネントはクライアントデバイスシャドウを管理しません。この機能を有効にするには、クライアントデバイスとシャドウマネージャーコンポーネント間で MQTT メッセージをリレーする必要があります。クライアントデバイスは MQTT メッセージを使用してデバイスシャドウアップデートを送受信します。シャドウマネージャーコンポーネントはローカルの Greengrass パブリッシュ/サブスクライブインターフェイスをサブスクライブするので、MQTT ブリッジコンポーネントを設定してデバイスシャドウトピックで MQTT メッセージをリレーできます。

MQTT ブリッジコンポーネントは、それぞれメッセージソースとメッセージの送信先を指定するトピックマッピングのリストを使用します。シャドウマネージャーコンポーネントがクライアントデバイスシャドウを管理できるようにするには、MQTT ブリッジコンポーネントをデプロイし、クライアントデバイスシャドウのシャドウトピックを指定します。ローカル MQTT とローカルのパブリッシュ/サブスクライブの間でメッセージを両方向にリレーするようにブリッジを設定する必要があります。

MQTT ブリッジコンポーネントをコアデバイスまたはコアデバイスのグループにデプロイするには、aws.greengrass.clientdevices.mqtt.Bridge コンポーネントを含むデプロイを作成します。デプロイの MQTT ブリッジコンポーネント設定で、トピックマッピング mqttTopicMapping を指定します。

クライアントデバイスとシャドウマネージャーコンポーネント間の通信を有効にするように MQTT ブリッジコンポーネントを設定するには、次の例を使用します。

注記

これらの設定例は、AWS IoT Greengrass コンソールで使用できます。AWS 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" } } }

コンポーネント内のクライアントデバイスシャドウとやり取りする

ローカルシャドウサービスを使用するカスタムコンポーネントを開発して、クライアントデバイスのローカルシャドウドキュメントの読み取りと変更ができます。詳細については、「コンポーネントのシャドウとやり取りする」を参照してください。

クライアントデバイスシャドウを AWS IoT Core と同期させる

シャドウマネージャーコンポーネントを設定して、ローカルクライアントデバイスシャドウ状態を AWS IoT Core と同期させることができます。詳細については、「ローカルデバイスシャドウを AWS IoT Core と同期する」を参照してください。