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:

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