Så här överför du nyttolaster mellan enheter och DPS
Enheter som registrerar sig med DPS måste ange ett registrerings-ID och giltiga autentiseringsuppgifter (nycklar eller X.509-certifikat) när de registreras. Det kan dock finnas IoT-lösningar eller scenarier där ytterligare data behövs från enheten. En webhook för anpassad allokeringsprincip kan till exempel använda information som ett enhetsmodellnummer för att välja en IoT-hubb att etablera enheten till. På samma sätt kan en enhet kräva ytterligare data i registreringssvaret för att underlätta logiken på klientsidan. DPS ger möjlighet för enheter att både skicka och ta emot en valfri nyttolast när de registrerar sig.
När du ska använda detta
Vanliga scenarier för att skicka valfria nyttolaster är:
Anpassade allokeringsprinciper kan använda enhetens nyttolast för att välja en IoT-hubb för en enhet eller ange dess första tvilling. Du kanske till exempel vill allokera dina enheter baserat på enhetsmodellen. I det här fallet kan du konfigurera enheten så att den rapporterar sin modellinformation när den registreras. DPS skickar enhetens nyttolast till den anpassade allokeringswebbhooken. Sedan kan din webhook bestämma vilken IoT-hubb som enheten ska etableras till baserat på information om enhetsmodell. Vid behov kan webhooken också returnera data tillbaka till enheten som ett JSON-objekt i webhookssvaret. Mer information finns i Använda enhetsnyttolaster i anpassad allokering.
IoT Plug and Play-enheter (PnP) kan använda nyttolasten för att skicka sitt modell-ID när de registrerar sig hos DPS. Du hittar exempel på den här användningen i PnP-exemplen i SDK eller exempellagringsplatser. Till exempel C# PnP-termostat eller Node.js PnP-temperaturstyrenhet.
IoT Central-enheter som ansluter via DPS bör följa IoT Plug and Play-konventionerna och skicka sitt modell-ID när de registrerar sig. IoT Central använder modell-ID:t för att tilldela enheten till rätt enhetsmall. Mer information finns i Enhetsimplementering och metodtips för IoT Central.
Enheten skickar datanyttolast till DPS
När enheten anropar Registrera enhet för registrering med DPS kan den innehålla ytterligare data i nyttolastegenskapen. Följande JSON visar till exempel brödtexten för en begäran om registrering med TPM-attestering:
{
"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 }
}
Nyttolastegenskapen måste vara ett JSON-objekt och kan innehålla alla data som är relevanta för din IoT-lösning eller ditt scenario.
DPS returnerar data till enheten
DPS kan returnera data tillbaka till enheten i registreringssvaret. För närvarande används den här funktionen uteslutande i anpassade allokeringsscenarier. Om webhooken för anpassad allokeringsprincip behöver returnera data till enheten kan den skicka tillbaka data som ett JSON-objekt i webhookssvaret. DPS skickar sedan tillbaka dessa data i egenskapen registrationState.payload i svaret Registrera enhet. Följande JSON visar till exempel brödtexten för ett lyckat svar för att registrera med TPM-attestering.
{
"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 }
}
}
Nyttolastegenskapen måste vara ett JSON-objekt och kan innehålla alla data som är relevanta för din IoT-lösning eller ditt scenario.
SDK-support
Den här funktionen är tillgänglig i C, C#, JAVA och Node.js klient-SDK:er. Mer information om Azure IoT SDK:er som är tillgängliga för IoT Hub- och IoT Hub Device Provisioning-tjänsten finns i Microsoft Azure IoT SDK:er.
Stöd för IoT Edge
Från och med version 1.4 har IoT Edge stöd för att skicka en datanyttolast som finns i en JSON-fil. Nyttolastfilen läses och skickas till DPS när enheten är (om)registrerad, vilket vanligtvis sker när du kör iotedge config apply
för första gången. Du kan också tvinga den att läsas om och registreras med hjälp av CLI:s återetableringskommando iotedge system reprovision
.
Nedan visas ett exempelfragment där /etc/aziot/config.toml
payload
egenskapen är inställd på sökvägen till en lokal JSON-fil.
[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" }
Nyttolastfilen (i det här fallet /home/aziot/payload.json
) kan innehålla valfri giltig JSON, till exempel:
{
"modelId": "dtmi:com:example:edgedevice;1"
}
Nästa steg
En översikt över anpassade allokeringsprinciper finns i Förstå anpassade allokeringsprinciper
Information om hur du etablerar enheter med en anpassad allokeringsprincip finns i Använda anpassade allokeringsprinciper