アプリとサービスでのシャドウの使用 - AWS IoT Core

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

アプリとサービスでのシャドウの使用

このセクションでは、アプリまたはサービスが AWS IoT Device Shadow サービスと相互作用する方法について説明します。この例では、アプリまたはサービスがシャドウと、シャドウを介してデバイスとのみ相互作用していることを前提としています。この例には、シャドウの作成や削除などの管理アクションは含まれていません。

この例では、AWS IoT Device Shadow サービスの REST API を使用してシャドウを操作します。パブリッシュ/サブスクライブ通信モデルを使用する デバイスでのシャドウの使用 で使用される例とは異なり、この例では REST API のリクエスト/レスポンス通信モデルを使用します。つまり、アプリまたはサービスは、 AWS IoT からのレスポンスを受信する前にリクエストを行う必要があります。ただし、このモデルの欠点は、通知をサポートしていないことです。アプリまたはサービスで、デバイスの状態の変更をタイムリーに通知する必要がある場合は、「デバイスでのシャドウの使用」で説明されているように、パブリッシュ/サブスクライブ通信モデルをサポートする WSS プロトコル経由の MQTT または MQTT を検討してください。

重要

アプリまたはサービスによるシャドウの使用が、デバイス内の対応する実装と一致し、サポートされていることを確認します。たとえば、シャドウの作成、更新、削除方法、デバイスとシャドウにアクセスするアプリまたはサービスで更新がどのように処理されるかを検討します。デザインでは、デバイスの状態の更新と報告方法、アプリやサービスがデバイスとそのシャドウとどのように相互作用するかを明確に指定する必要があります。

名前付きシャドウの REST API の URL は次のとおりです。

https://endpoint/things/thingName/shadow?name=shadowName

名前のないシャドウの場合:

https://endpoint/things/thingName/shadow

"where"

エンドポイント

CLI コマンドによって返されるエンドポイント。

aws iot describe-endpoint --endpoint-type IOT:Data-ATS
thingName

シャドウが属する Thing オブジェクトの名前

shadowName

名前付きシャドウの名前。このパラメータは、名前のないシャドウでは使用されません。

AWS IoT への接続時のアプリまたはサービスの初期化

アプリが AWS IoT に最初に接続するとき、使用しているシャドウの現在の状態を取得するために、使用するシャドウの URL に HTTP GET リクエストを送信する必要があります。これにより、アプリまたはサービスをシャドウと同期させることができます。

アプリまたはサービスが AWS IoT に接続する間の状態変更の処理

アプリまたはサービスが AWS IoT に接続している間は、使用するシャドウの URL に対して HTTP GET リクエストを送信することで、定期的に現在の状態を照会できます。

エンドユーザーがアプリまたはサービスと対話してデバイスの状態を変更すると、アプリまたはサービスは、シャドウの desired 状態を更新するために使用するシャドウの URL に HTTP POST リクエストを送信できます。このリクエストは受け入れられた変更を返しますが、デバイスがシャドウを新しい状態で更新するまで HTTP GET リクエストを行い、シャドウをポーリングする必要がある場合があります。

デバイスが接続されていることの’検出

デバイスが現在接続されているかどうかを確認するには、シャドウドキュメントに connected プロパティを含めて、MQTT Last Wy and Testament (LWT) メッセージを使用して、デバイスがエラーにより切断された場合に、connected プロパティを false に設定します。

注記

AWS IoT 予約済みトピック ($ で始まるトピック) に送信される MQTT LWT メッセージは、AWS IoT Device Shadow サービスによって無視されます。ただし、これらはサブスクライブされたクライアントおよび AWS IoT ルールエンジンによって処理されるため、予約されていないトピックに送信される LWT メッセージと、MQTT LWT メッセージをシャドウ更新メッセージとしてシャドウの予約済み更新トピック、ShadowTopicPrefix/update に再発行するルールを作成する必要があります。

Device Shadow サービスに LWT メッセージを送信するには

  1. 予約されたトピックで MQTT LWT メッセージを再発行するルールを作成します。次の例は、 my/things/myLightBulb/update トピックに関するメッセージをリッスンし、$aws/things/myLightBulb/shadow/update に再発行するルールです。

    { "rule": { "ruleDisabled": false, "sql": "SELECT * FROM 'my/things/myLightBulb/update'", "description": "Turn my/things/ into $aws/things/", "actions": [{ "republish": { "topic": "$$aws/things/myLightBulb/shadow/update", "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish" } }] } }
  2. デバイスが AWS IoT に接続すると、再発行ルールが認識できるように、予約されていないトピックに LWT メッセージが登録されます。この例では、トピックが my/things/myLightBulb/update であり、connected プロパティを false に設定します。

    { "state": { "reported": { "connected":"false" } } }
  3. 接続後、デバイスはシャドウ更新トピック、$aws/things/myLightBulb/shadow/update に関するメッセージを発行し、connected プロパティを true に設定することを含む現在の状態を報告します。

    { "state": { "reported": { "connected":"true" } } }
  4. デバイスは正常に切断する前に、シャドウ更新トピック、$aws/things/myLightBulb/shadow/update に関するメッセージを発行し、connected プロパティを false に設定することを含む最新の状態を報告します。

    { "state": { "reported": { "connected":"false" } } }
  5. エラーが原因でデバイスが切断された場合、AWS IoT メッセージブローカーはデバイスの代わりにデバイスの LWT メッセージを発行します。再発行ルールはこのメッセージを検出し、シャドウ更新メッセージを発行してデバイスシャドウの connected プロパティを更新します。