ํฌ๋ฐ๋ฏน ์ดํ ํ๊ด ์์ ํ๋ฐฐ๋ฅผ ๋๊ณ ๊ฐ๋ ๋น๋๋ฉด ๋ฐฐ๋ฌ ์๋น์ค๊ฐ ์ผ์ํ ๋๋ฉด์, ๋๋์
์ทจ์ฝํ ํ๋ฐฐ ๋ถ์ค๋ฌผ์ด ์ ์ฐจ ์ฆ๊ฐํ๊ณ ์์ง๋ง, ๋๊ฐ ์ธ์ ํ์ณ๊ฐ๋์ง ์ ํํ ์๊ฐ์
ํน์ ํ์ง ๋ชปํด ๋ถ์ค๋ ํ๋ฐฐ๋ฅผ ์ฐพ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
๋ฐ์ํ๋ค. ์ด๋ฌํ ๋ถํธํจ์
ํด์ํ๊ธฐ ์ํด์ ์ํจ๋์ ์ฐ๋๋๋ ํ๊ด ์นด๋ฉ๋ผ๋ฅผ ์ด์ฉํ์ฌ ํ๋ฐฐ๊ฐ ์จ ๊ฒ์ ํ์ธํ๊ณ
์ค์๊ฐ์ผ๋ก ์๋์ ๋ณด๋ด ๊ฑฐ์ฃผ์์๊ฒ ์๋ ค์ค๋ค๋ฉด ํ๋ฐฐ ๋ถ์ค์ ๋ํ ๊ฑฑ์ ๊ณผ ํ๋ฐฐ ๋๋
์ํ์ ํด์๋ ๊ฒ์ด๋ค.
Home ++ ์ํจ๋์ ๋ฐฐ๋ฌ ๋๋ ๋ฐฉ์ง ๊ธฐ๋ฅ์ ํ๊ด ์บ ์ ํตํด ํ๋ฐฐ๊ฐ ์ธ์ง๋๋ฉด ๋
นํ๋ฅผ ์์ํ๊ณ , ์๋ฆผ์ ๋ณด๋ด์ค๋ค. ๊ทธ๋ฌ๋ค๊ฐ ํ๋ฐฐ๊ฐ ์ฌ๋ผ์ง๋ฉด ๋
นํ๋ฅผ ์ข
๋ฃํ๊ณ , Alert ์๋ฆผ์ ๋ณด๋ด์ด ๋ณธ์ธ์ด ์๋ นํ์๋์ง ํ์ธํ๊ณ , ๋ณธ์ธ์ด ์๋ นํ ๊ฒ์ด ๋ง๋ค๋ฉด, ์์์ ์ญ์ ํ๊ณ ์๋๋ผ๋ฉด ์์์ ์กฐํํ ์ ์๊ฒ ํ์ฌ ํ๋ฐฐ ๋๋์ ๊ฒฝ์๋ฅผ ์ฝ๊ฒ ํ์
ํ ์ ์๊ฒ ํ๋ค.
AWS EC2(ํด๋ผ์ฐ๋ ์๋ฒ):
- ๋ณด์ ๊ทธ๋ฃน์ ์ธ๋ฐ์ด๋ ๊ท์น์์ 8000ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ์ฌ ํฌํธ ํฌ์๋ฉ์ ํ์๋ค.
- Express.js(์์ ์คํธ๋ฆฌ๋ฐ / ํ์ผ ์๋ฒ)
- ๋ นํํ ์์์ package/๋ก POST ์์ฒญ์ ๋ณด๋์ผ๋ก์จ ์ ๋ก๋ํ๋ค.
- ์ ๋ก๋๋ ์์์ package/<ํ์ผ๋ช >์ผ๋ก GET ์์ฒญ์ ๋ณด๋์ผ๋ก์จ ์กฐํํ ์ ์๋ค.
- ์ ๋ก๋๋ ์์ ์ค ํ์์๋ ์์์ package/<ํ์ผ๋ช >์ผ๋ก DELETE ์์ฒญ์ ๋ณด๋์ผ๋ก์จ ์ญ์ ํ๋ค.
- ๋ นํํ ์์๋ค์ ๋ชฉ๋ก์ vidlist/๋ก GET ์์ฒญ์ ๋ณด๋์ผ๋ก์จ ์กฐํํ ์ ์๋ค.
- Request.JS ๋ชจ๋์ ํตํด ์ํจ๋์๊ฒ ๋ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ๋ณธ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ์๋ค.
webOS(์ํจ๋):
- ENACT(com.delivery.app)
- LogPanel์์๋ ํ๋ฐฐ๊ฐ ๋ช ์์ ๋์ฐฉํ๊ณ , ๋ช ์์ ์๋ น์ ํ๋์ง๋ฅผ DB8์ ์กฐํํ๋ ์๋น์ค์ ์ฐ๋ํ์ฌ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๊ฒ ๋ง๋ค์๋ค.
- VidoePanel์์๋ enact์ Changable์ ์ฌ์ฉํ์ฌ VideoList ๋ด ์์ ๋ชฉ๋ก ์ค ํ๋๋ฅผ ํด๋ฆญํ๋ฉด Video์์ ํด๋น ์์์ ์ฌ์ํ ์ ์๊ฒ ๋ง๋ค์๋ค.
- RoutablePanels๋ก LogPanel๊ณผ VideoPanel ๊ฐ์ ์ด๋์ ํ ์ ์๊ฒ ๋ง๋ค์๋ค.
- Node.JS(com.delivery.app.service)
- com.webos.service.db ์ LS2 API๋ค์ ํ์ฉํ์ฌ DB8์ ์ฌ์ฉํ ์ ์์๋ค.
- init service: putKind -> putPermission -> find์ ๊ณผ์ ์ ๊ฑฐ์ณ DB8์ ๋ํ ์ ๊ทผ ๊ถํ ๋ฐ ์ด๊ธฐ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์ ์ฑ์ ์ ๋ฌํ๋ค.
- getVids service: node Module ์ค์ ํ๋์ธ Request.js๋ฅผ ์ฌ์ฉํ์ฌ EC2์ ์ฌ๋ผ๊ฐ์๋ ์์ ์คํธ๋ฆฌ๋ฐ / ํ์ผ ์๋ฒ์ GET Method๋ฅผ ํตํด Body๋ฅผ parseํ์ฌ video์ list๋ฅผ ํ๋ณดํ์ฌ, Enact์ ๋ณด๋ด UI์ ์ด๋ค ์์์ด ์กด์ฌํ๋์ง ๋ฐ์๋๊ฒ ๋ง๋ค์๋ค.
- delVid service: node Module ์ค์ ํ๋์ธ Request.js๋ฅผ ์ฌ์ฉํ์ฌ EC2์ ์ฌ๋ผ๊ฐ์๋ ์์ ์คํธ๋ฆฌ๋ฐ / ํ์ผ ์๋ฒ์ delete Method๋ฅผ ํตํด ์์์ ์ง์ฐ๋๋ก ํ์๋ค.
- loop service: delivery/arrived topic๊ณผ delivery/received topic์ subscribeํ์ฌ ํ๊ด์ Raspbian์ผ๋ก๋ถํฐ ํ๋ฐฐ๊ฐ ์ธ์ง๋๊ณ , ์ฌ๋ผ์ก๋ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ com.webos.service.tts/speak ์ com.webos.notification/createToast ์๋ฆผ์ ํตํด ์ํจ๋์ ํ๊ธฐํด์ค๊ณผ ๋์์ DB8์ ๋ฐ์ดํฐ๋ฅผ Putํ์ฌ Log์ ๋์ธ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ จํ์๋ค. ํนํ, delivery/received topic์ ์๋ น ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ com.webos.notification/createAlert ๋ฅผ ๋ด์ฅ node module ์ค ํ๋์ธ Child Process๋ฅผ ์ฌ์ฉํ์ฌ Yes์ No๋ฅผ ์ ํํ ์ ์๊ฒ ํ์๋ค. ๋ง์ฝ Yes๋ฅผ ์ ํํ๋ค๋ฉด delVid service๊ฐ ์คํ๋๊ณ , No๋ฅผ ์ ํํ๋ค๋ฉด getVids service๊ฐ ์คํ๋๋๋ก ํ์๋ค.
Raspbian OS(ํ๊ด):
- Python(YOLOv5)
- detect.py๊ฐ ์์ ํ๊ด ์ ํ๋ฐฐ ์์์ ์ ๋ฌด๋ฅผ ๊ฐ์ํ๋ค.
- upload.py๊ฐ ์๋ฒ์ ์์ ์ ๋ก๋ ์์ฒญ์ ์ค๋ค.
- ํ๋ฐฐ ์์๋ผ๊ณ ์ธ์๋ ๊ฐ์ฒด์ ๊ฐ์๊ฐ 30ํ๋ ์ ์ด์ ๋์ผํ ๋ ํ๋ฐฐ๊ฐ ๋์ฐฉํ๋ค๊ณ ๊ฐ์ ํ๋ค. ๋ฐ๋๋ก ํ๋ฐฐ ์์๋ผ๊ณ ์ธ์๋ ๊ฐ์ฒด๊ฐ 30ํ๋ ์ ์ด์ 0๊ฐ์ผ ๋ ํ๋ฐฐ ์์๊ฐ ์ฌ๋ผ์ก๋ค๊ณ ๊ฐ์ ํ๋ค.
- ํ๋ฐฐ ๋์ฐฉํ๋ฉด ๋
นํ๋ฅผ ์์ํ๊ณ , mqtt๋ก ์ํจ๋์๊ฒ ๋์ฐฉํ ์ฌ์ค์ ์๋ฆฐ๋ค. ํ๋ฐฐ๊ฐ ์ฌ๋ผ์ง๋ฉด ๋
นํ๋ฅผ ์ข
๋ฃํ๊ณ , mqtt๋ก ์ํจ๋์๊ฒ ์ด ์ฌ์ค์ ์๋ฆฌ๊ณ , ํด๋น ์์์ ์๋ฒ์ ์
๋ก๋ ํ๋ค. ํด๋น ์์์ ์
๋ก๋ํ๋ฉด ๋ก์ปฌ์ ์๋ ์์์ ์ง์ด๋ค.
- ์ด์์ฒด์ : Windows 11, Ubuntu 20.04.5 LTS, webOS 2.18.0, Raspbian OS
- ๋๋ฐ์ด์ค ๊ตฌ์ฑ : Raspberry Pi 4B 2EA
- IDE : Visual Studio Code
- ๊ฐ๋ฐ ์ธ์ด : Enact, Node.JS, Python
- package manager : npm, requirements.txt(python)
ares-setup-device์์ default๋ฅผ ์์ ์ด ์ค์นํ webOS์ IP๋ก ์ค์ ํ์ธ์.
source wallpad.setup.sh
- LS2 API ์ค์์ com.webos.notification/createAlert API๋ 3rd party์ฑ์์์ ์ ๊ทผ์ ํ๊ฐํ์ง ์๋ ๋ฌธ์ ๊ฐ ์์๋ค.
--> ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ node์ ๋ด์ฅ ๋ชจ๋ ์ค ํ๋์ธ Child Process๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ์ ์ผ๋ก webOS์ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ฐํํ์ฌ createAlert API๋ฅผ ์ฌ์ฉํ ์ ์์๋ค. - Enact ์ฑ์ด ๋ก์ปฌ์์ ๋์ ์ผ๋ก ์ถ๊ฐ ๋ฐ ์ญ์ ๋๋ ์์์ ์ ๊ทผํ ์ ์๋ ๋ฌธ์ ๊ฐ ์์๋ค.
--> ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์์ ์คํธ๋ฆฌ๋ฐ ์๋ฒ๋ฅผ EC2์ ๋ง๋ค์ด์ ์ฌ์ฉํด์ ์ธ๋ถ์ ์์์ URL์ ํตํ์ฌ ์ ๊ทผํ ์ ์๊ฒ ํ์๋ค.