본문 바로가기

SmartHome. IoT/SmartHome 응용

HomeAssistant를 구글홈에 연결하기

728x90
반응형

안녕하세요~ 레이군 입니다.

오늘은 많은 분들이 어려워 하시는 HA의 구글홈 연동에 대해 다뤄보려고 합니다.

전체적인 내용은 아래 공홈 링크를 참조하시면 되구요~

Google Assistant - Home Assistant (home-assistant.io)

HA를 구글홈에 연동하는 방법은 두가지가 있습니다.

첫번째는 Nabu Casa의 클라우드 서비스에 가입하는 방법으로

https구성도 필요없고 ddns도 없어도 되고 정말 편하고 간단하게 연결 됩니다.

다만, 이 서비스는 월 5달러의 구독료가 들어가는 유료서비스 입니다.

아무래도 서버 운영을 해야하기 때문이겠죠?

두번째는 이번 시간에 진행해볼 방법으로, 수동으로 연결하는 방법 입니다.

https 접속 설정(ssl 인증서 발급) 이 되어있어야만 가능하며

구글 콘솔 쪽에서 프로젝트를 생성해서 연결을 하게 됩니다.

만약 현재 HA의 외부접속시 http주소로 접속이 된다면 적용이 불가능 합니다.

duckdns의 인증서 발급이나 nginx reverse proxy 설정을 통하여(혹은 다른 방식으로라도) SSL인증서를 발급받고

https://HA주소 방식으로 접속이 가능한 상태여야 합니다.

아래 영상으로도 확인 가능하니, 영상이 편하신분은 이쪽을 확인해 주세요~

 

자 그럼 시작하겠습니다!

우선 아래 링크에 접속해 주세요.

https://console.actions.google.com/

링크 클릭할때는 반드시 쉬프트키 누르고 클릭해 주셔야 새창이 떠서 편합니다.

접속 되셨다면 구글에 로그인(휴대폰의 구글홈 앱과 같은 계정으로) 해주시고,

중앙 하단에 있는 New Project 를 눌러주세요.

만약 처음 실행하는 계정이라면 사용권 관련 동의를하라고 나올텐데

전부 yes 선택하고 동의해 주시면 됩니다.(이 화면은 안 나올수도 있습니다)

프로젝트 이른을 입력하라고 나오는데, 적당히 알아볼 수 있게 넣어주세요.

저는 홈 어시스턴트랑 구글 어시스턴트랑 연결하는거니

HA-GA라고 입력해 보겠습니다.

언어와 지역을 설정하라고 나오는데, Korean / south korea 로 설정하고 Create Project를 눌러줍니다.

어떤 액션을 만들지 물어보는데, Smart Home을 선택하고, 우측 상단에 Start Building을 눌러주세요

Quick setup 항목에 있는 Name your Smart Home action 항목을 선택하면 이름을 설정하라고 나옵니다.

이때 설정되는 이름이 구글홈 연결시 나오는 [test]xxx 형태로 지정될 뒷부분의 이름이니 구분이 잘 되게 설정해 주세요.

저는 HA라고 해보겠습니다. 입력 후 우측 상단에 Save를 눌러주세요.

좌측 상단의 Overview 페이지로 이동해서 Build your Action 을 선택 후 Add Action(s) 로 들어가 줍니다.

URL 부분에 아래 주소를 그대로 복사해 넣어주세요

https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant

그런다음 [YOUR HOME ASSISTANT URL:PORT] 이 부분에 HA의 외부접속용 주소를 넣어주세요.

https접속을 위해 443번 포트가 열려있다면 포트는 안 써도 되고, 만약 다른 포트로 열어두었다면

주소 뒤에 포트번호까지 그대로 넣어주시면 됩니다.

접속주소가 ha.homeassistant.duckdns.org 라고 한다면

https://ha.homeassistant.duckdns.org/api/google_assistant

이렇게 입력해주시면 됩니다.

아참, HA접속용 주소는 앞으로도 여러번 써야하니까 아예 메모장 같은걸 열어서 해당 주소를 적어놔 주세요.

바로바로 복사 - 붙여넣기 할 수 있게요.

다 되었다면, 우측 상단에 Save를 눌러주세요

화면 우측 상단에 3점을 클릭해서 - Project Settings 에 들어가시면

Project ID 항목이 보입니다.

이것도 복사해서, 위에 HA주소 적어둔 메모장에 붙여넣기 해주세요.

자 여기까지, 프로젝트 생성을 완료하였고 이제부터 계정 연결을 진행하겠습니다.

Overview 페이지로 이동한 다음, Quick setup 아래에 있는 Setup account linking 을 클릭해 주세요.

설정 안내에 따르면 몇가지를 물어본다고 하는데, 저는 이상하게 안 물어보더라구요.

설정방식이 조금 바뀐건지 모르겠습니다만, 혹시 이 과정에서 뭔가 물어보면, 아래 링크에 들어가셔서

2-3, 2-4 항목을 참조하세요

https://www.home-assistant.io/integrations/google_assistant/#google-cloud-platform-configuration

맨 위쪽부터 차례대로 진행하겠습니다.

Clenat ID 항목은 다음 주소를 붙여넣기 해주시고, 맨 뒤에[YOUR_PROJECT_ID] 부분만 아까 복사해둔 프로젝트 ID로 대체해주시면 됩니다.

https://oauth-redirect.googleusercontent.com/r/[YOUR_PROJECT_ID]

프로젝트 ID가 ha-ga-1234 라면,

https://oauth-redirect.googleusercontent.com/r/ha-ga-1234

이렇게 입력해주시면 됩니다.

두번째 항목인 Client Secret은 필수 요소이긴 한데, HA에서는 무의미해서 그냥 아무 숫자, 문자등을 넣어주시면 됩니다.

세번째인 Authorization URL은 다음 주소를 붙여넣고,

[YOUR HOME ASSISTANT URL:PORT] 부분만 HA의 접속주소로 대체해주시면 됩니다.

https://[YOUR HOME ASSISTANT URL:PORT]/auth/authorize

토큰 URL도 마찬가지로, 다음 주소를 붙여넣고 중간에 HA 접속주소를 넣어주세요

https://[YOUR HOME ASSISTANT URL:PORT]/auth/token

모두 입력 하였다면, Next를 눌러줍니다.

넘어간 화면에서 다시한번 Next를 눌러주고,

Configure youe client 항목은 써있기론 optional 인데 메뉴얼엔 들어가 있더라구요.

첫번째에 이메일을 넣고, Add scope 를 누르면 입력 가능한 칸이 생깁니다.

두번째 칸에 이름을 넣고, 다시 Add scope를 눌러주시구요

아래쪽에 체크박스 있는데, 이건 체크하시면 안됩니다. Do NOT check!

Next를 누르고, Save를 눌러주세요(캡쳐화면과 약간 다를 수 있습니다)

다 완료되었다면, 우측 상단에 Test 버튼을 눌러주세요.

메뉴얼에는 조금 다르게 나와있는데, 여기서 한번 눌러주셔야 합니다.

만약 이 화면이 안 보인다면, Develop - Account linking 항목으로 이동하면 보일겁니다.

테스트 버튼을 누르면, 테스트 진행 - 테스트 활성화 단계를 거쳐 자동으로 테스트 페이지로 이동됩니다.

화면 우측 상단에 Setting 를 눌러, On device testing 항목이 활성화 되어있는지 봐주세요.

이제 장치 연동을 위한 부분을 진행하겠습니다.

아래 링크를 클릭해서 접속해 주세요. 당연히 쉬프트 누른 후 클릭하여 접속하시는게 편합니다.

https://console.cloud.google.com/apis/credentials/serviceaccountkey

최초 접속시엔 사용권에 동의하라는 메세지가 뜰 수 있는데, 어차피 써야하니 동의 후 진행해 주시면 됩니다.

화면 상단에 프로젝트 선택 항목을 클릭하여, 액션콘솔 쪽에서 작성한 프로젝트를 선택해 주세요.

(저는 한글로 설정되어 있어서 이렇게 나오는거고, 영문인 경우도 어렵지 않게 찾으실 수 있을겁니다)

상단에 서비스 계정 만들기 를 클릭하시면 화면이 전환됩니다.

서비스 계정 이름 항목은 적당히 넣어주시면 됩니다. 저는 HA-GA로 입력을 해보겠습니다.

서비스 계정 ID는 자동으로 생성되고, 설명 부분은 불필요 합니다.

아래쪽에 만들기 를 클릭해주세요

역할 선택 - 서비스 계정 - 서비스 계정 토큰 생성자 를 선택해 주세요

원문은 Role list - Service Accounts - Service Account Token Creator 입니다.

선택 완료 후 계속 - 완료 를 눌러주세요

새로 추가된 계정을 확인합니다.

이름 부분에 조금전에 설정한 이름이 들어가 있으니 찾기 쉬울거예요.

해당 서비스계정의 우측 3점을 클릭 후 - 키 관리 를 눌러주세요.

키 추가 - 새 키 만들기 를 선택한 다음

JSON 형식으로 만들기 를 눌러주세요.

그러면 자동으로 파일을 하나 다운받습니다.

아래 링크를 쉬프트 누르고 클릭해주세요.

https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview

HomeGraph API 사용 으로 선택해 주세요

이제 홈 어시스턴트 설정을 진행하겠습니다.

File editor 기준으로 설명 드릴께요. 다른 에디터를 사용하신다면 사용하시는것에 맞춰서 진행하시면 됩니다.

파일에디터 실행 후 좌측 상단에 Brows Filesystem 을 클릭하여, Upload File을 클릭합니다.

키 파일 생성 과정에서 다운받은 json 파일을 선택해 주시고,

해당 파일명을 확장자 까지 포함하여 전체 선택 - 복사 -> 아까 열어둔 메모장에 붙여넣기 해주시고

OK를 눌러 파일을 업로드 해주세요.

그런다음 configuration.yaml 파일을 열어주세요

적당한 위치에 아래 내용을 붙여넣기 해주세요.

google_assistant:

project_id: YOUR_PROJECT_ID

service_account: !include SERVICE_ACCOUNT.JSON

report_state: true

(google_assistant: 부분은 가장 앞쪽에 위치해야 하고, 아래 3줄은 앞에 띄어쓰기 2칸씩 해주셔야 합니다)

대문자로 표시된 부분만 복사해둔 프로젝트 ID / 키 파일명(json파일) 로 대체해주고

상단의 SAVE버튼을 눌러 저장해 줍니다.

자 이제 HA설정이 모두 완료되었으니, 적용을 위해 재시작을 해줍니다.

구성(구성하기) - 서버제어 - 구성 내용 확인 을 진행하여 올바른지 확인하고

다시 시작하기를 눌러서 재시작을 해주세요.

재시작이 완료되었다면, 이제 HA쪽에서 건드릴건 없습니다.

휴대폰에서 구글 홈 앱을 열어주세요. 구글 계정은 당연히 프로젝트를 만든 계정과 같은 계정을 사용해야 합니다

구글 홈 앱의 좌측 상단에 + 버튼을 클릭 후, 기기 설정 항목에 들어가서

Google 호환 가능 을 선택합니다.

스크롤을 조금 내려보면, [test] 라는 항목이 보일겁니다.

저는 [test]HA 로 되어있는데, 프로젝트 생성 과정에서 Dispaly Name 부분을 HA로 설정했기 때문 입니다.

이걸 선택하면 연결 하겠느냐고 물어보는데 여기서 LINK 를 선택해주고,

홈 어시스턴으 로그인 화면이 나오면 계정을 입력하여 로그인 해줍니다.

초기화면으로 돌아가 보면, 장치들이 잘 연결된걸 확인할 수 있습니다.

혹시 HA로그인 화면이 안 뜬다면, Test 과정이 잘 진행되었는지 살펴보세요.

Test가 진행되지 않았다면 문제가 발생할 수 있습니다.

액션콘솔 - Develop - Account Linking 에서 Test를 반드시 진행하셔야 합니다.

HA로그인까지 완료 되었지만, 장치가 뜨지 않는다면 연결이 잘 된건지 먼저 확인해야 합니다.

+버튼 - 기기설정 - Google 호환 가능 항목을 선택하였을때

가장 위쪽에 [test]설정한이름 으로 xx devices 라는 항목이 보여야 합니다.

여기에 정상적으로 표시가 된다면, 계정 연결까지는 정상인데 HA에서 구글홈으로 연결할 장치의 설정에 문제가 있는 경우 입니다.

옵션중 expose_by_default 항목을 false로 설정하면 entity_config 쪽에 지정하지 않은 것들은

구글홈으로 넘어가지 않기 때문에 해당 옵션을 지우고 정상적으로 로드 되는지 보셔야 합니다.

https://www.home-assistant.io/integrations/google_assistant/#configuration-variables

configuration.yaml 파일에 설정값을 넣을때 확인해야 할건 필수항목 제외하고 크게 3가지 입니다.

1. expose_by_default

이 항목은 기본적으로 true 값을 가지며, 그냥 둔다면 HA에 있는 지원 가능한 모든 디바이스가

구글홈에 연동됩니다.

이 말은, HA에 연결된 장치중 구글홈에서 지원하지 않는 장치도 연동이 된다는 의미이고

불필요한 디바이스(HA에 연결된 구글홈-media_player로 인식됨) 들도 구글홈에 다시 연결됩니다.

하지만 이 값을 false로 변경한다면, 연결할 장치를 하나하나 entity_config 에 넣어줘야 합니다.

2. exposed_domains

이것은 위 expose_by_default 값을 건드리지 않거나, ture로 입력했을때 사용 가능한 옵션으로,

HA에서 인식하는 도메인(switch, light, fan, climate 등등) 을 입력하면

해당 항목의 하위 장치들만 구글홈에 연동시킬 수 있습니다.

이 목록에 포함되지 않은 장치는 구글홈에 연동되지 않으므로, 좀 더 깔끔하게 관리할 수 있습니다.

입력 가능한 도메인 리스트는 아래와 같습니다.

https://www.home-assistant.io/integrations/google_assistant/#available-domains

3. entity_config

이 항목은 HA에서 설정한 값(장치 이름, 방 등) 을 무시하고

구글홈에 보낼때 해당 값을 커스텀 한다던가(name, room 옵션)

2번의 exposed_domains 로 지정한 도메인에 있는 장치중 노출시키고 싶지 않은걸 뺀다던가(expose: false)

1번의 expose_by_default 설정을 false로 했을때 구글홈에 연동시킬 장치를 하나하나 지정한다던가(expose: true)

등의 장치별 세부 설정(entity_id별) 을 해주는 옵션 입니다.

저는 주로 expose_by_default 값은 건드리지 않고(기본값인 true)

exposed_domains 에 switch, light, fan, climate, script를 넣고

음성명령으로 동작되면 안되는 장치(상시 전력측정용 플러그 등) 는

entity_config에 해당 장치를 지정하여 expose: false 로 빼둡니다.

자 오늘 내용은 여기까지!

역대급으로 길었네요.....ㅠ.ㅜ

728x90
반응형