디바이스 템플릿이란?

Azure IoT Central에서 디바이스 템플릿은 애플리케이션에 연결하는 디바이스 유형의 특징과 동작을 정의하는 청사진입니다. 예를 들어 디바이스 템플릿은 IoT Central이 올바른 단위와 데이터 형식을 사용하는 시각화를 만들 수 있도록 디바이스에서 보내는 원격 분석 데이터를 정의합니다.

솔루션 빌더는 IoT Central 애플리케이션에 디바이스 템플릿을 추가합니다. 디바이스 개발자는 디바이스 템플릿에 정의된 동작을 구현하는 디바이스 코드를 작성합니다. 디바이스에서 IoT Central과 교환하는 데이터에 대한 자세한 내용은 원격 분석, 속성 및 명령 페이로드를 참조하세요.

디바이스 템플릿에는 다음과 같은 섹션이 포함됩니다.

  • 디바이스 모델. 디바이스 템플릿의 이 부분은 디바이스가 애플리케이션과 상호 작용하는 방법을 정의합니다. 모든 디바이스 모델에는 고유한 ID가 있습니다. 디바이스 개발자는 모델에 정의된 동작을 구현합니다.
    • 루트 구성 요소. 모든 디바이스 모델에는 루트 구성 요소가 있습니다. 루트 구성 요소의 인터페이스는 디바이스 모델과 관련된 기능을 설명합니다.
    • 구성 요소. 디바이스 모델에는 디바이스 기능을 설명하는 루트 구성 요소 외의 구성 요소가 포함될 수 있습니다. 각 구성 요소에는 해당 구성 요소의 기능을 설명하는 인터페이스가 있습니다. 구성 요소 인터페이스는 다른 디바이스 모델에서 재사용할 수 있습니다. 예를 들어 여러 전화 디바이스 모델에서 동일한 카메라 인터페이스를 사용할 수 있습니다.
    • 상속된 인터페이스. 디바이스 모델에는 루트 구성 요소의 기능을 확장하는 인터페이스가 하나 이상 포함되어 있습니다.
  • 보기. 솔루션 개발자는 디바이스 템플릿의 이 부분을 통해 디바이스에서 데이터를 보기 위한 시각화를 정의하고, 디바이스를 관리 및 제어하기 위한 양식을 정의할 수 있습니다. 보기는 디바이스 개발자가 디바이스 모델을 구현하기 위해 작성하는 코드에 영향을 주지 않습니다.

디바이스 템플릿에 디바이스 할당

디바이스가 IoT Central과 상호 작용하려면 디바이스 템플릿에 할당해야 합니다. 이 할당은 다음 네 가지 방법 중 하나로 수행됩니다.

  • 디바이스 페이지에서 디바이스를 등록할 때 디바이스에서 사용해야 하는 템플릿을 식별할 수 있습니다.
  • 디바이스 목록을 대량으로 가져올 때 목록의 모든 디바이스에서 사용해야 하는 디바이스 템플릿을 선택할 수 있습니다.
  • 연결한 후 할당되지 않은 디바이스를 디바이스 템플릿에 수동으로 할당할 수 있습니다.
  • 디바이스가 애플리케이션에 처음 연결할 때 모델 ID를 전송하여 디바이스 템플릿에 디바이스를 자동으로 할당할 수 있습니다.

자동 할당

디바이스가 연결되면 IoT Central에서 디바이스를 디바이스 템플릿에 자동으로 할당할 수 있습니다. 디바이스는 연결할 때 모델 ID를 보내야 합니다. IoT Central은 모델 ID를 사용하여 해당 특정 디바이스 모델에 대한 디바이스 템플릿을 식별합니다. 검색 프로세스는 다음과 같이 작동합니다.

  1. 디바이스 템플릿이 IoT Central 애플리케이션에 이미 게시된 경우 디바이스가 디바이스 템플릿에 할당됩니다.

  2. 디바이스 템플릿이 IoT Central 애플리케이션에 아직 게시되지 않은 경우 IoT Central은 공용 디바이스 모델 리포지토리에서 디바이스 모델을 찾습니다. IoT Central에서 모델을 찾으면 이를 사용하여 기본 디바이스 템플릿을 생성합니다.

  3. IoT Central에서 퍼블릭 모델 리포지토리에 있는 모델을 찾을 수 없는 경우 디바이스가 할당 안됨으로 표시됩니다. 운영자는 다음을 수행할 수 있습니다.

    • 디바이스에 대한 디바이스 템플릿을 만든 다음, 할당되지 않은 디바이스를 새 디바이스 템플릿으로 마이그레이션합니다.
    • 디바이스에서 보내는 데이터를 기반으로 디바이스 템플릿을 자동으로 생성합니다.

다음 스크린샷에서는 IoT Central에서 디바이스 템플릿의 모델 ID를 표시하는 방법을 보여 줍니다. 디바이스 템플릿에서 구성 요소를 선택한 다음, ID 편집을 선택합니다.

자동 온도 조절기 디바이스 템플릿의 모델 ID를 보여 주는 스크린샷

퍼블릭 모델 리포지토리에서 자동 온도 조절기 모델을 볼 수 있습니다. 모델 ID 정의는 다음과 같습니다.

"@id": "dtmi:com:example:Thermostat;1"

다음 DPS 페이로드를 사용하여 디바이스 템플릿에 디바이스를 할당합니다.

{
  "modelId":"dtmi:com:example:TemperatureController;2"
}

DPS 페이로드에 대해 자세히 알아보려면 자습서: 클라이언트 애플리케이션을 만들어 Azure IoT Central 애플리케이션에 연결에서 사용되는 샘플 코드를 참조하세요.

디바이스 모델

디바이스 모델은 디바이스가 IoT Central 애플리케이션과 상호 작용하는 방식을 정의합니다. 디바이스 개발자는 IoT Central이 디바이스를 모니터링하고 관리할 수 있도록 디바이스 모델에 정의된 동작을 디바이스가 구현하는지 확인해야 합니다. 디바이스 모델은 하나 이상의 인터페이스로 구성되며 각 인터페이스는 원격 분석 유형, 디바이스 속성명령의 컬렉션을 정의할 수 있습니다. 솔루션 개발자는 다음 작업을 수행할 수 있습니다.

  • 전체 디바이스 모델 또는 개별 인터페이스를 정의하는 JSON 파일을 디바이스 템플릿으로 가져옵니다.
  • IoT Central의 웹 UI를 사용하여 디바이스 모델을 만들거나 편집합니다.

참고 항목

IoT Central은 디바이스에서 유효한 JSON 페이로드를 허용하지만 디바이스 모델의 정의와 일치하는 경우에만 시각화에 데이터를 사용할 수 있습니다. 정의와 일치하지 않는 데이터를 내보낼 수 있습니다. Blob Storage를 사용하여 IoT 데이터를 클라우드 대상으로 내보내기를 참조하세요.

디바이스 모델 수정에 대한 자세한 내용은 기존 디바이스 템플릿 편집을 참조하세요.

솔루션 개발자는 전체 디바이스 모델 또는 개별 인터페이스가 포함된 디바이스 템플릿에서 JSON 파일을 내보낼 수도 있습니다. 디바이스 개발자는 이 JSON 문서를 사용하여 디바이스가 IoT Central 애플리케이션과 통신하는 방법을 이해할 수 있습니다.

디바이스 모델을 정의하는 JSON 파일은 DTDL(디지털 트윈 정의 언어) V2를 사용합니다. IoT Central에는 별도의 파일이 아닌 인라인으로 인터페이스가 정의된 디바이스 모델을 포함하는 JSON 파일이 필요합니다. IoT Central에서 만든 모델에는 IoT Central에서 모델이 생성되었음을 나타내는 컨텍스트 dtmi:iotcentral:context;2가 정의되어 있습니다.

"@context": [
  "dtmi:iotcentral:context;2",
  "dtmi:dtdl:context;2"
]

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

참고 항목

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

속성

기본적으로 속성은 읽기 전용입니다. 읽기 전용 속성은 디바이스가 IoT Central 애플리케이션에 대한 속성 값 업데이트를 보고한다는 것을 의미합니다. IoT Central 애플리케이션에서는 읽기 전용 속성 값을 설정할 수 없습니다.

또한 인터페이스에서 속성을 쓰기 가능으로 표시할 수도 있습니다. 디바이스는 IoT Central 애플리케이션에서 쓰기 가능한 속성에 대한 업데이트를 수신하고 애플리케이션에 대한 속성 값 업데이트를 보고할 수 있습니다.

속성 값을 설정하기 위해 디바이스를 연결할 필요가 없습니다. 업데이트된 값은 다음 번에 디바이스가 애플리케이션에 연결될 때 전송됩니다. 이 동작은 읽기 전용 및 쓰기 가능 속성 모두에 적용됩니다.

디바이스에서 원격 분석 데이터를 전송하기 위해 속성을 사용하지 마세요. 예를 들어 temperatureSetting=80과 같은 읽기 전용 속성은 디바이스 온도가 80으로 설정되어 있고 디바이스가 이 온도에 도달하거나 이 온도를 유지하려고 하는 것을 의미합니다.

쓰기 가능 속성의 경우 디바이스 애플리케이션은 속성 값을 수신하여 적용했는지 여부를 나타내는 데 필요한 상태 코드, 버전 및 설명을 반환합니다.

클라우드 속성

모델의 루트 구성 요소에 클라우드 속성을 추가할 수도 있습니다. 클라우드 속성을 사용하면 IoT Central 애플리케이션에 저장할 디바이스 메타데이터를 지정할 수 있습니다. 클라우드 속성 값은 IoT Central 애플리케이션에 저장되며 디바이스와 동기화되지 않습니다. 클라우드 속성은 디바이스 개발자가 디바이스 모델을 구현하기 위해 작성하는 코드에 영향을 주지 않습니다.

솔루션 개발자는 디바이스 속성과 함께 디바이스 보기 및 양식에 클라우드 속성을 추가하여 운영자가 애플리케이션에 연결된 디바이스를 관리할 수 있도록 합니다. 또한 솔루션 개발자는 규칙 정의의 일부로 클라우드 속성을 사용하여 운영자가 임계값을 편집할 수 있도록 만들 수 있습니다.

다음 DTDL 코드 조각은 클라우드 속성 정의 예제를 보여 줍니다.

{
    "@id": "dtmi:azureiot:Thermostat:CustomerName",
    "@type": [
        "Property",
        "Cloud",
        "StringValue"
    ],
    "displayName": {
        "en": "Customer Name"
    },
    "name": "CustomerName",
    "schema": "string"
}

원격

IoT Central을 사용하면 디바이스 보기 및 차트에서 원격 분석 데이터를 볼 수 있으며 임계값에 도달하면 규칙을 사용하여 작업을 트리거할 수 있습니다. IoT Central은 데이터 형식, 단위 및 표시 이름과 같은 디바이스 모델의 정보를 사용하여 원격 분석 값을 표시하는 방법을 결정합니다. 애플리케이션 및 프라이빗 대시보드에 원격 분석 값을 표시할 수도 있습니다.

IoT Central 데이터 내보내기 기능을 사용하여 스토리지 또는 Event Hubs 같은 다른 대상으로 원격 분석 데이터를 스트리밍할 수 있습니다.

명령

명령은 기본적으로 30초 이내에 실행해야 하며, 명령이 도착하면 디바이스를 연결해야 합니다. 디바이스가 시간 내에 응답하거나 디바이스가 연결되지 않은 경우 명령이 실패합니다.

명령에는 요청 매개 변수를 사용할 수 있으며 응답을 반환할 수 있습니다.

오프라인 명령

디바이스가 현재 오프라인 상태인 경우 디바이스 템플릿의 명령에 대해 오프라인 상태인 경우 큐 옵션을 사용하도록 설정하여 큐 명령을 선택할 수 있습니다.

오프라인 명령은 솔루션에서 디바이스로의 단방향 알림입니다. 오프라인 명령은 요청 매개 변수를 포함할 수 있지만 응답을 반환하지 않습니다.

참고 항목

오프라인 명령은 모델을 DTDL로 내보내는 것처럼 durable로 표시됩니다.

오프라인 명령은 IoT Hub 클라우드-디바이스 메시지를 사용하여 명령 및 페이로드를 디바이스로 보냅니다.

디바이스가 수신하는 메시지의 페이로드는 매개 변수의 원시 값입니다. method-name이라는 사용자 지정 속성은 IoT Central 명령의 이름을 저장합니다. 다음 표에서는 몇 가지 페이로드 예를 보여줍니다.

IoT Central 요청 스키마 디바이스에서 받은 페이로드 예
요청 매개 변수 없음 @
두 배 1.23
문자열 sample string
Object {"StartTime":"2021-01-05T08:00:00.000Z","Bank":2}

디바이스 모델의 다음 코드 조각은 명령의 정의를 보여 줍니다. 명령에는 datetime 필드와 열거형이 포함된 개체 매개 변수가 있습니다.

{
  "@type": "Command",
  "displayName": {
    "en": "Generate Diagnostics"
  },
  "name": "GenerateDiagnostics",
  "request": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "Payload"
    },
    "name": "Payload",
    "schema": {
      "@type": "Object",
      "displayName": {
        "en": "Object"
      },
      "fields": [
        {
          "displayName": {
            "en": "StartTime"
          },
          "name": "StartTime",
          "schema": "dateTime"
        },
        {
          "displayName": {
            "en": "Bank"
          },
          "name": "Bank",
          "schema": {
            "@type": "Enum",
            "displayName": {
              "en": "Enum"
            },
            "enumValues": [
              {
                "displayName": {
                  "en": "Bank 1"
                },
                "enumValue": 1,
                "name": "Bank1"
              },
              {
                "displayName": {
                  "en": "Bank2"
                },
                "enumValue": 2,
                "name": "Bank2"
              },
              {
                "displayName": {
                  "en": "Bank3"
                },
                "enumValue": 3,
                "name": "Bank3"
              }
            ],
            "valueSchema": "integer"
          }
        }
      ]
    }
  }
}

이전 코드 조각의 명령에 대한 디바이스 템플릿 UI에서 오프라인인 경우 큐에 넣기 옵션을 사용하도록 설정하면 디바이스에서 수신하는 메시지에는 다음 속성이 포함됩니다.

Property name 예제 값
custom_properties {'method-name': 'GenerateDiagnostics'}
data {"StartTime":"2021-01-05T08:00:00.000Z","Bank":2}

솔루션 개발자는 운영자가 연결된 디바이스를 모니터링하고 관리할 수 있는 보기를 만듭니다. 보기는 디바이스 템플릿의 일부이므로 특정 디바이스 유형과 보기가 연결됩니다. 보기에는 다음이 포함될 수 있습니다.

  • 원격 분석 데이터를 그리는 차트
  • 읽기 전용 디바이스 속성을 표시하는 타일
  • 운영자가 쓰기 가능한 디바이스 속성을 편집할 수 있는 타일
  • 운영자가 클라우드 속성을 편집할 수 있는 타일
  • 페이로드를 필요로 하는 명령을 포함하여 운영자가 명령을 호출할 수 있는 타일
  • 레이블, 이미지 또는 markdown 텍스트를 표시하는 타일

다음 단계

이제 디바이스 템플릿에 대해 배웠으므로 제안된 다음 단계는 디바이스가 IoT Central과 교환하는 데이터에 대해 자세히 알아보기 위해 원격 측정, 속성 및 명령 페이로드를 읽는 것입니다.