Skip to content

SKT-ThingPlug/thingplug-lora-starter-kit

Repository files navigation

ThingPlug logo

SKT ThingPlug LoRa oneM2M Starter Kit

Starter Kit ์€ SKT์˜ ThingPlug์—์„œ ์ œ๊ณตํ•˜๋Š” IoT ๊ตญ์ œ ํ‘œ์ค€ oneM2M API๋ฅผ ์ด์šฉํ•˜์—ฌ LoRa์„œ๋น„์Šค ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ์ข€ ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ณ , ์„œ๋น„์Šค์˜ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” Device์™€ Application ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๋ณธ Starter Kit์„ ํ†ตํ•˜์—ฌ SK Telecom์˜ ThingPlug ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ๊ฐœ๋ฐœ์„ Starter Kit์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณด์„ธ์š”

ThingPlug StarterKit for LoRa์˜ ์ฃผ์š” ํŠน์ง• ๋ฐ ๊ธฐ๋Šฅ

  • ์‹ค์ œ Device๊ฐ€ ์—†์–ด๋„ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

  • ThingPlug๊ฐ€ ์ œ๊ณตํ•˜๋Š” IoT ๊ตญ์ œ ํ‘œ์ค€์ธ oneM2M๊ทœ๊ฒฉ REST API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฒ”์šฉ์„ฑ์„ ํ™•๋ณดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • node.js์™€ express ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • IFTTT ๋ฐ ์ง€๋„, ๊ทธ๋ž˜ํ”„ ๋“ฑ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ ํƒ‘์žฌ๋กœ ๋ฐ์ดํ„ฐ์™€ ์„œ๋น„์Šค๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Github์— ์˜ˆ์ œ๊ฐ€ ์—…๋กœ๋“œ ๋˜์–ด์žˆ์–ด ๋ฐ”๋กœ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ThingPlug API ์ฃผ์š” ๊ตฌ์„ฑ

Starter Kit์—์„œ๋Š” ์—ญํ• ์— ๋”ฐ๋ผ ๊ตฌ์„ฑ์›์„ ๋‹ค์Œ ๋„ค ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ผ์ด์–ธํŠธ (Application)
  • ๋””๋ฐ”์ด์Šค ํด๋ผ์ด์–ธํŠธ (Device)
  • oneM2M API๋ฅผ ์ œ๊ณตํ•˜๋Š” ThingPlug ์„œ๋ฒ„ (ThingPlug)
  • LoRa Network ์„œ๋ฒ„

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋””๋ฐ”์ด์Šค๋Š” ์ง์ ‘์ ์œผ๋กœ ํ†ต์‹ ํ•˜์ง€ ์•Š๊ณ  ๊ฐ ๊ตฌ์„ฑ์›๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ThingPlug๊ฐ€ ์ œ๊ณตํ•˜๋Š” oneM2M ํ‘œ์ค€ ๊ธฐ๋ฐ˜์˜ REST API๋ฅผ ํ†ตํ•ด oneM2M ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น API๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋Š” IoT์˜ ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ(์˜ˆ, ๋ฐ์ดํ„ฐ ์ €์žฅ, ์žฅ์น˜ ๊ด€๋ฆฌ, ์žฅ์น˜ ๋“ฑ๋ก ๋“ฑ)์€ ๋””๋ฐ”์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ข€ ๋” ์‰ฝ๊ฒŒ LoRa ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Starter Kit ์‹คํ–‰์ ˆ์ฐจ

๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅด๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ Starter Kit์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์ „ ์ค€๋น„ : ํ•„์š”ํ•œ ํ•„์ˆ˜ ๋„๊ตฌ ์„ค์น˜ ๋ฐ ์ฝ”๋“œ ๋ณต์‚ฌ

  2. Code ๋ณต์‚ฌ

  3. ํ”„๋กœ์ ํŠธ dependency๋ฅผ ์„ค์น˜

  4. ๋‚˜์˜ ThingPlug ๊ณ„์ •์ •๋ณด์— ๋งž๊ฒŒ ์ผ๋ถ€ ํŒŒ์ผ(config.js)์„ ์ˆ˜์ •

  5. Device.js๋ฅผ ์‹คํ–‰

  6. ThingPlug์— ๋‚ด ๊ณ„์ •์— Device๋ฅผ ๋“ฑ๋ก

  7. Application_web.js ์‹คํ–‰

์‚ฌ์ „ ์ค€๋น„

Node ์„ค์น˜

Starter Kit์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Node.js : ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ์„ค์น˜ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 3 โ€“ node.js ์„ค์น˜

์ฝ”๋“œ ๋ณต์‚ฌ

Git์— Release๋œ ํ”„๋กœ์ ํŠธ ์••์ถ•ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์•„์„œ ์ž„์˜์— ํด๋”์— ์••์ถ•์„ ํ•ด์ œํ•˜์„ธ์š”. ๋˜๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ github์˜ master ๋ฒ„์ „์„ cloneํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

git clone https://github.com/SKT-ThingPlug/thingplug-lora-starter-kit.git

๋ณต์‚ฌ๋œ ํด๋” ์•ˆ์„ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š”ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • config_x.js : ๊ฐœ๋ฐœ์ž ์ธ์ฆํ‚ค์™€ ๋””๋ฐ”์ด์Šค ID๋“ฑ ์Šคํƒ€ํ„ฐํ‚ท ์‹คํ–‰์— ์•ž์„œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ž์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • device_mqtt_x.js : ์‹ค์ œ IoT Device์—์„œ ๊ตฌ๋™์ด ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค. Node.js๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด Node.js๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋ฉฐ BeegleBone Black ๊ฐ™์ด Node.js๋ฅผ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋Š” IoT Device์—์„œ ์ง์ ‘ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น jsํŒŒ์ผ์€ mqtt๋ฐฉ์‹์˜ ํ”„๋กœํ† ์ฝœ์„ ์ ์šฉํ•œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

  • device_http_x.js : ํ•ด๋‹น ํŒŒ์ผ์€ device.jsํŒŒ์ผ์˜ http ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

  • application_web.js : Express.js๋ฅผ ์‚ฌ์šฉํ•œ Web API ์„œ๋ฒ„๋กœ Sample Web Application์—์„œ ํ˜ธ์ถœํ•˜๋Š” backend ์„œ๋ฒ„์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. device.js์—์„œ ThingPlug๋กœ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ์›นํŽ˜์ด์ง€๋กœ๋ถ€ํ„ฐ ๋ช…๋ น์„ ๋ฐ›์•„ ThingPlug ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์‹ค์ œ device๋ฅผ ์ œ์–ดํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

  • public/ : Sample Web Application์˜ html, css, javascript ๋“ฑ ์ •์  ํŒŒ์ผ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

  • notification/ : trigger ๋ฐœ์ƒ์‹œ ๋ฌธ์ œ๋ฅผ notifyํ•˜๊ธฐ ์œ„ํ•œ E-MAIL๊ด€๋ จ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ E-MAIL์€ nodemailer api๋ฅผ ํ™œ์šฉํ•ด ์ „์†ก์„ ํ•˜๋Š” ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์˜€์œผ๋ฉฐ, GMAIL๊ณ„์ •์ •๋ณด๋ฅผ mail.js์— ์ž…๋ ฅํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด์™ธ์—๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ nodejs์˜ library๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ sample์˜ ๊ฒฝ์šฐ multi Device๋ฅผ ์ง€์›ํ•˜๊ธฐ์œ„ํ•ด {jsํŒŒ์ผ ์ด๋ฆ„_์ˆซ์ž} ํ˜•ํƒœ๋กœ mapping ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Device์˜ ์ˆซ์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡๊ฐ€์ง€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. config_x.js์™€ device_x.jsํŒŒ์ผ์„ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ (๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ ๋น ์ง์—†์ด ์ˆœ์ฐจ๋กœ)
  2. config_x.js์˜ nodeID์ˆ˜์ •
  3. application_web.js์˜ numOfDevice์ˆ˜์ •
  4. /public/js/app.js ์˜ numOfDevice ์ˆ˜์ •

ํ”„๋กœ์ ํŠธ dependency ์„ค์น˜

Starter Kit์„ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” device์™€ application์€ Node.js๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ ์‹คํ–‰์— ํ•„์š”ํ•œ dependency ์ •๋ณด๋Š” package.json์— ๊ธฐ์ž…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์—์„œ ๋ณต์‚ฌํ•œ starter kit ํด๋”(package.json์ด ์กด์žฌํ•˜๋Š” ํด๋”)๋กœ ์ด๋™ ํ›„ npm install ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด dependency ์„ค์น˜ํ•˜์„ธ์š”.

config.js ์ˆ˜์ •

Starter Kit์ด ์‹ค์งˆ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐœ๋ฐœ์ž ๊ณ„์ •์ •๋ณด ๋ฐ ๋””๋ฐ”์ด์Šค ์ •๋ณด๋ฅผ ๊ฐœ๋ฐœ์ž ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. config.js_sampleํŒŒ์ผ์„ config.jsํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•œ ํ›„ config.js๋ฅผ ์—๋””ํ„ฐ์—์„œ ์—ด๊ณ  ๊ฐ ํ•ญ๋ชฉ ์˜ค๋ฅธ์ชฝ์— ๋‹ฌ๋ฆฐ ์ฃผ์„ ์„ค๋ช…๊ณผ ์•„๋ž˜ ์„ค๋ช…์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ˆ˜์ •ํ•˜์„ธ์š”.

module.exports = {

  AppEUI : 'starterkittest',                   		// Application EUI
  DevEUI : 'DevEUI',								// Device EUI
  version : 'v1_0',                             	// Application์˜ version
  TPhost : 'thingplugtest.sktiot.com',      		// ThingPlug์˜ HOST Addresss
  TPport : '9000',                             		// ThingPlug์˜ HTTP PORT ๋ฒˆํ˜ธ

  responseAddress : 'http://0.0.0.0',         		// HTTP๋ฒ„์ „์—์„œ ๋””๋ฐ”์ด์Šค ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋””๋ฐ”์ด์Šค์˜ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ mga
  responsePORT : '0000',                        	// HTTP๋ฒ„์ „์—์„œ ๋””๋ฐ”์ด์Šค์ œ์–ด๋ฅผ ์œ„ํ•œ ๋””๋ฐ”์ด์Šค์˜ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ์˜ ๋กœ์ปฌ ํฌํŠธ

  userID : 'userID',                            	// MQTT๋ฒ„์ „์—์„œ Broker ์ ‘์†์„ ์œ„ํ•œ ID, ํฌํ„ธ ID ์‚ฌ์šฉ
  mqttClientId : 'Please Make Ramdom Value_1',    	// MQTT๋ฒ„์ „์—์„œ Broker ์ ‘์†์„ ์œ„ํ•œ client ID

  nodeID : 'Please Type Your Own LTID',         	// Device ๊ตฌ๋ถ„์„ ์œ„ํ•œ LTID, ๋””๋ฐ”์ด์Šค ๊ณ ์œ  ID ์‚ฌ์šฉ
  passCode : '000101',                          	// ThingPlug์— Device๋“ฑ๋ก ์‹œ ์‚ฌ์šฉํ•  Device์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ
  uKey : 'USER KEY FROM PORTAL',                	// Thingplug๋กœ๊ทธ์ธ ํ›„, `๋งˆ์ดํŽ˜์ด์ง€`์— ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆํ‚ค

  containerName:'LoRa',                         	// starter kit์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•  container ์ด๋ฆ„ (์ž„์˜์ง€์ •)
  DevReset : 'DevReset',                        	// starter kit์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ œ์–ด ๋ช…๋ น DevReset
  extDevMgmt : 'extDevMgmt',						// starter kit์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ œ์–ด ๋ช…๋ น extDevMgmt
  
  UPDATE_CONTENT_INTERVAL : 1000,					//contentInstance ์ƒ์„ฑ์ฃผ๊ธฐ
 
  delimiter : ',',									// contents ๊ตฌ๋ถ„์ž															
 
  contents : function(){															// Device์—์„œ ThingPlug๋กœ ์ „๋‹ฌํ•˜๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ (contentInstance์˜ Attribute <con>)
	var value_TEMP = (Math.floor(Math.random() * 5) + this.BASE_TEMP).toString();	// ๊ฐ€์ƒ์˜ ์˜จ๋„๊ฐ’
	var value_HUMID = (Math.floor(Math.random() * 5) + this.BASE_HUMID).toString();	// ๊ฐ€์ƒ์˜ ์Šต๋„๊ฐ’
	var value_LUX = (Math.floor(Math.random() * 5) + this.BASE_LUX).toString();		// ๊ฐ€์ƒ์˜ ์กฐ๋„๊ฐ’

	return value_TEMP + this.delimiter + value_HUMID + this.delimiter + value_LUX;
  }
};

HTTP๋ฒ„์ „์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ˆ˜์ •๋˜์•ผํ•˜๋Š”๊ฒƒ
responseAddress, responsePORT, uKey, nodeID, passCode

MQTT๋ฒ„์ „์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ˆ˜์ •๋˜์•ผํ•˜๋Š”๊ฒƒ
userID, uKey, mqttClientId, nodeID, passCode

Device ์‹คํ–‰

Device๊ฐ€ ํ•˜๋Š” ์ผ

๊ตฌ๋ถ„ ์„ค๋ช… HTTP Method
(MQTT Publish)
1. node ์ƒ์„ฑ ๋ฌผ๋ฆฌ์  Device๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. POST
2. remoteCSE ์ƒ์„ฑ ์„œ๋น„์Šค ๋ฐ remoteCSE ID์™€ passCode๋ฅผ oneM2M ์„œ๋ฒ„์— ๋“ฑ๋กํ•˜๊ณ , ์„œ๋น„์Šค์—์„œ ๋ฐœ์ƒ๋˜๋Š” ๋ฐ์ดํ„ฐ(dKey)๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค . POST
3. container ์ƒ์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋‘˜ container๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์‹œ์Šคํ…œ์˜ ํด๋”์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. POST
4. mgmtCmd ์ƒ์„ฑ ๋””๋ฐ”์ด์Šค์—์„œ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ๋ช…๋ น์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ์ž์›์„ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค. LoRa์˜ ๊ฒฝ์šฐ predefined๋œ command๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. POST
4-1. DevReset LoRa ๋””๋ฐ”์ด์Šค ๋ฆฌ์…‹์„ ์œ„ํ•œ mgmtCmd POST
4-2. extDevMgmt ์‚ฌ์šฉ์ž ์ง€์ • mgmtCmd (์„ค์ • ๋ฐฉ๋ฒ•์€ API ๋ฌธ์„œ ์ฐธ์กฐ) POST
5. Content Instance ์ƒ์„ฑ ์„ผ์„œ์˜ ์ธก์ •๊ฐ’์„ ์ง€์ •ํ•œ ์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. POST
6. execInstance ๊ฐฑ์‹  ThingPlug๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ execInstance์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. PUT
  • MQTT ๋ฒ„์ „์˜ ๊ฒฝ์šฐ isRunning์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋™์ž‘์„ ๊ตฌ๋ถ„ ์ง€์œผ๋ฉฐ, Subscribe๋ฅผ ํ†ตํ•ด ThingPlug๋กœ๋ถ€ํ„ฐ Response๋ฅผ ๋ฐ›๊ณ , Publish๋ฅผ ํ†ตํ•ด ThingPlug๋กœ HTTP์˜ Request ๋™์ž‘์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 4 - ๋””๋ฐ”์ด์Šค ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ์—ญํ• 

  • ์‹ค์ œ ์„ผ์„œ ๊ฐ’์„ ThingPlug์— ๋ณด๋‚ด๊ณ , Application์—์„œ ํ•ด๋‹น ๊ฐ’์„ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” contentInstance์˜ parameter์ธ ๊ฐ’์„ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์•„๋ž˜ contents ํ•จ์ˆ˜์˜ return ๊ฐ’์ด ๋ฐ”๋กœ ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
//////////////config.js////////////////////
module.exports = {
  delimiter : ',',									// contents ๊ตฌ๋ถ„์ž															
 
  contents : function(){															// Device์—์„œ ThingPlug๋กœ ์ „๋‹ฌํ•˜๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ (contentInstance์˜ Attribute <con>)
	var value_TEMP = (Math.floor(Math.random() * 5) + this.BASE_TEMP).toString();	// ๊ฐ€์ƒ์˜ ์˜จ๋„๊ฐ’
	var value_HUMID = (Math.floor(Math.random() * 5) + this.BASE_HUMID).toString();	// ๊ฐ€์ƒ์˜ ์Šต๋„๊ฐ’
	var value_LUX = (Math.floor(Math.random() * 5) + this.BASE_LUX).toString();		// ๊ฐ€์ƒ์˜ ์กฐ๋„๊ฐ’

	return value_TEMP + this.delimiter + value_HUMID + this.delimiter + value_LUX;
  }
};
  • ์•„๋ž˜ ์˜ˆ์ œ๋Š” application์—์„œ ThingPlug์— ์˜ฌ๋ผ์˜จ ๊ฐ€์ƒ ์„ผ์„œ๊ฐ’์„ ์ง€์ •ํ•œ delimiter๋ฅผ ์ด์šฉํ•ด ํŒŒ์‹ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์˜ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
//////////////public/js/app.js////////////////////
//-------------------------------------์ฃผ๊ธฐ์ ์œผ๋กœ ์กฐํšŒ๋œ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ---------------------------------------//
	
	getConfig( function(err,config) {

	...
		
	setInterval(function(){
		
		getData(container_name, function(err,time,data_prim){
			var valueTemp = data_prim.split(delimiter[nodeIndex])[0];		// delimiter๋ฅผ ์ด์šฉํ•˜์—ฌ ์˜จ๋„๊ฐ’ ํŒŒ์‹ฑ
			var valueHumid = data_prim.split(delimiter[nodeIndex])[1];		// delimiter๋ฅผ ์ด์šฉํ•˜์—ฌ ์Šต๋„๊ฐ’ ํŒŒ์‹ฑ
			var valueLux = data_prim.split(delimiter[nodeIndex])[2];		// delimiter๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ๋„๊ฐ’ ํŒŒ์‹ฑ
	
	...
	

Device ์‹คํ–‰ ๊ฒฐ๊ณผ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ ํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 5 โ€“ device_mqtt์‹คํ–‰ ๊ฒฐ๊ณผ

ThingPlug ๋‚ด ๊ณ„์ •์— Device๋ฅผ ๋“ฑ๋ก

ํšŒ์›๊ฐ€์ž…

์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ A ์„œ๋น„์Šค ์•„๋ž˜ B,C ๋‹จ๋ง์ด ๋“ฑ๋ก๋œ ๊ฒฝ์šฐ, D์„œ๋น„์Šค๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” Key๊ฐ€ uKey์ด๋ฉฐ, ํšŒ์›๊ฐ€์ž…์„ ํ†ตํ•ด ๋ฐœ๊ธ‰ ๋ฐœ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • uKey ๋ฐœ๊ธ‰

    • ์™ธ๋ถ€์—์„œ ThingPlug Rest API ์ ‘๊ทผ ์‹œ ์ •์ƒ์ ์ธ ์ ‘๊ทผ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” Access Token Key

(Mqtt Client์˜ User Credential์œผ๋กœ ์‚ฌ์šฉ

  1. ํšŒ์›๊ฐ€์ž…: https://thingplugdev.sktiot.com

  1. ๋””๋ฐ”์ด์Šค ์—ฐ๋™ ํ”„๋กœํ† ์ฝœ: HTTP ์„ ํƒ

  1. ์‚ฌ์šฉ์ž ์ธ์ฆํ‚ค: uKey (์‹œ์Šคํ…œ ์ƒ์„ฑ)

๋””๋ฐ”์ด์Šค ๋“ฑ๋ก

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ThingPlug oneM2M REST API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”์— ๋”ฐ๋ผ ์ œ์–ด๋ช…๋ น์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ThingPlug ์‚ฌ์ดํŠธ์— ์œ„ device(์ƒ์„ฑ๋œ remoteCSE)๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹จ๋ง๋“ฑ๋ก ์ด์ „์— ๋‹จ๋ง์ด ThingPlug ํฌํƒˆ์— node, remoteCSE ์ž์›์ด ์ •์ƒ์ ์œผ๋กœ ๋™๋ก ์™„๋ฃŒ

  • ๋‹จ๋ง ์‹๋ณ„ ๋ฐฉ๋ฒ•์€ ๋‹จ๋งID(nodeID)์™€ passCode๋กœ ๊ตฌ๋ถ„

    • passCode

      • ํฌํƒˆ์—์„œ ๋‹จ๋ง์„ ์‹๋ณ„ํ•˜๊ธฐ์œ„ํ•œ ์‚ฌ์šฉ์ž์ง€์ • ๋‹จ๋ง ๋น„๋ฐ€๋ฒˆํ˜ธ(4 โ€“ 16์ž๋ฆฌ)

      • ๋‹จ๋ง ๋“ฑ๋ก ๊ณผ์ •์—์„œ ์‚ฌ์šฉ

  1. [ThingPlug] ๋กœ๊ทธ์ธ ํ›„ "๋งˆ์ดํŽ˜์ด์ง€ > ๋‚˜์˜ ๋””๋ฐ”์ด์Šค > ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก" ํŽ˜์ด์ง€๋กœ ์ด๋™

  2. ์œ„์—์„œ device ์‹คํ–‰ ์‹œ ์‚ฌ์šฉํ•œ config.js์˜ ๋””๋ฐ”์ด์Šค ์•„์ด๋””(LTID)์™€ passCode๋ฅผ ๊ฐœ๋ณ„๋“ฑ๋ก์— ์ž…๋ ฅํ•˜๊ณ  ๋””๋ฐ”์ด์Šค ์ •๋ณดํ™•์ธ ๋ฒ„ํŠผ

  3. ํ•„์ˆ˜์ •๋ณด ์ž…๋ ฅํ™”๋ฉด์— ๋‚ด์šฉ์„ ํ•ด๋‹น ๋‚ด์šฉ์„ ๋„ฃ์–ด์ค€ ํ›„ ํ•˜๋‹จ '์ €์žฅ'๋ฒ„ํŠผ

  4. ThingPlug์— Device ๋“ฑ๋ก ์™„๋ฃŒ

  5. ๋งˆ์ดํŽ˜์ด์ง€ โ€“ ๋‚˜์˜ ๋””๋ฐ”์ด์Šค์—์„œ ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก์ด ๋˜์—ˆ์Œ์„ ํ™•์ธ

Application ์‹คํ–‰

node application_web.js ๋ช…๋ น์–ด๋กœ application์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. (Application ์‹คํ–‰ํ•˜๊ธฐ ์ „์— device.js๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ device.js ์‹คํ–‰์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด terminal(์ปค๋งจ๋“œ์ฐฝ)์„ ์—ด์–ด ์‹คํ–‰ํ•˜์„ธ์š”.

์›นํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•˜์‹œ๊ธฐ ์œ„ํ•ด์„œ๋Š” http://[SERVER_IP]:3000/dashboard๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”

ํ•ด๋‹น web page์—์„œ๋Š” device์˜ ์œ„์น˜๊ฐ’์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๊ณ , ๋””๋ฐ”์ด์Šค์—์„œ ๋ณด๋‚ด์˜จ ๊ฐ€์ƒ ์„ผ์„œ 3์ข…์˜ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, device์— predefined๋œ mgmtCmd๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , trigger๋ฅผ ์„ค์ •ํ•ด event ๋ฐœ์ƒ์‹œ E-MAIL ๋“ฑ์œผ๋กœ ์•Œ๋ฆผ์„ ์ „์†ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 7 โ€“ Application ์—ญํ• 

Application ํ•˜๋Š” ์ผ

๊ตฌ๋ถ„ ์„ค๋ช… Method
1. Content Instance ์กฐํšŒ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ content Instance๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. HTTP GET
2. mgmtCmd ์š”์ฒญ Device๋กœ ๋ณด๋‚ผ ์ œ์–ด ๋ช…๋ น์„ ThingPlug์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค. HTTP POST
2-1. DevReset LoRa ๋””๋ฐ”์ด์Šค ๋ฆฌ์…‹์„ ์œ„ํ•œ mgmtCmd HTTP PUT
2-2. extDevMgmt ์‚ฌ์šฉ์ž ์ง€์ • mgmtCmd (์„ค์ • ๋ฐฉ๋ฒ•์€ API ๋ฌธ์„œ ์ฐธ์กฐ) HTTP PUT
3. mgmtCmd execInstance ์กฐํšŒ Device๋กœ ๋ณด๋‚ธ ์ œ์–ด ๋ช…๋ น์˜ ์ƒํƒœ๋ฅผ ์กฐํšŒ ํ•ฉ๋‹ˆ๋‹ค. HTTP GET
4. Sensor Display Sensor๊ฐ’(ํ˜„์žฌ ์˜จ๋„, ์Šต๋„, ์กฐ๋„) ๊ทธ๋ž˜ํ”„ํ˜•ํƒœ๋กœ ํ‘œ์‹œ d3 API
5. Google ์ง€๋„ API LoRa Device ์œ„์น˜ ํ‘œ์‹œ Google API
6. Trigger ์„ค์ • Trigger ๋ฐœ์ƒ์‹œ notification nodemailer API

Application์—์„œ์˜ ์ œ์–ด ์š”์ฒญ

์‹คํ–‰ ํ›„ Application์—์„œ ์ œ์–ด๋ฅผ ์š”์ฒญํ•˜๊ณ , device.js๊ฐ€ ์‹คํ–‰์ค‘์ธ ํ„ฐ๋ฏธ๋„์„ ์‚ดํŽด๋ณด๋ฉด ใ…pplication์ด ๋ณด๋‚ธ mgmtCmd์— ๋Œ€ํ•œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊ทธ๊ฐ€ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 7-1 โ€“ Web App์—์„œ ๋ฒ„ํŠผ ์ด์šฉํ•œmgmtCmd ์š”์ฒญ

Application_web ์ฝ”๋“œ ์˜ˆ์ œ

////////////CODE EXAMPLE in /public/js/app.js////////////////
///๋ฒ„ํŠผ ํด๋ฆญ ์‹œ application์—์„œ mgmtCmd(DevReset) ์†ก์‹ ///////
	$('#DevReset').on('click', function(event) {
		$.post('/control',{cmt:'DevReset', cmd:'request'}, function(data,status){
		});
	});

๊ทธ๋ฆผ 7-2 โ€“CLI์—์„œ Argument๋ฅผ ์ด์šฉํ•œ mgmtCmd ์š”์ฒญ

๊ทธ๋ฆผ 8 โ€“ device.js์—์„œ mgmtCmd Push message๋ฅผ ๋ฐ›์€ ๊ฒฝ์šฐ console๋กœ๊ทธ

///////CODE EXAMPLE in device.js///////////

  1. device_http.js ์˜ˆ์ œ
////////////response for HTTP//////////////
httpRes.createServer(function (req, res) {
...//๋ฐ›์€ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐ ์‘๋‹ต
}).listen(ResponsePORT);
  1. device_mqtt.js ์˜ˆ์ œ
////////////response for MQTT//////////////
client.on('message', function(topic, message){
	var msgs = message.toString().split(',');
	xml2js.parseString( msgs[0], function(err, xmlObj){
		...//๋ฐ›์€ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐ ์‘๋‹ต
		
		/////////condition branch device.js//////////////////
		if(cmt=='RepImmediate'){//์ฆ‰์‹œ๋ณด๊ณ 
			...
		}
		else if(cmt=='extDevMgmt'){//์‚ฌ์šฉ์ž ์ง€์ • ๋ช…๋ น์–ด
			...		
		}
		else{
			
		}
	});

Trigger ๋“ฑ๋ก

์„ผ์„œ๊ฐ’ ๊ด€๋ จ ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ๋ฉ”์ผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

nodemailer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์˜€์œผ๋ฉฐ, ์•Œ๋ฆผ ๋ฐ›๊ณ ์ž ํ•˜๋Š” ๋ฉ”์ผ ์ฃผ์†Œ ๋ฐ smtp์ฃผ์†Œ๋ฅผ ์ด์šฉํ•ด ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ๋ฉ”์ผ๋กœ ๋””๋ฐ”์ด์Šค์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”.

Web Application ์‹คํ–‰

node application_web.js ๋ช…๋ น์–ด๋กœ Express.js ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์–ด์„œ ์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„์˜ IP๋กœ ์ ‘์†ํ•˜์—ฌ Dashboard๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ์„ผ์„œ๋ฅผ ์œ„ํ•œ Dashboard๋Š” http://[SERVER_IP]:3000/dashboard ์ด๋ฉฐ, ๊ฐ€์ƒ ์„ผ์„œ๊ฐ’์„ Dashboard์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” node device.js ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น application์˜ ์‹ค์ œ ๋™์ž‘๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” /public/index.html ํŒŒ์ผ์—์„œ ์›นํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , /public/js/app.jsํŒŒ์ผ์—์„œ ์‹ค์ œ ๋™์ž‘๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

web page

๊ทธ๋ฆผ 9 โ€“ StarterKit Web App ์‹คํ–‰ ๊ฒฐ๊ณผ

FAQ

ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด์ œ ThingPlug LoRa IoT User์ž…๋‹ˆ๋‹ค.

๋ฒŒ์จ Starter Kit์„ ์ด์šฉํ•˜์—ฌ SKT ThingPlug LoRa ์‚ฌ์šฉ์— ํ•„์š”ํ•œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ค€๋น„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Application๊ณผ Device์˜ ์ฝ”๋“œ๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์ƒ๊ฒจ๋‚˜๋Š” ๊ถ๊ธˆ์ฆ์€ ThingPlug ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ด์šฉํ•ด์ฃผ์„ธ์š”.

Starter Kit์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ThingPlug ๊ฐ€์ด๋“œ๋ถ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ThingPlug๋กœ ์‹œ์ž‘ํ•˜๋Š” IoT ์„œ๋น„์Šค ๊ฐœ๋ฐœ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

device ์‹คํ–‰ ์‹œ ๋งˆ๋‹ค ๋งค๋ฒˆ Resource๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•˜๋Š” ๊ฑด๊ฐ€์š”?

์•„๋‹™๋‹ˆ๋‹ค. ๋””๋ฐ”์ด์Šค๋งˆ๋‹ค ์ตœ์ดˆ 1ํšŒ๋งŒ Resource๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณธ ์Šคํƒ€ํ„ฐํ‚ท์—์„œ๋Š” ๋””๋ฐ”์ด์Šค ์‹คํ–‰ ์‹œ ๋งค๋ฒˆ Resource๋ฅผ ๋“ฑ๋กํ•˜๋„๋ก ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ฐ™์€ ID๋กœ ๋งŒ๋“œ๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐconflict ( HTTP : 409, MQTT : 4015) ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ• ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ดํŽ˜์ด์ง€์— ์‚ฌ์šฉ์ž ์ธ์ฆํ‚ค๊ฐ€ ์—†๋Š”๋ฐ์š”?

ThingPlug ํšŒ์›๊ฐ€์ž… ์ž…๋ ฅ์–‘์‹์— ์žˆ๋Š” ๋””๋ฐ”์ด์Šค ์—ฐ๋™ ํ”„๋กœํ† ์ฝœ ์„ ํƒ์„ ๋ฐ˜๋“œ์‹œ HTTP๋กœ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ oneM2M API๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€์ž…์‹œ์—๋งŒ ์„ ํƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์•„์ด๋””๋กœ ์ƒˆ ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ๊ฐ€์ž… ์ž…๋ ฅ์–‘์‹์—์„œ ๊ผญ HTTP๋กœ ์„ ํƒํ•ด์ฃผ์„ธ์š”.

MQTT connect๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

ThingPlug ID์™€ uKey๊ฐ€ configํŒŒ์ผ์— ์ œ๋Œ€๋กœ ์ž…๋ ฅ์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  clientId๊ฐ€ ๋‹ค๋ฅธ์‚ฌ๋žŒ๊ณผ ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ ๊ฐ„ํ˜น ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค

์„ผ์„œ๊ฐ’์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค

ThingPlug ํฌํ„ธ์— ๋””๋ฐ”์ด์Šค๋ฅผ ๋“ฑ๋กํ•˜์˜€๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ๋“ฑ๋กํ•˜์ง€ ์•Š์€๊ฒฝ์šฐ uKey mapping์ด ๋˜์ง€ ์•Š์•„ Application์—์„œ ๋””๋ฐ”์ด์Šค๋กœ ์ ‘๊ทผ์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

config.js๊ฐ€ ์—†๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค

Sample์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋Š”์ง€, ํŒŒ์ผ๋ช…์—์„œ sample์„ ์ง€์› ๋Š”์ง€ ๋‹ค์‹œํ•œ๋ฒˆ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors