IoT Central에 대한 디바이스 구현 및 모범 사례

이 문서에서는 IoT Central 애플리케이션에 연결하는 디바이스를 구현하는 방법에 대한 정보를 제공합니다. 몇 가지 모범 사례도 포함되어 있습니다. 전체 연결 프로세스에 대해 자세히 알아보려면 디바이스 연결을 참조하세요.

샘플 디바이스 구현 코드는 자습서: Azure IoT Central 애플리케이션에 클라이언트 애플리케이션 생성 및 연결을 참조하세요.

디바이스 구현

IoT Central에 연결하는 디바이스는 IoT 플러그 앤 플레이 규칙을 따라야 합니다. 이러한 규칙 중 하나는 디바이스에서 연결할 때 구현하는 디바이스 모델의 모델 ID를 보내야 한다는 것입니다. 모델 ID를 사용하면 IoT Central 애플리케이션이 디바이스를 올바른 디바이스 템플릿에 할당할 수 있습니다.

IoT Central 디바이스 템플릿에는 해당 유형의 디바이스에서 구현해야 하는 동작을 지정하는 모델이 포함되어 있습니다. 동작에는 원격 분석, 속성 및 명령이 포함됩니다.

각 모델에는 dtmi:com:example:Thermostat;1과 같은 고유한 DTMI(디지털 트윈 모델 식별자)가 있습니다. 디바이스가 IoT Central에 연결되면 해당 디바이스에서 구현하는 모델의 DTMI를 보냅니다. 그러면 IoT Central에서 올바른 디바이스 템플릿을 디바이스에 할당할 수 있습니다.

IoT 플러그 앤 플레이는 디바이스에서 DTDL(Digital Twin Definition Language) 모델을 구현할 때 따라야 하는 규칙 세트를 정의합니다.

Azure IoT 디바이스 SDK에는 IoT 플러그 앤 플레이 규칙에 대한 지원이 포함되어 있습니다.

디바이스 모델

디바이스 모델은 DTDL V2 모델링 언어를 사용하여 정의됩니다. 이 언어를 사용하여 다음을 정의할 수 있습니다.

  • 디바이스에서 보내는 원격 분석. 정의에는 원격 분석의 이름 및 데이터 형식이 포함됩니다. 예를 들어 디바이스는 온도 원격 분석을 double 형식으로 보냅니다.
  • 디바이스에서 IoT Central에 보고하는 속성. 속성 정의에는 해당 이름 및 데이터 형식이 포함됩니다. 예를 들어 디바이스는 밸브의 상태를 부울 형식으로 보고합니다.
  • 디바이스에서 IoT Central로부터 받을 수 있는 속성. 필요에 따라 속성을 쓰기 가능으로 표시할 수 있습니다. 예를 들어 IoT Central은 대상 온도를 double 형식으로 디바이스에 보냅니다.
  • 디바이스에서 응답하는 명령. 정의에는 명령 이름과 매개 변수의 이름 및 데이터 형식이 포함됩니다. 예를 들어 디바이스는 다시 부팅하기 전에 대기하는 시간(초)을 지정하는 다시 부팅 명령에 응답합니다.

참고 항목

IoT Central은 DTDL v2 언어에 대한 일부 확장을 정의합니다. 자세한 내용은 IoT Central 확장을 참조하세요.

DTDL 모델은 구성 요소가 없는 모델 또는 다중 구성 요소 모델일 수 있습니다.

  • 구성 요소가 없는 모델: 단순 모델은 포함된 구성 요소 또는 계단식 구성 요소를 사용하지 않습니다. 모든 원격 분석, 속성 및 명령은 단일 루트 구성 요소로 정의됩니다. 예제는 자동 온도 조절기 모델을 참조하세요.
  • 다중 구성 요소 모델: 둘 이상의 구성 요소가 포함된 더 복잡한 모델입니다. 이러한 구성 요소에는 단일 루트 구성 요소 및 하나 이상의 중첩 구성 요소가 포함됩니다. 예제는 온도 조절기 모델을 참조하세요.

IoT Central 디바이스 템플릿에서 전체 디바이스 모델 또는 개별 인터페이스를 DTDL v2 파일로 가져오고 내보낼 수 있습니다.

디바이스 모델에 대해 자세히 알아보려면 IoT 플러그 앤 플레이 모델링 가이드를 참조하세요.

규칙

디바이스는 IoT Central과 데이터를 교환할 때 IoT 플러그 앤 플레이 규칙을 따라야 합니다. 규칙은 다음과 같습니다.

  • IoT Central에 연결되면 DTMI를 보냅니다.
  • 올바른 형식의 JSON 페이로드 및 메타데이터를 IoT Central에 보냅니다.
  • IoT Central의 쓰기 가능 속성 및 명령에 올바르게 응답합니다.
  • 구성 요소 명령에 대한 명명 규칙을 따릅니다.

참고 항목

현재 IoT Central은 DTDL 배열지리 공간적 데이터 형식을 완전히 지원하지 않습니다.

IoT 플러그 앤 플레이 규칙에 대한 자세한 내용은 IoT 플러그 앤 플레이 규칙을 참조하세요.

디바이스에서 IoT Central과 교환하는 JSON 메시지의 형식에 대한 자세한 내용은 원격 분석, 속성 및 명령 페이로드를 참조하세요.

디바이스 SDK

Azure IoT 디바이스 SDK 중 하나를 사용하여 디바이스의 동작을 구현할 수 있습니다. 코드는 다음을 수행해야 합니다.

  • IoT Central 애플리케이션에서 디바이스를 DPS에 등록하고 DPS의 정보를 사용하여 내부 IoT 허브에 연결합니다.
  • 디바이스에서 구현하는 모델의 DTMI를 알립니다.
  • 원격 분석을 디바이스 모델에서 지정하는 형식으로 보냅니다. IoT Central은 디바이스 템플릿의 모델을 사용하여 원격 분석을 시각화 및 분석에 사용하는 방법을 결정합니다.
  • 디바이스와 IoT Central 간에 속성 값을 동기화합니다. 모델은 IoT Central에서 정보를 표시할 수 있도록 속성 이름과 데이터 형식을 지정합니다.
  • 모델에 지정된 명령에 대한 명령 처리기를 구현합니다. 모델은 디바이스에서 사용해야 하는 명령 이름과 매개 변수를 지정합니다.

디바이스 템플릿의 역할에 대한 자세한 내용은 디바이스 템플릿이란?을 참조하세요.

다음 표에는 Azure IoT Central 디바이스 기능이 IoT Hub 기능에 매핑되는 방식이 요약되어 있습니다.

Azure IoT Central Azure IoT Hub
원격 디바이스-클라우드 메시지
오프라인 명령 클라우드-디바이스 메시징
속성 디바이스 쌍 reported 속성
속성(쓰기 가능) 디바이스 쌍 desired 및 reported 속성
명령 직접 메서드

통신 프로토콜

디바이스에서 IoT Central에 연결하는 데 사용할 수 있는 통신 프로토콜은 MQTT, AMQP 및 HTTPS입니다. 내부적으로 IoT Central은 디바이스를 연결하기 위해 IoT 허브를 사용합니다. IoT Hub가 디바이스 연결에 대해 지원하는 통신 프로토콜에 대한 자세한 내용은 통신 프로토콜 선택을 참조하세요.

디바이스에서 지원되는 프로토콜을 사용할 수 없는 경우 Azure IoT Edge를 사용하여 프로토콜 변환을 수행합니다. IoT Edge는 Azure IoT Central 애플리케이션에서 처리를 오프로드하는 다른 intelligence-on-the-edge(에지의 인텔리전스) 시나리오를 지원합니다.

원격 분석 타임스탬프

기본적으로 IoT Central은 대시보드 및 차트에 원격 분석을 표시할 때 큐에 추가된 메시지 시간을 사용합니다. 큐에 추가된 메시지 시간은 IoT Central이 디바이스에서 메시지를 수신할 때 내부적으로 설정됩니다.

디바이스는 IoT Central로 보낼 메시지를 만들 때 iothub-creation-time-utc 속성을 설정할 수 있습니다. 이 속성이 있는 경우 IoT Central은 대시보드 및 차트에 원격 분석을 표시할 때 사용합니다.

IoT Central 애플리케이션에서 원격 분석을 내보낼 때 큐에 추가된 시간과 iothub-creation-time-utc 속성을 모두 내보낼 수 있습니다.

메시지 속성에 대한 자세한 내용은 디바이스-클라우드 IoT Hub 메시지의 시스템 속성을 참조하세요.

모범 사례

이러한 권장 사항은 디바이스를 구현하여 IoT Central의 기본 제공 고가용성, 재해 복구 및 자동 크기 조정을 활용하는 방법을 보여줍니다.

연결 실패 처리

확장 또는 재해 복구를 위해 IoT Central은 기본 IoT 허브를 업데이트할 수 있습니다. 연결을 유지하려면 디바이스 코드가 새 IoT Hub 엔드포인트에 대한 연결을 설정하여 특정 연결 오류를 처리해야 합니다.

디바이스 연결 시 다음 오류 중 하나가 발생하면 디바이스를 DPS로 다시 프로비전하여 새 연결 문자열을 가져와야 합니다. 이러한 오류는 연결 문자열이 더 이상 유효하지 않음을 의미합니다.

  • 연결할 수 없는 IoT Hub 엔드포인트입니다.
  • 만료된 보안 토큰입니다.
  • IoT Hub에서 디바이스를 사용할 수 없습니다.

디바이스에서 연결할 때 다음 오류가 발생하는 경우 백오프 전략을 사용하여 연결을 다시 시도해야 합니다. 이러한 오류는 연결 문자열이 여전히 유효하지만 일시적인 조건으로 인해 디바이스 연결이 중지됨을 의미합니다.

  • 운영자 차단 디바이스.
  • 서비스의 내부 오류 500.

디바이스 오류 코드에 대해 자세히 알아보려면 디바이스 연결 문제 해결을 참조하세요.

자동 다시 연결을 구현하는 방법에 대한 자세한 내용은 복원력 있는 애플리케이션을 만들기 위해 디바이스 다시 연결 관리를 참조하세요.

테스트 장애 조치 기능

Azure CLI를 사용하여 디바이스 코드의 장애 조치(failover) 기능을 테스트할 수 있습니다. CLI 명령은 장치 등록을 일시적으로 다른 내부 IoT hub로 전환하는 방식으로 작동합니다. 디바이스 장애 조치(failover)가 작동했는지 확인하려면 디바이스가 여전히 원격 분석을 보내고 명령에 응답하고 있는지 확인합니다.

장치에 대한 장애 조치 테스트를 실행하려면 다음 명령을 실행합니다.

az iot central device manual-failover \
    --app-id {Application ID of your IoT Central application} \
    --device-id {Device ID of the device you're testing} \
    --ttl-minutes {How to wait before moving the device back to it's original IoT hub}

애플리케이션 ID를 찾으려면 IoT Central 애플리케이션에서 애플리케이션 > 관리로 이동합니다.

명령이 성공하면 다음 예제와 유사한 출력이 표시됩니다.

Command group 'iot central device' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "hubIdentifier": "6bd4...bafa",
  "message": "Success! This device is now being failed over. You can check your device'’'s status using 'iot central device registration-info' command. The device will revert to its original hub at Tue, 18 May 2021 11:03:45 GMT. You can choose to failback earlier using device-manual-failback command. Learn more: https://aka.ms/iotc-device-test"
}

CLI 명령에 대해 자세히 알아보려면 az iot central device manual-failover를 참조하세요.

이제 디바이스의 원격 분석이 여전히 IoT Central 애플리케이션에 도달하는지 확인할 수 있습니다.

다양한 프로그래밍 언어에서 장애 조치(failover)를 처리하는 샘플 디바이스 코드를 보려면 IoT Central 고가용성 클라이언트를 참조하세요.

다음 단계

몇 가지 제안되는 다음 단계는 다음과 같습니다.