Deconz-rest-plugin: Linux์—์„œ ํ—ค๋“œ๋ฆฌ์Šค ์ง€์› ๊ฐœ์„ (GUI ์ข…์†์„ฑ)

์— ๋งŒ๋“  2020๋…„ 09์›” 30์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dresden-elektronik/deconz-rest-plugin

๊ธฐ๋Šฅ ์š”์ฒญ ์œ ํ˜•

์„ผ์„œ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด ConnBee๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ํ™ˆ ์ž๋™ํ™” ์„œ๋ฒ„(์‹ค์ œ๋กœ๋Š” NAS๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ Linux ๋จธ์‹ )๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

deconz ๊ฐ€ ์ข…์†์„ฑ ์ค‘ Qt๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. deconz.service ๋ฅผ ํ†ตํ•ด ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ํŒจํ‚ค์ง€ ์ž์ฒด๋Š” ํ—ค๋“œ๋ฆฌ์Šค(์„œ๋ฒ„) ์‹œ์Šคํ…œ์— ์–ด๋ฆฌ์„์€ ๋งŽ์€ X11(๋ฐ Wayland) ๊ด€๋ จ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์„ค๋ช…

์ด์— ๋Œ€ํ•œ ๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์€ deconz ๋ฅผ ์—ฌ๋Ÿฌ ๋ฐ”์ด๋„ˆ๋ฆฌ(๋˜๋Š” ํŒจํ‚ค์ง€)๋กœ ๋ถ„ํ• ํ•˜์—ฌ GUI์— ๋Œ€ํ•œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ํ—ค๋“œ๋ฆฌ์Šค ์ฝ”๋“œ ๊ฒฝ๋กœ์—์„œ QtNetwork ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ํ—ค๋“œ๋ฆฌ์Šค ์ž‘์—…์ด ์—ฌ์ „ํžˆ ๋งŽ์€ ๊ฒƒ์„ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด ๋‚ด ์ œ์•ˆ์„ ๋ฒ„๋ฆฌ์‹ญ์‹œ์˜ค.

๊ณ ๋ ค๋œ ๋Œ€์•ˆ

(ํ˜„์žฌ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”) ์œ ์ผํ•œ ๋Œ€์•ˆ์€ deconz ์‹คํ–‰์„ ์œ„ํ•ด ๋ชจ๋“  X11 ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋Š” Debian/Ubuntu ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚ด ๋ˆˆ์—๋Š” ๋„ˆ๋ฌด ๊ณผ๋„ํ•˜์ง€๋งŒ ์ตœ์†Œํ•œ 'ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ'(NAS)์„ ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ

์ด ์„น์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Zigbee ๊ด€๋ จ ํ”„๋กœ์ ํŠธ์— ์Ÿ์€ ๋ชจ๋“  ๋…ธ๋ ฅ๊ณผ ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์‹œ๋„ˆ์ง€๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐฉํ˜• ๊ฐœ๋ฐœ ์Šคํƒ€์ผ์„ ์„ ํƒํ•ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Feature Request

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

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

Qt ์ž์ฒด๋Š” ์ข…์†์„ฑ์œผ๋กœ ์œ ์ง€๋˜์ง€๋งŒ X11/Wayland ๊ด€๋ จ ๋ถ€ํ’ˆ์€ ํ—ค๋“œ๋ฆฌ์Šค ์„ค์ •์— ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ œ์•ˆ๋œ ๋Œ€์•ˆ์€ ์‹ค์ œ๋กœ ์Šฌ๋ฆผ ํ—ค๋“œ๋ฆฌ์Šค ๋ฒ„์ „์ด ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ X11์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ์œ ์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

@๋‚จ์ž ๋‹ต๊ฒŒ

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

Qt ์ž์ฒด๋Š” ์ข…์†์„ฑ์œผ๋กœ ์œ ์ง€๋˜์ง€๋งŒ X11/Wayland ๊ด€๋ จ ๋ถ€ํ’ˆ์€ ํ—ค๋“œ๋ฆฌ์Šค ์„ค์ •์— ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ œ์•ˆ๋œ ๋Œ€์•ˆ์€ ์‹ค์ œ๋กœ ์Šฌ๋ฆผ ํ—ค๋“œ๋ฆฌ์Šค ๋ฒ„์ „์ด ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ X11์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ์œ ์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต์‹ Docker ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์†”์งํžˆ ๋งํ•ด์„œ ์ €๋Š” Docker๋ณด๋‹ค LXC ๋˜๋Š” ์ผ๋ฐ˜ systemd-nspawn ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ ํ˜ธํ•˜๊ณ  ๋‚ด NAS์— ์ด๋ฏธ ๋‹ค๋ฅธ LXC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ•จ๊ป˜ ๊ฐ€๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์€ ๋™์ผํ•œ ์ปค๋„ ๋‚ด ๊ฒฉ๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜์กดํ•˜๋ฏ€๋กœ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Ubuntu 18.04 ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ•˜๊ณ  deCONZ ์„ค์น˜์— ๊ด€ํ•œ ConnBee ์„ค์น˜ ๊ฐ€์ด๋“œ ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • USB ์žฅ์น˜๋ฅผ LXC ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค(์žฅ์น˜ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ lxc.cgroup.devices.allow ๋ฐ lxc.mount.entry ).
  • ํ˜ธ์ŠคํŠธ์˜ udev ๊ทœ์น™์ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ plugdev ๊ทธ๋ฃน์— ์žฅ์น˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก GID๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๊ธฐ๋Šฅ์„ ์›ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ ์žฅ์น˜์—์„œ ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๊ณ (๋‚ด ๊ตฌ์„ฑ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Œ) LXC๊ฐ€ ๊ธฐ๋Šฅ์„ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค( lxc.cap.keep ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ • ๊ฐ€๋Šฅ).

(OT: ํŒจํ‚ค์ง•๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ฐœ์„ ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋“œ ์ฝ”๋”ฉ๋œ UID 1000์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ํŒจํ‚ค์ง€ ์„ค์น˜ ์ค‘์— ์ „์šฉ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋žŒ์งํ•˜๊ฒŒ๋Š” UID<1000 ๋ฐ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ /var/lib ๋ฏธ๋งŒ์ธ ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ Phoscon ์•ฑ์—์„œ ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ConnBee ํ•˜๋“œ์›จ์–ด์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Phoscon์€ ์žฅ์น˜ ๋ฒ„์ „์„ ํ‘œ์‹œํ–ˆ์ง€๋งŒ ํŽŒ์›จ์–ด ๋ฒ„์ „์€ ํ‘œ์‹œํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋ชจ๋“  ZigBee ์†์„ฑ(์ฑ„๋„ ๋“ฑ)์ด 0์œผ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์„ผ์„œ๋„ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ณต์‹ _stable_ ์ด๋ฏธ์ง€๋กœ ๋‚จ์€ Raspberry Pi 3๋ฅผ ํ”Œ๋ž˜์‹ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜๊ณ  ๋ชจ๋“  ์„ผ์„œ๊ฐ€ ๋ฉ‹์ง„ Grafana ๋Œ€์‹œ๋ณด๋“œ์— ํ†ตํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

(OT: Pi ์ด๋ฏธ์ง€์—๋Š” ์ž์ฒด ๊ฒฐํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ๋ณธ ๊ตฌ์„ฑ์—์„œ hostapd ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ๋์—†๋Š” ๋ฃจํ”„์—์„œ ์ผ์ฃผ์ผ์— ์•ฝ 700MiB์˜ ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค(SD ์นด๋“œ ๋ถˆ๋Ÿ‰). ์„ค์ • ๊ฐœ์„ ์„ ์œ„ํ•ด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

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

๊ทธ๊ฒƒ์ด ์‹คํ˜„๋˜๋Š” ๊ฟˆ์ผ ๊ฒƒ์ด๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰