IOT

4. Home Assistant + Google Assistant 연동하기

오리야호 2021. 5. 18. 03:47
반응형

사전 준비 사항

 

Google Assistant 연동 전 미리 준비해야 할 것이 있습니다.

 

Home Assistant를 설치하고 나서 http://ip주소:8123로 접속하실 텐데 Google과 연동하려면 https로 외부 서비스가 가능해야 합니다.

 

결론은 도메인이 필요하고, SSL 인증서가 필요합니다.

 

도메인은 무료든 구매하시든 상관없고 카페에선 dockdns를 많이 사용하시네요.

 

인증서는 무료인 Let's Encrypt를 많이들 쓰고 있습니다.

 

 

방법 1. 간단하게 Duck DNS 애드온으로 적용하는 가장 쉬운 방법입니다.

HomeAssistant

 

[유튜브] 7편. HA 설정하기 03 - HTTPS 접속하기 첫번째

안녕하세요~ 레이군 입니다.HA설치하기 일곱번째 시간을 들고왔어요..오늘도 뭔가 많네요....이쁜 모션그래픽을 넣을줄 모르는 1인이니, 저희 아들들 사진으로 채웠습니다!

cafe.naver.com

 

 

방법 2. Synology DDNS를 사용하고 있다면 깔끔하게 sub 도메인으로 추가할 수 있습니다.

https://ha.xxxx.synology.me 식으로 접속이 가능합니다.

HomeAssistant

 

Synology DSM 역방향 프록시 설정 (https:// 주소 사용하기)

대한민국 모임의 시작, 네이버 카페

cafe.naver.com

 

 

기타 방법. 개인 도메인 + SSL 인증서 적용

 

저는 개인 도메인에 Home Assistant 운영 중인 IP로 서비스 도메인을 연결하고 Let's Encrypt로 인증서를 받아서 https를 적용하였습니다.

 

 

Let's Encrypt는 3개월 단위로 갱신이 필요하니 주기적으로 갱신하도록 자동화하는 것이 중요한 포인트입니다.

 


통합 구성요소 수동 등록

 

구글의 음성인식을 사용해서 Home Assistant에 등록된 기기들에게 일을 시켜볼 단계입니다.

 

구글에서 요구하는 https 주소를 갖는 것을 사전 준비사항에서 진행을 했고요.

 

아래 두 가지 작업을 진행하겠습니다.

  1. Google Assistant에게 내 음성을 통해 시킬 준비
  2. Home Assistant에게 Google Assistant가 시키면 받아들일 준비

 

1. Google Assistant에게 내 음성을 통해 시킬 준비

번역본(일부 공식 매뉴얼과 다른 내용이 있어 번역본은 참고만 하였습니다.)

구글 어시스턴트(Google Assistant)

 

구글 어시스턴트(Google Assistant)

Setup for Google Assistant integration

hakorea.github.io

공식 매뉴얼 Google Assistant

 

Google Assistant

Setup for Google Assistant integration

www.home-assistant.io

 

 

 

1. Actions on Google console 프로젝트 생성 및 설정

 

Actions on Google은 사용자가 Google 어시스턴트를 사용해 작업을 수행하도록 지원하는 서비스입니다.

 

쉽게 말해, 내가 구글 홈 미니를 통해서 말하는걸 → (음성인식 기능은 AI 스피커를 활용) → Home Assistant가 뭘 해야 할지를 정해준다(Action)입니다.

 

계정은 별도로 하나 더 생성하시길 추천드립니다. 개인 계정의 많은 연결된 동기화 서비스(캘린더, 연락처, 메모 등)가 구글 홈 미니를 통해 공유될 수 있습니다.

 

개인 계정 외 집 제어용 xxxxx.home@gmail.com 정도가 딱 적당합니다.

 

 

 

https://console.actions.google.com/ 접속하여 로그인 후 New project를 누릅니다.

 

프로젝트 명은 알아서 정하시면 돕니다. 언어와 지역을 선택해줍니다.

 

 

 

Smart Home 클릭 후 Smart Building 클릭

 

Action 추가하기

 

아래 이미지 참고하여 Action 추가 메뉴로 접속

 

 

Fulfillment URL을 작성합니다.

 

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

 

붉은색 부분을 자신의 Home Assistant 주소를 적어줍니다.(https 작업했던 주소)

 

 

저장 후 프로젝트 설정에서 Project ID를 메모장에 잘 복사해둡니다. (잠시 뒤 사용 예정)

 

 

Account linking 메뉴로 가서 Home Assistant와 연동에 필요한 설정을 합니다.

 

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

(위에서 복사해놨던 Project ID를 여기서 붙여 넣습니다)

 

Client Secret : 아무거나

(Home Assistant에서는 안 쓰인다고 아무거나 하라네요)

 

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

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

 

Configure your client의  scopes에 email 입력 후 add scope 누르고 , name을 입력 후 add scope 눌러 각각 추가해줍니다.

 

Google to transmit clientID and secret via HTTP basic auth header 은 체크를 해제해줍니다.

 

 

테스트 앱을 생성해줍니다

 

 

기기 테스트가 활성화되어있는지 확인합니다.

 

 

2. 다른 사용자 추가 필요시

 

Google Assistant를 통해 가족 등이 제어를 위해 권한 추가할 경우 아래 링크 참고하시면 됩니다. 제 경우는 구글 홈 미니를 통해서만 음성인식을 할 경우라 이 과정을 진행하지 않았습니다. 나중에 추가 가능합니다.

 

가족 초대가 필요할 경우 - Google Assistant

 

 

 

3. 기기 동기화 설정

 

구글 서버와 상태 정보를 동기화하기 위해 필요한 작업입니다.

 

 

서비스 계정 생성을 위해 GCP 콘솔 사이트로 이동합니다.

 

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

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

 

 

프로젝트 선택 후 서비스 계정 만들기

 

 

적당한 이름으로 생성

 

저는 이미 만들어놓은 게 있는데 스샷 찍으려고 하나 더 만들어 봤습니다.

 

 

서비스 계정 > 서비스 계정 토큰 생성자 권한 추가

 

 

 

 

계속 후 완료

 

 

 

키 관리에서 키를 생성합니다.

 

 

 

 

 

 

생성된 json 파일이 다운로드됩니다. 이 파일 이름을 service_account.json으로 변경합니다. 나중에 Home Assistant에서 사용됩니다.

 

HomeGraph API 사용 설정해줍니다.

 

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

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

 

 

 

 

 

Home Assistant 구성 설정

 

 

애드온 스토어에서 파일 에디터나 Visual Studio Code를 설치해줍니다.

 

 

받아놨던 service_account.json 파일을 config 경로에 업로드해줍니다.

 

 

 

config 폴더에 있는 configuration.yaml을 편집합니다. (통합과 구성 관련된 메인 파일)

 

 

# Example configuration.yaml entry
google_assistant:
  project_id: YOUR_PROJECT_ID
  service_account: !include SERVICE_ACCOUNT.JSON
  report_state: true
  exposed_domains:
    - switch
    - light
  entity_config:
    switch.kitchen:
      name: CUSTOM_NAME_FOR_GOOGLE_ASSISTANT
      aliases:
        - BRIGHT_LIGHTS
        - ENTRY_LIGHTS
    light.living_room:
      expose: false
      room: LIVING_ROOM

 

Google Assistant 정보와 구성요소 (스위치, 전등 등)를 입력할 겁니다.

 

Home Assistant에서 등록해둔 구성요소를 자동으로 불러올 수도 있고 수동으로 등록할 수 있는데 저는 수동으로 설정했습니다.

 

 

제가 쓰고 있는 설정입니다. (#은 주석입니다.)

 

# Google Assistant Configuration
google_assistant:
  project_id: YOUR_PROJECT_ID # services_account.json 파일 안에 있는 project_id
  service_account: !include service_account.json
  report_state: true
  expose_by_default: false # 기본적으로 기기들을 연동할지 여부를 결정 (수동으로 추가하기 위해 false 처리)
  entity_config: 
    light.kocom_bedroom_light0: # 안방 전등
      name: 전등
      expose: true
      aliases:
        - 전등
        - 불
      room: 안방
    switch.node_4: # 안방 취침등
      name: 취침등
      expose: true
      room: 안방
    light.kocom_dressingroom_light0: # 옷방 전등
      name: 전등
      expose: true
      aliases:
        - 전등
        - 불
      room: 옷방
    light.kocom_livingroom_light1: # 거실 전등
      name: 전등
      expose: true
      aliases:
        - 전등
        - 불
      room: 거실
    light.kocom_kitchen_light1: # 주방 전등
      name: 전등
      expose: true
      aliases:
        - 전등
        - 불
      room: 주방
    light.kocom_kitchen_light2: # 식탁 전등
      name: 전등
      expose: true
      aliases:
        - 전등
        - 불
      room: 식탁
    light.kocom_playroom_light0: # 컴퓨터방 전등
      name: 전등
      expose: true
      aliases:
        - 전등
        - 불
      room: 컴퓨터방
    switch.kocom_wallpad_elevator: # 엘리베이터
      name: 엘리베이터
      expose: true
    fan.kocom_wallpad_fan: # 환기
      name: 환기
      expose: true
      room: 오리네

 

 

설정 파일에 대한 설명은 공식 가이드 또는 번역 페이지 보시면 됩니다.

 

 

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

 

Google Assistant

Setup for Google Assistant integration

www.home-assistant.io

https://hakorea.github.io/integrations/google_assistant/#configuration

 

구글 어시스턴트(Google Assistant)

Setup for Google Assistant integration

hakorea.github.io

 

 

여기까지 진행하셨다면 Google Assistant와 Home Assistant가 연동되도록 "설정"까지 된 것입니다.

 

 

Google Home 앱에서 Home Assistant의 기기를 등록해주면 구글 홈 미니의 음성인식을 활용하여 기기를 제어할 수 있게 됩니다.

 

 

 

안드로이드 기준으로 작성하였습니다.

 

 

Google Home 앱을 설치하고 + 버튼을 눌러 추가해줍니다.

 

 

혹시 구글 계정을 여러 개 사용하신다면 Actions on Google에 사용한 계정으로 로그인해줍니다.

 

 

Google 호환 기능을 누르고 Actions on Google에서 만들었던 앱을 선택해줍니다. 만들 당시 이름을 지정하셨다면 그 이름으로 찾으시면 됩니다.

 

Actions on Google에서 만든 앱을 선택하면 Home Assistant 로그인 창이 뜹니다.

 

로그인을 하고 나면 설정해뒀던 기기들이 등록됩니다.

 

 

 

 

 

구글 홈 미니를 등록해두었다면 오케이 구글, 안방 불 꺼줘 라고 말하면 불을 꺼줍니다.

 

 

 

엘리베이터는 스위치로 등록되어있어서 엘리베이터 켜줘 라고 말해야 호출이 됩니다.

 

 

 

 

반응형