View a markdown version of this page

實作 AWS.DiscoverDevices 操作 - 的受管整合 AWS IoT Device Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

實作 AWS.DiscoverDevices 操作

裝置探索會將最終使用者擁有的實體裝置清單與 Managed Integrations 中維護的那些最終使用者裝置的數位表示法保持一致 AWS IoT Device Management。它由 AWS 客戶在最終使用者擁有的裝置上執行。對於 OAuth 2.0,這會在帳戶連結完成後發生。對於一般授權,這可能會在建立帳戶關聯之後發生。

裝置探索是一種非同步程序,其中 的 AWS IoT Device Management 受管整合會呼叫連接器來啟動裝置探索請求。C2C 連接器會傳回受管整合針對 產生的參考識別符 (稱為 deviceDiscoveryId),以非同步方式傳回探索到的最終使用者裝置清單 AWS IoT Device Management。

AWS.DiscoverDevices 工作流程

下圖說明最終使用者與 受管整合之間的裝置探索工作流程 AWS IoT Device Management:

AWS.DiscoverDevices 工作流程
工作流程步驟
  1. 客戶啟動裝置探索 - 客戶代表最終使用者啟動裝置探索程序。

  2. 受管整合會產生參考 ID - 的 受管整合 AWS IoT Device Management 會產生名為 的 AWS 參考識別符,deviceDiscoveryId用於客戶產生的裝置探索請求。

  3. 已傳送裝置探索請求 - 的受管整合會使用 AWS.DiscoverDevices操作介面將裝置探索請求 AWS IoT Device Management 傳送至 C2C 連接器,包括授權資訊 (OAuth 存取權杖或 AWS Secrets Manager 參考) 以及 deviceDiscoveryId。

  4. 連接器存放 deviceDiscoveryId - deviceDiscoveryId要包含在DEVICE_DISCOVERY事件中的連接器存放區。此事件也會包含已探索的最終使用者裝置清單,而且必須以 SendConnectorEvent API 做為DEVICE_DISCOVERY事件傳送至 AWS IoT Device Management 的 受管整合。

  5. 連接器呼叫資源伺服器 - 您的 C2C 連接器應呼叫資源伺服器,以擷取最終使用者擁有的所有裝置。

  6. 連接器以 ACK 回應 - 您的 C2C 連接器 Lambda 以 ACK 回應 Lambda 呼叫 (invokeFunction) 傳回受管整合 AWS IoT Device Management,做為AWS.DiscoverDevices操作的初始回應。的受管整合會透過 ACK AWS IoT Device Management 通知客戶其啟動的裝置探索程序。

  7. 資源伺服器會傳回裝置清單 - 您的資源伺服器會將最終使用者擁有和操作的裝置清單傳送給您。

  8. 轉換裝置格式 - 連接器會將每個最終使用者裝置轉換為 AWS IoT Device Management 所需的裝置格式的受管整合,包括每個裝置的 ConnectorDeviceIdConnectorDeviceName和 功能報告。

  9. 提供 UserId - C2C 連接器也提供UserId探索的裝置擁有者。視您的資源伺服器實作而定,它可能會在裝置清單或個別通話中從資源伺服器擷取。

  10. 呼叫 SendConnectorEvent API - 接著,您的 C2C 連接器將使用 AWS 帳戶 登入資料和操作參數設定為 "DEVICE_DISCOVERY"SendConnectorEvent,透過 SigV4 呼叫 AWS IoT Device Management API 的受管整合 。傳送至 Managed Integrations for 的裝置清單中的每個裝置 AWS IoT Device Management 都會以裝置特定的參數表示connectorDeviceName,例如 connectorDeviceId、 和 capabilityReport。

    • 根據您的資源伺服器回應,您需要相應地通知 的 AWS IoT Device Management 受管整合。

    • 例如,如果您的資源伺服器對最終使用者探索的裝置清單有分頁回應,則對於每個輪詢,您可以使用 statusCode 參數 傳送個別DEVICE_DISCOVERY操作事件3xx。如果您的裝置探索仍在進行中,請重複步驟 5、6 和 7。

  11. 受管整合會通知客戶 - 的 受管整合會 AWS IoT Device Management 向客戶傳送有關發現最終使用者裝置的通知。

  12. 完成通知 - 如果您的 C2C 連接器傳送DEVICE_DISCOVERY操作事件,並將 statusCode 參數更新為 200,則 AWS IoT Device Management 的受管整合將通知客戶裝置探索工作流程完成。

重要

如有需要,步驟 7 到 11 可以在步驟 6 之前進行。例如,如果您的第三方平台具有可列出最終使用者裝置的 API,則可以在 C2C 連接器 Lambda 回應一般 ACK SendConnectorEvent之前,使用 傳送 DEVICE_DISCOVERY 事件。

裝置探索的 C2C 連接器需求

下列清單概述 C2C 連接器的要求,以促進裝置探索成功:

  • C2C 連接器 Lambda 可以處理來自 受管整合的裝置探索請求訊息, AWS IoT Device Management 並處理 AWS.DiscoverDevices操作。

  • 您的 C2C 連接器可以使用 AWS 帳戶 用於註冊連接器的 憑證,透過 SigV4 呼叫 Managed Integrations AWS IoT Device Management APIs。

裝置探索程序

步驟 1:受管整合觸發裝置探索

根據授權類型,DiscoverDevices使用下列其中一個 JSON 承載將 POST 請求傳送至 :

OAuth 2.0 請求:

/DiscoverDevices { "header": { "auth": { "token": "ashriu32yr97feqy7afsaf", "type": "OAuth2.0" } }, "payload": { "operationName": "AWS.DiscoverDevices", "operationVersion": "1.0", "connectorId": "Your-Connector-Id", "deviceDiscoveryId": "12345678", "connectorDeviceIdList": [] } }
注意

connectorDeviceIdList 參數是選用的篩選條件,可讓您指定要探索的裝置 IDs 清單。當空白 ([]) 時,將探索與帳戶相關聯的所有裝置。填入特定裝置 IDs 時,探索回應中只會包含這些裝置。

一般授權請求:

/DiscoverDevices { "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } }, "payload": { "operationName": "AWS.DiscoverDevices", "operationVersion": "1.0", "connectorId": "Your-Connector-Id", "deviceDiscoveryId": "12345678", "connectorDeviceIdList": [] } }
注意

connectorDeviceIdList 參數是選用的篩選條件,可讓您指定要探索的裝置 IDs 清單。當空白 ([]) 時,將探索與帳戶相關聯的所有裝置。填入特定裝置 IDs 時,探索回應中只會包含這些裝置。

一般授權請求:

/DiscoverDevices { "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } }, "payload": { "operationName": "AWS.DiscoverDevices", "operationVersion": "1.0", "connectorId": "Your-Connector-Id", "deviceDiscoveryId": "12345678", "connectorDeviceIdList": [] } }
注意

connectorDeviceIdList 參數是選用的篩選條件,可讓您指定要探索的裝置 IDs 清單。當空白 ([]) 時,將探索與帳戶相關聯的所有裝置。填入特定裝置 IDs 時,探索回應中只會包含這些裝置。

步驟 2:連接器確認探索

連接器會傳送包含下列 JSON 回應的確認:

{ "header": { "responseCode":200 }, "payload": { "responseMessage": "Discovering devices for discovery-job-id '12345678' with connector-id `Your-Connector-Id`" } }

步驟 3:連接器傳送裝置探索事件

/connector-event/{your_connector_id} 使用下列 JSON 承載將 POST 請求傳送至 :

AWS API - /SendConnectorEvent URI – POST /connector-event/{your_connector_id} { "UserId": "6109342", "Operation": "DEVICE_DISCOVERY", "OperationVersion": "1.0", "StatusCode": 200, "DeviceDiscoveryId": "12345678", "ConnectorId": "Your_connector_Id", "Message": "Device discovery for discovery-job-id '12345678' successful", "Devices": [ { "ConnectorDeviceId": "Your_Device_Id_1", "ConnectorDeviceName": "Your-Device-Name", "CapabilityReport": { "nodeId":"1", "version":"1.0.0", "endpoints":[{ "id":"1", "deviceTypes":["Camera"], "clusters":[{ "id":"0x0006", "revision":1, "attributes":[{ "id":"0x0000", }], "commands":["0x00","0x01"], "events":["0x00"] }] }] } } ] }

為探索的裝置填入品牌和模型

您的 C2C 連接器可以選擇性地在DEVICE_DISCOVERY事件中包含每個裝置的DeviceMetadata物件,以報告裝置的品牌和模型。這些值接著會在 ListDiscoveredDevices 和 ListManagedThings 回應中傳回。

在每個裝置項目和映射中包含DeviceMetadata物件:

  • DeviceMetadata.Brand (字串) → Brand

  • DeviceMetadata.Model (字串) → Model

下列範例顯示DeviceMetadata包含 的裝置項目:

{ "ConnectorDeviceId": "Your_Device_Id_1", "ConnectorDeviceName": "Your-Device-Name", "CapabilityReport": { ... }, "DeviceMetadata": { "Brand": "ExampleBrand", "Model": "ExampleModel-X1" } }

這兩個索引鍵都是區分大小寫的字串。如果您省略 DeviceMetadata、省略個別索引鍵,或提供非字串值,則擷取裝置時無法使用對應的欄位。

為 DISCOVER_DEVICES 事件建構CapabilityReport

如上述定義的事件結構所示,做為 AWS.DiscoverDevices操作回應的 DISCOVER_DEVICES 事件中所報告的每個裝置,都需要 CapbilityReport 來描述對應的裝置功能。`CapabilityReport` 會以符合事項的格式告知 AWS IoT Device Management 裝置功能的受管整合。

CapabilityReport 中的必要欄位
  • nodeId、字串:包含下列項目之裝置節點的識別符 endpoints

  • version、字串:此裝置節點的版本,由連接器開發人員設定

  • endpoints、List<Cluster>:此裝置端點支援的事項資料模型 AWS 實作清單。

    • id、字串:連接器開發人員設定的端點識別符

    • deviceTypes,List<String>:此端點擷取的裝置類型清單,即 "Camera"。

    • clusters、List<Cluster>:此端點支援的事項資料模型 AWS 實作清單。

      • id、字串:依事項標準定義的叢集識別符。

      • revision、整數:Matter 標準所定義的叢集修訂編號。

      • attributes、Map<String、Object>:屬性識別符及其對應目前裝置狀態值的映射,具有 事件標準定義的識別符和有效值。

        • id、字串: 主題資料模型 AWS 實作所定義的屬性 ID。

        • value、物件:屬性 ID 所定義之屬性的目前值。'value' 的類型可能會根據 屬性而變更。每個屬性的 value 欄位都是選用的,只有在連接器 Lambda 可以在探索期間判斷目前狀態時,才應包含此欄位。

      • commands,List<String>:依事項標準所定義,支援此叢集的命令 IDs 清單。

      • events、List<String>:依事項標準所定義,支援此叢集的事件 IDs 清單。

如需支援的 功能及其對應AWS 實作的最新清單,請參閱 Data Model 文件的最新版本。