마크베이스 사용방법


마크베이스 5.0 : Tutorial 5 (Tag Table with RestAPI)

작성자
machbase
작성일
2018-08-24 11:10
조회
100

마크베이스 5.0 : 파이썬과 RestAPI를 활용한 Tag 테이블 데이터 입력 및 시각화


이 문서는 다섯 번째 튜토리얼로서 파이썬 클라이언트를 활용하여 실제로 Tag Table에 대한 센서 데이터를 Restful API를 통해서 넣어보도록 한다.


넣은 데이터를 Tag Analyzer를 통해서 실시간 데이터 입력을 확인하고 실습할 수 있도록 한다.


다섯 번째 튜토리얼 수행하기


디렉토리 확인


해당 디렉토리인 edu_5_restAPI_input 에는아래와 같은 수행 스크립트가 존재한다.


Host:~/work/TagTutorial/edu_5_restAPI_input$ ls 
1_create_tag.sql
2_insert_meta.sql
3_post_basic.py
4_post_many_random.py
Host:~/work/TagTutorial/edu_5_restAPI_input$

마크베이스 서버 및 MWA 준비


이 튜토리얼은 Restful API를 활용하기 때문에 반드시 마크베이스 MWA를 동작시켜야 한다.


아래와 같이 구동시킨다.


Host:~/work/TagTutorial/edu_5_restAPI_input$ machadmin -u

Host:~/work/TagTutorial/edu_5_restAPI_input$ MWAserver start
SERVER STARTED, PID : 4846
Connection URL : http://192.168.0.148:5001
Host:~/work/TagTutorial/edu_5_restAPI_input$

위의 화면에서는 192.168.0.148의 5001 포트가 접속 포트이다. (이후에 활용됨)


사용자마다 각기 정보가 다를 수 있으므로, 유의하도록 한다.


Tag 테이블 생성


이전 튜토리얼과 같이 파일 1_create_tag.sql (이 파일은 최초 DBMS를 생성했을 경우에 사용) 하고, 두 번째 파일 2_insert_meta.sql 을 통해서 태그 메타 정보를 입력한다.


이 튜토리얼에서는 4개의 태그를 통해서 실습을 진행한다.


insert into tag metadata values ('TAG_ELEC1');
insert into tag metadata values ('TAG_ELEC2');
insert into tag metadata values ('TAG_TEMP1');
insert into tag metadata values ('TAG_TEMP2');

두 개는 전력 사용량, 나머지 두 개는 온도를 나타내는 센서라고 가정한다.


파이썬 설치 및 모듈 설치


파이썬 2 혹은 3을 모두 활용할 수 있다.


그러나, 일부 모듈 설치가 더 필요할 수 있는데, 만일 에러가 난다면, pip를 통해서 아래와 같이 설치하자. (나머지는 기본적으로 설치되는 time, sys, random 과 같은 모듈이다)


pip install requests
pip install json

파이썬과 POST를 통한 초간단 센서 데이터 입력


데이터 입력


튜토리얼에는 3_post_basic.py이라는 파이썬 클라이언트 프로그램이 준비되어 있다.


이것은 가장 간단하게 4개의 센서에 대해서 현재 시간으로 정해진 값을 하나 입력하는 예제이다.


import json
import requests
import time

##############################
# USER's ENV : 사용자가 수정하는 부분 (HOSTNAME, PORT)
##############################
HOSTNAME = '192.168.0.148'
PORT = 5001
URL = 'http://%s:%d/machiot-rest-api/' % (HOSTNAME, PORT)

##############################
# POST
##############################

mytr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

data = {
"values":[
["TAG_ELEC1",mytr,80],
["TAG_ELEC2",mytr,60],
["TAG_TEMP1",mytr,20],
["TAG_TEMP2",mytr,30]
],
"date_format":"YYYY-MM-DD HH24:MI:SS"
}

data_json = json.dumps(data)

headers = {'Content-type': 'application/json'}

response = requests.post(URL, data=data_json, headers=headers)

print(response.text)

MWA가 설치된 주소와 포트를 수정하고, 아래와 같이 수행하면 4개의 태그에 대해 현재의 값을 데이터가 들어간다.


Host:~/work/TagTutorial/edu_5_restAPI_input$ python 3_post_basic.py 
{"ErrorCode": 0, "ErrorMessage": "", "Data": "{\"EXECUTE RESULT\":\"Append success\"}"}
Host:~/work/TagTutorial/edu_5_restAPI_input$

위와 같이 Append Success라는 메시지가 나오면 성공적으로 입력된 것이다.


아래와 같이 콘솔에서 데이터를 확인하면,


Host:~/work/TagTutorial/edu_5_restAPI_input$ machsql
=================================================================
Machbase Client Query Utility
Release Version 5.0.2.community
Copyright 2014 MACHBASE Corporation or its subsidiaries.
All Rights Reserved.
=================================================================
MACHBASE_CONNECT_MODE=INET, PORT=5656
Type 'help' to display a list of available commands.
Mach> select count(*) from tag;
count(*)
-----------------------
4
[1] row(s) selected.
Elapsed time: 0.001
Mach> select * from TAG where name = 'TAG_ELEC1';
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
TAG_ELEC1 2018-08-23 17:31:37 000:000:000 80
[1] row(s) selected.
Elapsed time: 0.001
Mach> select * from TAG where name = 'TAG_ELEC2';
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
TAG_ELEC2 2018-08-23 17:31:37 000:000:000 60
[1] row(s) selected.
Elapsed time: 0.002
Mach> select * from TAG where name = 'TAG_TEMP1';
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
TAG_TEMP1 2018-08-23 17:31:37 000:000:000 20
[1] row(s) selected.
Elapsed time: 0.001
Mach> select * from TAG where name = 'TAG_TEMP2';
NAME TIME VALUE
--------------------------------------------------------------------------------------------------
TAG_TEMP2 2018-08-23 17:31:37 000:000:000 30
[1] row(s) selected.
Elapsed time: 0.002
Mach>

연속 데이터 입력과 Tag Analyzer 차트 확인


이번에는 파이썬 Restful API를 통해서 지속적으로 데이터를 입력하고, 이 입력된 데이터를 웹을 통해서 실시간으로 확인하는 것을 수행해 보자.


데이터 연속 입력


이를 위해서 4_post_many_random.py를 수행해 보자.


이 파일은 4개의 태그에 대해서 1초에 각 태그에 대해 랜덤 한 값을 한 건씩 현재 시간으로 입력하는 파이썬 프로그램이다.


인자를 넣지 않으면, 10분간 입력을 하고, (총 600초) 더 짧거나 길게 할 경우에는 이 값을 넣어서 조정한다.


import sys
import json
import requests
import time
import random

##############################
# USER's ENV
##############################
HOSTNAME = '192.168.0.148'
PORT = 5001
URL = 'http://%s:%d/machiot-rest-api/' % (HOSTNAME, PORT)
DEFAULT_COUNT = 600;
##############################
# POST
##############################

data = {
"date_format":"YYYY-MM-DD HH24:MI:SS"
}

headers = {'Content-type': 'application/json'}

if __name__ == '__main__':

if (len(sys.argv) == 2):
count = sys.argv[1];
else:
count = DEFAULT_COUNT;

for i in range(0, int(count)):
mytr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
values = [
["TAG_ELEC1",mytr,80 + random.random()* 25],
["TAG_ELEC2",mytr,60 + random.random()* 30],
["TAG_TEMP1",mytr,20 + random.random()* 20],
["TAG_TEMP2",mytr,30 + random.random()* 10],
];
data["values"] = values;
data_json = json.dumps(data)
print(data_json);
response = requests.post(URL, data=data_json, headers=headers)
print(response.text);
time.sleep(1);

수행하면, 다음과 같이 입력하게 되는데, 이 입력을 하면서 Tag Analyzer를 확인해 보자.


Host:~/work/TagTutorial/edu_5_restAPI_input$ python 4_post_many_random.py 
{"date_format": "YYYY-MM-DD HH24:MI:SS", "values": [["TAG_ELEC1", "2018-08-23 17:43:09", 86.0631219510065], ["TAG_ELEC2", "2018-08-23 17:43:09", 87.62673577985534], ["TAG_TEMP1", "2018-08-23 17:43:09", 23.494672873051584], ["TAG_TEMP2", "2018-08-23 17:43:09", 31.296384404469038]]}
{"ErrorCode": 0, "ErrorMessage": "", "Data": "{\"EXECUTE RESULT\":\"Append success\"}"}
{"date_format": "YYYY-MM-DD HH24:MI:SS", "values": [["TAG_ELEC1", "2018-08-23 17:43:10", 88.19144708467276], ["TAG_ELEC2", "2018-08-23 17:43:10", 74.91681663993567], ["TAG_TEMP1", "2018-08-23 17:43:10", 23.70204694808197], ["TAG_TEMP2", "2018-08-23 17:43:10", 33.492663120826506]]}
{"ErrorCode": 0, "ErrorMessage": "", "Data": "{\"EXECUTE RESULT\":\"Append success\"}"}

............생략...........

실시간 데이터 입력 확인


아래의 동영상에서와 같이 Tag Analyzer에서 현재로부터 3분간의 데이터를 주기적으로 출력(3초) 하도록 하면 실시간으로 입력되는 데이터를 확인할 수 있다.



이상으로 간단하게 파이썬 언어를 활용하여, 마크베이스 지원하는 Restful API를 통해서 데이터를 입력해 보았다.


매우 쉽고 편한 방법으로 다양한 태그 센서 데이터를 입력할 수 있음을 알 수 있었으며, 다양한 활용 가능성에 대해 이해할 수 있었을 것이다.



 


http://www.machbase.com/download


Contact the Machbase team with your questions!
info@machbase.com

전체 24
번호 제목 작성자 작성일 추천 조회
24
마크베이스 V5 : Tutorial 6 (RestAPI with curl)
machbase | 2018.09.18 | 추천 0 | 조회 51
machbase 2018.09.18 0 51
23
마크베이스(Machbase) Tag Analyzer 사용법
machbase | 2018.08.27 | 추천 1 | 조회 113
machbase 2018.08.27 1 113
22
마크베이스 5.0 : Tutorial 4 (실제 데이터를 통한 Tag Analyzer 기초 활용)
machbase | 2018.08.27 | 추천 1 | 조회 88
machbase 2018.08.27 1 88
21
마크베이스 5.0 : Tutorial 5 (Tag Table with RestAPI)
machbase | 2018.08.24 | 추천 0 | 조회 100
machbase 2018.08.24 0 100
20
Machbase 5.0 : 센서데이터 홍수의 유일한 해결책
machbase | 2018.08.21 | 추천 1 | 조회 213
machbase 2018.08.21 1 213
19
마크베이스 5.0 : Tutorial 3 (Real Time Stream Insert : Many Sensors)
machbase | 2018.08.20 | 추천 0 | 조회 91
machbase 2018.08.20 0 91
18
마크베이스 5.0 : Tutorial 2 (Batch Loading : Many Sensors)
machbase | 2018.08.17 | 추천 0 | 조회 75
machbase 2018.08.17 0 75
17
마크베이스 5.0 : Tutorial 1 (Quick Start)
machbase | 2018.08.17 | 추천 0 | 조회 155
machbase 2018.08.17 0 155
16
마크베이스 5.0
machbase | 2018.08.16 | 추천 0 | 조회 246
machbase 2018.08.16 0 246
15
Machbase 5.0 TAG Table 사용법
machbase | 2018.08.10 | 추천 1 | 조회 149
machbase 2018.08.10 1 149