디바이스와 DPS 간에 페이로드를 전송하는 방법

DPS에 등록하는 디바이스는 등록 시 등록 ID와 유효한 자격 증명(키 또는 X.509 인증서)을 제공해야 합니다. 그러나 디바이스에서 추가 데이터가 필요한 IoT 솔루션이나 시나리오가 있을 수 있습니다. 예를 들어, 사용자 지정 할당 정책 웹후크는 디바이스 모델 번호와 같은 정보를 사용하여 디바이스를 프로비전할 IoT 허브를 선택할 수 있습니다. 마찬가지로 디바이스는 클라이언트 쪽 논리를 용이하게 하기 위해 등록 응답에 추가 데이터를 요구할 수 있습니다. DPS는 디바이스가 등록할 때 선택적 페이로드를 보내고 받을 수 있는 기능을 디바이스에 제공합니다.

사용 시기

선택적 페이로드를 보내는 일반적인 시나리오는 다음과 같습니다.

  • 사용자 지정 할당 정책은 디바이스 페이로드를 사용하여 디바이스의 IoT 허브를 선택하거나 초기 트윈을 설정할 수 있습니다. 예를 들어, 디바이스 모델에 따라 디바이스를 할당할 수 있습니다. 이 경우 등록할 때 모델 정보를 보고하도록 디바이스를 구성할 수 있습니다. DPS는 디바이스의 페이로드를 사용자 지정 할당 웹후크에 전달합니다. 그런 다음 웹후크는 디바이스 모델 정보를 기반으로 디바이스를 프로비전할 IoT 허브를 결정할 수 있습니다. 필요한 경우 웹후크는 웹후크 응답에서 데이터를 JSON 개체로 디바이스에 다시 반환할 수도 있습니다. 자세한 내용은 사용자 지정 할당에서 디바이스 페이로드 사용을 참조하세요.

  • IoT PnP(플러그 앤 플레이) 디바이스는 DPS에 등록할 때 페이로드를 사용하여 모델 ID를 보낼 수 있습니다. SDK 또는 샘플 리포지토리의 PnP 샘플에서 이 사용 예를 찾을 수 있습니다. 예를 들면 C# PnP 온도 조절기 또는 Node.js PnP 온도 조절기입니다.

  • DPS를 통해 연결하는 IoT Central 디바이스는 IoT 플러그 앤 플레이 규칙을 따르고 등록 시 모델 ID를 보내야 합니다. IoT Central은 모델 ID를 사용하여 디바이스를 올바른 디바이스 템플릿에 할당합니다. 자세한 내용은 IoT Central을 위한 디바이스 구현 및 모범 사례를 참조하세요.

디바이스에서 DPS로 데이터 페이로드 전송

디바이스가 DPS에 등록하기 위해 디바이스 등록을 호출할 때 payload 속성에 추가 데이터를 포함할 수 있습니다. 예를 들어, 다음 JSON은 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 } 
} 

payload 속성은 JSON 개체여야 하며 IoT 솔루션 또는 시나리오와 관련된 모든 데이터를 포함할 수 있습니다.

DPS가 디바이스에 데이터 반환

DPS는 등록 응답에서 디바이스로 데이터를 다시 반환할 수 있습니다. 현재 이 기능은 사용자 지정 할당 시나리오에서만 사용됩니다. 사용자 지정 할당 정책 웹후크가 디바이스에 데이터를 반환해야 하는 경우 웹후크 응답에서 데이터를 JSON 개체로 다시 전달할 수 있습니다. 그런 다음 DPS는 디바이스 등록 응답registrationState.payload 속성에서 해당 데이터를 다시 전달합니다. 예를 들어, 다음 JSON은 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 }
   }
}

payload 속성은 JSON 개체여야 하며 IoT 솔루션 또는 시나리오와 관련된 모든 데이터를 포함할 수 있습니다.

SDK 지원

이 기능은 C, C#, JAVA 및 Node.js 클라이언트 SDK에서 사용할 수 있습니다. IoT Hub 및 IoT Hub Device Provisioning 서비스에 사용할 수 있는 Azure IoT SDK에 대해 자세히 알아보려면 Microsoft Azure IoT SDK를 참조하세요.

IoT Edge 지원

버전 1.4부터 IoT Edge는 JSON 파일에 포함된 데이터 페이로드 전송을 지원합니다. 디바이스가 (다시) 등록될 때 페이로드 파일을 읽고 DPS로 전송합니다. 일반적으로 iotedge config apply를 처음 실행할 때 발생합니다. CLI의 다시 프로비전 명령 iotedge system reprovision을 사용하여 다시 읽고 등록하도록 강제할 수도 있습니다.

다음은 payload 속성이 로컬 JSON 파일의 경로로 설정된 /etc/aziot/config.toml의 코드 조각 예입니다.

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

페이로드 파일(이 경우 /home/aziot/payload.json)에는 다음과 같은 유효한 JSON이 포함될 수 있습니다.

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

다음 단계