아마존 에코 닷을 이용한 Home IOT 시스템
이번 포스트 에서는 아마존 에코닷을 이용해 자취방을 스마트하게 DIY 할 수 있는 기초에 대해 포스팅 해보겠습니다. 🐒
시중에 나와있는 스마트 디바이스들은 요즘엔 저렴한 제품이 보이기도 하지만 좀 가격이 부담 되는 것 같습니다. 스마트 스피커에 종속적인 제품들도 많구요. 무엇보다 종류가 많지 않은 것 같습니다 ㅜㅜㅜㅜ. 검색을 해보면 죄다 IOT 콘센트, 전구 에요 ..
저는 컴퓨터도 켜고, 리모컨으로 만 되는 에어컨도 켜고, 커튼도 아침 되면 자동으로 걷히게 하고 싶은데 말이죠 ..
아마존 에코 닷을 이용하면 위에서 말했던 일이 가능합니다. Alexa APP 을 제공해서 폰에서도 쉽게 아마존 에코 닷에 등록된 Device 를 제어 할 수 있구요. 무엇보다 시간만 좀 투자 하면 저렴하게 자기가 원하는 기능을 구현 할 수 있다는게 Charming 입니다.
1. 준비물
- Amazon echo dot (아마존 웹사이트가 가장 싼듯 합니다. )
- Linux 컴퓨터 (라즈베리파이 , 비글본블랙, 안쓰는 노트북 저의 경우는 안쓰는 노트북을 사용했어요 !)
- 약간의 파이썬 지식
- 약간의 리눅스 터미널 커맨드 (cd, mkdir, 등등등)
2. fauxmo
이번 포스트에서 wemo Device를 에뮬레이트한 Python 코드인 fauxmo를 사용할 것입니다. 이 코드는 아마존 에코닷이 wemo Device 찾고, 켤때 echo dot 의 Request 를 적절하게 처리하는 코드에요.
위 그림은 amazon echo dot 과 실제 wemo switch가 실제 주고 받은 패킷에 관한 그림입니다. 보면 Echo dot 이 “Find connected devices” 듣게 되면 broadcast 로 Upnp 신호를 보내고 wemo Device는 자신의 Http URL을 Response로 줍니다. 그러면 Echo는 Http get Request를 보내고 Response가 제대로 돌아오면 장치를 등록 합니다.
장치가 등록되면 “Turn On XXX”란 명령을 받고 Http Post Request를 날립니다. 그러면 Wemo Device는 장치를 켜고 Response를 주게 되지요.
어려운 내용이지만 이 것만 기억하면 됩니다. 위 과정을 fauxmo 가 해준다. 더 나아가 안쓰는 노트북이 wemo switch를 대체한다.
혹시 위 과정에 대해 좀더 자세한 내용을 아시고 싶다면 아래 링크를 읽어 보세요
위 설명을 얼 핏 들으면 “안 쓰는 노트북이 많아야 되는거 아니야 ?? ” 라고 생각 하실 수 있는데요. 놉놉놉 ! 가상 이더넷 인터페스로 한개의 Linux 시스템이 여러개의 wemo Device가 있는 것 처럼 보이게 할 수 있습니다.
3. 안쓰는 노트북에서 Fauxmo 를 실행해보기
Fauxmo 는 Python 2.7 로 되어 있습니다. 그래서 어쩔수 없이 Python 2.7을 사용해야 합니다. 찾아 보니 fauxmo 에 살을 붙힌 프로젝트가 있어서 이 프로젝트를 이용해 보겠습니다. 아래 Repo 에서 코드를 받으 실 수 있습니다.
https://github.com/toddmedema/echo
저의 환경은 위에서도 언급했지만 안쓰는 노트북이고 Ubuntu 12.04.5 LTS 가 깔려 있습니다. 엄청 올드한 버전이죠 ㄷ ㄷ ㄷ. 사실 리눅스 배포판 등은 중요하지 않습니다. 어떤 버전을 사용하는 파이썬만 돌아가면 됩니다. 라즈베리파이나 비글본에서도 Python은 잘 돌아 갑니다.
어쨌든 리눅스 시스템을 마련하게 되면 Python 이 기본적으로 깔려 있을 겁니다. 하지만 버전이 2.7 이 아니라면 2.7을 설치해 주세요.
파이썬을 설치 했다면 폴더를 만들고 가상환경을 만들어 봅시다. 저는 echowemoclient 라는 폴더를 만들고 그 폴더 안에서 아래 명령어로 가상 환경을 만들었어요
cd /home mkdir echowemoclient cd echowemoclient virtualenv ecvenv //만들기 source ecvenv/bin/activate //활성화
가상환경을 만들었으면 활성화 명령어로 가상환경을 활성화 해줍니다. 그 후 위에서 내려받은 내용물을 전부 echowemoclient 폴더 및으로 옮겨 줍니다. 저의 경우엔 추가해논 파일이 좀 있어서 완벽하게 같지는 않을 건데요 여튼 아래와 같은 파일 구조로 되어 있으면 됩니다. 그리고 저는 프로젝트 폴더를 홈이 아닌 다른 곳에 만들었는데 굳이 홈에 만드실 필요는 없습니다. ~~~~
그럼 우선 이 프로젝트에 쓰이는 Python Library를 인스톨 해 볼게요 !!!! 아래 명령어로 Install 가능 합니다.
pip install -r requirements.txt
저의 경우엔 Install 중 Request packge 에서 Build 가 실패 했다는 Error가 나왔어요 하지만 실제 돌려보니 잘 돌아 가네요 ..
뭐 우선 설치가 완료 됐으면 example-minimal.py 를 실행해 봅시다.
python example-minimal.py
정상 적으로 실행 되었다면 위와 같은 화면이 나왔을 겁니다. 축하합니다. ㅋㅋ
하지만 아직 끝나지 않았죠 실험을 해봐야 겠죠 ?
4. 테스트 !!!!
Alexa APP 에서 본 저의 초기 Device는 아래와 같습니다.
그럼 알렉사에게 다음과 같이 외칩니다.
“알렉사! 파인드 커넥티드 디바이시스 “
하면 알렉사가 뭐라뭐라 영어로 꿍시렁 대면서 디바이스를 찾겠다고 말할 겁니다. 그리고 터미널 창을 보면 아래 문구가 추가되는 것을 볼수 있습니다.
그리고 20초 정도 ? 가 지나면 알렉사가 성공적으로 장치를 찾았다고 역시나 영어로 말 할 것입니다. 그럼 한번 실제로 잘 찾았는지 확인해 볼까요 ?
네 잘 찾았네요 !!! 맨 위에 device란 항목이 새로 추가된 거 보이시죠 ???? 자 그럼 이제 이 device 를 켜고 끄는 명령을 해봅시다.
다음과 같이 외칩니다.
“알렉사! 턴 온 디바이스”, “알렉사! 턴 오프 디바이스”
그리고 터미널을 보면 아래와 같은 문구가 추가되어 있을 것입니다.
네 알렉사의 명령을 안쓰는 노트북이 성공적으로 받은 것을 확인 하실 수 있습니다.
여기서 나오는 “device ” 라는 iot 장치의 이름은 코드상에서 정할 수 있습니다. example-minimal.py 파일을 열어 보면 코드 중간에 아래 대목이 있습니다.
TRIGGERS = {“device”: 51999}
여기서 device 가 장치 이름입니다. 뭐 필요에 따라서 kitchen light, Desktop.. 상황에 맞는 이름을 붙혀 주면 됩니다. 추가로 장치를 추가 하실 때는 dict 에 key, value 쌍을 추가 하면 됩니다. 예를 들면 아래와 같이요 (참고로 dict 는 dictionary 로써 자료구조의 일종입니다. )
TRIGGERS = {“device”: 51999, “newDevice”:52000}
이렇게 하면 장치가 두개 추가되는 것이지요
이것으로 Amazon Echo Dot 과 Fauxmo 연결을 해봤습니다. 이제 Device를 추가하고 example-minimal.py 에 입맛대로 코드를 추가해서 내가 만든 혹은 시중에 나와있는 스마트 Device들을 제어 할 수 있게 되었습니다. !!! 자 이제 리얼 끝났습니다. 다음 포스팅에서는 좀더 실용적인 예제를 가지고 컴백 할게요 !