Como transferir cargas úteis entre dispositivos e DPS
Os dispositivos que se registam no DPS têm de fornecer um ID de registo e credenciais válidas (chaves ou certificados X.509) quando se registam. No entanto, pode haver soluções de IoT ou cenários em que dados adicionais são necessários do dispositivo. Por exemplo, um webhook de política de alocação personalizada pode usar informações como um número de modelo de dispositivo para selecionar um hub IoT para provisionar o dispositivo. Da mesma forma, um dispositivo pode exigir dados adicionais na resposta de registro para facilitar sua lógica do lado do cliente. O DPS fornece a capacidade de os dispositivos enviarem e receberem uma carga útil opcional quando se registrarem.
Quando Utilizar
Os cenários comuns para o envio de cargas úteis opcionais são:
As políticas de alocação personalizadas podem usar a carga útil do dispositivo para ajudar a selecionar um hub IoT para um dispositivo ou definir seu gêmeo inicial. Por exemplo, você pode querer alocar seus dispositivos com base no modelo do dispositivo. Nesse caso, você pode configurar o dispositivo para relatar suas informações de modelo quando ele se registrar. O DPS passará a carga útil do dispositivo para o webhook de alocação personalizado. Em seguida, seu webhook pode decidir para qual hub IoT o dispositivo será provisionado com base nas informações do modelo do dispositivo. Se necessário, o webhook também pode retornar dados de volta ao dispositivo como um objeto JSON na resposta do webhook. Para saber mais, consulte Usar cargas úteis do dispositivo na alocação personalizada.
Os dispositivos IoT Plug and Play (PnP) podem usar a carga útil para enviar seu ID de modelo quando se registrarem no DPS. Você pode encontrar exemplos desse uso nos exemplos PnP no SDK ou repositórios de exemplo. Por exemplo, termostato PnP C# ou controlador de temperatura PnP Node.js.
Os dispositivos IoT Central que se conectam por meio do DPS devem seguir as convenções IoT Plug and Play e enviar sua ID de modelo quando se registrarem. O IoT Central usa o ID do modelo para atribuir o dispositivo ao modelo de dispositivo correto. Para saber mais, consulte Implementação de dispositivos e práticas recomendadas para o IoT Central.
O dispositivo envia carga útil de dados para o DPS
Quando seu dispositivo chama Registrar dispositivo para se registrar no DPS, ele pode incluir dados adicionais na propriedade de carga útil. Por exemplo, o JSON a seguir mostra o corpo de uma solicitação de registro usando o atestado 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 }
}
A propriedade payload deve ser um objeto JSON e pode conter quaisquer dados relevantes para sua solução ou cenário de IoT.
O DPS retorna dados para o dispositivo
O DPS pode retornar dados para o dispositivo na resposta de registro. Atualmente, esse recurso é usado exclusivamente em cenários de alocação personalizados. Se o webhook de política de alocação personalizada precisar retornar dados para o dispositivo, ele poderá passar os dados de volta como um objeto JSON na resposta do webhook. O DPS passará esses dados de volta para a propriedade registrationState.payload na resposta Registrar dispositivo. Por exemplo, o JSON a seguir mostra o corpo de uma resposta bem-sucedida para registrar usando o atestado 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 }
}
}
A propriedade payload deve ser um objeto JSON e pode conter quaisquer dados relevantes para sua solução ou cenário de IoT.
Suporte SDK
Esse recurso está disponível em C, C#, JAVA e Node.js SDKs de cliente. Para saber mais sobre os SDKs do Azure IoT disponíveis para o Hub IoT e o serviço de Provisionamento de Dispositivo do Hub IoT, consulte SDKs IoT do Microsoft Azure.
Suporte ao IoT Edge
A partir da versão 1.4, o IoT Edge oferece suporte ao envio de uma carga útil de dados contida em um arquivo JSON. O arquivo de carga útil é lido e enviado para o DPS quando o dispositivo é (re)registrado, o que normalmente acontece quando você executa iotedge config apply
pela primeira vez. Você também pode forçá-lo a ser relido e registrado usando o comando iotedge system reprovision
reprovision da CLI .
Abaixo está um trecho de exemplo de /etc/aziot/config.toml
onde a payload
propriedade é definida para o caminho de um arquivo 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" }
O arquivo de carga útil (neste caso /home/aziot/payload.json
) pode conter qualquer JSON válido, como:
{
"modelId": "dtmi:com:example:edgedevice;1"
}
Próximos passos
Para obter uma visão geral das políticas de alocação personalizadas, consulte Compreender as políticas de alocação personalizadas
Para saber como provisionar dispositivos usando uma política de alocação personalizada, consulte Usar políticas de alocação personalizadas