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:
Las directivas de asignación personalizadas pueden usar la carga del dispositivo para ayudar a seleccionar un centro de IoT para un dispositivo o establecer su gemelo inicial. Por ejemplo, puede querer asignar los dispositivos en función de su modelo de dispositivo. En este caso, puede configurar el dispositivo para que incluya su información del modelo cuando se registre. DPS pasará la carga útil del dispositivo en el webhook de asignación personalizada. A continuación, el webhook puede decidir en qué centro de IoT se aprovisionará el dispositivo en función de la información del modelo de dispositivo. Si es necesario, el webhook puede también devolver datos al dispositivo como un objeto JSON en la respuesta del webhook. Para más información, consulte Uso de cargas de dispositivo en la asignación personalizada.
Los dispositivos IoT Plug and Play (PnP) pueden usar la carga útil para enviar su identificador de modelo cuando se registran con DPS. Puede encontrar ejemplos de este uso en los ejemplos de PnP en el SDK o los repositorios de ejemplo. Por ejemplo, Termostato PnP para C# o Controlador de temperatura PNP para Node.js.
Los dispositivos de IoT Central que se conectan a través de DPS deben seguir IoT Plug and Play convenciones y enviar su identificador de modelo al registrarse. IoT Central utiliza la id. de modelo para asignar el dispositivo a la plantilla de dispositivo correcta. Para saber más, vea Implementación de dispositivos y procedimientos recomendados para IoT Central.
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
Para obtener información general sobre las directivas de asignación personalizadas, consulte Descripción de las directivas de asignación personalizadas
Para obtener información sobre cómo aprovisionar dispositivos mediante una directiva de asignación personalizada, consulte Uso de directivas de asignación personalizadas