Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 활용] 온습도 센서데이터 처리

마크베이스는 TPCx-IoT에서 4회 연속 세계 1위를 한 시계열 DB로 폭증하고 있는 센서 데이터의 저장, 분석, 모니터링을 최적화하는데 최고의 선택입니다. 데이터 수집과 저장은 FEMS, MES, 공장자동화 등 스마트공장 구축에 핵심이며 비용 절감과 시간을 절약하는 데에 도움이 됩니다.

어떤 사업장에서는 적정 습도와 온도 조절이 굉장히 중요합니다. 이를 위해 센서데이터와 제습기와 가습기를 설치하여 노동자의 작업 환경을 개선합니다. 이번 포스트에서는 마크베이스를 활용하여 온습도 센서데이터 처리를 하는 방법을 소개해 드리겠습니다.

1. 개요

전체적인 구조는 다음과 같습니다.

  • 온도와 습도를 계산하는 센서로 부터 데이터가 발생
  • private LoRa를 통해 gateway로 센서 데이터를 전송
  • gateway에서 application으로 데이터를 파일 형태로 저장
  • machcollector를 사용하여 저장된 데이터를 log table로 변환
  • stream기능으로 4가지 데이터(온도, 습도, RSSI, SNR)를 tag table로 변환
  • MWA에서 데이터의 통계 값 그래프 도출

다음은 위의 과정을 표현한 그림입니다.

2. 준비하기

내용을 진행하기에 앞서 아래의 기본적인 환경 세팅이 필요합니다.

  • MACHBASE
  • machcollector
  • 센서데이터
  • 환경변수 설정
  • 방화벽
2-1. MACHBASE 설치

windows에서의 마크베이스 설치는 여기의 페이지를 참고해 주세요.

2-2. machcollector

machcollector를 사용하면 센서데이터를 손쉽게 MACHBASE에 저장할 수 있습니다. machcollector 설치파일은 여기에서 다운로드할 수 있습니다. 설치 방법은 여기를 참고해 주시기 바랍니다.

2-3.센서 데이터

machcollector를 사용하기 위해서 2가지를 먼저 대상이 되는 파일을 지정해 줘야 하고, 파일에서 어떤 데이터를 가져올지 알려줘야 합니다.

이번 포스트에서 데이터 사용할 파일은 “2019-04-02_11-31-05@1372.log”입니다. 이 파일은 Lora를 통해 Gateway로 전달된 온습도 센서의 값을 담고 있는log파일 입니다.

위의 파일은 다읨의 내용을 가지고 있습니다.

이들 데이터 중, 빨간색으로 표기된 것이 대상 데이터들 입니다. 이 데이터들을 machcollector로 읽어 machbase에 저장할 것입니다.

2-4. 환경 변수

machcollector는 파일에 저장된 데이터를 MACHBASE로 가져와서 저장하는 작업을 수행합니다. machcollector를 사용하려면 먼저 collector manager에서 기본 환경을 설정해야 합니다.  [제어판] – [시스템] – [고급 설정] – [고급 시스템 설정] – [환경 변수]에서 다음 환경 변수를 추가해 주세요.

이름
MACHBASE_COLLECTOR_HOME(Collector 가 설치된 홈 디렉토리)
예) C:\Machbase\machcollector_home
MACHBASE_COLLECTOR_PORT(CollectorManager 가 서비스될 포트 번호)
예) 9999
PATH(기존 PATH 에 추가해서)
%MACHBASE_COLLECTOR_HOME%\bin;%MACHBASE_COLLECTOR_HOME%\lib;
2-5. 방화벽 설정

방화벽을 설정하는 방법은 여기의 MACHBASE manual을 참고해 주세요.

3.마크베이스 실행

이제 설치한 MACHBASE를 실행해 주세요. 실행시 아래와 같은 윈도우창이 켜지는 것을 확인할 수 있습니다. 우측 상단의 MACHBASE의 상태가 아래와 같이 반드시 초록색이어야 합니다.

4. Collector Manager 실행하기

collector manager는 collector들을 제어하는 역할을 합니다. collector manager를 사용하기 위해서는 먼저 collector manager를 실행해야 합니다. ‘명령 프롬프트’ 또는 MACHBASE 메뉴의 run console에서 다음과 같이 입력합니다.

machcollectoradmin -u

collector manager를 실행했다면 machwin을 이용하여 machsql 콘솔을 열어주세요. 그럼 ID, sys값을 입력하는 부분에 다음과 같이 입력합니다 (address는 입력하지 않아도 됩니다)

  • ID : SYS
  • password : MANAGER

machsql에 정상적으로 접속이 되었으면 collector manager를 MACHBASE 서버와 연결하기 위해서 MACHBASE 서버에 collector manager를 등록해야 합니다. 아래의 명령을 machsql에서 실행해 주세요.

CREATE COLLECTORMANAGER localhost AT "127.0.0.1:9999";
SELECT * FROM m$sys_collectormanagers;

위 구문의 내용을 조금 더 자세히 살펴보면 다음과 같습니다.

  • localhost : manager_name으로 collector manager의 이름입니다. 
  • 127.0.0.1 : host_addr로 collector manager가 실행중인 서버의 IP입니다.
  • 9999 : host_port로 collector manager가 실행중인 서버의 포트 번호 입니다.

정상적으로 실행되었다면 다음과 같은 화면이 나타납니다.

5. machcollector 생성 및 실행

collector manager의 등록과 실행이 문제없이 완료되었다면, 다음으로 machcollector를 생성해야 합니다.  machcollector 생성은 3가지 과정을 거칩니다.

  • tpl 파일 생성
  • rgx 파일 생성하고
  • machsql에서 파일 등록
5-1. tpl파일 

tpl파일에서는 machcollector로 어떤 파일을 읽을 것인지에 대한 정보와 DB의 login 정보 등을 설정합니다.

###############################################################################
# Copyright of this product 2013-2023,
# MACHBASE Corporation(Incorporation) or its subsidiaries.
# All Rights reserved
###############################################################################
#
#  This is a template file for collector.
#
###################################################################
# Collect setting
###################################################################
COLLECT_TYPE=FILE
LOG_SOURCE="C:\Machbase\machcollector_home\collector\advantech\(([0-9]+)-([0-9]+)-([0-9]+))_(([0-9]+)-([0-9]+)-([0-9]+))@([0-9]+).log"
###################################################################
# Process setting
###################################################################
REGEX_PATH=advantech.rgx
###################################################################
# Output setting
###################################################################
DB_TABLE_NAME = "advantech_table"
DB_ADDR       = "127.0.0.1"
DB_PORT       = 5656
DB_USER       = "SYS"
DB_PASS       = "MANAGER"

CREATE_TABLE_MODE=2

위의 tpl 파일에 기술된 일부 주요 내용은 다음과 같습니다.

Collect Setting :

  • LOG_SOURCE : 읽어을 로그 파일의 위치 (정규 표현식으로 조건에 만족하는 파일들 설정)

Process Setting :

  • REGEX_PATH : rgx 확장자 파일의 위치 (정규 표현식으로 타겟 데이터 조건 설정), 참고로 REGEX_PATH의 기본 위치는 “MACH_COLLECTOR_HOME/collector/regex” 입니다.

 Output setting : 테이블 이름과 데이터베이스 정보를 입력합니다.

  • DB_TABLE_NAME : 입력할 테이블 이름
  • DB_ADDR : 입력할 데이터베이스의 IP주소
  • DB_PORT : 데이터베이스 포트 번호
  • DB_USER : 데이터베이스 사용자명
  • DB_PASS : 데이터베이스 패스워드

주의 : 경로에 C:\Program Files (x86)\ 처럼 괄호가 있다면 C:\Program Files [(]x86[)]\ 으로 변경

5-2. rgx 파일

rgx 파일은 tpl 파일에 설정된 정규표현식 파일입니다. rgx 파일에 설정된 정규표현식을 통해 tpl파일로 읽어들인 column에 조건을 mapping 하여 MACHBASE 데이터베이스의 테이블에 저장 합니다. 이번 포스트에서 필요한 데이터는 아래에 표시된 온도, 습도, RSSI, SNR 값입니다.

정규표현식을 사용합니다. rgx 파일에는 다음와 같은 2가지 변수가 있습니다. 

  • REGEX : 데이터 추출/분석을 위한 정규표현식
  • END_REGEX : 한 레코드의 끝(데이터 구분자) 설정을 위한 정규표현식
###############################################################################
# Copyright of this product 2013-2023,
# MACHBASE Corporation(Incorporation) or its subsidiaries.
# All Rights reserved
###############################################################################
#
#  This is a regular expression file for collector.
#
LOG_TYPE=advantech
COL_LIST= (
     (
        REGEX_NO = 1
        NAME = time
        TYPE = datetime
        SIZE = 8
        DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
     ),
     (
        REGEX_NO = 6
        NAME = Temperature
        TYPE = double
        SIZE = 8
     ),
     (
        REGEX_NO = 7
        NAME = Humidity
        TYPE = double
        SIZE = 8
     ),
     (
        REGEX_NO = 8
        NAME = RSSI
        TYPE = integer
        SIZE = 4
     ),
     (
        REGEX_NO = 9
        NAME = SNR
        TYPE = integer
        SIZE = 4
     )
)
REGEX="(([0-9-]+)\s+([0-9:]+))\s(\S+)\s:\s\[\+RCV=([0-9]+),D,([\-\+][0-9.]+)/([0-9.]*),[0-9]+,[a-zA-Z0-9],([\-]*[0-9.]+),([\-]*[0-9.]+)"
END_REGEX="\n"
5-3. machcollector 실행

아래와 같이 “advan_test”이름의 collector를 생성합니다.

CREATE COLLECTOR localhost.advan_test FROM "C:\Machbase\machcollector_home\collector\advantech.tpl";

지금까지 앞서 저장한 tpl 파일과 rgx 파일의 경로를 설정하고, CREATE 문으로 collector를 생성했습니다. 이제 생성된 collector를 시작하려면 ALTER COLLECTOR 구문을 사용해야 합니다.

  • localhost : manager_name으로 등록된 collector manager의 이름입니다.
  • advan_test : collector_name으로 실행할 collector의 이름입니다.
ALTER COLLECTOR localhost.advan_test START;
SELECT * FROM M$SYS_COLLECTORS;

위의 Query를 실행 후 SELECT 구문의 결과에서 다음과 같이 현재 날짜로 바뀐것을 확인할 수 있습니다 (빨간색 테두리 부분). 즉, collector가 잘 작동하고 있다는 의미입니다. 

SHOW TABLE를 실행하면 machcollector로 ADVANTECH_TABLE이 자동으로 생성이 된 것을 볼 수 있습니다.

DESC 명령어로 생성 된 Table의 정보를 확인하면 다음과 같습니다.

마지막으로 machcollector가 제대로 원하는 값을 잘 가져왔는지 조회해 보겠습니다. 

  • tpl 파일 : collector의 데이터 소스, 처리 방법, 저장 방법 기술
  • rgx 파일 : 정규 표현식 기술
  • 컬럼 : time, temperature, humidity, RSSI, SNR

6. tag  table 생성

센서 데이터는 현재 log table에 저장되어 있습니다. 하지만 개요에서 말씀드린 것 같이 데이터들의 통계를 보기 위해 tag table을 사용할 것입니다. 그러기 위해  stream기능으로 tag table에 원하는 조건의 (온도, 습도, RSSI, SNR) Record들을 저장하고자 합니다.

stream기능을 사용하기 전 반드시 tag table이 사전에 생성되어 있어야 합니다. tag table을 생성하게 되면 rollup table들이 생성되어 통계데이터들이 자동적으로 생성됩니다. 또한 MACHBASE의 분석 툴인 MWA의 tag analyzer도 이용가능합니다.

6-1. tag table 생성

먼저 tag table을 생성해 주세요

CREATE tagdata TABLE tag (name varchar(20) primary key, time datetime basetime, value double summarized) tag_partition_count =1;

tag table의 tag meta로 온도, 습도, RSSI, SNR 을 입력합니다.

INSERT INTO tag metadata VALUES ('TEMPERATURE');
INSERT INTO tag metadata VALUES ('HUMIDITY');
INSERT INTO tag metadata VALUES ('RSSI');
INSERT INTO tag metadata VALUES ('SNR');
6-2. tag table 확인

show tables로 table 목록을 보면 아래와 같이 표시됩니다.

7. Stream 기능 이용하기

Stream은 tag table에서 증분 데이터를 대상으로 원하는 데이터만을 추출해 줍니다. 더 자세한 설명은 여기서 확인해 주세요.  이제 machcollector로 가져온 온도, 습도, RSSI, SNR 값에 대한 통계결과를 얻기 위해서 stream event를 생성해야 합니다. 

exec stream_create(event1, 'insert into tag select ''TEMPERATURE'', TIME, TEMPERATURE from advantech_table;');
exec stream_create(event2, 'insert into tag select ''HUMIDITY'', TIME, HUMIDITY from advantech_table;');
exec stream_create(event3, 'insert into tag select ''RSSI'', TIME, RSSI from advantech_table;');
exec stream_create(event4, 'insert into tag select ''SNR'', TIME, SNR from advantech_table;');

위에서 수행한 첫번째 줄은 다음의 의미를 가집니다.

  • 센서 데이터를 저장한 advantech_table에서
  • TIME과 TEMPERATURE 값을 가져와서
  • ‘TEMPERATURE’라는  TAG_ID를 가진 TAG에 저장한다.

이제 생성된 stream event를 stream_start 명령어로 실행시켜야 합니다. 아래의 QUERY가 실행되었다면 등록된 stream event의 QUERY가 자동 수행될 것입니다.

exec stream_start(event1);
exec stream_start(event2);
exec stream_start(event3);
exec stream_start(event4);

8. Tag Analyzer

8-1. MWA

TAG 분석 툴인 tag analyzer를 사용하기 전에 MWA를 실행시켜야 합니다. machwin의 MWA목록에서 start를 눌러주세요.

정상적으로 실행되었다면 다음과 같은 팝업이 생성됩니다.

이제 인터넷 주소창에 localhost:5001을 입력하면 아래와 같은 MWA Login페이지로 이동됩니다.

  • ID : admin
  • PW : machbase

아이디와 비밀번호 후, 다음의 화면으로 이동됩니다. 상단의 tag view 메뉴의 tag analyzer를 클릭해 주세요.

8-2. TAG Analyzer Setting

TAG analyzer에서 중앙의+ Button을 눌러서 온도-습도 차트를 만들어보자

아래와 같은 창에서 HUMIDITY와 TEMPERATURE를 클릭하고 OK 버튼을 눌러주세요.

temperature와 humidity 값이 그래프로 표시 되는 것을 확인할 수 있습니다.  아래의 그림은 위의 과정의 최종 결과물이며 그래프를 통해 좀 더 가시적이고 간편한 통계 그래프를 만들수도 있습니다.

9. 마치며

gateway에 MACHBASE를 설치하고 실제 센서데이터를 MACHBASE에 적재하였습니다. 최종적으로는 tag analyzer를 통한 시각화까지 보여드렸습니다. 중간에 stream, tag table, rollup, MWA, machcollector 등 MACHBASE가 가진 다양한 유틸리티와 기능들을 사용했습니다. 만약 정규 표현식에 대해서 잘 알고 있다면 collector로 gateway의 센서데이터 값을 처리하는데는 큰 어려움이 없을 것 같습니다. 이를 통해 미리 이상현상을 감지하고 사전 예방에 한걸음 다가갈 수 있을거라 생각합니다. 마크베이스는 시계열 전용 데이터베이스 솔루션을 활용함으로써 데이터 처리 한계를 극복하고 스마트 팩토리를 고도화했습니다. 마크베이스와 함께 4차 산업혁명 시대의 흐름을 주시하면서, 반도체, 자동차, 전지, 제지업 등 다양한 산업 분야에서 빅데이터 처리를 도움 받아보세요.



아래 링크를 통해 세계 1위 마크베이스 TSDB 무료 다운로드 받을 수 있습니다.

 

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을