如何在裝置與 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.toml
payload
設定為本機 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"
}