共用方式為


如何在裝置與 DPS 之間傳輸承載

向 DPS 註冊的裝置必須在註冊時提供註冊標識碼和有效認證(金鑰或 X.509 憑證)。 不過,可能有IoT解決方案或案例需要來自裝置的其他數據。 例如,自定義配置原則 Webhook 可能會使用裝置型號號碼等資訊來選取要布建裝置的 IoT 中樞。 同樣地,裝置可能需要註冊回應中的其他數據,以利其客戶端邏輯。 DPS 提供裝置在註冊時傳送和接收選擇性承載的功能。

使用時機

傳送選擇性承載的常見案例包括:

  • 自定義配置原則 可以使用裝置承載來協助選取裝置的IoT中樞,或設定其初始對應項。 例如,您可能想要根據裝置型號配置您的裝置。 在此情況下,您可以設定裝置在註冊時報告其模型資訊。 DPS 會將裝置的承載傳遞至自定義配置 Webhook。 接著,您的 Webhook 可以根據裝置型號資訊來決定要布建裝置的 IoT 中樞。 如有需要,Webhook 也可以將數據傳回裝置,作為 Webhook 回應中的 JSON 物件。 若要深入瞭解,請參閱 在自定義配置中使用裝置承載。

  • IoT 隨插即用 (PnP) 裝置可能會在向 DPS 註冊時,使用承載來傳送其模型標識碼。 您可以在 SDK 或範例存放庫中的 PnP 範例中找到此用法的範例。 例如, C# PnP 控溫器Node.js PnP 溫度控制器

  • 透過 DPS 連線的 IoT Central 裝置應遵循 IoT 隨插即用 慣例,並在註冊時傳送其模型標識符。 IoT Central 會使用模型標識符將裝置指派給正確的裝置範本。 若要深入瞭解,請參閱 IoT Central的裝置實作和最佳做法。

裝置會將數據承載傳送至 DPS

當您的裝置呼叫註冊裝置以向 DPS 註冊時,它可以在承載屬性中包含其他數據。 例如,下列 JSON 會顯示使用 TPM 證明註冊要求主體:

{ 
    "registrationId": "mydevice", 
    "tpm": { 
        "endorsementKey": "xxxx-device-endorsement-key-xxxx", 
        "storageRootKey": "xxx-device-storage-root-key-xxxx" 
    }, 
    "payload": { A JSON object that contains your additional data } 
} 

承載屬性必須是 JSON 物件,而且可以包含與 IoT 解決方案或案例相關的任何數據。

DPS 會將數據傳回裝置

DPS 可以將數據傳回註冊回應中的裝置。 此功能目前僅用於自定義配置案例。 如果自定義配置原則 Webhook 需要將數據傳回裝置,它可以在 Webhook 回應中以 JSON 物件的形式傳回數據。 DPS 接著會將該數據傳回 Register Device 回應中的 registrationState.payload 屬性。 例如,下列 JSON 會顯示使用 TPM 證明進行註冊的成功響應主體。

{
   "operationId":"5.316aac5bdc130deb.b1e02da8-xxxx-xxxx-xxxx-7ea7a6b7f550",
   "status":"assigned",
   "registrationState":{
      "registrationId":"my-tpm-device",
      "createdDateTimeUtc":"2022-08-31T22:02:50.5163352Z",
      "assignedHub":"sample-iot-hub-1.azure-devices.net",
      "deviceId":"my-tpm-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-31T22:02:50.7370676Z",
      "etag":"xxxx-etag-value-xxxx",
      "tpm": {"authenticationKey": "xxxx-encrypted-authentication-key-xxxxx"},
      "payload": { A JSON object that contains the data returned by the webhook }
   }
}

承載屬性必須是 JSON 物件,而且可以包含與 IoT 解決方案或案例相關的任何數據。

SDK 支援

此功能適用於 C、C#、JAVA 和 Node.js 用戶端 SDK。 若要深入瞭解適用於 IoT 中樞 和 IoT 中樞 裝置布建服務的 Azure IoT SDK,請參閱 Microsoft Azure IoT SDK

IoT Edge 支援

從 1.4 版開始,IoT Edge 支援傳送 JSON 檔案中包含的數據承載。 當裝置註冊時,承載檔案會讀取並傳送至 DPS,這通常會在您第一次執行 iotedge config apply 時發生。 您也可以使用 CLI 的重新佈建命令 iotedge system reprovision來強制重新讀取和註冊它。

以下是屬性/etc/aziot/config.tomlpayload設定為本機 JSON 檔案路徑的範例代碼段。

   [provisioning]
   source = "dps"
   global_endpoint = "https://global.azure-devices-provisioning.net"
   id_scope = "0ab1234C5D6"

   # Uncomment to send a custom payload during DPS registration
   payload = { uri = "file:///home/aziot/payload.json" }
 

承載檔案 (在此案例 /home/aziot/payload.json中) 可以包含任何有效的 JSON,例如:

{
    "modelId": "dtmi:com:example:edgedevice;1"
}

下一步