Policy profile

디바이스 트윈을 통해 전달되는 Policy profile 을 처리하는 방법을 설명합니다. 서버 투 서버 인터페이스 방식에서는 사용되지 않으며, IoT hub 를 통할 때만 활용할 수 있는 기능입니다.

디바이스 트윈이란

디바이스 트윈 데이터

디바이스 트윈은 디바이스의 상태나 서버와 주고 받을 수 있는 메타 정보들을 모두 저장하고 있습니다.

  • 디바이스 트윈 예시

{
    "deviceId": "aaa",
    "etag": "AAAAAAAAAAY=",
    "deviceEtag": "Nzg3MzM1OTQ=",
    "status": "enabled",
    "statusUpdateTime": "0001-01-01T00:00:00Z",
    "connectionState": "Connected",
    "lastActivityTime": "2021-05-12T00:56:43.0412162Z",
    "cloudToDeviceMessageCount": 0,
    "authenticationType": "sas",
    "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
    },
    "modelId": "",
    "version": 56,
    "properties": {
        "desired": {
            "policy": {
                "ver": {
                    "maj": 1,
                    "mnr": 1
                },
                "fw": 1.5,
                "brate": 9600,
                "sec": 120,
                "devices": {
                }
            }
        },
        "reported": {
          ...
        }
        ...
    }
}

Policy profile

Policy profile 은 서버에서 IoT 디바이스가 동작하는 방법을 정의할 수 있는 체계입니다. Policy profile 은 디지털 트윈에 저장된 후 IoT hub 의 디바이스 트윈 기능을 통해 IoT 디바이스에 전달 될 수 있습니다.

디바이스 트윈에는 다른 정보들이 많이 저장되어 있는데, 이중 policy profile 로 사용되는 곳은 properties.desired.policy 입니다.

  • Policy profile 의 기본 구조

"desired": {
    "policy": {
        "ver": {
            "maj": 1,
            "mnr": 0
        },
        "fw": 1.0,
        "brate": 9600,
        "sec": 120,
        "devices": {
        }
    }
}

각 필드에 대한 설명은 아래와 같습니다.

devices 필드 값을 사용하는 방법

  • Policy profile 예시

"desired": {
    "policy": {
        "ver": {
            "maj": 1,
            "mnr": 0
        },
        "fw": 1.0,
        "brate": 9600,
        "sec": 120,
        "devices": {
          "sensor1": {
            "idx": 0
          },
          "sensor2": {
            "idx": 1
          }
        }
    }
}

예시에는 devices 아래에 2개의 JSON 객체 "sensor1" 과 "sensor2" 가 있습니다. 각각 idx 라는 필드를 갖고 있으며, idx 필드는 같은 policy profile 내에서 배열에 인덱싱하듯 0부터 시작하는 정수로 순서대로 지정됩니다.

펌웨어는 이 설정으로 2개의 IoT 디바이스 데이터를 만들어야 합니다.

{
  "serviceId": "1",
  "deviceId": "sensor1",
  ...
  "contents": {
  ...
  }
}
{
  "serviceId": "1",
  "deviceId": "sensor2",
  ...
  "contents": {
  ...
  }
}

Policy profile 의 sec 주기 마다 위 2개의 데이터를 각각 센서들로부터 얻어서 독립적으로 서버로 전송해야 합니다. 그리고 devices 아래에 있는 sensor1, sensor2 는 각각 deviceId 로 사용합니다.

MODBUS 네트워크가 구성되어 있고 단일 IoT 디바이스로 전체 네트워크에 엑세스 해서 데이터를 얻는 경우 개별 설비 별로 데이터 원천을 명확히 구분을 해야 그랜드뷰에서 제대로 데이터를 활용할 수 있습니다. 이와 같은 경우 devices 필드로 데이터 원천을 구분합니다.

sec 필드

sec 필드는 펌웨어 입장에서는 단순히 타이머를 기다리거나 sleep() 할 수 있는 값이지만, 전체 서비스 관점에서는 데이터를 수집하는 주기를 뜻합니다. 이 데이터 수집 주기는 사업적인 의사결정 통해 지정이 되는 부분으로, 아래 문서에서 더 자세한 내용을 확인하기 바랍니다.

Last updated