์•ˆ๋…•ํ•˜์„ธ์š”? ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” TJBot์„ Bluemix์˜ IoT ์„œ๋น„์Šค์ธ IoT Foundation๊ณผ ์—ฐ๋™ํ•˜๋Š” ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ณธ ๊ธ€์€ ์ˆœ์„œ๋Œ€๋กœ ์ด์–ด์ง€๋Š” ๋‚ด์šฉ์ด๋ผ ์•ž์„œ ๊ธ€์˜ ๋‚ด์šฉ์ด ์ง„ํ–‰๋œ ์ƒํƒœ๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ์ด๊ธ€์„ ๋ณด์‹œ๋Š” ๋ถ„๋“ค์€ ์•ž์˜ ๊ธ€์„ ๋จผ์ € ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•ž์„œ ํฌ์ŠคํŒ…์—์„œ๋Š” Watson Conversation์„ ๊ตฌ์„ฑํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๋ช…๋ น์œผ๋กœ ์ธ์‹ํ•˜๋„๋ก TJBot์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ก Dialog๋ฅผ ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์˜ˆ์‹œ๋กœ์„œ ํฌ์ŠคํŒ…์„ ํ•˜๊ธด ํ–ˆ์ง€๋งŒ, Watson Conversation ๋ฉ”์‹œ์ง€ ๋ถ„์„์„ ์œ„ํ•œ ์„œ๋น„์Šค์ธ๋ฐ ์ด๋ฅผ TJBot์˜ ๋ช…๋ น ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ธ์ง€์— ๋Œ€ํ•œ ์˜๋ฌธ์€ ๋‚จ์•„ ์žˆ๋Š” ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ์ด๋ฒˆ์—๋Š” TJBot์˜ ์ œ๊ณต ๊ธฐ๋Šฅ์„ ๋‹จ์œ„ ๊ธฐ๋Šฅ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑ ํ•  ๋•Œ ์ด๋ฅผ ์กฐํ•ฉํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ตฌ์ƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์€ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๊ณ  TJBot๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด API๋ฅผ ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋˜ํ•œ Conversation ์„œ๋น„์Šค๊นŒ์ง€ ์—ฐ๋™์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š” end-to-end ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์•„๋ฌด๋Ÿฐ ๊ธฐ๋ฐ˜ ์—†์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ๊ฐํ•ด ๋ณธ ๊ฒƒ์ด Bluemix์—์„œ ์ œ๊ณตํ•˜๋Š” IoT Foundation Platform์ด์—ˆ์Šต๋‹ˆ๋‹ค.

IBM IoT Platform์€ IoT ๋‹จ๋ง๊ณผ ๋ฐ ์„œ๋น„์Šค์•ฑ์— ๋Œ€ํ•œ ์•„ํ‚คํ…์ณ๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ TJBot์„ IoT ๋‹จ๋ง์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด TJBot์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์›๊ฒฉ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ Bluemix์—์„œ ์ œ๊ณตํ•˜๋Š” IoT Starter Kit์€ WebUI ๋„๊ตฌ๋กœ์„œ ์„œ๋น„์Šค ๋กœ์ง์„ ์†์‰ฝ๊ฒŒ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋Š” Node-RED๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ TJBot์ด ๊ฐ€์ง„ ๊ธฐ๋Šฅ๊ณผ ๋กœ์ง ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ข€ ๋” ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ž€ ์ƒ๊ฐ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

IoT ๋‹จ๋ง๋กœ์„œ TJBot ๊ตฌ์„ฑ

IoT ๋‹จ๋ง๋กœ์„œ TJBot์„ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค ํ”Œ๋กœ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

tjbot_iotf

TJBot์˜ ๋‹จ์œ„ ๊ธฐ๋Šฅ ์ •์˜

TJBot์„ IoT ๋‹จ๋ง๋กœ ๋ณธ๋‹ค๋ฉด, TJBot์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•˜๊ณ  ์ด๋ฅผ IoT Command์™€ IoT Event๋กœ ๋งคํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด TJBot์—์„œ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น(Input)์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • LED ์ œ์–ด : LED On/Off ๋ฐ ์ƒ‰์ƒ ๋ณ€๊ฒฝ
  • ์„œ๋ณด ๋ชจํ„ฐ ์ œ์–ด : TJBot์˜ ํŒ”์„ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜, ๋‚ด๋ฆฌ๊ฑฐ๋‚˜ ํŠน์ • ์œ„์น˜๋กœ ์›€์ง์ž…๋‹ˆ๋‹ค.
  • ์Œ์„ฑ ์ถœ๋ ฅ : Text๋ฅผ ์Œ์„ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์Šคํ”ผ์ปค๋กœ ์ถœ๋ ฅ

๊ทธ๋ฆฌ๊ณ , TJBot์ด ์ƒ์„ฑ(Output) ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์Œ์„ฑ ์ธ์‹ : ๋งˆ์ดํฌ๋กœ ๋ฐ›์€ ์Œ์„ฑ์„ Watson STT ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ Text๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ •์˜ํ•œ TJBot์˜ ๋‹จ์œ„ ๊ธฐ๋Šฅ์„ IoT Command์™€ Event๋กœ ๋งคํ•‘ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๋ช…๋ น ๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…
LED์ œ์–ด lighting color code string
์„œ๋ณด์ œ์–ด servo precent number
์Œ์„ฑ ์ถœ๋ ฅ speak text string

๊ธฐ๋Šฅ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…
์Œ์„ฑ ์ธ์‹ listen text string

์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ณธ๊ฒฉ์ ์œผ๋กœ IoT ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด ๋ด…๋‹ˆ๋‹ค.

IoT Starter App ์ƒ์„ฑ ๋ฐ Conversation ์—ฐ๊ฒฐ

IoT Foundation์„ ์ด์šฉํ•˜๋ ค๋ฉด Bluemix์˜ IoT Foundation ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. TJBot์„ ์ œ์–ดํ•˜๋ ค๋ฉด IoT Foundation ์„œ๋น„์Šค๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Node-RED ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ Bluemix Catalog์˜ Internet of Things Starter ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. IoT Starter๋Š” Node.js ๋Ÿฐํƒ€์ž„ ๊ธฐ๋ฐ˜์˜ Node-RED, Cloudant ๋ฐ IoT Foundation ์„œ๋น„์Šค๊ฐ€ ์—ฐ๊ฒฐ๋œ Application์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. Bluemix์—์„œ IoT Starter App์„ ์ƒ์„ฑ์€ Watson IoT ํ”Œ๋žซํผ์„ ์ด์šฉํ•œ IoT ์Šคํƒ€ํ„ฐ ์•ฑ ๋”ฐ๋ผํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

IoT Starter App์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด ์ด App์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tjbot-bluemix-00

์ด์ œ ์ด ์„œ๋น„์Šค์— Watson Conversation์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Application ๋Œ€์‹œ๋ณด๋“œ์˜ ์™ผ์ชฝ ๋ฉ”๋‰ด๋ฅผ ๋ณด๋ฉด Connections ๋ฉ”๋‰ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ˜„์žฌ ์ด ์•ฑ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์„œ๋น„์Šค๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” Watson Conversation ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด Connecting Exists ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์‹ ๊ทœ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด Connect new๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

tjbot-bluemix-01

๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ ๋ฆฌ์ŠคํŠธ์—๋Š” ๊ธฐ์กด์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ์„œ๋น„์Šค๋“ค์ด ์žˆ์œผ๋ฉฐConversation ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ›„ Connect ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

tjbot-bluemix-02

์„œ๋น„์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—ฐ๊ฒฐ๋˜๋Š” ๊ณผ์žฅ์—์„œ ๊ธฐ์กด ์•ฑ์„ ์ค‘์ง€ ํ›„ ๋‹ค์‹œ ๋ฐฐํฌํ•˜๋Š” ์ ˆ์ฐจ๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tjbot-bluemix-03

์žฌ๋ฐฐํฌ์™€ ๋ณ„๊ฐœ๋กœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์ด ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋Œ€์‹œ๋ณด๋“œ์— ์„ ํƒํ•œ Conversation ์„œ๋น„์Šค๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tjbot-bluemix-04

์žฌ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ผ๋ฉฐ, ์žฌ์‹œ์ž‘์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, IoT Starter Kit์œผ๋กœ ์ƒ์„ฑํ•œ ์•ฑURL์„ ์›น๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘์†ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ดˆ๊ธฐ ํ™”๋ฉด์œผ๋กœ ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-01

ํ™”๋ฉด์— ๋ณด์ด๋Š” Go to your Node-RED flow editor ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Node-RED ํ”Œ๋กœ์šฐ ํŽธ์ง‘ํ™”๋ฉด์œผ๋กœ ์ง„์ž…ํ•˜๋ฉฐ ์ด๊ณณ์—์„œ ๋…ธ๋“œ์™€ ํ”Œ๋กœ์šฐ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ IoT ๋‹จ๋ง์˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image41

ํ™”๋ฉด์˜ ์™ผํŽธ์—๋Š” ํ”Œ๋กœ์šฐ ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํŒ”๋ ˆํŠธ๊ฐ€ ์žˆ๊ณ , ์˜ค๋ฅธ์ชฝ์—๋Š” debug ๋…ธ๋“œ์—์„œ ๋ฐœ์ƒํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” debug ํŒจ๋„ ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํƒญ UI๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ IoT Starter App์„ ์ƒ์„ฑํ•˜๋ฉด Flow1 ํƒญ์— ๊ธฐ๋ณธ ์˜ˆ์ œ๊ฐ€ ๋ณด์ด๋Š”๋ฐ ๋งˆ์šฐ์Šค๋กœ ์˜์—ญ์„ ์„ ํƒํ•˜์—ฌ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ƒˆ๋กœ์šด Flow๋ฅผ ์ƒ์„ฑํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Flow๋ฅผ ๋งŒ๋“ค๊ธฐ ์ „์— IoT Foundation ๋””๋ฐ”์ด์Šค ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Bluemix์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋‹ค์‹œ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

TJBot ๋””๋ฐ”์ด์Šค ์ •๋ณด ๋“ฑ๋ก

์•ฑ์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ์ค‘ Internet of Things Platform ์„œ๋น„์Šค๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image13

image14

๊ทธ๋ฆฌ๊ณ , ์—ฌ๊ธฐ ๋Œ€์‹œ๋ณด๋“œ ์‹คํ–‰ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ Internet of Things ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒญ ๋ฉ”๋‰ด ์ค‘ Device Type ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

tjbot-iotf-01

+ Create Type ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋””๋ฐ”์ด์Šค ์ข…๋ฅ˜ ์ถ”๊ฐ€๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. IoT Foundation์— ๋””๋ฐ”์ด์Šค๋ฅผ ๋“ฑ๋กํ•˜๋ ค๋ฉด ๋””๋ฐ”์ด์Šค์˜ ์ข…๋ฅ˜๋ฅผ ๋จผ์ € ๋“ฑ๋กํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๋จผ์ € ์ง„ํ–‰ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์šฐ๋ฆฌ๋Š” gateway๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ๋‹จ๋ง์ด๋ฏ€๋กœ create device type์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
tjbot-iotf-02

๋””๋ฐ”์ด์Šค ์ข…๋ฅ˜์— ๋Œ€ํ•œ ์ด๋ฆ„์„ TJBot์œผ๋กœ ์ž…๋ ฅ ํ›„ ๋‹ค์Œ์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ถ”๊ฐ€ ํ•ญ๋ชฉ์ด๋‚˜ Metadata ์ •๋ณด ์ž…๋ ฅ์— ๋Œ€ํ•œ ํ™”๋ฉด์ด ๋‚˜์˜ค์ง€๋งŒ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์—†์ด ๊ธฐ๋ณธ ์ƒํƒœ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
tjbot-iotf-03

TJBot ๋””๋ฐ”์ด์Šค ํƒ€์ž…์ด ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
tjbot-iotf-04

๋””๋ฐ”์ด์Šค ํƒ€์ž…์„ ์ƒ์„ฑ ํ–ˆ๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ๋””๋ฐ”์ด์Šค ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. Browse ํƒญ์„ ๋ˆŒ๋Ÿฌ ํ˜„์žฌ ๋“ฑ๋ก๋œ ๋””๋ฐ”์ด์Šค์˜ ์ •๋ณด ๋ฐ ์ƒํƒœ๋ฅผ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด ์˜ค๋ฅธ์ชฝ์˜ + Add Device ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋‹จ๋ง ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
tjbot-iotf-05

๋””๋ฐ”์ด์Šค ํƒ€์ž…์€ TJBot์ด ๋ฉ๋‹ˆ๋‹ค.
tjbot-iotf-06

๋””๋ฐ”์ด์Šค ID๋Š” ๋ณดํ†ต ๋‹จ๋ง์˜ ๊ณ ์œ ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋”๋„ท์นด๋“œ์˜ ๋งฅ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ Manufacturer serial ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์ž„์˜๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด tjbot-red ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
tjbot-iotf-07

๋‹ค์Œ์€ ์ธ์ฆ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ธ๋ฐ IoT Foundation์— ์ž„์˜์˜ ๋‹จ๋ง์ด ๋ถ™์–ด์„œ ์„œ๋น„์Šคํ•˜์ง€ ์•ˆ๋„๋ก ์ธ์ฆ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ณ„๋„๋กœ ๋ณด๊ด€๋œ ์ธ์ฆํ‚ค๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜๋ฉฐ ๋งŒ์•ฝ ์—†๋‹ค๋ฉด ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ธ€์—์„œ๋Š” ํ›„์ž, ์ž๋™ ์ƒ์„ฑ ๋ฐฉ์‹์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
tjbot-iotf-08

์ตœ์ข… ์ƒ์„ฑ ์ •๋ณด์— ๋Œ€ํ•œ ์š”์•ฝ ์ •๋ณด์ž…๋‹ˆ๋‹ค.
tjbot-iotf-09

๋””๋ฐ”์ด์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚ด์šฉ์ด ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ์ธ์ฆ ํ‚ค ์ƒ์„ฑ์ธ ๊ฒฝ์šฐ ์ด ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ํ‚ค ์ •๋ณด๋ฅผ ์ž˜ ๋ณด๊ด€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ์™„๋ฃŒ ์ดํ›„ ์‹œ์ ์—์„œ๋Š” ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋‹ค์‹œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์œผ๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
tjbot-iotf-10

๋””๋ฐ”์ด์Šค ๋“ฑ๋ก์„ ๋งˆ์ณค์œผ๋‹ˆ ์ด์ œ TJBot์„ IoT Foundation์— ์—ฐ๋™ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

TJBot ์„ค์ •

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์— ์ ‘์†ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์Šต๋‹ˆ๋‹ค.

mkdir ~/iot
cd ~/iot
git clone http://github.com/mc500/tjbot.git

๊ทธ๋ฆฌ๊ณ , ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

cd ~/iot/tjbot/recipes/tjbot-iot
npm install

์„ค์น˜๊ฐ€ ์™„๋ฃŒ ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ config.js ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

nano config.js

config.js์—๋Š” STT, TTS๋ฅผ ์œ„ํ•œ Watson Service ์ ‘์† ์ •๋ณด์™€ IoT Foundation ์ ‘์†์— ํ•„์š”ํ•œ IoT ์„œ๋ฒ„ ๋ฐ ๋‹จ๋ง ์ •๋ณด๊ฐ€ ์ž…๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์ž…๋ ฅ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ tjbot-iot๋ฅผ ์‹œ์ž‘ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo node tjbot-iot

์ด์ œ TJ hello ๋ผ๊ณ  ์ด์•ผ๊ธฐํ•˜๋ฉด ์Œ์„ฑ์„ ์ธ์‹ํ•˜๊ณ  ์ธ์‹๋œ text์ธ hello๋ฅผ listen ์ด๋ฒคํŠธ๋กœ IoT Foundation์œผ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. listen ์ด๋ฒคํŠธ๊ฐ€ ์ž˜ ์ „์†ก๋˜์—ˆ๋Š”์ง€๋Š” Node-RED ํ™”๋ฉด์—์„œ ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Node-RED ์ด๋ฒคํŠธ ํ”Œ๋กœ์šฐ

Node-RED์—์„œ๋Š” IoT๊ด€๋ จ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ input ํŒ”๋ ˆํŠธ์—์„œ ibmiot ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ํ™”๋ฉด์— ๋‚ด๋ ค ๋†“์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  output ํŒ”๋ ˆํŠธ์—์„œ debug ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋‚ด๋ ค ๋†“์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด input ๋…ธ๋“œ์™€ output ๋…ธ๋“œ๋ฅผ ๋งˆ์šฐ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๊ณ  ํ™”๋ฉด ์˜ค๋ฅธ์ชฝ์˜ DEPLOY ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ˆ˜์ •๋œ ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-03

ibmiot ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋ฉด ์ด ๋…ธ๋“œ์— ๋Œ€ํ•œ ์„ค์ • ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด TJBot์ด ๋ณด๋‚ด๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
tjbot-nodered-02

๋‚ด์šฉ์„ ์ˆ˜์ •ํ–ˆ์œผ๋‹ˆ ๋‹ค์‹œ DEPLOY ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ˆ˜์ •๋œ ๋‚ด์šฉ์„ ๋ฐฐํฌ ๋ฐ˜์˜ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , tjbot์—๊ฒŒ tj hello๋ผ๊ณ  ๋‹ค์‹œ ๋ง์„ ํ•ด ๋ด…๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ ์ฐฝ์— TJBot์œผ๋กœ ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ‘hello’๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์˜ฌ๋ผ์˜จ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tjbot-nodered-04

TJBot์ด ์ด๋ฒคํŠธ๋ฅผ ์ž˜ ์ „์†กํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ–ˆ์œผ๋‹ˆ ์ด์ œ ๋ช…๋ น์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

Node-RED ๋ช…๋ น ํ”Œ๋กœ์šฐ

TJBot์ด ์ฒ˜๋ฆฌํ•  ์„ธ ๊ฐ€์ง€ ๋ช…๋ น (speak, servo, lighting)์— ๋Œ€ํ•œ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. output ํŒ”๋ ˆํŠธ์—์„œ ibmiot ๋…ธ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ๊ฐ€์ง€ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-05

tjbot-nodered-06

tjbot-nodered-07

๊ทธ๋ฆฌ๊ณ , ์ด ๋…ธ๋“œ๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ input ํŒ”๋ ˆํŠธ์—์„œ inject ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. inject ๋…ธ๋“œ๋Š” Node-REDํ™”๋ฉด์—์„œ ํด๋ฆญํ•˜๋ฉด ์„ค์ •๋œ ๊ฐ’์ด ์ž…๋ ฅ์œผ๋กœ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ผ์ข…์˜ ํŠธ๋ฆฌ๊ฑฐ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด speak๋ช…๋ น์„ ์œ„ํ•œ inject ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-09

tjbot-nodered-12

Inject๋ฅผ ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Text ์ž…๋ ฅ์ด ์‹œ์ž‘๋˜๋Š”๋ฐ ์‹คํ–‰ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด JSON ์ž…๋ ฅ์ด ์•„๋‹ˆ๋ผ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

tjbot-nodered-08

๊ทธ๋Ÿฌ๋ฏ€๋กœ Text ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด function ํŒ”๋ ˆํŠธ์˜ function์„ ์„ ํƒํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜์—ฌ Text๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-10

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”Œ๋กœ์šฐ ์ค‘๊ฐ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
tjbot-nodered-11

๋‘ ๋ฒˆ์งธ๋กœ lighting ๋ช…๋ น์„ ์œ„ํ•œ inject ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-16

LED๋กœ ๋‚˜ํƒ€๋‚ผ ์ƒ‰์ƒ ์ •๋ณด๋ฅผ code ๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•ด ๋†“์Šต๋‹ˆ๋‹ค.
tjbot-nodered-13

๋งˆ์ง€๋ง‰์œผ๋กœ servo ๋ช…๋ น์— ๋Œ€ํ•œ inject ๋…ธ๋“œ๋„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-15-fix

tjbot-nodered-14

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ค€๋น„ํ–ˆ๋‹ค๋ฉด ์ด์ œ DEPLOY ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐฐํฌ๋ฅผ ํ•œ ํ›„ TJBot์—๊ฒŒ ๋ช…๋ น์„ ๋‚ด๋ ค๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TJBot์ด ๋ช…๋ น์„ ์ž˜ ์ธ์‹ํ–ˆ๋‹ค๋ฉด ์ด์ œ Node-RED์—์„œ Conversation์„ ์—ฐ๊ฒฐํ•ด ๋ณผ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

Node-RED Conversation ํ”Œ๋กœ์šฐ

Node-RED์—๋Š” Bluemix Watson ์„œ๋น„์Šค ์—ฐ๋™์„ ์œ„ํ•œ ๋…ธ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

tjbot-nodered-19

watson ํŒ”๋ ˆํŠธ์—์„œ conversation ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
tjbot-nodered-17

์ด ๋•Œ ์ž…๋ ฅํ•˜๋Š” workspace-id๋Š” ์•ž์„œ IoT Starter App์— ์—ฐ๊ฒฐํ–ˆ๋˜ Conversation ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” Workspace ID์ž…๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด debug ๋…ธ๋“œ์™€ inject ๋…ธ๋“œ ์‚ฌ์ด๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌ ํ•ฉ๋‹ˆ๋‹ค.
tjbot-nodered-18

inject ๋…ธ๋“œ๋ฅผ ํด๋ฆญํ•˜์—ฌ conversation์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ๊ทธ ์‘๋‹ต์ด debug ํŒจ๋„๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tjbot-nodered-respose-nice-to-see-you

Watson Conversation ์„ค์ •

Conversation Dialog์—์„œ Hello๋ผ๊ณ  ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ฉด anything_else ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด ์–ป์–ด์ง„ ์‘๋‹ต์ธ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋™์ผํ•œ Dialog๋ฅผ Watson API๋กœ ํ˜ธ์ถœํ•˜๋ฉด input/output ์ •๋ณด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ intent, entity ๊ทธ๋ฆฌ๊ณ  context์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ •๋ณด๋“ค์ด ๊ฐ™์ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ intent์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜ ์ด์ƒ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ์ด ๋˜๋ฉฐ, Watson์ด ํŒ๋‹จํ•œ confidence ์ •๋ณด๊ฐ€ ํ•จ๊ป˜ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ „๋‹ฌ ๋ฉ๋‹ˆ๋‹ค.

"intents" : [
  {
    "intent" : "lighting",
    "confidence" : 1
  }
]

์—ฌ๊ธฐ์„œ ์ข€ ์ด์ƒํ•œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Hello๋Š” #lighting intent๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— anything_else ๋…ธ๋“œ์˜ ์‘๋‹ต์„ ์–ป์—ˆ๋Š”๋ฐ ์™œ intent ์ •๋ณด๋Š” #lighting ์ธ๊ฐ€ ํ•˜๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ confidence ๊ฐ’๋„ 1์ธ๋ฐ ์ด๋Š” 100%๋กœ ํ™•์‹ ํ•œ๋‹ค๋Š” ์‘๋‹ต์ž…๋‹ˆ๋‹ค. ๋ญ”๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” ์˜ค๋ฅ˜๋ผ๊ธฐ๋ณด๋‹ค๋Š” ํ˜„์žฌ Watson์ด ํŒ๋‹จ ํ•  ์ˆ˜ ์ด๋Š” Intent๊ฐ€ #lighting ํ•˜๋‚˜๋งŒ ์žˆ์–ด ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ƒˆ๋กœ์šด intent๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ๋ช…ํ™•ํ•˜๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” #lighting intent๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ด ๋ด์•ผ๊ฒ ์ฃ ?

Conversation Dash Board์— ๊ฐ€์„œ ์•„๋ž˜์™€ ๊ฐ™์ด #greeting์ด๋ผ๋Š” ์ƒˆ๋กœ์šด Intent๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

tjbot-conversation-add-greeting-intent

์ด์ œ ๋‹ค์‹œ Hello๋ฅผ ์ž…๋ ฅํ•ด ๋ณผ๊นŒ์š”?

"intents" : [
  {
    "intent" : "greeting",
    "confidence" : 1
  }
]

์ด๋ฒˆ์—๋Š” Hello๋ฅผ #greeting intent๋กœ ์ธ์‹ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ข€ ์ƒ๋šฑ ๋งž์€ world๋ผ๋Š” ๋ง์€ ์–ด๋–จ๊นŒ์š”?

"intents" : [
  {
    "intent" : "greeting",
    "confidence" : 0.8542913515814917
  }
]

#greeting intent๋กœ ์ธ์‹ํ–ˆ์ง€๋งŒ ์ž์‹ ๊ฐ์ด 85%๋กœ ๋–จ์–ด์กŒ๋„ค์š”. ๋ฌผ๋ก  world๋ผ๋Š” ๊ฐ’์ด #greeting intent๋Š” ์•„๋‹ˆ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ Watson์ด ํŒ๋‹จํ•˜๊ธฐ์— #lighting๊ณผ #greeting ์ค‘์—์„œ๋Š” #greeting์— ๋” ๊ฐ€๊น๋‹ค๊ณ  ํŒ๋‹จํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ Intent๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•  ์ˆ˜๋ก ๋” ์ž˜ ๊ตฌ๋ถ„ํ•ด ๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋‹ˆ ๋˜๋„๋ก ๋งŽ์€ ์ž๋ฃŒ์™€ ์˜ˆ์‹œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ์ธ ์…ˆ์ž…๋‹ˆ๋‹ค.

์ด์ œ Node-RED ํ”Œ๋กœ์šฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ํ™•์žฅํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Node-RED ํ”Œ๋กœ์šฐ๋ฅผ ์ด์šฉํ•œ ์„œ๋น„์Šค ํ™•์žฅ

๋‹ค์‹œ ์ฒ˜์Œ ๊ตฌ์„ฑํ•œ ๊ทธ๋ฆผ์œผ๋กœ ๋˜๋Œ์•„ ๋ด…์‹œ๋‹ค.

tjbot_iotf

Node-RED์˜ ์˜์—ญ์€ ๋…ผ๋ฆฌ ํ”Œ๋กœ์šฐ๋กœ์„œ TJBot ๊ธฐ๋Šฅ๊ณผ Conversation์„ ์ด์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์•ž์„œ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋งŒ๋“ค์–ด ๋†“์•˜๋˜ Command ์ž…๋ ฅ ๋…ธ๋“œ์™€ Event ์ˆ˜์‹  ๋…ธ๋“œ ๊ทธ๋ฆฌ๊ณ  Conversation ๋…ธ๋“œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋…ผ๋ฆฌ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Node-RED์˜ ์ข‹์€ ์  ์ค‘ ํ•˜๋‚˜์ธ๋ฐ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์•˜๋˜ ๋…ธ๋“œ๋“ค์„ ์„ ํƒํ•ด์„œ ๋ณต์‚ฌํ›„ ๋ถ™์—ฌ ๋„ฃ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ž˜ ๋ณต์‚ฌํ•ด์„œ ์„œ๋น„์Šค ํ๋ฆ„๋งŒ ์ด์–ด์ฃผ๋ฉด ๋ฐ”๋กœ ์„œ๋น„์Šค๊ฐ€ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์กฐํ•ฉํ•ด ๋ณด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  1. event๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ด๋ฅผ conversation์œผ๋กœ ์ „๋‹ฌํ•ด ์ค€๋‹ค
  2. conversation์˜ ์‘๋‹ต์„ ๋ณด๊ณ  ๊ทธ ๊ฐ’์ด #lighting intent์ด๋ฉด tjbot์—๊ฒŒ command๋กœ ์ „๋‹ฌํ•œ๋‹ค.

๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด flow๋งŒ ์ด์–ด๋†“์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

tjbot-nodered-flow1

๊ทธ๋Ÿฐ๋ฐ ์•ฝ๊ฐ„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช‡ ๊ฐ€์ง€๋ฅผ ๋” ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋กœ event๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ conversation์œผ๋กœ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

conversation์˜ ๊ฒฝ์šฐ payload์— ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ event๋Š” ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

{
  "payload":{
    "d":{
      "text":"Hello"
    }
  }
}

๋”ฐ๋ผ์„œ ์ด๋ฅผ ๋ณ€ํ™˜ํ•ด ์ค„ ๋‹ค์Œ๊ณผ ๋…ธ๋“œ๊ฐ€ event์™€ conversation ๋…ธ๋“œ ์‚ฌ์ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

tjbot-nodered-function-to-conversation

๋‘ ๋ฒˆ์งธ๋กœ๋Š” conversation์—์„œ ์ „๋‹ฌ๋˜๋Š” ์‘๋‹ต์„ ๋ณด๊ณ  ๊ทธ ๊ฐ’์ด #lighting intent์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋ถ€๋ถ„์ด ๋น ์กŒ์Šต๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„ ์—ญ์‹œ function ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋งŒ๋“ค์–ด ๋†“์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Node-RED์—์„œ ์ œ๊ณตํ•˜๋Š” switch ๋…ธ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tjbot-nodered-switch-lighting

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰, #lighting intent ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ ๋‹ค์Œ์ด๋ผ๋„ Event์—์„œ ์ฒ˜๋Ÿผ Command๋„ Command์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด conversation ์‘๋‹ต์„ lighting ๋ช…๋ น ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” function ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.



์ „์ฒด์ ์œผ๋กœ ์™„์„ฑ๋œ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์ œ ํŽธ์ง‘ํ•œ ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  TJBot์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด์•ผ๊ธฐํ•ด ๋ด…๋‹ˆ๋‹ค.

TJ, change the lamp blue

ํŒŒ๋ž€์ƒ‰์œผ๋กœ ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—” ๊ฐˆ์ƒ‰์œผ๋กœ ์ž˜ ๋‚˜์˜ค๋Š”์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด์•ผ๊ธฐ ํ•ด ๋ด…๋‹ˆ๋‹ค.

TJ, change the lamp brown

์ •์ƒ์ ์œผ๋กœ ์ž˜ ๋™์ž‘ํ•œ๋‹ค๋ฉด, ๋‚˜๋จธ์ง€ servo์™€ speak๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ ์ ˆํ•˜๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ