Freigeben über


Übertragen von Nutzlasten zwischen Geräten und DPS

Geräte, die sich bei DPS registrieren, müssen beim Registrieren eine Registrierungs-ID und gültige Anmeldeinformationen (Schlüssel oder X.509-Zertifikate) bereitstellen. Es können jedoch IoT-Lösungen oder Szenarien vorhanden sein, in denen mehr Daten vom Gerät benötigt werden. Beispielsweise kann ein benutzerdefinierter Zuordnungsrichtlinienwebhook Informationen wie eine Gerätemodellnummer verwenden, um einen IoT-Hub auszuwählen, auf dem das Gerät bereitgestellt werden soll. Ebenso erfordert ein Gerät möglicherweise mehr Daten in der Registrierungsantwort, um seine clientseitige Logik zu vereinfachen. DPS bietet die Möglichkeit für Geräte, bei ihrer Registrierung optionale Nutzdaten sowohl zu senden als auch zu empfangen.

Einsatzgebiete

Allgemeine Szenarien zum Senden von optionalen Nutzdaten sind folgende:

  • Benutzerdefinierte Zuordnungsrichtlinien können mithilfe der Gerätenutzdaten einen IoT-Hub für ein Gerät auswählen oder dessen ursprünglichen Zwilling festlegen. Beispielsweise können Sie Ihre Geräte basierend auf dem Gerätemodell zuordnen. In diesem Fall können Sie das Gerät so konfigurieren, dass es die zugehörigen Modellinformationen bei seiner Registrierung meldet. DPS übergibt die Nutzlast des Geräts an den benutzerdefinierten Zuordnungswebhook. Anschließend kann Ihr Webhook entscheiden, auf welcher IoT-Hub das Gerät basierend auf den Gerätemodellinformationen bereitgestellt wird. Bei Bedarf kann der Webhook in seiner Antwort Daten auch als JSON-Objekt an das Gerät zurückgeben. Weitere Informationen finden Sie unter Verwenden von Gerätenutzdaten in benutzerdefinierter Zuordnung.

  • IoT Plug and Play (PnP)- Geräte können die Nutzlast verwenden, um ihre Modell-ID zu senden, wenn sie sich bei DPS registrieren. Beispiele für diese Verwendung finden Sie in den PnP-Beispielen im SDK oder in Beispielrepositorys. Beispiel: C#-PnP-Thermostat oder Node.js-PnP-Temperaturcontroller.

  • IoT Central-Geräte, die sich über DPS verbinden, sollten bei ihrer Registrierung IoT Plug & Play-Konventionen folgen und ihre Modell-ID senden. IoT Central verwendet die Modell-ID, um das Gerät der richtigen Gerätevorlage zuzuweisen. Weitere Informationen finden Sie unter Geräteimplementierung und bewährte Methoden für IoT Central.

Gerät sendet Datennutzlast an DPS

Wenn Ihr Gerät Register Device aufruft, um sich bei DPS zu registrieren, könnte es weitere Daten in der Payload-Eigenschaft einschließen. Das folgende JSON beispielsweise zeigt den Textkörper für eine Anforderung zum Registrieren mithilfe eines TPM-Nachweises:

{ 
    "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 } 
} 

Die Eigenschaft Nutzdaten muss ein JSON-Objekt sein und kann beliebige Daten enthalten, die für Ihre IoT-Lösung oder Ihr IoT-Szenario relevant sind.

DPS gibt Daten an das Gerät zurück

DPS kann in der Registrierungsantwort Daten an das Gerät zurückgeben. Dieses Feature wird zurzeit ausschließlich in benutzerdefinierten Zuordnungsszenarien verwendet. Wenn der Webhook für die benutzerdefinierte Zuordnungsrichtlinie Daten an das Gerät zurückgeben muss, kann er sie in seiner Antwort als JSON-Objekt übergeben. DPS übergibt dann diese Daten zurück in die Eigenschaft registrationState.payload in der Register Device-Antwort. Das folgende JSON beispielsweise zeigt den Textkörper einer erfolgreichen Antwort zum Registrieren mithilfe eines TPM-Nachweises.

{
   "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 }
   }
}

Die Eigenschaft Nutzdaten muss ein JSON-Objekt sein und kann beliebige Daten enthalten, die für Ihre IoT-Lösung oder Ihr IoT-Szenario relevant sind.

SDK-Support

Diese Funktion ist in den Client-SDKs für C, C#, Java und Node.js verfügbar. Weitere Informationen zu den Azure IoT SDKs, die für IoT Hub und den IoT Hub Device Provisioning-Dienst verfügbar sind, finden Sie unter Microsoft Azure IoT SDKs.

IoT Edge-Unterstützung

Ab Version 1.4 unterstützt IoT Edge das Senden einer Datennutzlast, die in einer JSON-Datei enthalten ist. Die Nutzlastdatei wird gelesen und an DPS gesendet, wenn das Gerät (erneut)registriert wird. Dies geschieht normalerweise, wenn Sie iotedge config applyzum ersten Mal ausführen. Mithilfe des CLI-Befehls zur erneuten Bereitstellung (iotedge system reprovision) können Sie auch ein erneutes Lesen und die Registrierung erzwingen.

Das folgende Beispiel ist ein Codeausschnitt aus /etc/aziot/config.toml, bei dem die Eigenschaft payload auf den Pfad einer lokalen JSON-Datei festgelegt ist.

   [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" }
 

Die Nutzlastdatei (in diesem Fall /home/aziot/payload.json) kann beliebiges gültiges JSON enthalten wie z. B.:

{
    "modelId": "dtmi:com:example:edgedevice;1"
}

Nächste Schritte