ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์˜ค๋Š˜๋‚  ๋งˆ์ดํฌ๋กœ ์ „์ž ๊ณตํ•™, ํ†ต์‹  ์ฑ„๋„, ์ธํ„ฐ๋„ท ๊ธฐ์ˆ  ๋ฐ ์ธ๊ณต ์ง€๋Šฅ์˜ ๊ธ‰์†ํ•œ ๋ฐœ์ „์œผ๋กœ ์ธํ•ด ์Šค๋งˆํŠธ ํ™ˆ์— ๋Œ€ํ•œ ์ฃผ์ œ๊ฐ€ ์ ์  ๋” ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๊ฐ„์˜ ์ฃผ๊ฑฐ๋Š” ์„๊ธฐ์‹œ๋Œ€ ์ดํ›„ ํฐ ๋ณ€ํ™”๋ฅผ ๊ฒช์—ˆ๊ณ , 4.0์ฐจ ์‚ฐ์—…ํ˜๋ช…๊ณผ ์‚ฌ๋ฌผ์ธํ„ฐ๋„ท ์‹œ๋Œ€๋ฅผ ๋งž์•„ ํŽธ์•ˆํ•˜๊ณ  ๊ธฐ๋Šฅ์ ์ด๋ฉฐ ์•ˆ์ „ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์Šค๋งˆํŠธํฐ์„ ์‚ฌ์šฉํ•ด ์•„ํŒŒํŠธ๋‚˜ ์‹œ๊ณจ์ง‘์„ ์„ธ๊ณ„ ์–ด๋””์—์„œ๋‚˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ณต์žกํ•œ ์ •๋ณด ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐ”๊พธ๋Š” ์†”๋ฃจ์…˜์ด ์‹œ์žฅ์— ์ถœ์‹œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ธ๊ฐ„๊ณผ ๊ธฐ๊ณ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์—๋Š” ๋” ์ด์ƒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์‹์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Œ์„ฑ ์ธ์‹ ๋ฐ ํ•ฉ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋•๋ถ„์— ์‚ฌ๋žŒ์€ ๋ชจ๊ตญ์–ด๋กœ ์Šค๋งˆํŠธ ํ™ˆ์— ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‹œ์žฅ์— ๋‚˜์™€ ์žˆ๋Š” ์ผ๋ถ€ ์Šค๋งˆํŠธ ํ™ˆ ์‹œ์Šคํ…œ์€ ํด๋ผ์šฐ๋“œ ๋น„๋””์˜ค ๊ฐ์‹œ ์‹œ์Šคํ…œ์˜ ๋…ผ๋ฆฌ์  ๊ฐœ๋ฐœ์ด๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›๊ฒฉ ๊ฐœ์ฒด ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ์†”๋ฃจ์…˜์˜ ํ•„์š”์„ฑ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ €์ž๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ๊ธฐ์‚ฌ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ด€์‹ฌ์„ ๋Œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ธฐ์‚ฌ๋Š” ์Šค๋งˆํŠธ ํ™ˆ ๋‚ด๋ถ€์— ์„ค์น˜๋œ ํ„ฐ๋ฏธ๋„ ํด๋ผ์ด์–ธํŠธ ์žฅ๋น„์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ , ๋‘ ๋ฒˆ์งธ ๊ธฐ์‚ฌ๋Š” ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์˜ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด, ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ธ ๋ฒˆ์งธ ๊ธฐ์‚ฌ๋Š” ๋ชจ๋ฐ”์ผ ๋ฐ ๊ณ ์ • ์žฅ์น˜์—์„œ ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ํ™ˆ ์žฅ๋น„

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

  1. ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ธก์ •ํ•˜๋Š” ์„ผ์„œ;
  2. ์™ธ๋ถ€ ๋ฌผ์ฒด์— ์ž‘์šฉํ•˜๋Š” ์•ก์ถ”์—์ดํ„ฐ;
  3. ์„ผ์„œ ์ธก์ • ๋ฐ ๋‚ด์žฅ๋œ ๋กœ์ง์— ๋”ฐ๋ผ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์•ก์ถ”์—์ดํ„ฐ์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ ์š•์‹ค์˜ ๋ˆ„์ˆ˜ ์„ผ์„œ(1), ์นจ์‹ค์˜ ์˜จ๋„(2) ๋ฐ ์กฐ๋ช…(3), ์ฃผ๋ฐฉ์˜ ์Šค๋งˆํŠธ ์†Œ์ผ“(4) ๋ฐ ๋ณต๋„์— ์žˆ๋Š” ๋น„๋””์˜ค ๊ฐ์‹œ ์นด๋ฉ”๋ผ(5).

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

ํ˜„์žฌ RF433, Z-Wave, ZigBee, Bluetooth ๋ฐ WiFi ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” ๋ฌด์„  ์„ผ์„œ๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์žฅ์ ์€ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„์šฉ์ด ์ €๋ ดํ•˜๊ณ  ์‹ ๋ขฐ์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ์กฐ์—…์ฒด๋Š” ์ž์‚ฌ ์žฅ์น˜๋ฅผ ๋Œ€์ค‘ ์‹œ์žฅ์— ์ถœ์‹œํ•˜๊ณ  ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์„ผ์„œ์™€ ์•ก์ถ”์—์ดํ„ฐ๋Š” ๋ฌด์„  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ(6)์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์žฅ์น˜๋ฅผ ๋‹จ์ผ ๋„คํŠธ์›Œํฌ๋กœ ๊ฒฐํ•ฉํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” โ€‹โ€‹ํŠน์ˆ˜ ๋งˆ์ดํฌ๋กœ์ปดํ“จํ„ฐ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ์†”๋ฃจ์…˜์€ ์„ผ์„œ, ์•ก์ถ”์—์ดํ„ฐ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋™์‹œ์— ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šค๋งˆํŠธ ํ”Œ๋Ÿฌ๊ทธ๋Š” ์ผ์ •์— ๋”ฐ๋ผ ์ผœ์ง€๊ฑฐ๋‚˜ ๊บผ์ง€๋„๋ก ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ผ์šฐ๋“œ ๋น„๋””์˜ค ๊ฐ์‹œ ์นด๋ฉ”๋ผ๋Š” ๋™์ž‘ ๊ฐ์ง€๊ธฐ ์‹ ํ˜ธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๋””์˜ค๋ฅผ ๋…นํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ณ„๋„์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—†์ด๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ–์ถ˜ ์œ ์—ฐํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ธ€๋กœ๋ฒŒ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์˜ค๋žซ๋™์•ˆ ๋ชจ๋“  ๊ฐ€์ •์—์„œ ์ผ๋ฐ˜์ ์ธ ๊ฐ€์ „ ์ œํ’ˆ์ด ๋˜์–ด์˜จ ์ผ๋ฐ˜ ์ธํ„ฐ๋„ท ๋ผ์šฐํ„ฐ(7)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๊ฐ€ ์•„๋‹Œ ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด๋ถ€์— ์ €์žฅ๋œ ๋…ผ๋ฆฌ ๋ธ”๋ก ๋•๋ถ„์— ์Šค๋งˆํŠธ ํ™ˆ์ด ๊ณ„์†ํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ

๋ณธ ๊ธ€์—์„œ ๋…ผ์˜ํ•˜๋Š” ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ ์‹œ์Šคํ…œ์šฉ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์‹ฑ๊ธ€๋ณด๋“œ ๋งˆ์ดํฌ๋กœ์ปดํ“จํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด 3 ๋ชจ๋ธ B+2018๋…„ 53์›”์— ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ ์Šค๋งˆํŠธ ํ™ˆ ์ž‘์—…์— ์ถฉ๋ถ„ํ•œ ๋ฆฌ์†Œ์Šค์™€ ์„ฑ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ œํ’ˆ์—๋Š” 64๋น„ํŠธ ARMv8-A ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜ ์ฟผ๋“œ ์ฝ”์–ด Cortex-A1.4 ํ”„๋กœ์„ธ์„œ(1GHz ํด๋Ÿญ), 802.11GB RAM, Wi-Fi 4.2ac, Bluetooth 2.0 ๋ฐ USB XNUMX์„ ํ†ตํ•ด ์ž‘๋™ํ•˜๋Š” ๊ธฐ๊ฐ€๋น„ํŠธ ์ด๋”๋„ท ์–ด๋Œ‘ํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. .

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์ปจํŠธ๋กค๋Ÿฌ ์กฐ๋ฆฝ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์ปดํ“จํ„ฐ(1)๊ฐ€ ํ”Œ๋ผ์Šคํ‹ฑ ์ผ€์ด์Šค(2)์— ์„ค์น˜๋œ ๋‹ค์Œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํฌํ•จ๋œ microSD ํ˜•์‹์˜ 8GB ๋ฉ”๋ชจ๋ฆฌ ์นด๋“œ(3)์™€ USB Z-Wave ๋„คํŠธ์›Œํฌ ์ปจํŠธ๋กค๋Ÿฌ(4)๊ฐ€ ํ”Œ๋ผ์Šคํ‹ฑ ์ผ€์ด์Šค์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์Šฌ๋กฏ. ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋Š” 5V, 2.1A ์ „์› ์–ด๋Œ‘ํ„ฐ(5) ๋ฐ USB - ๋งˆ์ดํฌ๋กœ USB ์ผ€์ด๋ธ”(6)์„ ํ†ตํ•ด ์ „์› ๊ณต๊ธ‰ ์žฅ์น˜์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ์—๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜๋ฉฐ ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ ์„œ๋น„์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ด ๊ธฐ์‚ฌ์˜ ์ €์ž๊ฐ€ ์šด์˜ ์ฒด์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค ๋ผ์ฆˆ๋น„์•ˆ ์ŠคํŠธ๋ ˆ์น˜. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ํ•˜์œ„ ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ์Šค๋งˆํŠธ ํ™ˆ ์žฅ๋น„ ๋ฐ ํด๋ผ์šฐ๋“œ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค;
  • ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ตฌ์„ฑ ๋ฐ ์ž‘๋™ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค;
  • ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌ์„ฑ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ž„๋ฒ ๋””๋“œ DBMS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. SQLite๋Š” ์‹œ์Šคํ…œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํฌํ•จ๋œ SD ์นด๋“œ์˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ์žฅ๋น„ ๋ฐ ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด, ๋…ผ๋ฆฌ์  ์ƒ์‚ฐ ๊ทœ์น™ ๋ธ”๋ก, ์ธ๋ฑ์‹ฑ์ด ํ•„์š”ํ•œ ์ •๋ณด(์˜ˆ: ๋กœ์ปฌ ๋น„๋””์˜ค ์•„์นด์ด๋ธŒ์˜ ํŒŒ์ผ ์ด๋ฆ„) ๋“ฑ ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ์ด ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋ฏ€๋กœ ์ •์ „ ์‹œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค ๋งˆ์ดํฌ๋กœํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PHP 7๋กœ ๊ฐœ๋ฐœ๋œ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ ๋‚ ์”ฌํ•œ. ์›น ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. lighttpd, ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ๊ณผ ๋‚ฎ์€ ๋ฆฌ์†Œ์Šค ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์— ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ
(์‚ฌ์ง„์„ ํด๋ฆญํ•˜์‹œ๋ฉด ๋” ๋†’์€ ํ•ด์ƒ๋„๋กœ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ์Šค๋งˆํŠธ ํ™ˆ ์žฅ๋น„(IP ๊ฐ์‹œ ์นด๋ฉ”๋ผ ๋ฐ ์„ผ์„œ)๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์—ฐ๊ฒฐ๋œ ์žฅ์น˜์˜ ๊ตฌ์„ฑ๊ณผ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์˜ RESTful API ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด JSON ํ˜•์‹์˜ ์ œ์–ด ๋ช…๋ น์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค

์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค - ์Šค๋งˆํŠธ ํ™ˆ์˜ ๊ธฐ์ดˆ๋ฅผ ํ˜•์„ฑํ•˜๋Š” ์ •๋ณด ํ”„๋กœ์„ธ์Šค ์ž๋™ํ™”์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฃผ์š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ: ๊ฐ๊ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌ, ๋‚ด์žฅ๋œ ๋กœ์ง์— ๋”ฐ๋ผ ์ œ์–ด ์กฐ์น˜ ์‹คํ–‰. ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์˜ ๋ชฉ์ ์€ ์Šค๋งˆํŠธ ํ™ˆ ์žฅ๋น„์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ , ์ƒ์‚ฐ ๋…ผ๋ฆฌ ๊ทœ์น™์„ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํด๋ผ์šฐ๋“œ๋กœ๋ถ€ํ„ฐ ๋ช…๋ น์„ ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณ ๋ ค ์ค‘์ธ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” C++๋กœ ๊ฐœ๋ฐœ๋œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ๋ณ„๋„์˜ ์„œ๋น„์Šค๋กœ ์ถœ์‹œ๋œ๋‹ค. ์‹œ์Šคํ…œ ์šด์˜ ์ฒด์ œ ๋ฆฌ๋ˆ…์Šค ๋ผ์ฆˆ๋น„์•ˆ.

์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์š” ๋ธ”๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž;
  2. IP ์นด๋ฉ”๋ผ ์„œ๋ฒ„;
  3. Z-Wave ์žฅ์น˜ ์„œ๋ฒ„;
  4. ์ƒ์‚ฐ ๋…ผ๋ฆฌ ๊ทœ์น™์˜ ์„œ๋ฒ„;
  5. ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ๋…ผ๋ฆฌ์  ๊ทœ์น™ ๋ธ”๋ก
  6. ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ RESTful API ์„œ๋ฒ„
  7. ํด๋ผ์šฐ๋“œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ MQTT ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ๋ธ”๋ก์€ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ๊ทธ ์‚ฌ์ด์˜ ์ •๋ณด๋Š” JSON ํ˜•์‹(๋˜๋Š” ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ด ํ˜•์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ)์˜ ๋ฉ”์‹œ์ง€ ํ˜•์‹์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž, JSON ๋ฉ”์‹œ์ง€๋ฅผ ๋ชจ๋“  ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ๋ธ”๋ก์œผ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. JSON ๋ฉ”์‹œ์ง€ ์ •๋ณด ํ•„๋“œ์˜ ์œ ํ˜•๊ณผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ๋‹ค์Œ ํ‘œ์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๊ธฐ ์ข…๋ฅ˜
ํ”„๋กœํ† ์ฝœ
๋ฉ”์‹œ์ง€ ์œ ํ˜•
์žฅ์น˜์ƒํƒœ
๋ช…๋ น

์นด๋ฉ”๋ผ
์˜จ๋น„ํ”„
์„ผ์„œ๋ฐ์ดํ„ฐ
on
์ŠคํŠธ๋ฆฌ๋ฐ(์ผœ๊ธฐ/๋„๊ธฐ)

๊ฐ์ง€๊ธฐ
์ฆˆ์›จ์ด๋ธŒ
๋ช…๋ น
์˜คํ”„
๋…น์Œ(์ผœ๊ธฐ/๋„๊ธฐ)

์ดํŽ™ํ„ฐ
MQTT
๋น„์ฆˆ๋‹ˆ์Šค๋…ผ๋ฆฌ๊ทœ์น™
์ŠคํŠธ๋ฆฌ๋ฐ(์ผœ๊ธฐ/๋„๊ธฐ)
์žฅ์น˜(์ถ”๊ฐ€/์ œ๊ฑฐ)

๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง
๊ตฌ์„ฑ๋ฐ์ดํ„ฐ
๋…น์Œ(์ผœ๊ธฐ/๋„๊ธฐ)

๋ธ”๋ฃจํˆฌ์Šค
์žฅ์น˜์ƒํƒœ
์˜ค๋ฅ˜

์™€์ดํŒŒ์ด

rf

์˜ˆ๋ฅผ ๋“ค์–ด ์นด๋ฉ”๋ผ ๋™์ž‘ ๊ฐ์ง€๊ธฐ์˜ ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566293475475",
	"clientType": "gateway",
	"deviceId": "1616453d-30cd-44b7-9bf0-************",
	"deviceType": "camera",
	"protocol": "onvif",
	"messageType": "sensorData",
	"sensorType": "camera",
	"label": "motionDetector",
	"sensorData": "on"
}

์ƒ์‚ฐ ๋…ผ๋ฆฌ

๋””์ŠคํŒจ์ฒ˜๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ๋ธ”๋ก์€ ํŠน์ • ์œ ํ˜•์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋…์€ ๋‹ค์Œ ์œ ํ˜•์˜ ์ƒ์‚ฐ ๋…ผ๋ฆฌ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. โ€œ๊ทธ๋ ‡๋‹ค๋ฉดโ€ฆ๊ทธ๋Ÿผโ€ฆโ€, JSON ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ๋จ, ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ๋ธ”๋ก ๋‚ด๋ถ€์˜ ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ๋งํฌ. ์˜ˆ๋ฅผ ๋“ค์–ด, IP ์นด๋ฉ”๋ผ ์„œ๋ฒ„๊ฐ€ GUI ๋ฐ ํด๋ผ์šฐ๋“œ๋กœ๋ถ€ํ„ฐ ๋ช…๋ น์„ ์ˆ˜์‹ ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

{
	"if": {
	    "and": [{
		"equal": {
		    "deviceId": "1616453d-30cd-44b7-9bf0-************"
		}
	    },
	    {
		"equal": {
		    "messageType": "command"
		}
	    }
	    ]
	},
	"then": {
	    "result": "true"
	}
}

์— ๋ช…์‹œ๋œ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ์ „๋ก€ (์™ผ์ชฝ) ๊ทœ์น™์ด ์ฐธ์ด๋ฉด ๋งŒ์กฑ๋ฉ๋‹ˆ๋‹ค. ๋‹น์—ฐํ•œ ๊ฒฐ๊ณผ (์˜ค๋ฅธ์ชฝ) ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•ธ๋“ค๋Ÿฌ๋Š” JSON ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์„ ํ–‰ ํ•ญ๋ชฉ์€ JSON ํ‚ค-๊ฐ’ ์Œ์„ ๋น„๊ตํ•˜๋Š” ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  1. "๊ฐ™์Œ"๊ณผ ๊ฐ™์Œ;
  2. "not_equal"๊ณผ ๊ฐ™์ง€ ์•Š์Œ;
  3. ๋œ "์ ๋‹ค";
  4. ๋” "๋”";
  5. "less_or_equal"๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ;
  6. "greater_or_equal"๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น„๊ต ๊ฒฐ๊ณผ๋Š” ๋ถ€์šธ ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ์—ฐ๊ด€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ทธ๋ฆฌ๊ณ  "๊ทธ๋ฆฌ๊ณ "
  2. ๋˜๋Š” "๋˜๋Š”";
  3. "์•„๋‹ˆ์š”"๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ํด๋ž€๋“œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋งŽ์€ ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋œ ๋งค์šฐ ๋ณต์žกํ•œ ์กฐ๊ฑด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JSON ๋ฉ”์‹œ์ง€์™€ JSON ํ˜•์‹์˜ ์ƒ์‚ฐ ๊ทœ์น™์„ โ€‹โ€‹๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ƒ์‚ฐ ๋…ผ๋ฆฌ ์„œ๋ฒ„ ๋ธ”๋ก์—์„œ ์‚ฌ์šฉ๋˜์–ด ์Šค๋งˆํŠธ ํ™ˆ ์„ผ์„œ์˜ ๊ฐ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์‹์„ ํ‘œํ˜„ํ•˜๊ณ  ๋…ผ๋ฆฌ์  ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋Š” ์Šค๋งˆํŠธ ํ™ˆ์ด ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด: โ€œํ˜„๊ด€๋ฌธ ์—ด๋ฆผ ์„ผ์„œ๊ฐ€ ์ž‘๋™ํ•˜๋ฉด ๋ณต๋„์— ๋ถˆ์„ ์ผœ์ฃผ์„ธ์š”โ€. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์„ผ์„œ(์—ด๋ฆผ ์„ผ์„œ)์™€ ์•ก์ถ”์—์ดํ„ฐ(์Šค๋งˆํŠธ ์†Œ์ผ“ ๋˜๋Š” ์Šค๋งˆํŠธ ๋žจํ”„)์˜ ์‹๋ณ„์ž๋ฅผ ์ฝ๊ณ  JSON ํ˜•์‹์˜ ๋…ผ๋ฆฌ ๊ทœ์น™์„ ์ƒ์„ฑํ•˜์—ฌ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์‹œ๋ฆฌ์ฆˆ์˜ ์„ธ ๋ฒˆ์งธ ๊ธฐ์‚ฌ์—์„œ ๋” ์ž์„ธํžˆ ๋…ผ์˜ํ•  ์˜ˆ์ •์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ๋Š” ์Šค๋งˆํŠธ ํ™ˆ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ์ƒ์‚ฐ ๋…ผ๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. RapidJSON โ€” C++์˜ JSON ํ˜•์‹์šฉ SAX ํŒŒ์„œ. ์ผ๋ จ์˜ ์ƒ์‚ฐ ๊ทœ์น™์„ โ€‹โ€‹์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ฉด ์„ ํ–‰ ํ•ญ๋ชฉ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ ๋น„๊ต ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

void CRuleEngine::Process(PProperties pFact)
{
    m_pActions->clear();

    rapidjson::Reader   reader;
    for(TStringMap::value_type& rRule : m_Rules)
    {
        std::string sRuleId   = rRule.first;
        std::string sRuleBody = rRule.second;

        CRuleHandler            ruleHandler(pFact);
        rapidjson::StringStream ruleStream(sRuleBody.c_str());
        rapidjson::ParseResult  parseResult = reader.Parse(ruleStream, ruleHandler);
        if(!parseResult)
        {
            m_Logger.LogMessage(
                        NLogger2::ePriorityLevelError,
                        std::string("JSON parse error"),
                        "CRuleEngine::Process()",
                        std::string("RuleId: ") + sRuleId);
        }

        PProperties pAction = ruleHandler.GetAction();
        if(pAction)
        {
            pAction->Set("ruleId", sRuleId);
            m_pActions->push_back(pAction);
        }
    }
}

์—ฌ๊ธฐ์— ํŒฉํŠธ โ€” JSON ๋ฉ”์‹œ์ง€์˜ ํ‚ค-๊ฐ’ ์Œ์„ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐ, m_๊ทœ์น™ โ€” ์ƒ์„ฑ ๊ทœ์น™์˜ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์ˆ˜์‹  ๋ฉ”์‹œ์ง€์™€ ์ƒ์„ฑ ๊ทœ์น™์˜ ๋น„๊ต๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. reader.Parse(ruleStream, ruleHandler)์–ด๋””์—์„œ ๊ทœ์น™ ์ฒ˜๋ฆฌ๊ธฐ ๋ถ€์šธ ๋ฐ ๋น„๊ต ์—ฐ์‚ฐ์ž์˜ ๋…ผ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. sRuleId โ€” ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— ๊ทœ์น™์„ ์ €์žฅํ•˜๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ๊ทœ์น™ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. m_p์•ก์…˜ โ€” ๋…ผ๋ฆฌ์  ์ถ”๋ก  ๊ฒฐ๊ณผ๊ฐ€ ํฌํ•จ๋œ ๋ฐฐ์—ด: ๊ทœ์น™ ๋ฒ ์ด์Šค์˜ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•˜๊ณ  ๊ตฌ๋…์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž๋กœ ์ถ”๊ฐ€๋กœ ์ „์†ก๋˜๋Š” JSON ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.

RapidJSON ์„ฑ๋Šฅ์€ ๋‹ค์Œ ๊ธฐ๋Šฅ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. strlen (), ์ตœ์†Œ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋ฉด ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์—์„œ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JSON ํ˜•์‹์˜ ๋ฉ”์‹œ์ง€์™€ ๋…ผ๋ฆฌ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์— ์œ ์—ฐํ•œ ์ •๋ณด ๊ตํ™˜ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Z-Wave ์„ผ์„œ ๋ฐ ์•ก์ถ”์—์ดํ„ฐ

์Šค๋งˆํŠธ ํ™ˆ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์™ธ๋ถ€ ํ™˜๊ฒฝ์˜ ๋‹ค์–‘ํ•œ ๋ณ€์ˆ˜๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ธก์ •ํ•˜๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์„ผ์„œ์™€ ์•ก์ถ”์—์ดํ„ฐ๊ฐ€ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ„์ „์—์„œ๋Š” ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” ๋ฌด์„  ์žฅ์น˜์ž…๋‹ˆ๋‹ค. Z ์›จ์ด๋ธŒ ํŠน๋ณ„ํžˆ ํ• ๋‹น๋œ ์ฃผํŒŒ์ˆ˜๋กœ 869 MHz ๋Ÿฌ์‹œ์•„์˜ ๊ฒฝ์šฐ. ์ž‘๋™ํ•˜๋ ค๋ฉด ์‹ ํ˜ธ ์ค‘๊ณ„๊ธฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฉ”์‹œ ๋„คํŠธ์›Œํฌ๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์žฅ์น˜์—๋Š” ํŠน๋ณ„ํ•œ ์—๋„ˆ์ง€ ์ ˆ์•ฝ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์„ ์ ˆ์ „ ๋ชจ๋“œ์—์„œ ๋ณด๋‚ด๊ณ  ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์ •๋ณด๋ฅผ ๋ณด๋‚ด ๋‚ด์žฅ ๋ฐฐํ„ฐ๋ฆฌ์˜ ์ˆ˜๋ช…์„ ํฌ๊ฒŒ ์—ฐ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์ด์ œ ์‹œ์žฅ์—์„œ ์ƒ๋‹นํžˆ ๋‹ค์–‘ํ•œ Z-Wave ์žฅ์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Zipato PAN16 ์Šค๋งˆํŠธ ์†Œ์ผ“์€ ์ „๊ธฐ ๋„คํŠธ์›Œํฌ์˜ ์ „๊ธฐ ์†Œ๋น„(kWh), ์ „๋ ฅ(W), ์ „์••(V) ๋ฐ ์ „๋ฅ˜(A) ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฐ๊ฒฐ๋œ ์ „๊ธฐ ์ œํ’ˆ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์Šค์œ„์น˜๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  2. Neo Coolcam ๋ˆ„์ถœ ์„ผ์„œ๋Š” ์›๊ฒฉ ํ”„๋กœ๋ธŒ์˜ ์ ‘์ ์„ ๋‹ซ์•„ ์œ ์ถœ๋œ ์•ก์ฒด์˜ ์กด์žฌ๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  3. Zipato PH-PSG01 ์—ฐ๊ธฐ ์„ผ์„œ๋Š” ์—ฐ๊ธฐ ์ž…์ž๊ฐ€ ๊ฐ€์Šค ๋ถ„์„๊ธฐ ์ฑ”๋ฒ„์— ๋“ค์–ด๊ฐˆ ๋•Œ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  4. Neo Coolcam ๋ชจ์…˜ ์„ผ์„œ๋Š” ์ธ์ฒด์˜ ์ ์™ธ์„  ๋ฐฉ์‚ฌ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ๊ด‘ ์„ผ์„œ(Lx)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๋ฉ€ํ‹ฐ์„ผ์„œ Philio PST02-A๋Š” ์˜จ๋„(ยฐC), ์กฐ๋ช…(%), ๋ฌธ ์—ด๋ฆผ, ์‹ค๋‚ด ์‚ฌ๋žŒ ์œ ๋ฌด๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.
  6. ์„ผ์„œ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋Š” Z-Wave USB ์Šคํ‹ฑ ZME E UZB1 ๋„คํŠธ์›Œํฌ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค.

์žฅ์น˜์™€ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋™์ผํ•œ ์ฃผํŒŒ์ˆ˜์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ ์‹œ ์„œ๋กœ๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ Z-Wave ๋„คํŠธ์›Œํฌ ์ปจํŠธ๋กค๋Ÿฌ์— ์ตœ๋Œ€ 232๊ฐœ์˜ ์žฅ์น˜๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์•„ํŒŒํŠธ๋‚˜ ์‹œ๊ณจ์ง‘์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์‹ค๋‚ด์—์„œ ๋„คํŠธ์›Œํฌ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ์Šค๋งˆํŠธ ์†Œ์ผ“์„ ์‹ ํ˜ธ ์ค‘๊ณ„๊ธฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์ด์ „ ๋‹จ๋ฝ์—์„œ ์„ค๋ช…ํ•œ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์—์„œ Z-Wave ์„œ๋ฒ„๋Š” Z-Wave ์žฅ์น˜์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์„ผ์„œ๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ์ฆˆ์›จ์ด๋ธŒ C++์—์„œ๋Š” Z-Wave ๋„คํŠธ์›Œํฌ USB ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์„ผ์„œ ๋ฐ ์•ก์ถ”์—์ดํ„ฐ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์„ผ์„œ๊ฐ€ ์ธก์ •ํ•œ ํ™˜๊ฒฝ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์€ JSON ๋ฉ”์‹œ์ง€ ํ˜•์‹์œผ๋กœ Z-Wave ์„œ๋ฒ„์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566479791290",
	"clientType": "gateway",
	"deviceId": "20873eb0-dd5e-4213-a175-************",
	"deviceType": "sensor",
	"protocol": "zwave",
	"messageType": "sensorData",
	"homeId": "0xefa0cfa7",
	"nodeId": "20",
	"sensorType": "METER",
	"label": "Voltage",
	"sensorData": "229.3",
	"units": "V"
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ตฌ๋…์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์ด๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ตฌ๋…์ž๋Š” ๋…ผ๋ฆฌ ๊ทœ์น™์˜ ์„ ํ–‰ ํ•ญ๋ชฉ์— ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ํ•„๋“œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ํ”„๋กœ๋•์…˜ ๋…ผ๋ฆฌ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์ œ์–ด ๋ช…๋ น์ด ํฌํ•จ๋œ ์ถ”๋ก  ๊ฒฐ๊ณผ๋Š” ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž๋กœ ๋‹ค์‹œ ์ „์†ก๋˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ Z-Wave ์„œ๋ฒ„๋กœ ์ด๋™ํ•˜์—ฌ ์ด๋ฅผ ๋””์ฝ”๋”ฉํ•˜์—ฌ Z-Wave ๋„คํŠธ์›Œํฌ USB ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ™˜๊ฒฝ ๊ฐœ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์•ก์ถ”์—์ดํ„ฐ์— ๋“ค์–ด๊ฐ€ ์Šค๋งˆํŠธ ํ™ˆ์ด ์œ ์šฉํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ
(์‚ฌ์ง„์„ ํด๋ฆญํ•˜์‹œ๋ฉด ๋” ๋†’์€ ํ•ด์ƒ๋„๋กœ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

Z-Wave ์žฅ์น˜ ์—ฐ๊ฒฐ์€ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์žฅ์น˜ ๋ชฉ๋ก์ด ์žˆ๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ "์ถ”๊ฐ€" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์„ธ์š”. RESTful API ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์ถ”๊ฐ€ ๋ช…๋ น์€ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์— ๋“ค์–ด๊ฐ„ ๋‹ค์Œ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž์— ์˜ํ•ด Z-Wave ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Z-Wave ๋„คํŠธ์›Œํฌ USB ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์žฅ์น˜ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•œ ํŠน์ˆ˜ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, Z-Wave ์žฅ์น˜์—์„œ ์„œ๋น„์Šค ๋ฒ„ํŠผ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋น ๋ฅด๊ฒŒ ๋ˆŒ๋Ÿฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค(3์ดˆ ๋‚ด์— 1,5ํšŒ ๋ˆ„๋ฆ„). USB ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์žฅ์น˜๋ฅผ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์žฅ์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ Z-Wave ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ƒˆ ์žฅ์น˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ƒˆ ํ•ญ๋ชฉ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์ง€๋‚˜๋ฉด ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ Z-Wave ์žฅ์น˜ ๋ชฉ๋ก ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ณด๋ฅผ ์ฝ๊ณ  ๋ชฉ๋ก์— ์ƒˆ ์žฅ์น˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์žฅ์น˜๋Š” ํ”„๋กœ๋•์…˜ ์ถ”๋ก  ๊ทœ์น™๊ณผ ํด๋ผ์šฐ๋“œ์—์„œ ์ž‘์—…ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ž‘๋™์€ UML ๋‹ค์ด์–ด๊ทธ๋žจ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ
(์‚ฌ์ง„์„ ํด๋ฆญํ•˜์‹œ๋ฉด ๋” ๋†’์€ ํ•ด์ƒ๋„๋กœ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

IP ์นด๋ฉ”๋ผ ์—ฐ๊ฒฐ

์ด ๊ธฐ์‚ฌ์—์„œ ๋…ผ์˜๋œ ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ ์‹œ์Šคํ…œ์€ ์ €์ž๊ฐ€ ๊ฐœ๋ฐœํ•œ ํด๋ผ์šฐ๋“œ ์˜์ƒ ๊ฐ์‹œ ์‹œ์Šคํ…œ์˜ ์—…๊ทธ๋ ˆ์ด๋“œ๋กœ ์ˆ˜๋…„ ๋™์•ˆ ์‹œ์žฅ์— ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ ๋Ÿฌ์‹œ์•„์— ๋งŽ์ด ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์˜์ƒ ๊ฐ์‹œ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋Š” ํ†ตํ•ฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ๋น„์˜ ์„ ํƒ์ด ์ œํ•œ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ์—ฐ๊ฒฐ์„ ๋‹ด๋‹นํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๋น„๋””์˜ค ์นด๋ฉ”๋ผ ๋‚ด๋ถ€์— ์„ค์น˜๋˜์–ด ํ•˜๋“œ์›จ์–ด(ํ”„๋กœ์„ธ์„œ ๋ฐ ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ ์–‘)์— ์ฆ‰์‹œ ์‹ฌ๊ฐํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ถ€๊ณผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ๋กœ ์ผ๋ฐ˜ IP ์นด๋ฉ”๋ผ์— ๋น„ํ•ด ํด๋ผ์šฐ๋“œ CCTV ์นด๋ฉ”๋ผ์˜ ๊ฐ€๊ฒฉ์ด ๋” ๋†’์€ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์นด๋ฉ”๋ผ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฐœ๋ฐœ ๋„๊ตฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด CCTV ์นด๋ฉ”๋ผ ์ œ์กฐ์—…์ฒด์™€์˜ ๊ธด ํ˜‘์ƒ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

๋ฐ˜๋ฉด, ๋ชจ๋“  ์ตœ์‹  IP ์นด๋ฉ”๋ผ์—๋Š” ๋‹ค๋ฅธ ์žฅ๋น„(ํŠนํžˆ ๋น„๋””์˜ค ๋ ˆ์ฝ”๋”)์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๊ณ  IP ์นด๋ฉ”๋ผ์—์„œ ํด๋ผ์šฐ๋“œ๋กœ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋Š” ๋ณ„๋„์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์šฐ๋“œ ๋น„๋””์˜ค ๊ฐ์‹œ ์‹œ์Šคํ…œ์— ์ƒ๋‹นํ•œ ๊ฒฝ์Ÿ ์šฐ์œ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ ๋‹จ์ˆœ IP ์นด๋ฉ”๋ผ ๊ธฐ๋ฐ˜์˜ ์˜์ƒ๊ฐ์‹œ ์‹œ์Šคํ…œ์„ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์ด๋ฅผ ํ™•์žฅํ•ด ๋ณธ๊ฒฉ์ ์ธ ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธํ™ˆ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

ํ˜„์žฌ ๋ชจ๋“  IP ์นด๋ฉ”๋ผ ์ œ์กฐ์—…์ฒด์—์„œ ์˜ˆ์™ธ ์—†์ด ์ง€์›๋˜๋Š” IP ๋น„๋””์˜ค ๊ฐ์‹œ ์‹œ์Šคํ…œ์— ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ONVIF ํ”„๋กœํ•„ S, ๊ทธ ์‚ฌ์–‘์€ ์›น ์„œ๋น„์Šค ์„ค๋ช… ์–ธ์–ด๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. wsdl. ํˆดํ‚ท์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์‚ฌ์šฉ gSOAP IP ์นด๋ฉ”๋ผ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ wsdl2h -o onvif.h 
	https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl 
	https://www.onvif.org/ver10/events/wsdl/event.wsdl 
	https://www.onvif.org/ver10/media/wsdl/media.wsdl 
	https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl

$ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h

๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” C++๋กœ ๋œ ํ—ค๋” "*.h"์™€ ์†Œ์Šค "*.cpp" ํŒŒ์ผ ์„ธํŠธ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ง์ ‘ ๋ฐฐ์น˜ํ•˜๊ณ  GCC ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ํฌ๊ณ  ์ถ”๊ฐ€์ ์ธ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Raspberry Pi 3 ๋ชจ๋ธ B+ ๋งˆ์ดํฌ๋กœ์ปดํ“จํ„ฐ๋Š” ์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์„ฑ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ํฌํŒ…ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜์™€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ONVIF ํ‘œ์ค€์„ ์ง€์›ํ•˜๋Š” IP ์นด๋ฉ”๋ผ๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์—์„œ ์ž‘๋™ํ•  ๋•Œ ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š” ํŠน์ˆ˜ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ทธ๋ฃน์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. 239.255.255.250. ํ”„๋กœํ† ์ฝœ์ด ์žˆ์Šต๋‹ˆ๋‹ค WS ๋””์Šค์ปค๋ฒ„๋ฆฌ, ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์—์„œ ์žฅ์น˜ ๊ฒ€์ƒ‰์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๋Š” PHP์—์„œ IP ์นด๋ฉ”๋ผ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, ์ด๋Š” XML ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ์›น ์„œ๋น„์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋‰ด ํ•ญ๋ชฉ์„ ์„ ํƒํ•  ๋•Œ ์žฅ์น˜ > IP ์นด๋ฉ”๋ผ > ๊ฒ€์ƒ‰ ์ค‘ IP ์นด๋ฉ”๋ผ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‹คํ–‰๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ
(์‚ฌ์ง„์„ ํด๋ฆญํ•˜์‹œ๋ฉด ๋” ๋†’์€ ํ•ด์ƒ๋„๋กœ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

์ปจํŠธ๋กค๋Ÿฌ์— ์นด๋ฉ”๋ผ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํด๋ผ์šฐ๋“œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์„ค์ •์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋‚˜์ค‘์— ํด๋ผ์šฐ๋“œ ๋‚ด์—์„œ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ์žฅ์น˜ ์‹๋ณ„์ž๊ฐ€ ์ž๋™์œผ๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

๋‹ค์Œ์œผ๋กœ, ์ถ”๊ฐ€๋œ ์นด๋ฉ”๋ผ์˜ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” JSON ํ˜•์‹์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ƒ์„ฑ๋˜์–ด RESTful API ๋ช…๋ น์„ ํ†ตํ•ด ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์นด๋ฉ”๋ผ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋””์ฝ”๋”ฉ๋˜์–ด ๋‚ด๋ถ€ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๊ณ , ๋‹ค์Œ ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  1. ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด RTSP ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. G.711 mu-Law, G.711 A-Law, G.723 ๋“ฑ ํ˜•์‹์˜ ์˜ค๋””์˜ค๋ฅผ ํŠธ๋žœ์Šค์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. AAC ํ˜•์‹์œผ๋กœ;
  3. H.264 ํ˜•์‹์˜ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ๊ณผ AAC ํ˜•์‹์˜ ์˜ค๋””์˜ค๋ฅผ FLV ์ปจํ…Œ์ด๋„ˆ๋กœ ํŠธ๋žœ์Šค์ฝ”๋”ฉํ•˜๊ณ  ์ด๋ฅผ RTMP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  4. ONVIF ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด IP ์นด๋ฉ”๋ผ ๋™์ž‘ ๊ฐ์ง€๊ธฐ์˜ ์—”๋“œํฌ์ธํŠธ์™€ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ์ด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํด๋งํ•˜๋Š” ๋‹จ๊ณ„;
  5. ์ฃผ๊ธฐ์ ์œผ๋กœ ์ธ๋„ค์ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ MQTT ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ๋กœ ์ „์†กํ•˜๋Š” ๋‹จ๊ณ„;
  6. ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ SD ๋˜๋Š” ํ”Œ๋ž˜์‹œ ์นด๋“œ์— MP4 ํ˜•์‹์˜ ๋ณ„๋„ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ๋กœ์ปฌ๋กœ ๋…นํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์นด๋ฉ”๋ผ์™€์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ , ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์—์„œ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ํŠธ๋žœ์Šค์ฝ”๋”ฉ, ์ฒ˜๋ฆฌ ๋ฐ ๋…นํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋Š” FFmpeg 4.1.0.

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹คํ—˜์—์„œ๋Š” 3๋Œ€์˜ ์นด๋ฉ”๋ผ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. HiWatch DS-I114W(ํ•ด์ƒ๋„ - 720p, ์••์ถ• ํ˜•์‹ - H.264, ๋น„ํŠธ ์ „์†ก๋ฅ  - 1Mb/s, ์‚ฌ์šด๋“œ G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1(ํ•ด์ƒ๋„ - 1080p, ์••์ถ• ํ˜•์‹ - H.264, ๋น„ํŠธ ์ „์†ก๋ฅ  - 1Mb/s, ์†Œ๋ฆฌ ์—†์Œ);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B(ํ•ด์ƒ๋„ - 1080p, ์••์ถ• ํ˜•์‹ - H.264, ๋น„ํŠธ ์ „์†ก๋ฅ  - 1.5Mb/s, AAC ์˜ค๋””์˜ค).

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์„ธ ๊ฐ€์ง€ ์ŠคํŠธ๋ฆผ์ด ๋ชจ๋‘ ๋™์‹œ์— ํด๋ผ์šฐ๋“œ๋กœ ์ถœ๋ ฅ๋˜์—ˆ๊ณ  ์˜ค๋””์˜ค ํŠธ๋žœ์Šค์ฝ”๋”ฉ์€ ํ•œ ๋Œ€์˜ ์นด๋ฉ”๋ผ์—์„œ๋งŒ ์ˆ˜ํ–‰๋˜์—ˆ์œผ๋ฉฐ ๋กœ์ปฌ ์•„์นด์ด๋ธŒ ๋…นํ™”๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. CPU ๋กœ๋“œ๋Š” ์•ฝ 5%, RAM ์‚ฌ์šฉ๋Ÿ‰์€ 32MB(ํ”„๋กœ์„ธ์Šค๋‹น), 56MB(OS ํฌํ•จ ์ด๊ณ„)์˜€์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์•ฝ 20~30๋Œ€์˜ ์นด๋ฉ”๋ผ๋ฅผ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ(ํ•ด์ƒ๋„ ๋ฐ ๋น„ํŠธ ์ „์†ก๋ฅ ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” XNUMX์ธต์งœ๋ฆฌ ๋ณ„์žฅ์ด๋‚˜ ์ž‘์€ ์ฐฝ๊ณ ์˜ ์˜์ƒ ๊ฐ์‹œ ์‹œ์Šคํ…œ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋” ๋†’์€ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์ž‘์—…์˜ ๊ฒฝ์šฐ ๋ฉ€ํ‹ฐ ์ฝ”์–ด Intel ํ”„๋กœ์„ธ์„œ ๋ฐ Linux Debian Sarge OS๊ฐ€ ํƒ‘์žฌ๋œ ๋„ทํƒ‘์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ˜„์žฌ ์‹œ๋ฒ” ์šด์˜ ์ค‘์ด๋ฉฐ, ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋Š” ์—…๋ฐ์ดํŠธ๋  ์˜ˆ์ •์ด๋‹ค.

ํด๋ผ์šฐ๋“œ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ

ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์Šค๋งˆํŠธ ํ™ˆ์€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ(๋น„๋””์˜ค ๋ฐ ์„ผ์„œ ์ธก์ •๊ฐ’)๋ฅผ ํด๋ผ์šฐ๋“œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์˜ ์•„ํ‚คํ…์ฒ˜๋Š” ์šฐ๋ฆฌ ์‹œ๋ฆฌ์ฆˆ์˜ ๋‹ค์Œ ๊ธฐ์‚ฌ์—์„œ ๋” ์ž์„ธํžˆ ๋…ผ์˜๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํด๋ผ์šฐ๋“œ๋กœ ์ •๋ณด ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ๋œ ์žฅ์น˜์˜ ์ƒํƒœ์™€ ์„ผ์„œ ์ธก์ •๊ฐ’์€ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. MQTT, ๋‹จ์ˆœ์„ฑ๊ณผ ์—๋„ˆ์ง€ ํšจ์œจ์„ฑ์œผ๋กœ ์ธํ•ด ์‚ฌ๋ฌผ ์ธํ„ฐ๋„ท ํ”„๋กœ์ ํŠธ์— ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. MQTT๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ธŒ๋กœ์ปค ๋‚ด์˜ ํŠน์ • ์ฃผ์ œ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋กœ์ปค๋Š” QoS(์„œ๋น„์Šค ํ’ˆ์งˆ) ์ˆ˜์ค€์— ์˜ํ•ด ๊ฒฐ์ •๋œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ชจ๋“  ๊ฐ€์ž…์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  • QoS 0 - ์ตœ๋Œ€ XNUMXํšŒ(๋ฐฐ๋‹ฌ ๋ณด์žฅ ์—†์Œ)
  • QoS 1 - ์ตœ์†Œ ํ•œ ๋ฒˆ(๋ฐฐ์†ก ํ™•์ธ ํฌํ•จ)
  • QoS 2 - ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ(์ถ”๊ฐ€ ๋ฐฐ์†ก ํ™•์ธ ํฌํ•จ)

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์ดํด๋ฆฝ์Šค ๋ชจ๊ธฐ. ์ฃผ์ œ ์ด๋ฆ„์€ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์˜ MQTT ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์ฃผ์ œ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž์—์„œ ์˜ค๋Š” JSON ๋ฉ”์‹œ์ง€๋ฅผ ์ด ์ฃผ์ œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, MQTT ๋ธŒ๋กœ์ปค์˜ ๋ฉ”์‹œ์ง€๋Š” ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์ž๋กœ ์ „๋‹ฌ๋œ ํ›„ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์˜ ๊ตฌ๋…์ž์—๊ฒŒ ๋‹ค์ค‘ํ™”๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์Šค๋งˆํŠธ ํ™ˆ. ํŒŒํŠธ 1: ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์„ผ์„œ

์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ณด๊ด€๋œ ๋ฉ”์‹œ์ง€ MQTT ํ”„๋กœํ† ์ฝœ. ์ด๋ฅผ ํ†ตํ•ด ์ •์ „ ์‹œ ์žฌ์—ฐ๊ฒฐ ํƒ€์ด๋ฐ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MQTT ํด๋ผ์ด์–ธํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌํ˜„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดํด๋ฆฝ์Šค ํŒŒํ˜ธ C++ ์–ธ์–ด๋กœ.

H.264 + AAC ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์€ RTMP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ๋กœ ์ „์†ก๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ๋ฏธ๋””์–ด ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋กœ๋“œ๋ฅผ ์ตœ์ ์œผ๋กœ ๋ถ„์‚ฐํ•˜๊ณ  ๋กœ๋“œ๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๋ฏธ๋””์–ด ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํด๋ผ์šฐ๋“œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์‚ฌ์ „ ์š”์ฒญ์„ ํ•œ ํ›„ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Z-Wave ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ , ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์žฅ๋น„๋ฅผ ์ œ์–ดํ•˜๊ณ , ONVIF ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด IP ์นด๋ฉ”๋ผ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ , ๋ฐ์ดํ„ฐ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” Raspberry Pi 3 B+ ๋งˆ์ดํฌ๋กœ์ปดํ“จํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ํŠน์ • ๊ตฌํ˜„์„ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. MQTT ๋ฐ RTMP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. JSON ํ˜•์‹์œผ๋กœ ์ œ์‹œ๋œ ๋…ผ๋ฆฌ์  ๊ทœ์น™๊ณผ ์‚ฌ์‹ค์˜ ๋น„๊ต๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์‚ฐ ๋…ผ๋ฆฌ ์—”์ง„์ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ˜„์žฌ ๋ชจ์Šคํฌ๋ฐ”์™€ ๋ชจ์Šคํฌ๋ฐ” ์ง€์—ญ์˜ ์—ฌ๋Ÿฌ ํ˜„์žฅ์—์„œ ์‹œ๋ฒ” ์šด์˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ์˜ ๋‹ค์Œ ๋ฒ„์ „์—์„œ๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์žฅ์น˜(RF, Bluetooth, WiFi, ์œ ์„ )๋ฅผ ์—ฐ๊ฒฐํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์„ผ์„œ ๋ฐ IP ์นด๋ฉ”๋ผ ์—ฐ๊ฒฐ ์ ˆ์ฐจ๋ฅผ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ด์ „ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์šด์˜ ์ฒด์ œ๋กœ ํฌํŒ…ํ•˜๋Š” ์•„์ด๋””์–ด๋„ ์žˆ์Šต๋‹ˆ๋‹ค. OpenWrt. ์ด๋ฅผ ํ†ตํ•ด ๋ณ„๋„์˜ ์ปจํŠธ๋กค๋Ÿฌ์— ์ €์žฅํ•˜๊ณ  ์Šค๋งˆํŠธ ํ™ˆ ๊ธฐ๋Šฅ์„ ์ผ๋ฐ˜ ๊ฐ€์ •์šฉ ๋ผ์šฐํ„ฐ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€