Dela via


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 mer 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 mer 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 payload när de registreras.

När du ska använda detta

Vanliga scenarier för att skicka valfria nyttolaster är:

Enheten skickar datapaket till DPS

När enheten anropar Registrera enhet för registrering med DPS kan den innehålla mer data i payload-egenskapen. 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 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 innehållet av ett lyckat svar för att registrera sig 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 data som är relevanta för din IoT-lösning eller ditt scenario.

SDK-stöd

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:ns återställningskommando iotedge system reprovision.

Exemplet nedan är ett kodfragment från /etc/aziot/config.toml, där 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