๊ฐ์ ์ ์ด ๊ธฐ๋ฅ๊ณผ ์ํํธ ๋ด ์ฌ๋๋ค๊ณผ ์ํต์ ์ํ ์ํํธ ๊ฒ์ํ์ผ๋ก ์ด๋ฃจ์ด ์ ธ์๋ค.
๊ฐ์ ์ ์ด์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ด๋ฏธ ์ต์ ์ํจ๋์๋ ํ์ฌ๋์ด ์์ผ๋ฉฐ ์ฐฝ๋ฌธ, ์กฐ๋ช
์ ์ด์ ๋ธ๋ผ์ธ๋ ์ ์ด ๊ธฐ๋ฅ์ ๋ํด์ ์ํจ๋๋ก ๊ฐํธํ๊ฒ ์กฐ์ํ ์ ์๋๋ก ํ์ผ๋ฉฐ, ๊ฐ์ ์ ์ด ๊ธฐ๋ฅ๊ณผ ์ฐ๋๋๋ ๊ฒ์ํ ๊ธฐ๋ฅ๋ ์ถ๊ฐํ์๋ค. ๊ณต์ง ๊ฒ์ํ์ ์์ฑ๋ ๊ธ์ ์๋ฆผ์ด ๋ ์ ๊ณต์ง๋ฅผ ๋์น์ง ์๋๋ก ํ๋ค. ๋ํ ๊ฑฐ์ฃผ์๋ผ๋ฆฌ ์ํตํ ์ ์๋ ์ผ๋ฐ ๊ฒ์ํ์ ๋ง๋ค์ด ์ผ๊ตด์ ๋ง๋๊ณ ์ด์ผ๊ธฐ ํ๊ธฐ ๋ถํธํ ์ ๋ค์ ๊ฒ์ํ์ ํตํด ํด์ํ ์ ์๊ฒ ํ๋ค.
Home ++ ์ํจ๋์ ๊ฐ์ ์ ์ด ๊ธฐ๋ฅ์ ESP8266(ํํธ ์ค์์น)๋ ESP32(์กฐ์ด ์คํฑ)์ ํตํ ์๋ ๋ก๊ทธ ์ ์ด์ enact์ MQTT ํต์ ์ ํตํ ๋์งํธ ์ ์ด๋ฅผ ๋์์ ํ ์ ์๊ฒ ๋ง๋ค์๋ค. ๋ํ, ๊ด๋ฆฌ์ฌ๋ฌด์์์ notice ๊ฒ์ํ์ ์ฌ๋ฆฌ๊ฒ ๋๊ณ , ๊ฐ์ ์ ์ด ์ถ์ฒ์ ์ ํํ๋ฉด ์๋ฆผ๊ณผ ํจ๊ป Alert๋ฅผ ํตํด์ ๊ฐ์ ์ ์ด ์ถ์ฒ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๋ ์ถ์ฒ์ ๋ํด์ Yes์ No๋ฅผ ํตํด์ ๊ฐ์ ์ ์ด๋ฅผ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
AWS EC2(ํด๋ผ์ฐ๋ ์๋ฒ):
- ๋ณด์ ๊ทธ๋ฃน์ ์ธ๋ฐ์ด๋ ๊ท์น์์ 8080ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ์ฌ ํฌํธ ํฌ์๋ฉ์ ํ์๋ค.
- Express.js(๊ฒ์ํ ์๋ฒ)
- ๊ณต์ง์ฉ Notice ๊ฒ์ํ๊ณผ, ์ํํธ ์ฃผ๋ฏผ ์ ์ฉ General ๊ฒ์ํ์ด ์กด์ฌํ๋ค.
- ๊ฐ๊ฐ ๋น๋ฐ๋ฒํธ(Notice, General)์ ์ ๋ ฅํด์ผ ๊ฒ์๋ฌผ์ ๋ฑ๋กํ ์ ์๊ฒ ํ์๊ณ , ๊ณต์ง์ฉ ๊ฒ์ํ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ฒ์๋ฌผ์ ๋ฑ๋กํจ๊ณผ ๋์์ ๋ชจ๋ wallpad, ์ฆ post/notice topic์ subscribeํ๊ณ ์๋ wallpad์ com.webos.notification/createToast ์๋ฆผ๊ณผ com.webos.service.tts/speak ์๋ฆผ์ด ๋์์ ๊ฐ๊ฒ ๋์ด์๋ค.
- ๋ง์ฝ ๊ณต์ง๋ฅผ ๋ฑ๋กํ ๋, ๊ฐ์ ์ ์ด ์ถ์ฒ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด, ์ฌ์ฉ์์๊ฒ ์ด๋ ํ ์ด์ ๋ก ์ด๋ค ๊ฐ์ ์ ์ด๋ฅผ ์ธ์ ๋ถํฐ ์ธ์ ๊น์ง ์ด๋ ๊ฒ ์ ์ด๋ฅผ ์ถ์ฒํ๊ฒ ๋ค๋ผ๋ com.webos.notification/createAlert ์๋ฆผ์ ํตํด ์ ์ด๋ฅผ ์ถ์ฒํ๊ณ , ์ฌ์ฉ์๊ฐ yes๋ฅผ ๋๋ฅด๋ฉด ํด๋น ๊ฐ์ ์ ์ด๊ฐ ์ค์ผ์ฅด๋ง ๋๋ ๊ตฌ์กฐ๋ก ๋ง๋ค์๋ค.
webOS(์ํจ๋) - 2.18.0:
- ENACT(com.control.app)
- LED ์ ์ด์ ์์ด์๋ ํ์ฌ LED์ ์ํ๋ฅผ ์๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, LED์ ์ํ๋ฅผ ๋งจ ์ฒ์, useEFFECT๋ฅผ ํตํด์ init service๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ESP8266์ ์ ๋ณด๋ฅผ ์์ฒญํด์ ๊ฐ์ ธ์ค๊ณ , ๊ทธ ์ดํ์๋ ๊ฐ์ข
๊ฐ์ ์ ์ด๋ฅผ ์คํ์ํค๊ณ callback์ผ๋ก subscribe Service๋ฅผ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- LED ์ ์ด์ ์์ด์๋ ํ์ฌ LED์ ์ํ๋ฅผ ์๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, LED์ ์ํ๋ฅผ ๋งจ ์ฒ์, useEFFECT๋ฅผ ํตํด์ init service๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ESP8266์ ์ ๋ณด๋ฅผ ์์ฒญํด์ ๊ฐ์ ธ์ค๊ณ , ๊ทธ ์ดํ์๋ ๊ฐ์ข
๊ฐ์ ์ ์ด๋ฅผ ์คํ์ํค๊ณ callback์ผ๋ก subscribe Service๋ฅผ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- Node.JS(com.control.app.service)
- init service: ๋งจ ์ฒ์๋ง ์คํ๋๋ ์๋น์ค๋ก, ํด๋น ์๋น์ค๊ฐ ์คํ๋๋ฉด init/led topic์ผ๋ก ์์ฒญ์ ๋ณด๋ด์ ESP8266์ผ๋ก๋ถํฐ ํ์ฌ LED์ ์ํ๋ฅผ status/led ๋ฅผ subscribeํ์ฌ ์ ๊ณต๋ฐ์ต๋๋ค.
- led service: enact๋ก๋ถํฐ ๋๊ฒจ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ parsingํ์ฌ control/led topic์ ๋ณด๋ด led๋ฅผ ์ ์ดํฉ๋๋ค.
- blind service: enact๋ก๋ถํฐ ๋๊ฒจ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ parsingํ์ฌ control/blind topic์ ๋ณด๋ด blind๋ฅผ 5๋จ๊ณ๋ก ์ ์ดํฉ๋๋ค.
- window service: enact๋ก๋ถํฐ ๋๊ฒจ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ parsingํ์ฌ control/window topic์ ๋ณด๋ด window๋ฅผ 5๋จ๊ณ๋ก ์ ์ดํฉ๋๋ค.
- subscribe service: status/led topic์ subscribeํ์ฌ ESP8266์ผ๋ก๋ถํฐ ๋์ด์จ LED ์ํ ์ ๋ณด๋ฅผ enact์ ๊ณ์ ์ ๋ฌํด์ฃผ์ด led์ํ๋ฅผ ์ค์๊ฐ ๋ฐ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค. ๋ํ ์๋น์ค๊ฐ ์์ด๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด control/* topic์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ์๋น์ค๋ฅผ ์ทจ์ํ๋ค.
webOS(์ํจ๋) - 2.17.0:
- ENACT(com.reservation.app)
- ํ์ฌ๋ ๋ฒํผ๋ง ์๋ UI์ง๋ง ๋์ค์ com.webos.service.activitymanager ๊ฐ 2.18.0 ๋ฒ์ ผ์์ ์๋ํ๋ค๋ฉด ์์ ์น์ฑ๊ณผ ํฉ์น ์์ ์ด๋ค.
- ํ์ฌ๋ ๋ฒํผ๋ง ์๋ UI์ง๋ง ๋์ค์ com.webos.service.activitymanager ๊ฐ 2.18.0 ๋ฒ์ ผ์์ ์๋ํ๋ค๋ฉด ์์ ์น์ฑ๊ณผ ํฉ์น ์์ ์ด๋ค.
- Node.JS(com.control.app.service)
- child service: post/notice topic์์ ๊ฐ์ ์ ์ด ์ถ์ฒ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด, ๋ฐ์ดํฐ๋ฅผ ์๋ง๊ฒ parsingํ์ฌ node ๊ธฐ๋ณธ ๋ชจ๋์ธ Child Process๋ฅผ ์ฌ์ฉํ์ฌ com.webos.notification/createAlert ๋ฅผ ์คํ์ํจ๋ค. ๊ทธ๋ ๊ฒ ์คํ๋ Alert์์ ์ฌ์ฉ์๋ ์ถ์ฒ๋ ๊ฐ์ ์ ์ด๋ฅผ ์คํํ ์ง ์ํ ์ง๋ฅผ ๊ฒฐ์ ํ๊ฒ ๋๊ณ ์คํํ๋ค๋ผ๊ณ ํ๋ฉด, control service ๋ฅผ ์คํํ๋ค.
- control service: child service์์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ parsingํ์ฌ ์ถ์ฒ๋ ๊ฐ์ ์ ์ด๋ฅผ com.webos.service.activitymanager ์ create ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ reservation service๋ฅผ ์์ฝ๋ ์๊ฐ์ ์คํ๋๊ฒ ํ๋ค.
- reservation service: ๊ฐ๊ฐ์ ๊ฐ์ ์ ์ด topic์ ๋ฐ์ดํฐ๋ฅผ publishํ์ฌ ๊ฐ์ ์ ์ง์ ์ ์ดํ๋ค.
Arduino(ํ๊ด):
- ESP8266(LED)
- tact ์ค์์น๋ฅผ ํตํด ์ค์์น๊ฐ ๋๋ฌ์ก๋ค ๋จ์ด์ง๋ ๊ทธ ์๊ฐ์ LED๋ฅผ ์ ์ดํ๊ณ status/led topic์ publishํ๋ค. ๋ํ, control/led ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ๊ทธ์ ๋ง๊ฒ LED 3๊ฐ๋ฅผ ๊ฐ๊ฐ ์ ์ดํ๋ค.
- ESP32(Blind, Window)
- JoyStick์ ํตํด ์ข์ฐ๋ก๋ window๋ฅผ ์ ์ดํ๊ณ , ์ํ๋ก๋ blind๋ฅผ step motor๋ก ์ ์ดํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ control/window , control/blind topic์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ๋งตํ ๋ ์คํ
์ ๊ธฐ๋ฐ์ผ๋ก 5๋จ๊ณ ์ค ๋ค์ด์จ ๋ฐ์ดํฐ์ ํด๋นํ๋ ์์น๋ก ์ ํํ ์ด๋ํ๋ค.
- JoyStick์ ํตํด ์ข์ฐ๋ก๋ window๋ฅผ ์ ์ดํ๊ณ , ์ํ๋ก๋ blind๋ฅผ step motor๋ก ์ ์ดํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ control/window , control/blind topic์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ๋งตํ ๋ ์คํ
์ ๊ธฐ๋ฐ์ผ๋ก 5๋จ๊ณ ์ค ๋ค์ด์จ ๋ฐ์ดํฐ์ ํด๋นํ๋ ์์น๋ก ์ ํํ ์ด๋ํ๋ค.
- ์ด์์ฒด์ : Windows 11, Ubuntu 20.04.5 LTS, webOS 2.18.0, webOS 2.17.0
- ๋๋ฐ์ด์ค ๊ตฌ์ฑ : Raspberry Pi 4B 2EA
- IDE : Visual Studio Code, Arduino IDE
- ๊ฐ๋ฐ ์ธ์ด : ENACT, Node.JS, Arduino
- package manager : npm, yarn
ares-setup-device์์ default๋ฅผ ์์ ์ด ์ค์นํ webOS(2.18.0)์ IP๋ก ์ค์ ํ์ธ์.
source wallpad1.setup.sh
ares-setup-device์์ default๋ฅผ ์์ ์ด ์ค์นํ webOS(2.17.0)์ IP๋ก ์ค์ ํ์ธ์.
source wallpad2.setup.sh
- webOS 2.18.0์์ com.webos.service.createActivity LS2 API๊ฐ ์ฌ์ฉ๋์ง ์๋ ๋ฒ๊ทธ๊ฐ ์๋ค.
--> ํด๋น ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๋ฉด 2.17.0์ผ๋ก ์ฌ์ฉํ๋ reservation app์ control app์ผ๋ก ํฉ์น ๊ณํ์ด๋ค. - com.webos.notification/createAlert์ ๊ฐ์ ๊ฒฝ์ฐ์๋ 3rd party ์ฑ์์๋ ๊ถํ ์ค๋ฅ๊ฐ ๋๋ค.
--> ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด node์ ๊ธฐ๋ณธ ๋ชจ๋์ธ Child Process๋ฅผ ํตํด luna-send๋ก ์ง์ ์ฌ์ฉํ๊ฒ ๋์๋ค. - enact์์ subscribe ์ต์
์ ํตํด js_service๋ฅผ ์คํํ๋ฉด, ๋จ๋ฐ์ ์ผ๋ก๊ฐ ์๋ msg.respond๋ฅผ ํตํด ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ฉด ๊ณ์ callback์ ์คํ์ํฌ ์ ์๋ค. ํ์ง๋ง ํด๋น subscribe๋ ๋ค๋ฅธ ์๋น์ค๋ฅผ ์คํํ๋ ์๊ฐ ๋๊ธฐ๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ์์๋ค.
--> ๋ค๋ฅธ ์๋น์ค๊ฐ ์คํ๋๊ณ , ๋๋๋ ์๊ฐ ๋ฐ๋ก ๋ค์ subscribe ์ต์ ์ ํตํด ์๋น์ค๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ ํตํด์ LED์ ์ํ ๋ณํ๋ฅผ ๊ณ์ ๋ฐ์์์ผ์ค ์ ์์๋ค.