일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 나스닥
- RS-485
- 홈네트워크
- 월패드
- 애플
- 오블완
- ConnectedHomeIP
- 코스피
- Python
- Bestin
- 미국주식
- 티스토리챌린지
- 파이썬
- MQTT
- esp32
- 힐스테이트 광교산
- Espressif
- 국내주식
- homebridge
- Home Assistant
- 배당
- raspberry pi
- 매터
- 퀄컴
- 현대통신
- Apple
- 엔비디아
- matter
- 해외주식
- 공모주
- Today
- Total
YOGYUI
광교아이파크::Bestin 홈네트워크 - 안드로이드 기기 연동 (Home Assistant + Google Assistant) 본문
광교아이파크::Bestin 홈네트워크 - 안드로이드 기기 연동 (Home Assistant + Google Assistant)
요겨 2022. 2. 20. 20:20
앞선 글에서 Raspberry Pi 4에 Home Assistant(HA) 컨테이너(도커) 환경을 구축한 뒤, 기존에 구현해둔 Bestin 홈네트워크와 연동된 MQTT 토픽들을 HA와 연동하는 방법을 알아보았다
라즈베리파이 - Home Assistant 컨테이너 설치하기
라즈베리파이 - MQTT 액세서리 추가하기 (Bestin 홈네트워크 연동)
Bestin 홈네트워크 - MQTT 환경구축은 기존에 Apple HomeKit과 연동하는 방법은 링크를 참고하면 된다
광교아이파크::Bestin Apple HomeKit 연동 Summay (1)
이제 안드로이드 모바일 기기와 연동하기 위해 구글 홈(구글 어시스턴트)과 연동해보자
1. iOS 혹은 안드로이드에서 '구글 홈' 앱 설치
책상 한구석에서 먼지만 쌓여가던 갤럭시탭 S7 (SM-T870)을 오랜만에 켜서 구글스토어(Play 스토어)에서 '구글 홈'을 검색한 후 다운로드받았다
이것저것 지시사항대로 설정을 완료하면
텅 빈 화면이 나오게 된다
2. 구글 어시스턴트(Google Assistant) 연동
Home Assistant의 공식 문서를 참고하여 진행하면 된다
https://www.home-assistant.io/integrations/google_assistant/
Home Assistant Cloud에 가입(유료)된 유저라면 쉽게 자동화할 수 있다 (과연 과금 유저가 많을지는 의문)
2.1. 외부접속 설정
※ 중요한 것은 구글 서비스는 구글 서비스는 https(HTTP secure)를 사용하므로 SSL 인증서가 필요하다는 점이다!
결국 DNS에 SSL 인증서를 결합해줘야 되는데, Synology 계열은 Let's Encrypt같은 무료 SSL 발급 서비스를 플러그인으로 접근할 수 있지만, ipTime 계열은 DDNS (xxx.iptime.org)에 SSL 발급이 잘 안되는게 문제다
ipTime 계열 공유기에서 구동되는 웹서버에 Let's Encrypt로 발급받은 SSL 인증서를 적용하는 방법은 다른 글에 소개
2.2. 구글 클라우드 플랫폼 (Google Close Platform) 설정
구글의 Actions Console 웹페이지로 접속하자
https://console.actions.google.com
설정 과정이 상당히 길고 지루하니 마음의 준비를 단단히 하고 시작하도록 하자
[1] 구글 계정으로 로그인한 뒤에 'New Project' 버튼 클릭
[2] 이용 약관 동의
'Terms of Service'만 Yes 클릭해도 된다
[3] 프로젝트명 기입 후 생성
프로젝트명은 아무렇게나 지어도 상관없다
별다른 이유가 없다면 언어 및 지역 선택은 한글 및 한국으로 선택해주자
[4] Smart Home 클릭 후 'Start Building' 클릭
[5] Name Your Smart Home action 클릭
[6] Display Name 지정 후 Save 버튼 클릭
추후 구글 홈 앱에서 "[test]<Display Name>"으로 서비스 추가하게 된다
이것 역시 아무렇게나 지어넣으면 된다
[7] Overview - Build your Action 클릭
[8] Add Action(s) 클릭
[9] Home Assistant 외부접속 URL 입력 후 Save 버튼 클릭
Fullfillment URL에 https://{HA Remote Access URL}/api/google_assistant 포맷으로 입력
중요: 공유기의 DHCP 주소 (ex: 192.168.xxx.xxx)를 입력하면 안된다
또한, HA의 포트 (default 8123)는 포트포워딩해줘야한다 (경우에 따라서는 방화벽 설정도 해야함)
[10] Project setting 클릭
[11] Project ID 확인
노트패드 등에 복사-붙여넣기해두자
[12] Overview - Setup account linking 클릭
Home Assistant와 상호작용하기 위한 설정 시작
[13] OAuth Client 정보 입력 후 Next 버튼 클릭
- Client ID: https://oauth-redirect.googleusercontent.com/r/{프로젝트 ID}
프로젝트 ID는 앞서 [11]에서 복사해둔 'Project ID' 기입 - Client Secret: 아무 문자열이나 입력 (ex: test)
- Authorization URL: https://{HA Remote Access URL}/auth/authorize
- Token URL: https://{HA Remote Access URL}/auth/token
[14] Use your app for account linking
그냥 Next 버튼 클릭
[15] Configure your client
Scopes에 이메일 주소 입력한 뒤 'Add Scope' 버튼 클릭
사용자 이름 입력한 뒤 'Add scope' 버튼 클릭
체크박스 (Google to transmit clientID and secret via HTTP basic auth header) 클릭하지 말고 Next 버튼 클릭
Save 버튼 클릭
입력한 정보의 summary를 확인할 수 있다
(잘못 입력한 경우 여기서 수정 후 Save 버튼 클릭)
[15] Develop - Account linking - Test 버튼 클릭
테스트화면 확인 (HA에 등록하지 않았으므로, 아직 아무 행동도 할 수 없음)
Setting 버튼 클릭
'On device testing' 활성화 (기본값으로 활성화되어 있다)
[16] Manage user access 클릭
- Google Cloud Platform URL로 리다이렉트(새 창)된다
[17] 서비스 계정 - '서비스 계정 만들기' 클릭
[18] 계정 이름 및 설명 기입
본인이 알아볼만한 문자열로 기입하면 된다
기입 완료 후 '만들고 계속하기' 클릭
[19] 액세스 권한 부여 (토큰 생성)
역할 선택 클릭 - 서비스 계정 - 서비스 계정 토큰 생성자 클릭
'계속' 버튼 클릭
'완료' 버튼 클릭
[20] 생성된 서비스 계정에서 작업 - 키 관리 클릭
[21] '키 추가' - '새 키 만들기' 클릭
[22] 'JSON' 선택된 상태에서 '만들기' 버튼 클릭
비공개 키가 로컬에 저장되었다 (확장자: json)
json 파일 내용은 다음 템플릿으로 구성되어 있다
{
"type": "service_account",
"project_id": "{프로젝트 ID}",
"private_key_id": "{비공개 키 ID}",
"private_key": "-----BEGIN PRIVATE KEY-----\{비공개 키 문자열}\n-----END PRIVATE KEY-----\n",
"client_email": "{클라이언트 이메일 주소}",
"client_id": "{클라이언트 ID}",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "{x509 인증 URL}"
}
json 파일은 추후 HA configuration.yaml 설정 시 사용해야 하니 따로 저장해두자
[23] Home Graph API 설정
링크 접속 후 사용 버튼 클릭
[24] Local Fullfillment 설정
'Develop' 탭 - 'Actions' 선택 - Upload JavaScript Files 선택
Node, Chrome 둘 다 아래 첨부된 파일 업로드
'Add device scan configuration' - 'New scan config' 클릭
'MDNS' 선택 - MDNS service name에 _home-assistant._tcp.local 입력
'Add field' 클릭 - 'Name' 선택 - .*\._home-assistant\._tcp\.local 입력
'Add capabilities' - 'Support local query' 체크
'Save' 버튼 클릭
이제 구글 클라우드 플랫폼 설정은 끝났다~(헥헥...)
2.2. HA HTTPS 접속 환경 구성
HTTPS로 HA에 접근하기 위해 Let's Encrypt로 발급받은 SSL 인증서 파일 2개(.pem)를 HA 설치경로의 /ssl 디렉터리로 복사해준다
sudo cp /letsencrypt/live/xxxx.duckdns.org/fullchain.pem ~/homeassistant/ssl/fullchain.pem
sudo cp /letsencrypt/live/xxxx.duckdns.org/privkey.pem ~/homeassistant/ssl/privkey.pem
Home Assistant 설정 파일(configuration.yaml) 파일을 열어서 다음 스크립트를 추가해주자
http:
ssl_certificate: ssl/fullchain.pem
ssl_key: ssl/privkey.pem
base_url: https://xxxx.duckdns.org:8123
HA를 재시작한 후 https:// 로 접속하여 페이지가 제대로 로딩되는지 확인
URL 창 왼쪽에서 자물쇠 모양이 제대로 나타나는지 확인
2.3. HA google_assistant 통합 환경 추가
Home Assistant 설정 파일(configuration.yaml) 파일을 열어서 다음 스크립트를 추가해주자
템플릿은 다음과 같다
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
여기서 YOUR_PROJECT_ID, SERVICE_ACCOUNT.JSON 에는 앞서 저장해둔 서비스 계정 비공개 키 JSON 파일의 내용을 적어넣어야 한다
HA OS를 설치했다면 'File Editor' 애드온을 설치해서 json 파일을 UI 상에서 그대로 업데이트해주면 되고, 나처럼 컨테이너 기반으로 구축했다면 수동으로 옮겨주면 된다
json 파일을 gcp_service_account.json 으로 바꿔준 뒤 configuration.yaml이 존재하는 경로로 옮겨주자
(HA가 구동중인 플랫폼 상에서 파일을 만들어서 그대로 복사-붙여넣기해도 된다)
나처럼 Raspbian OS - HA Container 시스템을 구축했다면, nano같은 에디터로 파일을 만들어주면 된다
cd {HA 설치경로}
sudo nano gcp_service_account.json
에디터에 json 파일 내용 그대로 기입 후 저장
이제 configuration.yaml 파일을 다음과 같이 수정
google_assistant:
project_id: xxxxx
service_account: !include gcp_service_account.json
report_state: true
expose_by_default: true
exposed_domains:
- switch
- light
- sensor
- fan
- button
- climate
※ project_id는 본인이 앞서 구성한 project id 기입
- exposed_by_default: Google Home 초기 동기화 시 HA 내의 디바이스를 자동으로 연동
- exposed_domains: 내가 설정한 아이템들의 도메인 리스트
2.4. 구글 홈 앱 - 서비스 추가하기
[1] 안드로이드 기기에서 구글 홈 앱 실행 후 좌측 상단 + 선택
[2] '기기 설정' 선택
[3] 'Google 호환 가능' 선택
[4] '[test] {Actions Console에서 설정한 Display Name}' 선택
특수문자 '['로 시작하므로, 상단에서 찾을 수 있다 ([test]로 검색해도 됨)
[5] Chrome 관련 설정 (기기에 따라 Skip될 수 있음)
갤럭시탭을 거의 쓰지 않다보니 구글 크롬을 한번도 안열어봤던 것 같다... ㅎㅎ
[6] Home Assistant 로그인
HTTPS가 제대로 적용되었다면 정상적으로 로그인할 수 있다
[7] Link
링크가 끝나면 내 디바이스들이 동기화되어서 리스트업된다
이제 메인 화면으로 나가보면 기기들을 제어할 수 있다
3. 동작 확인
거실 조명 제어 예시
그리고 많은 아이파크 거주자(Bestin) 분들이 부러워(?)하시는 엘리베이터 호출! ㅋㅋ
어차피 핵심은 "RS485 패킷 파싱 - MQTT"이기 때문에, 제대로 동작할 수 밖에 없다 (?)
4. 결론
너무너무 시간이 오래 걸렸다 ㅋㅋㅋ
Home Assistant를 처음 써봤기에 인프라 구축 - 디바이스 설정에 거의 이틀이상 잡아먹었고, 구글 어시스턴트랑 연동하려니 HTTPS가 필요하다고 해서 DNS 발급, SSL 인증서 발급하는데 하루정도 소모했고, 구글 액션/클라우드 설정하는데 또 하루가 걸렸다...
그래도 구석에 박혀서 눈물만 흘리던 갤럭시탭을 다시 소생시켜서 쓸모를 찾아주게 된 것이 의미가 있다랄까? 나름 보람찬 일주일이었다 (HA 관련해서 이것저것 찾아보니 이것도 참 재미있는 플랫폼이라는 느낌이 들었다 - Homebridge에 비해 그다지 사용하기 편하진 않았다)
'홈네트워크(IoT) > 광교아이파크' 카테고리의 다른 글
광교 아이파크::Bestin 홈네트워크 연동(애플, 안드로이드) 시스템 정리 (2) | 2022.02.22 |
---|---|
Bestin 홈네트워크 + 구글 어시스턴트 - 구글 홈 미니(AI 스피커) 연동 (0) | 2022.02.21 |
Bestin 홈네트워크 Flask 웹서버 - Nginx 연동 (0) | 2022.02.19 |
Home Assistant - MQTT 액세서리 추가하기 (Bestin 홈네트워크 연동) (11) | 2022.02.18 |
광교아이파크::전원콘센트 Apple 홈킷 연동 (3) - Final (4) | 2021.08.23 |