デバイスシャドウサービス通信のシミュレーション - AWS IoT Core

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

デバイスシャドウサービス通信のシミュレーション

このトピックでは、Device Shadow サービスが仲介として動作する方法を示し、デバイスおよびアプリはシャドウを使用してデバイスの状態を更新、保存、取得できます。

このトピックで説明されている相互作用を実証し、さらに詳しく調べるには、AWS アカウントと AWS CLI を実行できるシステムが必要です。これらがない場合は、コード例で相互作用を確認できます。

この例では、AWS IoT コンソールはデバイスを表しています。AWS CLI は、シャドウを介してデバイスにアクセスするアプリまたはサービスを表します。AWS CLI インターフェイスは、アプリが AWS IoT との通信に使用する API と非常によく似ています。この例のデバイスはスマート電球で、アプリは電球の状態を表示し、電球の状態を変更できます。

シミュレーションの設定

これらの手順では、デバイスをシミュレートする AWS IoT コンソールと、アプリをシミュレートするコマンドラインウィンドウを開いてシミュレーションを初期化します。

シミュレーション環境を設定するには

  1. AWS アカウントを作成するか、すでにこのシミュレーションで使用するアカウントがある場合は、この手順を省略できます。

    このトピックの例を自分で実行するには、AWS アカウントが必要です。AWS アカウントをお持ちでない場合は、「をセットアップする AWS アカウント」の説明に従ってアカウントを作成します。

  2. AWS IoT コンソールを開き、左側のメニューで [テスト] を選択して MQTT クライアントを開きます。

  3. 別のウィンドウで、AWS CLI がインストールされているシステムでターミナルウィンドウを開きます。

2 つのウィンドウが開いている必要があります。1 つは [テスト] ページの AWS IoT コンソールで、もう 1 つはコマンドラインプロンプトです。

デバイスの初期化

このシミュレーションでは、mySimulatedThing という名前の Thing オブジェクトと、SimShadow1 という名前のシャドウを使って作業します。

コンソールで、これらの MQTT トピックをサブスクライブします。これらのトピックは getupdatedelete アクションに対するレスポンスです。これにより、デバイスがアクションを発行した後にレスポンスを受信できます。

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents

上記のリストの各 MQTT トピックに対して、この手順を実行します。

MQTT クライアントで MQTT トピックをサブスクライブするには

  1. MQTTクライアント、選択 Subscribe to topicSubscriptions

  2. [サブスクリプショントピック] に、サブスクライブするトピックを入力します。

    このシミュレーションでは、前のリストからトピックをコピーし、[サブスクリプショントピック] に貼り付けます。一度に入力するトピックは 1 つだけです。

  3. [<<] を選択します。Subscribe to topic.

  4. MQTT クライアントの左側の列にトピックが表示されることを確認します。

    この時点で、シミュレートされたデバイスは、AWS IoT によって発行されるトピックを受信する準備が整いました。

  5. デバイス自体を初期化してレスポンストピックにサブスクライブした後、サポートしているシャドウを照会する必要があります。このシミュレーションでは、 mySimulatedThing(シミュレーション)、名前、 simShadow1.

    MQTT クライアントから現在のシャドウ状態を取得するには

    1. MQTTクライアント、選択 Publish to a topicSubscriptions

    2. [発行] で、次のトピックを入力します。

      $aws/things/mySimulatedThing/shadow/name/simShadow1/get
    3. 取得するトピックを入力した下のメッセージ本文ウィンドウからコンテンツを削除します。

    4. [<<] を選択します。Publish to topic リクエストを発行します。

  6. $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected トピックでメッセージを受信し、code404 の場合 (この例のように)、シャドウは作成されていないため、次に作成します。

    { "code": 404, "message": "No shadow exists with name: 'simShadow1'" }

    デバイスの現在のステータスを持つシャドウを作成するには

    1. MQTTクライアント、選択 Publish to a topicSubscriptions

    2. [発行] で、次のトピックを入力します。

      $aws/things/mySimulatedThing/shadow/name/simShadow1/update
    3. トピックを入力した下のメッセージ本文ウィンドウで、このシャドウドキュメントを入力して、デバイスが ID と現在の色を RGB 値で報告していることを示します。

      { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }
    4. [<<] を選択します。Publish to topic リクエストを発行します。

    5. どのトピックがレスポンスメッセージを受信するかを確認します。

    6. $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted トピックにメッセージを受信した場合は、シャドウが作成され、メッセージ本文には、手順 7 の例のように、現在のシャドウドキュメントが含まれます。

    7. $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected トピックにメッセージを受信した場合は、メッセージ本文のエラーを確認します。

  7. $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted トピックでメッセージを受信した場合、シャドウはすでに存在し、この例のようにメッセージ本文には現在のシャドウ状態があります。これにより、デバイスを設定したり、シャドウ状態と一致していることを確認したりできます。

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591140517, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

アプリからアップデートを送信する

このセクションでは、AWS CLI を使用して、アプリがシャドウとやり取りする方法を示します。

AWS CLI を使用してシャドウの現在の状態を取得するには

  1. コマンドラインで、次のコマンドを入力します。

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
  2. シャドウが存在し、デバイスによって現在の状態を反映するように初期化されているため、次のシャドウドキュメントが返されます。

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591141111 }

アプリはこのレスポンスを使用して、デバイスの状態の表現を初期化できます。

エンドユーザーがスマート電球の色を黄色に変更した場合など、アプリが状態を更新した場合、アプリは update-thing-shadow コマンドを送信します。このコマンドは UpdateThingShadow REST API に対応します。

アプリからシャドウを更新するには

  1. コマンドラインで、次のコマンドを入力します。

    aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
  2. 成功した場合、このコマンドは次のシャドウドキュメントを返します。

    { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] } }, "version": 4, "timestamp": 1591141596, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

デバイスでの更新に応答

AWS コンソールで MQTT クライアントに戻ると、前のセクションで発行された update コマンドを反映するために AWS IoT が発行したメッセージが表示されます。

MQTT クライアントで更新メッセージを表示するには

  1. MQTTクライアント、選択 $aws/things/mySimulatedThing/shadow/name/simShadow1/update/deltaサブスクリプション 列。トピック名が切り詰められている場合は、トピック名を一時停止してトピック全体を表示できます。

  2. で次の操作を行います。$aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta トピックログが表示されます。 /delta メッセージもこのメッセージと似ています。

    { "version": 4, "timestamp": 1591141596, "state": { "ColorRGB": [ 255, 255, 0 ] }, "metadata": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

デバイスはこのメッセージの内容を処理して、デバイスの状態がメッセージ内の desired 状態と一致するように設定します。

デバイスは、メッセージ内の desired 状態と一致するように状態を更新した後、更新メッセージを発行して、新しい reported 状態を AWS IoT に送信する必要があります。この手順では、MQTT クライアントでこれをシミュレートします。

デバイスからシャドウを更新するには

  1. MQTT クライアントで、[トピックへの発行] を選択します。

  2. [発行 ] セクションのメッセージ本文ウィンドウで、更新されたシャドウドキュメントを入力します。このドキュメントには、デバイスの現在の状態が示されます。

    { "state": { "reported": { "ColorRGB": [255,255,0] } }, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }
  3. [発行] セクションのメッセージ本文ウィンドウの上にある [トピック] フィールドに、/update アクションに続いてシャドウのトピックを入力します。

    $aws/things/mySimulatedThing/shadow/name/simShadow1/update
  4. [トピックへの発行] を選択して、更新されたデバイス状態を発行します。

  5. メッセージが によって正常に受信された場合 AWS IoT新しい回答が $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted メッセージログを MQTTクライアント この例のように、シャドウの現在の状態を示します。

    { "state": { "reported": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "reported": { "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

デバイスの reported 状態を正常に更新すると、AWS IoT では、メッセージ内のシャドウ状態の包括的な説明が トピックに送信されます。たとえば、前述の手順でデバイスによって実行されたシャドウ更新の結果として発生したこのメッセージ本文です。

{ "previous": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 4 }, "current": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5 }, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

アプリで更新を確認する

アプリは、デバイスによって報告された現在の状態をシャドウに照会できるようになりました。

AWS CLI を使用してシャドウの現在の状態を取得するには

  1. コマンドラインで、次のコマンドを入力します。

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
  2. シャドウは現在の状態を反映するようにデバイスによって更新されたばかりなので、次のシャドウドキュメントを返します。

    { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591143269 }

シミュレーションを超える

AWS CLI (アプリを表す) とコンソール (デバイスを表す) の間の相互作用を試して、IoT ソリューションをモデル化します。