얼마전 팀원분의 나눔으로 집에 구글홈 미니가 자리잡게 되었다.
'아 우리집에도 이렇게 스마트홈의 시대가 도래하였구나!'
집에는 이미 IoT 제품이 조금 있었다.
- LG SmartThingQ
- 냉장고
- 드럼,미니 세탁기
- 스탠드,벽걸이 에어컨
- Mi Home
- 선풍기 2S
- 멀티탭 3개
다행히 대다수의 제품들은 쉽게 연동할 수 있었다.
하지만 멀티탭!! 멀티탭!!
멀티탭만큼은 연동이 되지 않는 것이었다.
MiHome에서 구글홈과 몇몇 기기에 대해서는 지원하지 않는 모양이다.
그치만 "오케이 구글, 멀티탭 모두 꺼줘" 를 포기할 수 없었고, 아래 오는 내용들은 삽질의 결과이다.
0. 멀티탭 토큰정보 가져오기
1. HA에 등록
2. HA를 https로 접근할 수 있도록 ssl 등록
3. Google Assistant App 등록
4. HA에 등록
5. Google Home에 등록
0. 멀티탭 토큰정보 가져오기
MiHome 5.0.19버전에서 생성되는 sqlite DB를 추출하고, 이에 담긴 정보를 통해 token값과 ip값을 얻는 방법이다.
안드로이드 유저라면 본인의 폰에 해당 버전을 다운받고 추출하면 될거다.
아이폰유저는 iphone 백업 어쩌고 하면서 방법이 있지만 귀찮아서 시도조차 하지 않았다.
컴퓨터에 nox를 설치하고, 이를 통해 추출하면 된다.
왜인지 몰라도 crash가 굉장히 자주 발생하였다.
그저 앱 설치도 잘 안되었으며, file explorer를 열고 폴더 이동하는데에도 계속 강제 재부팅이 되었다.
포기하지 않고 몇번의 시도끝에 겨우겨우 해당 파일을 추출하였다.
1. 기기가 연결되어 있는 MiHome 계정으로 로그인한다.
2. /data/data/com.xiaomi.smarthome/databases/miio2.db -> /mnt/shared/Other 로 복사
3. 윈도우에서 C/user/<username>/Nox_share/OtherShare 에 miio2.db 있는지 확인
4. sqliteonline 사이트에서 해당 파일 열어보기
5. 'devicerecord' 테이블을 더블클릭
6. sql 명령어를 수정하고 왼쪽 상단의 Run 클릭
SELECT name, localip, token, desc FROM 'devicerecord';
자! 여기까지 했다면 이제 절반은 무슨
준비가 끝난 것이다.
참고로.. token은 MiHome에 변경될때마다 바뀐다.
왠만하면 HA에 등록한 이후에는 재등록할 일은 없기를 바래본다...
사실 벌써 3번째 재등록이다 젠장 따흐ㅡㅎ아헝
1. HA에 등록
Home Assistant는 각자의 환경에 잘 설치가 되어있다고 가정한다.
저는 시놀로지에 docker를 통해 설치하였습니다.
configuration.yaml 을 다음과 같이 수정한다
switch:
- platform: xiaomi_miio
name: 'xiaomi powerstrip 1 blahblah'
host: 192.168.1.206
token: 012345678901234567890123456789ab
model: qmi.powerstrip.v1
- platform: xiaomi_miio
name: 'xiaomi powerstrip 2 blahblah'
host: 192.168.1.204
token: 012345678901234567890123456789ab
model: qmi.powerstrip.v1
- platform: xiaomi_miio
name: 'xiaomi powerstrip 3 blahblah'
host: 192.168.1.205
token: 012345678901234567890123456789ab
model: qmi.powerstrip.v1
name 은 본인 마음대로 지어주시고,
host와 token은 앞 과정에서 추출한 정보를 적어주면 된다.
자 이제 HA를 재기동!!!!
그 결과는!!
?????????????
당황스럽겠지만 침착하고 오른쪽 상단의 ...을 클릭하면 '미사용 구성요소' 라는 항목이 나온다.
즉, (스크립트가 정상적으로 작성이 되었다는 가정하에) HA에 등록은 되었지만 대시보드에는 등록이 안 된 상황
이를 대시보드(둘러보기)에서 사용하려면 ... -> UI 구성을 클릭한후,
주황색 버튼의 +를 누르면 새로운 카드를 생성할 수 있다.
'ENTITIES' 를 클릭하고 구성요소들에는 본인이 등록한 멀티탭들을 등록하면 된다.
위의 정보처럼 세팅하면 카드의 Title 옆에도 토글버튼이 생성되는데, 이를 통해 모든 멀티탭을 켜고 끌수 있다.
2. HA를 https로 접근할 수 있도록 ssl 등록
이제 정말 절반은 한거다!
그렇다고 치자
갑자기 왜 https?? ssl?? 할 수 있다.
HA를 구글홈과 연동하여 사용하려면 크게 Home Assistant Cloud를 사용하는 방법과 Google Assistant를 사용하는 방법이 있다.
Home Assistant는 유료이다. Google Assistant는 무료이다.
따라서 나는 Google Assistant를 사용해야한다.
근데 Assistant App을 생성하기 위해서는 나의 HA에 https로 접근할 수 있어야한다.
아아 구긄ㅂ
다행히 시놀로지에서는 쉽게 된다.
https://investigate.tistory.com/52
Home Assistant HTTPS 외부 접속 설정기 (Let's Encrypt)
※ 직접 구매하여 작성한 후기 입니다 [IOT] - HA(Home Assistant) Synology Docker 설치기 Home Assistant를 설치한 이후 집 밖에서 외부망(휴대폰)을 이용해 서비스를 이용하려면 외부에서 접속이 가능하게 해줘..
investigate.tistory.com
시놀로지에서 HA를 세팅했다면 위의 블로그에 잘 정리되어있다.
3. Google Assistant App 등록
사실 이 부분은 공식문서에서도 잘 설명되어있다. 그치만 영어니까 다시 한번 끄적여봤다.
1. 먼저 Actions on Google console에 접속하여 New project를 생성해준다
2. Smart Home을 클릭해준다
3. Build your Action -> Add Action(s) 를 클릭한다.
4. 다음과 같이 Fulfillment 를 작성해준다.
https://<ha 주소>/api/google_assistant
4. 상단의 메뉴를 통해 Overview로 돌아간 후, Setup account linking을 클릭하고 다음과 같이 입력한다.
https://oauth-redirect.googleusercontent.com/
https://<ha 주소>/auth/authorize
https://<ha 주소>/auth/token
오른쪽 위에 있는 'Test'를 클릭해야 현재 사항들이 반영된다고 한다.
5. https://console.cloud.google.com 로 이동하여 API 설정을 해준다.
인터넷에 여러가지 방법으로 되어있다.
정확히 어떤 방법이 올바른건지는 모르겠지만, 이렇게하니까 됐다!
어떻게되든 돌아가기만하면 되지 않을까...?
4. HA에 등록
이제 HA에 위에서 만든 구글 어시트턴드 앱을 등록해야한다.
configuration.yaml에 담과 같은 내용을 입력해주면 된다.
# Google Home in HA
google_assistant:
project_id: home-xxxxx
api_key: 012345678901234567890123456789012345678
expose_by_default: true
exposed_domains:
- switch
이때, project_id 는 https://console.cloud.google.com에서 확인할 수 있다.
api_key는 위에서 생성한 API key 를 사용한다.
exposed_domains 에 switch 그룹을 반드시 등록시켜줘야
구글 어시트턴트를 통해 HA에 등록된 switch들을 제어할 수 있다.
서버 재시작은 필수!
5. Google Home에 등록
구글홈에서 기기를 등록시켜본다!
새로 기기를 추가하려고 하면 목록에 다음과 같이 새로운 항목이 뜬다!
이거를 살포시 누르면...
스위치가 나옵니다.
이제 다같이 외쳐봅시다
"오케이 구글, 멀티탭 모두 꺼줘"