파서

파서를 사용하여 수신된 원시 데이터를 구조화된 형태로 변환할 수 있습니다.

파서 관리 페이지

파서 목록

파서 목록에서 등록된 파서들을 확인하고 관리할 수 있습니다.

항목설명
파서 이름파서의 고유 이름
설명파서에 대한 설명
타임아웃파서 실행 제한 시간 (ms)
상태활성화/비활성화 상태
수정일마지막 수정 날짜

파서 생성

파서 생성 버튼을 클릭하여 새로운 파서를 생성합니다.

파서 생성 페이지

기본 정보

항목설명
파서 이름파서의 고유 이름 (예: HEX 센서 파서)
설명파서에 대한 설명

타임아웃 설정

타임아웃은 파서 스크립트의 최대 실행 시간을 제한합니다. 무한 루프나 과도하게 복잡한 연산으로 인해 시스템이 멈추는 것을 방지합니다.

항목
기본값1000ms (1초)
최소값100ms
최대값10000ms (10초)

파싱 실패 시 동작

타임아웃 초과 또는 스크립트 에러 발생 시:

  1. 파서 실행이 즉시 중단됩니다
  2. 원본 데이터가 그대로 저장됩니다
  3. _parser_error 필드가 추가되어 에러 메시지가 기록됩니다
실패 원인에러 메시지 예시
타임아웃Execution timeout (1000ms)
문법 에러SyntaxError: Unexpected token
런타임 에러TypeError: Cannot read property 'x' of undefined
참조 에러ReferenceError: undefinedVar is not defined
JSON

파싱이 실패해도 원본 데이터는 보존됩니다. _parser_error 필드를 확인하여 파싱 실패 여부와 원인을 알 수 있습니다.

타임아웃 설정 가이드

  • 단순 데이터 변환: 기본값 1000ms면 충분합니다
  • 복잡한 연산: 필요에 따라 2000~5000ms로 설정합니다
  • 대용량 데이터 처리: 최대 10000ms까지 설정 가능하나, 가급적 파서 로직을 최적화하는 것을 권장합니다

파서 스크립트 작성

파서는 JavaScript 문법을 사용합니다. parse(input) 함수를 정의하여 데이터를 변환합니다.

JavaScript

입력 파라미터

  • input.deviceId: 장치 ID
  • input.data: 수신된 원시 데이터

반환 값

파싱된 데이터 객체를 반환합니다. 반환된 객체의 각 필드가 저장됩니다.


내장 함수 레퍼런스

파서 스크립트에서 사용할 수 있는 내장 함수와 객체입니다.

console

디버깅을 위한 로그 출력 함수입니다. 출력 내용은 테스트 실행 시 Console 영역에 표시됩니다.

JavaScript

Buffer

바이너리 데이터를 파싱하기 위한 클래스입니다. Node.js의 Buffer API와 호환됩니다.

Buffer 생성

JavaScript

정수 읽기

메서드설명바이트
readUInt8(offset)부호 없는 8비트 정수1
readInt8(offset)부호 있는 8비트 정수1
readUInt16BE(offset)부호 없는 16비트 정수 (Big Endian)2
readUInt16LE(offset)부호 없는 16비트 정수 (Little Endian)2
readInt16BE(offset)부호 있는 16비트 정수 (Big Endian)2
readInt16LE(offset)부호 있는 16비트 정수 (Little Endian)2
readUInt32BE(offset)부호 없는 32비트 정수 (Big Endian)4
readUInt32LE(offset)부호 없는 32비트 정수 (Little Endian)4
readInt32BE(offset)부호 있는 32비트 정수 (Big Endian)4
readInt32LE(offset)부호 있는 32비트 정수 (Little Endian)4

Big Endian vs Little Endian: 바이트 순서를 나타냅니다. 센서 데이터시트를 확인하여 올바른 엔디안을 선택하세요. 대부분의 네트워크 프로토콜은 Big Endian을 사용합니다.

실수 읽기

메서드설명바이트
readFloatBE(offset)32비트 부동소수점 (Big Endian)4
readFloatLE(offset)32비트 부동소수점 (Little Endian)4
readDoubleBE(offset)64비트 부동소수점 (Big Endian)8
readDoubleLE(offset)64비트 부동소수점 (Little Endian)8

기타 메서드

JavaScript

Buffer 사용 예제

JavaScript

Checksum

CRC 체크섬을 계산하기 위한 유틸리티 객체입니다.

CRC16

JavaScript
파라미터설명기본값
bytesBuffer 또는 바이트 배열(필수)
poly다항식0x1021
init초기값0xFFFF

CRC32

JavaScript
파라미터설명기본값
bytesBuffer 또는 바이트 배열(필수)
poly다항식0xEDB88320
init초기값0xFFFFFFFF

Checksum 사용 예제

JavaScript

실전 예제

예제 1: 간단한 JSON 변환

수신 데이터의 필드명을 변경하고 단위를 변환합니다.

JavaScript

테스트 데이터:

JSON

예제 2: HEX 센서 데이터 파싱

LoRaWAN 센서에서 전송된 HEX 데이터를 파싱합니다.

JavaScript

테스트 데이터:

JSON

예제 3: 조건부 파싱

메시지 타입에 따라 다른 방식으로 파싱합니다.

JavaScript

예제 4: 커스텀 함수 활용

커스텀 함수를 사용하여 코드를 재사용합니다.

커스텀 함수 (celsiusToFahrenheit):

JavaScript

커스텀 함수 (parseTemperature):

JavaScript

파서 스크립트:

JavaScript

테스트 실행

스크립트 작성 후 테스트 실행 버튼으로 파서를 테스트할 수 있습니다.

파서 생성 페이지 하단에는 세 개의 영역이 있습니다:

영역설명
테스트 데이터파서에 입력할 테스트 JSON 데이터를 작성합니다
Output파서 실행 결과 (반환된 객체)가 표시됩니다
Consoleconsole.log() 등의 디버깅 출력이 표시됩니다

테스트 방법

  1. 테스트 데이터 영역에 테스트할 JSON 데이터를 입력합니다
  2. 테스트 실행 버튼을 클릭합니다
  3. Output 영역에서 파싱 결과를, Console 영역에서 디버깅 로그를 확인합니다
JSON

테스트 실행은 실제 데이터를 저장하지 않습니다. 스크립트가 올바르게 동작하는지 확인하는 용도로만 사용됩니다.


커스텀 함수

커스텀 함수란?

커스텀 함수는 여러 파서에서 공통으로 사용할 수 있는 재사용 가능한 함수입니다.

왜 필요한가요?

  • 코드 재사용: 동일한 변환 로직을 여러 파서에서 반복 작성할 필요 없이, 한 번 정의하고 여러 곳에서 호출할 수 있습니다
  • 유지보수 용이: 변환 로직이 변경되면 커스텀 함수만 수정하면 모든 파서에 자동 반영됩니다
  • 모듈화: 복잡한 파싱 로직을 작은 단위의 함수로 분리하여 관리할 수 있습니다
커스텀 함수 관리 페이지

커스텀 함수 생성

커스텀 함수 버튼을 클릭하여 커스텀 함수 관리 페이지로 이동한 후, 함수 생성 버튼을 클릭합니다.

커스텀 함수 생성
항목설명
함수명함수의 고유 이름
설명함수에 대한 설명

함수 작성

커스텀 함수는 화살표 함수 형태로 작성합니다.

JavaScript

다양한 파라미터 타입

커스텀 함수는 숫자, 문자열, 객체, 배열 등 다양한 타입의 파라미터를 받을 수 있습니다.

JavaScript
파라미터 타입예시설명
숫자25, 3.14정수, 소수점 숫자
문자열"hello", "센서A"텍스트 데이터
객체{ value: 10, unit: "°C" }키-값 쌍의 데이터
배열[1, 2, 3], ["a", "b"]순서가 있는 데이터 목록
불리언true, false참/거짓 값

파라미터 개수도 자유롭게

JavaScript

파서에서 커스텀 함수 사용

파서 스크립트에서 utils.{함수명}(args...) 형태로 커스텀 함수를 호출할 수 있습니다.

JavaScript

장치에 파서 적용

파서를 장치에 적용하는 방법은 두 가지가 있습니다.

방법 1: 장치 테이블에서 바로 설정

가장 빠른 방법입니다.

  1. 장치 메뉴로 이동
  2. 장치 목록의 파서 컬럼에서 버튼을 클릭
  3. 드롭다운에서 적용할 파서 선택

방법 2: 장치 편집 화면에서 설정

  1. 장치 메뉴로 이동
  2. 장치 목록에서 편집할 장치의 메뉴(⋮) 클릭
  3. 편집 선택
  4. 파서 필드에서 적용할 파서 선택
  5. 저장

다음 단계