向 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
當您的裝置呼叫 Register Device 以 向 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 }
}
payload 屬性必須是 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 }
}
}
payload 屬性必須是 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"
}
後續步驟
如需自訂配置原則的概觀,請參閱 瞭解 Azure IoT 中樞裝置佈建服務的自訂配置原則。
若要瞭解如何使用自訂配置原則來佈建裝置,請參閱 教學課程:搭配裝置佈建服務 (DPS) 使用自訂配置原則。