Skip to Content
Skip to Content
개발자 가이드Model Description Language

MDL (Model Description Language)

MDL은 IoT 장비의 기능을 정의하는 JSON/YAML 기반의 선언적 언어입니다. 장비가 수행할 수 있는 세 가지 핵심 작업을 체계적으로 정의하여, APC 플랫폼이 자동으로 구조화된 사용자 인터페이스를 생성할 수 있도록 합니다.

핵심 개념

MDL은 다음 세 가지 구성 요소로 이루어집니다:

  • Sensors: 장비가 수집하는 데이터
  • Actions: 장비를 제어하는 명령
  • Events: 장비에서 발생하는 알림

개발 권장사항

💡 Best Practice: 펌웨어 개발 전에 MDL을 먼저 정의하는 것을 권장합니다. 이를 통해 명확한 인터페이스 설계가 가능하며, APC 플랫폼의 자동 UI 생성 기능을 최대한 활용할 수 있습니다.


Sensors (센서)

센서는 장비가 주기적으로 수집하여 전송하는 데이터의 최소 단위입니다. 하나의 장비는 여러 개의 센서 데이터를 각기 다른 주기로 전송할 수 있습니다.

공통 속성

모든 센서 타입에 공통으로 적용되는 속성들입니다:

속성타입필수설명
namestring센서의 표시명
typestring데이터 타입 (number, boolean, enum, timestamp, binary, location, array)
descriptionstring센서에 대한 설명
unitstring측정 단위
unitPrefixstring단위 접두사
frequencystring/number데이터 전송 주기

Number Type

숫자 형태의 센서 데이터를 정의합니다.

sensors: ambientTemp: name: 실내온도 type: number description: 실내 온도 측정값 unit: '°C' min: -40 # 설계상 최솟값 max: 125 # 설계상 최댓값 precision: 1 # 센서 정밀도 threshold: 2 # 전송 임계값 (이전 값 대비 절대값) frequency: PT30S # ISO 8601 Duration 형식

주요 속성:

  • min/max: 설계된 범위 (실제 데이터는 이 범위를 초과할 수 있음)
  • precision: 센서의 정밀도
  • threshold: 이전 전송값 대비 이 값 이상 차이날 때만 전송

Boolean Type

참/거짓 형태의 센서 데이터를 정의합니다.

sensors: doorState: name: 문상태 type: boolean description: 문 개폐 상태 trueLabel: '열림' # true일 때 표시될 레이블 falseLabel: '닫힘' # false일 때 표시될 레이블 frequency: 1

Enum Type

미리 정의된 값들 중 하나를 가지는 센서 데이터입니다.

sensors: qualityGrade: name: 품질등급 type: enum description: 제품 품질 등급 values: [A, B, C, D] # 가능한 값들의 배열 frequency: 300

Timestamp Type

시간 정보를 담는 센서 데이터입니다.

sensors: lastReboot: name: 마지막재부팅 type: timestamp description: 마지막 재부팅 시간 format: iso8601 frequency: 0 # 상태성 데이터 (변화 시에만 전송)

Binary Type

바이너리 데이터(이미지, 파일 등)를 다루는 센서입니다.

sensors: snapshot: name: 스냅샷 type: binary description: 카메라 스냅샷 encoding: base64 frequency: 0 # 이벤트 트리거형

Location Type

위치 정보를 다루는 센서입니다.

sensors: gps: name: GPS좌표 type: location description: 장비의 GPS 좌표 format: latlon # 위도/경도 형식 frequency: 10

Actions (액션)

액션은 장비에 명령을 전송하여 특정 동작을 수행하게 하는 기능입니다. 사용자가 인터페이스를 통해 장비를 제어할 수 있도록 합니다.

액션 구조

actions: actionName: name: '표시명' description: '액션에 대한 설명' builder: '실제 전송될 명령어 템플릿' parameters: # 파라미터 정의

단일 파라미터 액션

actions: setTemperature: name: 온도설정 description: 목표 온도를 설정합니다 builder: 'setTemp {targetTemp}' parameters: targetTemp: name: 목표온도 type: number description: 설정할 온도 값 min: 16 max: 30 step: 0.5 unit: '°C'

Select 파라미터

미리 정의된 옵션 중에서 선택하는 파라미터입니다.

actions: setPower: name: 전원제어 description: 장비 전원을 켜거나 끕니다 builder: 'setPower {power}' parameters: power: name: 전원상태 type: select description: 설정할 전원 상태 enumDef: on: '켜기' off: '끄기'

복합 파라미터 액션

여러 개의 파라미터를 가지는 액션입니다.

actions: setRGBLED: name: RGB LED 설정 description: RGB LED의 색상을 설정합니다 builder: 'setLED {R} {G} {B}' parameters: R: name: Red description: 빨간색 값 type: number min: 0 max: 255 step: 1 format: integer G: name: Green description: 녹색 값 type: number min: 0 max: 255 step: 1 format: integer B: name: Blue description: 파란색 값 type: number min: 0 max: 255 step: 1 format: integer

파라미터 타입별 속성

파라미터 타입주요 속성설명
numbermin, max, step, format숫자 입력 제어
selectenumDef선택 옵션 정의

Events (이벤트)

이벤트는 장비에서 발생하는 특별한 상황을 알리는 메시지입니다. 장비의 상태 변화나 알림이 필요한 상황에서 사용됩니다.

events: deviceBoot: name: 장비부팅 message: '장비가 재시작되었습니다' temperatureAlert: name: 온도경고 message: '온도가 임계값을 초과했습니다' connectionLost: name: 연결끊김 message: '네트워크 연결이 끊어졌습니다'

실제 사용 예시

온도 감지 경보기 모델

# 모델: 온도 감지 경보기 sensors: temperature: name: 온도 type: number unit: "°C" min: -20 max: 80 precision: 0.1 threshold: 0.5 frequency: PT30S humidity: name: 습도 type: number unit: "%" min: 0 max: 100 precision: 1 threshold: 2 frequency: PT60S actions: setAlarmThreshold: name: 경보임계값설정 description: 온도 경보 임계값을 설정합니다 builder: "setThreshold {temp}" parameters: temp: name: 임계온도 type: number min: 30 max: 80 step: 1 unit: "°C" events: temperatureAlert: name: 온도경보 message: "온도가 설정된 임계값을 초과했습니다"

조직별 디바이스 인스턴스

  • A 조직: “화재 감지 디바이스1” → APC Link: abc001
  • B 조직: “화재 감지 디바이스2” → APC Link: abc002

각 조직은 동일한 모델을 기반으로 하지만 독립적인 디바이스 인스턴스를 운영할 수 있습니다.

Last updated on