Compartilhar via


Como transferir conteúdos entre dispositivos e o DPS

Os dispositivos registrados com DPS são necessários para fornecer uma ID de registro e credenciais válidas (chaves ou certificados X.509) no momento do registro. No entanto, pode haver soluções de IoT ou cenários em que dados adicionais são necessários no 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 em que o dispositivo deve ser provisionado. Da mesma forma, um dispositivo pode exigir dados adicionais na resposta de registro para facilitar a lógica do lado do cliente. O DPS fornece aos dispositivos a capacidade de enviar e receber um payload opcional no momento do registro.

Quando usar isso

Cenários comuns para enviar payloads opcionais são:

O dispositivo envia o conteúdo de dados para o DPS

Quando o dispositivo chama o Dispositivo de Registro para se registrar no DPS, ele pode incluir dados adicionais na propriedade payload. 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 a solução ou o cenário de IoT.

O DPS retorna dados para o dispositivo

O DPS pode retornar dados para o dispositivo na resposta de registro. No momento, 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 pode devolver os dados como um objeto JSON na resposta do webhook. Em seguida, o DPS devolverá esses dados na propriedade registrationState.payload na resposta do Dispositivo de Registro. 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 a solução ou o cenário de IoT.

Suporte do SDK

Esse recurso está disponível em SDKs de cliente C, C#, JAVA e Node.js. Para saber mais sobre os SDKs da Internet das Coisas do Azure disponíveis para o Hub IoT e o serviço de Provisionamento de Dispositivos no Hub IoT, consulte SDK do IoT do Microsoft Azure.

Suporte do Azure IoT Edge

A partir da versão 1.4, IoT Edge dá suporte ao envio de uma carga de dados contida em um arquivo JSON. O arquivo de carga é 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 lido novamente e registrado usando o comando de reprovisionamento da CLI iotedge system reprovision.

Veja abaixo um snippet de exemplo de /etc/aziot/config.toml, em que a propriedade payload está definida como 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 conteúdo (neste caso /home/aziot/payload.json) pode conter qualquer JSON válido, como:

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

Próximas etapas