View a markdown version of this page

AWS.SendCommand オペレーションを実装する - のマネージド統合 AWS IoT Device Management

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

AWS.SendCommand オペレーションを実装する

AWS.SendCommand オペレーションにより、 の Managed Integrations AWS IoT Device Management は、エンドユーザーが開始したコマンドを AWS 顧客経由でリソースサーバーに送信できます。リソースサーバーは、複数のタイプのデバイスをサポートする場合があります。各タイプには独自のレスポンスモデルがあります。

コマンド実行は、 の Managed Integrations が でコマンド実行のリクエスト AWS IoT Device Management を送信する非同期プロセスです。このリクエストはtraceId、コネクタが SendConnectorEvent API AWS IoT Device Management 経由で の Managed Integrations に返送されるコマンドレスポンスに含まれます。Managed Integrations for は、リソースサーバーがコマンドが受信されたことを確認するレスポンスを返すことを AWS IoT Device Management 期待しますが、そのコマンドが実行されたことを示すとは限りません。

Device Command 実行ワークフロー

次の図は、エンドユーザーが家の照明をオンにしようとする例を含むコマンド実行フローを示しています。

デバイスコマンド実行ワークフロー
ワークフローのステップ
  1. エンドユーザーがコマンドを送信する - エンドユーザーは、 AWS 顧客のアプリケーションを使用して照明をオンにするコマンドを送信します。

  2. カスタマーリレーコマンド - カスタマーは、エンドユーザーのデバイス情報 AWS IoT Device Management を使用して、 コマンド情報を の Managed Integrations にリレーします。

  3. マネージド統合は traceId を生成します - Managed Integrations for は、コネクタがコマンドレスポンスをサービスに送信する際に使用するtraceId AWS IoT Device Management 」を生成します。

  4. コネクタに送信されるコマンドリクエスト - Managed Integrations for は、 AWS.SendCommandオペレーションインターフェイスを使用してコネクタにコマンドリクエスト AWS IoT Device Management を送信します。

    • このインターフェイスで定義されるペイロードは、デバイス識別子、 Matter endpoints/clusters/commandsとして定式化されたデバイスコマンド、エンドユーザーのアクセストークン、およびその他の必須パラメータで構成されます。

  5. コネクタストア traceId - コネクタtraceIdは、コマンドレスポンスに含まれる を保存します。

    • コネクタは、 AWS IoT Device Management コマンドリクエスト用の Managed Integrations をリソースサーバーの適切な形式に変換します。

  6. Connector gets UserId - コネクタは、提供されたエンドユーザーのアクセストークンUserIdから取得し、 コマンドに関連付けます。

    • は、別の呼び出しを使用してリソースサーバーから取得するか、JWT および同様のトークンの場合はアクセストークンから抽出UserIdできます。

    • 実装は、リソースサーバーとアクセストークンの詳細によって異なります。

  7. コネクタはリソースサーバーを呼び出します - コネクタはリソースサーバーを呼び出して、「ターンオン」エンドユーザーのライトを呼び出します。

  8. リソースサーバーはデバイスとやり取りします - リソースサーバーはデバイスとやり取りします。

    • コネクタは、リソースサーバー AWS IoT Device Management が コマンドを配信した の Managed Integrations にリレーし、最初の同期コマンドレスポンスとして ACK で応答します。

    • のマネージド統合は AWS IoT Device Management 、それをカスタマーアプリケーションに中継します。

  9. デバイスがコマンドを実行する - デバイスがライトをオンにすると、そのデバイスイベントはリソースサーバーによってキャプチャされます。

  10. リソースサーバーはデバイスイベントを送信します - リソースサーバーはデバイスイベントをコネクタに送信します。

  11. Connector transforms event - コネクタは、リソースサーバーによって生成されたデバイスイベントを AWS IoT Device Management 、DEVICE_COMMAND_RESPONSE イベントオペレーションタイプの Managed Integrations に変換します。

  12. コネクタが SendConnectorEvent を呼び出す - コネクタは、 オペレーションを「DEVICE_COMMAND_RESPONSE」として SendConnectorEvent API を呼び出します。

    • 最初のリクエスト AWS IoT Device Management で の Managed Integrations traceIdが提供する をアタッチします。

  13. マネージド統合はお客様に通知します - マネージド統合は、エンドユーザーのデバイス状態の変更についてお客様に AWS IoT Device Management 通知します。

  14. お客様はエンドユーザーに通知します - お客様は、デバイスのライトがオンになったことをエンドユーザーに通知します。

注記

リソースサーバー設定によって、失敗したデバイスコマンドのリクエストおよびレスポンスメッセージを処理するロジックが決まります。これには、コマンドに同じ referenceId を使用したメッセージの再試行が含まれます。

Device Command Execution の C2C コネクタ要件

次のリストは、デバイスコマンドの実行を成功させるための C2C コネクタの要件の概要を示しています。

  • C2C コネクタ Lambda は、AWS IoT Device Management のマネージド統合からのAWS.SendCommandオペレーションリクエストメッセージを処理できます。

  • C2C コネクタは、リソースサーバーに送信されたコマンドを追跡し、適切なtraceId」にマッピングする必要があります。

  • C2C コネクタの登録 AWS アカウント に使用される AWS 認証情報を使用して、SigV4 経由で AWS IoT Device Management サービス API の マネージド統合を呼び出すことができます。

コマンド実行プロセス

ステップ 1: マネージド統合がコネクタにコマンドを送信する

認可タイプに応じて、次のいずれかのペイロードを使用して POST リクエストを送信します。

OAuth 2.0 リクエスト:

/Send-Command { "header": { "auth": { "token": "ashriu32yr97feqy7afsaf", "type": "OAuth2.0" } }, "payload": { "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "Your-Connector-Id", "connectorDeviceId": "Your_Device_Id", "traceId": "traceId-3241u78123419", "endpoints": [{ "id": "1", "clusters": [{ "id": "0x0202", "commands": [{ "0xff01": { "0x0000": "3” } }] }] }] } }

一般的な認可リクエスト:

/Send-Command { "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } }, "payload": { "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "Your-Connector-Id", "connectorDeviceId": "Your_Device_Id", "traceId": "traceId-3241u78123419", "endpoints": [{ "id": "1", "clusters": [{ "id": "0x0202", "commands": [{ "0xff01": { "0x0000": "3" } }] }] }] } }

ステップ 2: C2C Connector ACK コマンド

{ "header":{ "responseCode":200 }, "payload":{ "responseMessage": "Successfully received send-command request for connector 'Your-Connector-Id' and connector-device-id 'Your_Device_Id'" } }

ステップ 3: コネクタがデバイスコマンドレスポンスイベントを送信する

AWS-API: /SendConnectorEvent URI: POST /connector-event/{Your-Connector-Id} { "UserId": "End-User-Id", "Operation": "DEVICE_COMMAND_RESPONSE", "OperationVersion": "1.0", "StatusCode": 200, "Message": “Example message”, "ConnectorDeviceId": "Your_Device_Id", "TraceId": "traceId-3241u78123419", "MatterEndpoint": { "id": "1", "clusters": [{ "id": "0x0202", "attributes": [ { "0x0000": “3” } ], "commands": [ "0xff01": { "0x0000": "3” } ] }] } }
注記

コマンド実行の結果としてのデバイス状態の変更は、対応する DEVICE_COMMAND_RESPONSE イベントが SendConnectorEvent API を介して受信 AWS IoT Device Management されるまで、 の Managed Integrations に反映されません。つまり、コネクタ呼び出しレスポンスが成功を示すかどうかにかかわらず、 の Managed Integrations が前のステップ 3 からイベント AWS IoT Device Management を受信するまで、デバイスの状態は更新されません。

重要

デバイスが状態変更が実際に適用されたことを確認していない限り、DEVICE_COMMAND_RESPONSE ペイロードに属性を含めないでください。属性のない DEVICE_COMMAND_RESPONSE は、コマンドがサードパーティーにディスパッチされたことの確認として機能し、DEVICE_COMMAND 通知になります。デバイスで属性値が更新されたことをレポートするには、更新された属性を含む別の DEVICE_EVENT を送信します。この区別は、コマンドが成功したように見えるが、デバイスが最近切断されたときなど、デバイスが状態変更を受信しなかった誤検出を防止します。

AWS.SendCommand リクエストに含まれる問題「エンドポイント」の解釈

マネージド統合は、デバイス検出中に報告されたデバイス機能を使用して、デバイスが受け入れることができるコマンドを決定します。すべてのデバイス機能は Matter データモデルの AWS 実装によってモデル化されるため、すべての受信コマンドは特定のクラスター内の「 コマンド」フィールドから取得されます。コネクタは、「endpoints」フィールドを解析し、対応する Matter コマンドを決定し、正しいコマンドがデバイスに到達するように変換する責任があります。通常、これは Matter データモデルを関連する API リクエストに変換することを意味します。

コマンドが実行されると、コネクタは Matter Data Model の AWS 実装によって定義されたどの「属性」が結果として変更されたかを判断します。これらの変更は、API で送信された API DEVICE_COMMAND_RESPONSE イベントを介して AWS IoT Device Management のマネージド統合に報告されますSendConnectorEvent。

次のAWS.SendCommandペイロードの例に含まれている「endpoints」フィールドを考えてみましょう。

"endpoints": [{ "id": "1", "clusters": [{ "id": "0x0202", "commands": [{ "0xff01": { "0x0000": "3” } }] }] }]
このオブジェクトから、コネクタは以下を判断できます。
  1. エンドポイントとクラスター情報を設定します。

    1. エンドポイントをid「1」に設定します。

      注記

      デバイスが複数のエンドポイントを定義し、単一のクラスター (オン/オフなど) が複数の機能を制御できる場合 (ライトのオン/オフ、ストロボのオン/オフなど)、この ID はコマンドを正しい機能にルーティングするために使用されます。

    2. クラスターをid「0x0202」 (ファンコントロールクラスター) に設定します。

  2. コマンド情報を設定します。

    1. コマンド識別子を「0xff01」 ( で定義される状態の更新コマンド) に設定します AWS。

    2. 含まれている属性識別子を、リクエストで指定された値で更新します。

  3. 属性を更新します。

    1. 属性識別子を「0x0000」 (ファンコントロールクラスターのFanMode 属性) に設定します。

    2. 属性値を「3」 (高速ファン) に設定します。

マネージド統合では、Matter データモデルの AWS 実装で厳密に定義されていない 2 つの「カスタム」コマンドタイプ、ReadState コマンドと UpdateState コマンドが定義されています。Matter で定義されたクラスター属性を取得して設定するために、 Managed Integrations は、UpdateState (id: 0xff01) または ReadState (id: 0xff02) に関連するコマンド IDs と、更新または読み取りが必要な属性の対応するパラメータを含むAWS.SendCommandリクエストをコネクタに送信します。これらのコマンドは、 Matter データモデルの対応する AWS 実装から変更可能 (更新可能) または取得可能 (読み取り可能) に設定された属性の任意のデバイスタイプに対して呼び出すことができます。