Transferencia de cargas útiles entre dispositivos y DPS

Los dispositivos que se registran con DPS deben proporcionar un identificador de registro y credenciales válidas (claves o certificados X.509) cuando se registren. Sin embargo, puede haber soluciones o escenarios de IoT en los que se necesitan datos adicionales del dispositivo. Por ejemplo, un webhook de directiva de asignación personalizado puede usar información como un número de modelo de dispositivo para seleccionar un centro de IoT para aprovisionar el dispositivo. Del mismo modo, un dispositivo puede requerir datos adicionales en la respuesta de registro para facilitar su lógica del lado cliente. DPS proporciona la funcionalidad para que los dispositivos envíen y reciban una carga opcional cuando se registren.

Cuándo se debe usar

Los escenarios comunes para enviar cargas opcionales son:

El dispositivo envía la carga útil de datos a DPS

Cuando el dispositivo llama a Register Device (Registrar dispositivo) para registrarse con DPS, puede incluir datos adicionales en la propiedad payload. Por ejemplo, el siguiente JSON muestra el cuerpo de una solicitud para registrarse mediante atestación de 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 } 
} 

La propiedad payload debe ser un objeto JSON y puede contener cualquier dato relevante para la solución o escenario de IoT.

Devolución de datos de DPS al dispositivo

DPS puede devolver datos al dispositivo en la respuesta de registro. Actualmente, esta característica se usa exclusivamente en escenarios de asignación personalizados. Si el webhook de la directiva de asignación personalizada necesita devolver datos al dispositivo, puede pasar los datos como objeto JSON del webhook. A continuación, DPS volverá a pasar esos datos en la propiedad registrationState.payload en la respuesta Registrar dispositivo. Por ejemplo, el siguiente JSON muestra el cuerpo de una respuesta exitosa para registrarse mediante atestación de 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 }
   }
}

La propiedad payload debe ser un objeto JSON y puede contener cualquier dato relevante para la solución o escenario de IoT.

Soporte técnico de SDK

Esta característica está disponible en los SDK de cliente de C, C#, JAVA y Node.js. Para obtener más información sobre los SDK de Azure IoT disponibles para IoT Hub y el servicio IoT Hub Device Provisioning, consulte SDK de Microsoft Azure de IoT.

Compatibilidad de IoT Edge

A partir de la versión 1.4, IoT Edge admite el envío de una carga de datos incluida en un archivo JSON. El archivo de carga se lee y se envía a DPS cuando el dispositivo se vuelve a registrar, lo que suele ocurrir cuando se ejecuta iotedge config apply por primera vez. También puede forzar la repetición de la lectura y el registro mediante el comando iotedge system reprovision de reaprovisionamiento de la CLI.

A continuación se muestra un fragmento de código de ejemplo de /etc/aziot/config.toml donde la propiedad payload se establece en la ruta de un archivo JSON local.

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

El archivo de carga (en este caso /home/aziot/payload.json) puede contener cualquier código JSON válido, por ejemplo:

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

Pasos siguientes