翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
アプリとサービスでのシャドウの使用
このセクションでは、アプリケーションまたはサービスが AWS IoT Device Shadow サービスとやり取りする方法について説明します。この例では、アプリまたはサービスがシャドウと、シャドウを介してデバイスとのみ相互作用していることを前提としています。この例には、シャドウの作成や削除などの管理アクションは含まれていません。
この例では、 AWS IoT Device Shadow サービスの RESTAPIを使用してシャドウを操作します。パブリッシュ/サブスクライブ通信モデルを使用する デバイスでのシャドウの使用で使用される例とは異なり、この例では REST のリクエスト/レスポンス通信モデルを使用しますAPI。つまり、アプリケーションまたはサービスは、 からレスポンスを受け取る前にリクエストを行う必要があります AWS IoT。ただし、このモデルの欠点は、通知をサポートしていないことです。アプリケーションまたはサービスでデバイスの状態の変化をタイムリーに通知する必要がある場合は、「」で説明されているように、パブリッシュ/サブスクライブ通信モデルをサポートする MQTTまたは MQTT オーバーWSSプロトコルを検討してくださいデバイスでのシャドウの使用。
重要
アプリまたはサービスによるシャドウの使用が、デバイス内の対応する実装と一致し、サポートされていることを確認します。たとえば、シャドウの作成、更新、削除方法、デバイスとシャドウにアクセスするアプリまたはサービスで更新がどのように処理されるかを検討します。デザインでは、デバイスの状態の更新と報告方法、アプリやサービスがデバイスとそのシャドウとどのように相互作用するかを明確に指定する必要があります。
名前付きシャドウURLの REST APIは、次のとおりです。
https://
endpoint
/things/thingName
/shadow?name=shadowName
名前のないシャドウの場合:
https://
endpoint
/things/thingName
/shadow
各パラメータの意味は次のとおりです。
- エンドポイント
-
CLI コマンドによって返されるエンドポイント:
aws iot describe-endpoint --endpoint-type IOT:Data-ATS
- thingName
-
シャドウが属する Thing オブジェクトの名前
- shadowName
-
名前付きシャドウの名前。このパラメータは、名前のないシャドウでは使用されません。
への接続時のアプリケーションまたはサービスの初期化 AWS IoT
アプリが最初に に接続すると AWS IoT、使用しているシャドウURLsの現在の状態を取得するために、使用するシャドウの にHTTPGETリクエストを送信する必要があります。これにより、アプリまたはサービスをシャドウと同期させることができます。
アプリケーションまたはサービスが接続されている間の処理状態の変化 AWS IoT
アプリケーションまたはサービスが に接続されている間 AWS IoT、使用するシャドウURLsの にHTTPGETリクエストを送信することで、定期的に現在の状態をクエリできます。
エンドユーザーがアプリケーションまたはサービスとやり取りしてデバイスの状態を変更すると、アプリケーションまたはサービスは、シャドウdesired
の状態を更新するために使用するシャドウURLsの にHTTPPOSTリクエストを送信できます。このリクエストは、受け入れられた変更を返しますが、デバイスがシャドウを新しい状態で更新するまで、HTTPGETリクエストを行ってシャドウをポーリングする必要がある場合があります。
デバイスが接続されていることの’検出
デバイスが現在接続されているかどうかを判断するには、シャドウドキュメントに connected
プロパティを含め、MQTTLast Will and Testament (LWT) メッセージを使用して、エラーが原因でデバイスが切断false
された場合に connected
プロパティを に設定します。
注記
MQTT LWT AWS IoT 予約済みトピック ($ で始まるトピック) に送信されたメッセージは、 AWS IoT Device Shadow サービスによって無視されます。ただし、これらはサブスクライブされたクライアントと AWS IoT ルールエンジンによって処理されるため、予約されていないトピックに送信されるLWTメッセージと、シャドウの予約された更新トピック にシャドウ更新メッセージとしてMQTTLWTメッセージを再発行するルールを作成する必要があります
。ShadowTopicPrefix
/update
Device Shadow サービスにLWTメッセージを送信するには
-
予約済みトピックでMQTTLWTメッセージを再発行するルールを作成します。次の例は、
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" } } ] } }
-
デバイスが に接続すると AWS IoT、再発行ルールが認識できるように、予約されていないトピックにLWTメッセージが登録されます。この例では、トピックが
my/things/myLightBulb/update
であり、connected プロパティをfalse
に設定します。{ "state": { "reported": { "connected":"false" } } }
-
接続後、デバイスはシャドウ更新トピック、
$aws/things/myLightBulb/shadow/update
に関するメッセージを発行し、connected
プロパティをtrue
に設定することを含む現在の状態を報告します。{ "state": { "reported": { "connected":"true" } } }
-
デバイスは正常に切断する前に、シャドウ更新トピック、
$aws/things/myLightBulb/shadow/update
に関するメッセージを発行し、connected
プロパティをfalse
に設定することを含む最新の状態を報告します。{ "state": { "reported": { "connected":"false" } } }
-
エラーが原因でデバイスが切断された場合、 AWS IoT メッセージブローカーはデバイスに代わってデバイスのLWTメッセージを公開します。再発行ルールはこのメッセージを検出し、シャドウ更新メッセージを発行してデバイスシャドウの
connected
プロパティを更新します。