デバイスでのシャドウの使用 - AWS IoT Core

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

デバイスでのシャドウの使用

このセクションでは、デバイスが AWS IoT Device Shadow サービスと通信するのに推奨される方法である MQTT メッセージを使用したシャドウとのデバイス通信について説明します。

シャドウ通信は、MQTT のパブリッシュ/サブスクライブ通信モデルを使用して、リクエスト/レスポンスモデルをエミュレートします。すべてのシャドウアクションは、リクエストトピック、成功したレスポンストピック (accepted)、エラーレスポンストピック (rejected) で構成されます。

アプリとサービスで、デバイスが接続されているかどうかを判別できるようにする場合は、「デバイスが接続されていることの’検出」を参照してください。

重要

MQTTは公開/購読コミュニケーションモデルを使用するため、応答トピックを購読する必要があります。 以前 リクエストトピックを公開する。そうでない場合、公開したリクエストに対する応答が受信されない可能性があります。

_を使用する場合 AWS IoTデバイスSDK デバイス・シャドウ・サービス API を呼び出すには、この処理を行います。

このセクションの例では、ShadowTopicPrefix は、この表で説明するように、名前付きシャドウまたは名前なしシャドウのいずれかを参照できます。

シャドウは、名前付き、または名前のないもの (クラシック) にすることができます。それぞれで使用されるトピックは、トピックのプレフィックスでのみ異なります。この表は、各シャドウタイプで使用されるトピックのプレフィックスを示しています。

ShadowTopicPrefix value シャドウタイプ
$aws/things/thingName/shadow 名前のない (クラシック) シャドウ
$aws/things/thingName/shadow/name/shadowName 名前付きシャドウ
重要

アプリまたはサービスによるシャドウの使用が一貫しており、デバイス内の対応する実装でサポートされていることを確認してください。たとえば、シャドウの作成、更新、削除方法を考えてみましょう。また、デバイスおよびシャドウを介してデバイスにアクセスするアプリまたはサービスでの更新の処理方法も考慮してください。デバイスの状態がどのように更新され、報告され、アプリやサービスがデバイスとそのシャドウとどのように相互作用するかを明確に設計する必要があります。

完全なトピックを作成するには、次の表に示すように、参照するシャドウのタイプの ShadowTopicPrefix を選択し、thingName と、shadowName (該当する場合) を対応する値に置き換え、トピックスタブに追加します。トピックでは大文字と小文字が区別されることに注意してください。

シャドウ用に予約されているトピックの詳細については、「シャドウトピック」を参照してください。

AWS IoT への最初の接続時にデバイスを初期化する

デバイスは AWS IoT に登録した後、サポートしているシャドウのこれらの MQTT メッセージにサブスクライブする必要があります。

トピック 意味 このトピックの受信時にデバイスが実行するアクション

ShadowTopicPrefix/delete/accepted

delete リクエストが受け入れられ、AWS IoT ではシャドウが削除されました。

更新の発行を停止するなど、削除されたシャドウに対応するために必要なアクション。

ShadowTopicPrefix/delete/rejected

delete リクエストは AWS IoT によって拒否され、シャドウは削除されませんでした。メッセージ本文には、エラー情報が含まれています。

メッセージ本文内のエラーメッセージに応答します。

ShadowTopicPrefix/get/accepted

get リクエストは AWS IoT によって受け入れられ、メッセージ本文に現在のシャドウドキュメントが含まれています。

メッセージ本文内の状態ドキュメントを処理するために必要なアクション。

ShadowTopicPrefix/get/rejected

get リクエストは AWS IoT によって拒否され、メッセージ本文にエラー情報が含まれています。

メッセージ本文内のエラーメッセージに応答します。

ShadowTopicPrefix/update/accepted

update リクエストは AWS IoT によって受け入れられ、メッセージ本文に現在のシャドウドキュメントが含まれています。

メッセージ本文の更新されたデータがデバイスの状態と一致することを確認します。

ShadowTopicPrefix/update/rejected

update リクエストは AWS IoT によって拒否され、メッセージ本文にエラー情報が含まれています。

メッセージ本文内のエラーメッセージに応答します。

ShadowTopicPrefix/update/delta

シャドウドキュメントは AWS IoT へのリクエストによって更新され、メッセージ本文には要求された変更が含まれています。

メッセージ本文内の目的の状態と一致するようにデバイスの状態を更新します。

ShadowTopicPrefix/update/documents

シャドウの更新が最近完了し、メッセージ本文に現在のシャドウドキュメントが含まれています。

メッセージ本文の更新された状態が、デバイスの状態と一致することを確認します。

各シャドウの前の表のメッセージにサブスクライブした後、デバイスがサポートするシャドウがすでに作成されているかどうかをテストして、各シャドウに /get トピックを発行します。/get/accepted メッセージを受信すると、メッセージ本文にはシャドウドキュメントが含まれます。シャドウドキュメントは、デバイスがその状態を初期化するために使用できます。/get/rejected メッセージを受信した場合は、現在のデバイス状態の /update メッセージを発行してシャドウを作成する必要があります。

デバイスが AWS IoT に接続している間にメッセージを処理する

デバイスが AWS IoT に接続している間は、 /update/delta メッセージを受信でき、デバイスの状態をシャドウの変化に合わせて維持する必要があります。

  1. 受信したすべての /update/delta メッセージを読み取り、一致するようにデバイスの状態を同期します。

  2. デバイスの状態が変化するたびに、デバイスの現在の状態を持つ reported メッセージ本文を持つ /update メッセージをする。

デバイスが接続されている間は、これらのメッセージが表示されたら発行する必要があります。

表示 トピック : Payload

デバイスの状態が変更されました。

ShadowTopicPrefix/update

reported プロパティを持つシャドウドキュメント。

デバイスがシャドウと同期していない可能性があります。

ShadowTopicPrefix/get

(空)

デバイスに対するアクションは、デバイスの削除または交換時など、デバイスによってシャドウがサポートされなくなることを示します。

ShadowTopicPrefix/delete

(空)

デバイスが AWS IoT に再接続したときのメッセージの処理

1 つ以上のシャドウを持つデバイスが AWS IoT に接続する場合、その状態を次のサポートしているすべてのシャドウの状態と同期させる必要があります。

  1. 受信したすべての /update/delta メッセージを読み取り、一致するようにデバイスの状態を同期します。

  2. デバイスの現在の状態を持つ reported メッセージ本文を持つ /update メッセージを発行する。