SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
제6기 SW Maestro 과정 1단계 1차 프로젝트
IoT 데이터 수집 및
모니터링 플랫폼
멘토: 한대희
서영주 오정규 박은진
Index
•프로젝트 개요
•구현 세부사항
- Gateway
- Collector
- Web App
•Demo 시연
•Q&A
Architecture
Gateway Collector Web App
Sensor
Raspberry Pi
Actuator
serial port
analogRead()
analogWrite()
Gateway
Sensors
의료센서
공기질 센서
불꽃/초음파 센서
& actuator
Arduino & Raspberri Pi
•Arduino : Digital I/O Pin과 Analog I/O Pin이 존재하므로 센서 값을
측정하는 데 사용
•Raspberri Pi : Raspbian OS, USB, 이더넷 등이 지원되므로 node.js,
Python, MQTT 등을 사용
•Arduino와 Raspberri Pi의 UART(serial) 통신을 위해 USB케이블 연결
MQTT
(Message Queue Telemetry Transport)
•단일 TCP만을 사용하여 최소의 자원으로 작동
•임베디드처럼 한정된 자원을 가진 시스템에 적합
•Publish/Subscribe 모델
•특정 메시지들을 송수신하기 위하여 Topic을 통해 분류
•Publisher와 Subscriber는 서로 알 수 없으며, Broker를 통하여 메시지를 송수신
Code of Gateway
serialPort.on('open', function () {
// serialport를 통해 data가 들어오면 핸들러를 실행한다.
// data: { topic, value }
serialPort.on('data', function (data) {
var data = JSON.parse(data);
for(var topic in data) {
// epochtime과 value의 배열을 생성한다.
var message = [ getEpochTime(), data[topic] ];
message = JSON.stringify(message);
mqtt_publisher.publish(topic, message);
});
});
Code of Gateway
mqtt_publisher.subscribe(‘cmndFromSvr’);
// subscribe하고 있던 topic에 대한 message가 들어오면 핸들러를 실행한다.
mqtt_publisher.on('message', function (topic, message) {
var message = JSON.parse(message);
// 서버로부터 받은 명령에 따라 각 actuator를 실행시킨다.
switch(message.actuator) {
case 'LED' :
if(message.cmd.toString() == 'TURNON') {
serialPort.write('0');
}else {
serialPort.write('1');
}
break;
case 'PIEZO' :
if(message.cmd.toString() == ‘SOUND') {
serialPort.write('3');
}
break;
}
});
Raspberri Pi
Web Server
Pub/Sub
POST Request
Database
{ key: Temperature, value: “36.5” }
Collector
Redis
•Redis : NoSQL 기반의 데이터베이스
•특징
• In-Memory 기반의 데이터베이스
- 속도가 매우 빠름
- 데이터 저장방식: RDB, AOF
• Key-Value 형태의 데이터베이스
• 다양한 데이터 타입 지원
- List, Sorted Set, Hashes …
Code of Redis
// collector.js
// mqtt client에 메시지가 들어오면 redis에 lpush한다.
mqtt_client.on(‘message’, function (topic, message) {
redis_client.lpush(topic.toString(), message);
});
// app.js
// 웹 브라우저로부터 요청이 들어오면 redis db의 값을
보내준다.
app.get(‘/api/current’, function (req, res) {
sensorname = req.query.sensorname;
db.lindex(sensorname, 0, function (err, data) {
res.json(data);
});
});
Web Application
Web Server
Web Browser
Express & EJS
•Express : 웹과 모바일 애플리케이션을 위한 다양한 기능을 제공하는
작고 유연한 node.js 웹 프레임워크
•EJS : Template Rendering Engine
•Code of Express
var express = require('express');
var app = express();
var ejs = require(‘ejs’);
var http = require(‘http’);
var server = http.createServer(app);
app.set('port', process.env.PORT || 8080);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs'); // set the view engine to ejs
app.get('/current', function (request, response) {
response.render('pages/current', { });
});
Socket.io
• Web Socket과 달리 Socket.io는 node.js에서 바로 사용할 수 있는 기술

• JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술
• 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택하여 사용
Code of Collector
var request = require('request');
var formdata = {
'to' : toAddr,
'from' : fromAddr,
'subject' : subject,
'html' : message
};
var options = {
url: ‘/noti',
form: formdata
};
// request 모듈을 이용하여 서버에 post방식으로 보낸다.
request.post(options, function (err, httpResponse, body) { … });
Code of Web
Server (app.js)
// connection이 발생할 때 핸들러를 실행한다.
ioserver.sockets.on('connection', function (socket) {
// 클라이언트에서 joinroom 이벤트가 발생하면 데이터를 받는다.
socket.on('joinroom', function (roomname) {
socket.join(roomname);
});
});
// event notification을 통해 post 요청을 처리한다.
app.post(‘/noti’, function (req, res) {
// 클라이언트로 redraw 이벤트를 보낸다.
ioserver.sockets.in('CURRENT').emit('redraw', req.body);
});
Client (current.ejs)
// 서버에 joinroom 이벤트를 보낸다.
socket.emit(‘joinroom', ‘CURRENT’);
// 서버에서 redraw 이벤트가 발생하면 데이터를 받는다.
socket.on('redraw', function (data) {
var sensorname = data.sensorname;
var point = data.point;
updateChart(sensorname, point);
});
Ajax with jQuery
•페이지 일부분을 업데이트 하기 위한 정보를 서버에 요청할 수 있다.
•서버로부터 받은 데이터로 작업을 한다.
•Code of Web Browser
$.ajax({
url: '/api/current',
data: { sensorname: sensorid },
success: function(point) {
$('#' + sensorid).html(point);
},
cache: false
});
Highchart
•Highchart : Javascript로 이루어진 charting library
Bootstrap
•Bootstrap : CSS와 Javascript로 이루어진 library
- 더 빠르고 쉬운 웹 개발을 위한 세련되고 직관적이며 강력한 프레임워크이다.
- 수 많은 테마가 존재하며 아이콘, 네비게이션 등 다양한 기능을 제공한다.
감사합니다

Weitere ähnliche Inhalte

Andere mochten auch

고대8 9주 빅데이터
고대8 9주 빅데이터고대8 9주 빅데이터
고대8 9주 빅데이터JM code group
 
20150127 RAD스튜디오와 사물인터넷(IoT)
20150127 RAD스튜디오와 사물인터넷(IoT)20150127 RAD스튜디오와 사물인터넷(IoT)
20150127 RAD스튜디오와 사물인터넷(IoT)Devgear
 
도시계획 권한
도시계획 권한도시계획 권한
도시계획 권한Smith Kim
 
High frequency trading(우투증권)
High frequency trading(우투증권)High frequency trading(우투증권)
High frequency trading(우투증권)Smith Kim
 
국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰
국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰
국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰Smith Kim
 
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁datasciencekorea
 
[2014년 3월 25일] mining minds 빅 데이터, 욕망을 읽다
[2014년 3월 25일] mining minds   빅 데이터, 욕망을 읽다[2014년 3월 25일] mining minds   빅 데이터, 욕망을 읽다
[2014년 3월 25일] mining minds 빅 데이터, 욕망을 읽다gilforum
 
알고리즘트레이딩 전략교육 커리큘럼 v4.0
알고리즘트레이딩 전략교육 커리큘럼 v4.0알고리즘트레이딩 전략교육 커리큘럼 v4.0
알고리즘트레이딩 전략교육 커리큘럼 v4.0Smith Kim
 
FIrebase를 이용한 호우호우 미니게임 만들기
FIrebase를 이용한 호우호우 미니게임 만들기FIrebase를 이용한 호우호우 미니게임 만들기
FIrebase를 이용한 호우호우 미니게임 만들기GDG Korea
 
생활코딩 oauth 소개
생활코딩 oauth 소개생활코딩 oauth 소개
생활코딩 oauth 소개Binseop Ko
 
데이터마이닝의 개요
데이터마이닝의 개요데이터마이닝의 개요
데이터마이닝의 개요Chris Kim
 
Firebase for web (웹개발을 위한 파이어베이스) 4 Storage
Firebase for web (웹개발을 위한 파이어베이스) 4 StorageFirebase for web (웹개발을 위한 파이어베이스) 4 Storage
Firebase for web (웹개발을 위한 파이어베이스) 4 Storage승빈이네 공작소
 
[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4th[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4thPark Jonggun
 
Social Innovation Spark
Social Innovation Spark Social Innovation Spark
Social Innovation Spark Spark
 
Bootstrap docs pack 설치설명서
Bootstrap docs pack 설치설명서Bootstrap docs pack 설치설명서
Bootstrap docs pack 설치설명서Gitaek kwon
 
Bootstrap starter pack on kimsQ 설치설명서
Bootstrap starter pack on kimsQ 설치설명서Bootstrap starter pack on kimsQ 설치설명서
Bootstrap starter pack on kimsQ 설치설명서Gitaek kwon
 
스타트업3년사용기
스타트업3년사용기스타트업3년사용기
스타트업3년사용기소리 강
 
엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5
엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5
엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5Manyoung Cho
 
[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axis[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axisneuroassociates
 
꿈데디 D3.js강의 6주차
꿈데디 D3.js강의 6주차꿈데디 D3.js강의 6주차
꿈데디 D3.js강의 6주차Songyi Lim
 

Andere mochten auch (20)

고대8 9주 빅데이터
고대8 9주 빅데이터고대8 9주 빅데이터
고대8 9주 빅데이터
 
20150127 RAD스튜디오와 사물인터넷(IoT)
20150127 RAD스튜디오와 사물인터넷(IoT)20150127 RAD스튜디오와 사물인터넷(IoT)
20150127 RAD스튜디오와 사물인터넷(IoT)
 
도시계획 권한
도시계획 권한도시계획 권한
도시계획 권한
 
High frequency trading(우투증권)
High frequency trading(우투증권)High frequency trading(우투증권)
High frequency trading(우투증권)
 
국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰
국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰
국토․도시 및 개발 관련법령에서의 권한배분에 따른 현황고찰
 
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁
데이터에 포함된 동적 패턴의 탐색과 해석을 위한 협업적 탐험 플랫폼 -최진혁
 
[2014년 3월 25일] mining minds 빅 데이터, 욕망을 읽다
[2014년 3월 25일] mining minds   빅 데이터, 욕망을 읽다[2014년 3월 25일] mining minds   빅 데이터, 욕망을 읽다
[2014년 3월 25일] mining minds 빅 데이터, 욕망을 읽다
 
알고리즘트레이딩 전략교육 커리큘럼 v4.0
알고리즘트레이딩 전략교육 커리큘럼 v4.0알고리즘트레이딩 전략교육 커리큘럼 v4.0
알고리즘트레이딩 전략교육 커리큘럼 v4.0
 
FIrebase를 이용한 호우호우 미니게임 만들기
FIrebase를 이용한 호우호우 미니게임 만들기FIrebase를 이용한 호우호우 미니게임 만들기
FIrebase를 이용한 호우호우 미니게임 만들기
 
생활코딩 oauth 소개
생활코딩 oauth 소개생활코딩 oauth 소개
생활코딩 oauth 소개
 
데이터마이닝의 개요
데이터마이닝의 개요데이터마이닝의 개요
데이터마이닝의 개요
 
Firebase for web (웹개발을 위한 파이어베이스) 4 Storage
Firebase for web (웹개발을 위한 파이어베이스) 4 StorageFirebase for web (웹개발을 위한 파이어베이스) 4 Storage
Firebase for web (웹개발을 위한 파이어베이스) 4 Storage
 
[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4th[IoT] MAKE with Open H/W + Node.JS - 4th
[IoT] MAKE with Open H/W + Node.JS - 4th
 
Social Innovation Spark
Social Innovation Spark Social Innovation Spark
Social Innovation Spark
 
Bootstrap docs pack 설치설명서
Bootstrap docs pack 설치설명서Bootstrap docs pack 설치설명서
Bootstrap docs pack 설치설명서
 
Bootstrap starter pack on kimsQ 설치설명서
Bootstrap starter pack on kimsQ 설치설명서Bootstrap starter pack on kimsQ 설치설명서
Bootstrap starter pack on kimsQ 설치설명서
 
스타트업3년사용기
스타트업3년사용기스타트업3년사용기
스타트업3년사용기
 
엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5
엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5
엔터프라이즈 웹애플리케이션 솔루션 Sencha ExtJS 5
 
[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axis[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axis
 
꿈데디 D3.js강의 6주차
꿈데디 D3.js강의 6주차꿈데디 D3.js강의 6주차
꿈데디 D3.js강의 6주차
 

Mehr von Daehee Han

뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암
뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암
뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암Daehee Han
 
한대희 Web proxy_개발_2006년11월_pas_ktf
한대희 Web proxy_개발_2006년11월_pas_ktf한대희 Web proxy_개발_2006년11월_pas_ktf
한대희 Web proxy_개발_2006년11월_pas_ktfDaehee Han
 
뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀
뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀
뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀Daehee Han
 
딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)
딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)
딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)Daehee Han
 
개체인식시스템 개발 제안 (entity recognition)
개체인식시스템 개발 제안 (entity recognition)개체인식시스템 개발 제안 (entity recognition)
개체인식시스템 개발 제안 (entity recognition)Daehee Han
 
weechat : web-based chatting with twitter friends
weechat : web-based chatting with twitter friendsweechat : web-based chatting with twitter friends
weechat : web-based chatting with twitter friendsDaehee Han
 
Cloud, AWS, GAE(google app engine)
Cloud, AWS, GAE(google app engine)Cloud, AWS, GAE(google app engine)
Cloud, AWS, GAE(google app engine)Daehee Han
 
Platform, Service and Business
Platform, Service and BusinessPlatform, Service and Business
Platform, Service and BusinessDaehee Han
 

Mehr von Daehee Han (8)

뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암
뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암
뉴럴웍스 이미지 인식 AI 암진단AI 대장암, 위암
 
한대희 Web proxy_개발_2006년11월_pas_ktf
한대희 Web proxy_개발_2006년11월_pas_ktf한대희 Web proxy_개발_2006년11월_pas_ktf
한대희 Web proxy_개발_2006년11월_pas_ktf
 
뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀
뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀
뉴스 추천 앱_대기화면_락스크린_뉴스_소마2014_tworoom팀
 
딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)
딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)
딥러닝을 이용한 얼굴인식 (Face Recogniton with Deep Learning)
 
개체인식시스템 개발 제안 (entity recognition)
개체인식시스템 개발 제안 (entity recognition)개체인식시스템 개발 제안 (entity recognition)
개체인식시스템 개발 제안 (entity recognition)
 
weechat : web-based chatting with twitter friends
weechat : web-based chatting with twitter friendsweechat : web-based chatting with twitter friends
weechat : web-based chatting with twitter friends
 
Cloud, AWS, GAE(google app engine)
Cloud, AWS, GAE(google app engine)Cloud, AWS, GAE(google app engine)
Cloud, AWS, GAE(google app engine)
 
Platform, Service and Business
Platform, Service and BusinessPlatform, Service and Business
Platform, Service and Business
 

IoT 센서, 게이트웨어, 웹 서버, 실시간 모니터링 (소마 6기 1단계 JJK팀)

  • 1. 제6기 SW Maestro 과정 1단계 1차 프로젝트 IoT 데이터 수집 및 모니터링 플랫폼 멘토: 한대희 서영주 오정규 박은진
  • 2. Index •프로젝트 개요 •구현 세부사항 - Gateway - Collector - Web App •Demo 시연 •Q&A
  • 6. Arduino & Raspberri Pi •Arduino : Digital I/O Pin과 Analog I/O Pin이 존재하므로 센서 값을 측정하는 데 사용 •Raspberri Pi : Raspbian OS, USB, 이더넷 등이 지원되므로 node.js, Python, MQTT 등을 사용 •Arduino와 Raspberri Pi의 UART(serial) 통신을 위해 USB케이블 연결
  • 7. MQTT (Message Queue Telemetry Transport) •단일 TCP만을 사용하여 최소의 자원으로 작동 •임베디드처럼 한정된 자원을 가진 시스템에 적합 •Publish/Subscribe 모델 •특정 메시지들을 송수신하기 위하여 Topic을 통해 분류 •Publisher와 Subscriber는 서로 알 수 없으며, Broker를 통하여 메시지를 송수신
  • 8. Code of Gateway serialPort.on('open', function () { // serialport를 통해 data가 들어오면 핸들러를 실행한다. // data: { topic, value } serialPort.on('data', function (data) { var data = JSON.parse(data); for(var topic in data) { // epochtime과 value의 배열을 생성한다. var message = [ getEpochTime(), data[topic] ]; message = JSON.stringify(message); mqtt_publisher.publish(topic, message); }); });
  • 9. Code of Gateway mqtt_publisher.subscribe(‘cmndFromSvr’); // subscribe하고 있던 topic에 대한 message가 들어오면 핸들러를 실행한다. mqtt_publisher.on('message', function (topic, message) { var message = JSON.parse(message); // 서버로부터 받은 명령에 따라 각 actuator를 실행시킨다. switch(message.actuator) { case 'LED' : if(message.cmd.toString() == 'TURNON') { serialPort.write('0'); }else { serialPort.write('1'); } break; case 'PIEZO' : if(message.cmd.toString() == ‘SOUND') { serialPort.write('3'); } break; } });
  • 10. Raspberri Pi Web Server Pub/Sub POST Request Database { key: Temperature, value: “36.5” } Collector
  • 11. Redis •Redis : NoSQL 기반의 데이터베이스 •특징 • In-Memory 기반의 데이터베이스 - 속도가 매우 빠름 - 데이터 저장방식: RDB, AOF • Key-Value 형태의 데이터베이스 • 다양한 데이터 타입 지원 - List, Sorted Set, Hashes …
  • 12. Code of Redis // collector.js // mqtt client에 메시지가 들어오면 redis에 lpush한다. mqtt_client.on(‘message’, function (topic, message) { redis_client.lpush(topic.toString(), message); }); // app.js // 웹 브라우저로부터 요청이 들어오면 redis db의 값을 보내준다. app.get(‘/api/current’, function (req, res) { sensorname = req.query.sensorname; db.lindex(sensorname, 0, function (err, data) { res.json(data); }); });
  • 14. Express & EJS •Express : 웹과 모바일 애플리케이션을 위한 다양한 기능을 제공하는 작고 유연한 node.js 웹 프레임워크 •EJS : Template Rendering Engine •Code of Express var express = require('express'); var app = express(); var ejs = require(‘ejs’); var http = require(‘http’); var server = http.createServer(app); app.set('port', process.env.PORT || 8080); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); // set the view engine to ejs app.get('/current', function (request, response) { response.render('pages/current', { }); });
  • 15. Socket.io • Web Socket과 달리 Socket.io는 node.js에서 바로 사용할 수 있는 기술 • JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술 • 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택하여 사용
  • 16. Code of Collector var request = require('request'); var formdata = { 'to' : toAddr, 'from' : fromAddr, 'subject' : subject, 'html' : message }; var options = { url: ‘/noti', form: formdata }; // request 모듈을 이용하여 서버에 post방식으로 보낸다. request.post(options, function (err, httpResponse, body) { … });
  • 17. Code of Web Server (app.js) // connection이 발생할 때 핸들러를 실행한다. ioserver.sockets.on('connection', function (socket) { // 클라이언트에서 joinroom 이벤트가 발생하면 데이터를 받는다. socket.on('joinroom', function (roomname) { socket.join(roomname); }); }); // event notification을 통해 post 요청을 처리한다. app.post(‘/noti’, function (req, res) { // 클라이언트로 redraw 이벤트를 보낸다. ioserver.sockets.in('CURRENT').emit('redraw', req.body); }); Client (current.ejs) // 서버에 joinroom 이벤트를 보낸다. socket.emit(‘joinroom', ‘CURRENT’); // 서버에서 redraw 이벤트가 발생하면 데이터를 받는다. socket.on('redraw', function (data) { var sensorname = data.sensorname; var point = data.point; updateChart(sensorname, point); });
  • 18. Ajax with jQuery •페이지 일부분을 업데이트 하기 위한 정보를 서버에 요청할 수 있다. •서버로부터 받은 데이터로 작업을 한다. •Code of Web Browser $.ajax({ url: '/api/current', data: { sensorname: sensorid }, success: function(point) { $('#' + sensorid).html(point); }, cache: false });
  • 19. Highchart •Highchart : Javascript로 이루어진 charting library
  • 20. Bootstrap •Bootstrap : CSS와 Javascript로 이루어진 library - 더 빠르고 쉬운 웹 개발을 위한 세련되고 직관적이며 강력한 프레임워크이다. - 수 많은 테마가 존재하며 아이콘, 네비게이션 등 다양한 기능을 제공한다.