스마트홈2. 구글홈 미니를 이용해 DIY LED 음성제어하기(without blynk/IFTTT) – Google Home Mini, Google Assistant, Home Assistant, ESPHome

앞서 Home Assistant에 Wemos D1 mini 기반의 DIY LED를 연결시켜 껐다켰다 하고 있었다. 이제는 Home Assistant와 Google Assistant 연결해 음성제어가 가능하도록 만들 차례.

우선 Add-on store에서 Duck DNS 설치

설치하고 시작시키려고 했더니 토큰이 필요하다고 한다. 일단 설정에 들어가보자

Duck DNS 홈페이지에 들어가 구글 계정으로 로그인해보니 토큰이 자동으로 만들어진다. 바로 아래에 서브도메인을 하나 만들어서 추가하면 http://xxx.duckdns.org 형태의 주소가 만들어진다. 토큰과 주소를 Duck DNS 설정에 입력.

집의 공유기 설정에 들어가 외부포트 443을 HA를 설치한 라즈베리 파이 8123 포트로 포워딩 (이건 공유기마다 화면이 달라서 스크린샷을 굳이 찍지 않음)

configure.yaml에 다음과 같이 http 설정을 추가

이제 설정을 적용하기 위해 Controls -> Server Controls -> Restart

이것저것 시도하다가 configure.yaml파일에 다음과 같은 내용이 들어가면 되는 듯. 이상한 점은 wifi에 연결된 상태(내부망)에서는 저 url로 접속하면 connection refused가 뜬다. 데이터를 켜서 외부망에서 저 주소를 치고 들어올수는 있음. 왜그런지 모르지만 외부에서 되니까 오케이

Actions on Google에 가서 프로젝트 생성.
1) 템플렛 중에 Smart Home 선택.
2) Build your Action -> Add Actions
3) Fulfillment에 https://xxx.duckdns.org:8123/api/google_assistant 입력하고 저장

이제 구글 계정을 연동시켜줄 차례.
4) Overview에 가서 Setup Account Linking 클릭.
5) Documentation에서 시키는대로 입력… url에 있는 project ID를 복사해서 붙여넣으면 편하다.
6) Next 눌러서 이메일과 이름 scope 추가 후 Save

Develop창에서 우측 상단에 Test 클릭하면 테스트앱이 만들어진다.

Google Cloud Platform에 들어가면 생성한 프로젝트를 선택할 수 있다.
선택후에 homegraph api를 검색한 뒤 enable 시켜준다.
google_assistant.request_sync 서비스를 이용할 수 있게 해주기 때문에 설정하는 것.

Credentials -> Create Credentials -> API key
– 여기서 만들어지는 API key 복사해서
– configure.yaml의 google_assistant 아래 하위 항목 api_key 값으로 넣는다.
– HA서버 재시작

다시 찾아보니 API key를 이용한 방법은 deprecate 되어서 이런 식으로 credential JSON 파일을 생성시켰다

다운받은 파일을 File editor를 이용해 업로드하고 파일명 변경

configure.yaml에는 SERVICE_ACCOUNT.JSON파일을 불러들이도록 변경

project_id는 JSON파일 내에 내용이 있지만, yaml파일에서 지우면 안됨… 이렇게 수정하니까 에러 없이 재부팅된다

이제 폰에서 구글홈과 연동시켜줄 차례.
– 구글홈 앱 우상단 플픽을 눌러 Assistant settings
– 알파벳순 목록에서 Home Control
– 목록중에 [test]my test app 선택 (나는 호출명을 Home Assistant라고 미리 지정해뒀음)
– HA에 아이디/비번 치고 로그인하면 연동할 기기 목록이 뜬다.
– 구글홈에 연동 성공!!

요약하면 구글홈 오토메이션 프로젝트에 테스트앱을 만들어 HA의 로그인 endpoint와 연결시켜주는 역할을 하고, 그 테스트앱을 구글홈에 연동시키는 방식. 문제는 테스트앱이 한 달 정도 지나면 timeout되는 것 같다는 글을 봤다… 한번씩 테스트앱을 재생성 해줘야 한다는데 지켜봐야지

다음 프로젝트는 아이들 방에 넷플릭스 보는 용도로 벽에 쏘는 프로젝터가 있는데, 거기에 적외선 LED로 리모컨으로 전원 버튼을 켜는 효과를 내고, photoresistor로 전원이 켜져있는지 읽어들이는 wemos node를 설치해서 HA에 연동시키는 작업. 부품은 지난주에 주문해둠

SK 공유기가 구시대 유물이라 hairpin NAT를 지원하지 않아서 Duck DNS를 이용한 도메인을 내부 네트워크에서는 접근 못하는 문제가 있어 한참을 고생하다가 "NGINX Home Assistant SSL proxy" 플러그인을 깔아서 해결했다. 외부에서 들어오는 요청을 모두 443포트로 보내야 한다는 걸 몰라서 고생함

네트워크에 대한 개념이 전혀 없어서 이틀간이나 포럼을 계속 뒤졌다… 그래도 일단은 해결되어서 다행. 내부 네트워크에 물린 기기들에서는 hosts 파일을 수정해서 도메인을 통해 접속하는 것이 가능하긴 해보인다. 루팅 안 된 폰도 가능하려나?

CC BY-NC-SA 4.0 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Leave a Comment

Time limit is exhausted. Please reload CAPTCHA.