● HA작업중) 구글홈 앱을 HAOS에서 사용 하는 Google Assistant Webserver 애드온
♨ 카랜더 일정 :
2023년04월19일
본문
● HA작업) 구글홈 앱을 HAOS에서 사용 하는 Google Assistant Webserver 애드온
Hassio용 한국어 커뮤니티 애드온 에 있는 정보 입니다
Google 어시스턴트 웹서버
robwolff3가 만든 Google 어시스턴트 웹 서버를 애드온으로 컨버팅한 것입니다. Google 어시스턴트를 HA에서 타임명령으로 높일 수 있는 스위치, 최신 등을 제작할 수 있습니다. 자세한 사용법은 네이버 홈어시스턴트 카페 설정기를 참고하세요.
Installation
홈어시스턴트의 Hass.io > ADD-ON STORE에서 Add new repository by URL에 https://github.com/HAKorea/addons 를 입력한 다음 ADD 버튼을 누릅니다.ADD-ON STORE 페이지 하단에서 "Google Assistant Webserver for Hassio" 클릭합니다."INSTALL" 버튼을 누르면 애드온이 설치됩니다. 최대 약 15분 정도 소요.INSTALL 버튼위에 설치 애니메이션이 동작하는데 이것이 멈추더라도 REBUILD, START 버튼이 나타나지 않는 경우가 있습니다.이 애드온은 이미지를 내려받는 것이 아니라 직접 여러분의 Hassio에서 이미지를 만듭니다. 따라서 컴퓨터성능과 인터넷 속도에 따라서 시간이 좀 걸립니다.INSTALL 버튼을 누른다음 설치 애니메이션이 실행되면 제대로 설치중인 것입니다. INSTALL을 여러번 누르지 마시고 기다리다 지치면 브라우저 페이지를 리프리시 하세요.애드온 페이지에서 Config을 본인의 환경에 맞게 수정합니다.
별도로 구글 계정설정이 필요합니다. 네이버 Homeassistant 카페 설정기를 참고하세요.https://cafe.naver.com/koreassistant/661애드온을 사용하기 위해서는 구글 어시스턴트와 연동하기 위한 몇가지 설정이 필요합니다. 이과정의 원문은 아래 링크입니다https://developers.google.com/assistant/sdk/guides/library/python/embed/config-dev-project-and-account
우선 https://console.actions.google.com/로 이동합니다.
[출처] Google Assistant Webserver 애드온 (HomeAssistant) | 작성자 제이슨
이 애드온은 용량이 600메가 정도로 좀 큽니다. 네트웍 속도와 컴퓨터의 성능에 따라 설치에 시간이 좀 걸릴 수 있습니다. Debian 이미지를 기초로 애드온을 Building 하는데 중간에 데비안 setup-tools 설치에 대한 Warning이 하나 나옵니다. Docker build에서는 문제가 되지 않지만 HA 애드온에서는 설치 과정에 Failed to install addon, [object Object] 라고 뜨고 진행하지 않는 경우가 생길 수 있습니다. 이경우 타임아웃 에러가 난 것인데 넉넉히 10분 기다리셨다가 다시 install 버튼을 누르면 설치가 완료됩니다. 정확하게 하려면 docker images 명령을 실행했을때 25b6f150/amd64-addon-gawebserver 이미지가 생성됐는지 파일 크기는 611MB 메가 정도인지 확인하고 install을 누르면 애드온이 잘 설치됩니다.
Configuration
Add-on configuration:
Option: client_secret
(필수)
구글 어시스턴트 연동을 위한 credential 파일입니다. 네이버 Homeassistant 카페 설정기를 참고.
Option: project_id
(필수)
구글 어시스턴트 프로젝트 id 입니다. 네이버 Homeassistant 카페 설정기를 참고
Option: model_id
(필수)
구글 어시스턴트 모델 id입니다. 네이버 Homeassistant 카페 설정기를 참고
configuration.yaml 추가
아래와 같이 설정해줍니다.
마이크 장치 필요
이 애드온은 마이크 장치가 필요합니다. 마이크가 없는 기기에서는 sudo modprobe snd-dummy 명령을 실행해주어야 합니다. root 권한을 사용하는 ssh 접속후 해당 명령을 실행하세요. 그러면 audio 설정에서 input/output에 dummy 장치가 나타납니다. 명령을 실행해도 dummy 장치가 나타나지 않는 경우에는 아래 asound 파일 설정법을 사용해보세요.
.asoundrc 설정
필요한 경우 /share/gawebserver 폴더에 .asoundrc 파일을 추가할 수 있습니다. /share/gawebserver/.asoundrc 가 존재하면 /root로 복사해서 사용합니다.
https://github.com/HAKorea/addons/blob/master/gawebserver/.asoundrc
이 파일을 /share/gawebserver/.asoundrc로 넣어두시면 해당 파일을 복사해서 root로 옮깁니다. sudo modprobe snd-dummy 명령 실행후 audio에 input/output에 dummy가 나타나지 않는 경우 이 설정을 사용하세요.
Support
궁금한 점이 있으신가요??
아래에 문의 하시면 답변을 구하실 수 있습니다.:
버그신고는 카페나 깃허브로 해주세요 open an issue on our GitHub.
RELEASE NOTES
0.5.1 첫 배포
https://cafe.naver.com/koreassistant/661
https://github.com/robwolff3/google-assistant-webserver
Docker 컨테이너의 Google Assistant 웹 서버
2020년 3월 25일 - 업데이트
내 프로젝트에 문제가 있었고 새로 시작하면 문제가 해결되는 것 같았습니다.
새 컨테이너 이미지 버전 가져오기
Google의 새 문서 https://developers.google.com/assistant/sdk/guides/service/python 에 따라 Google Actions 프로젝트를 다시 만듭니다.
설정, 인증 및 휴대전화의 Google 어시스턴트 설정에 표시되면 Google Home 앱에서 새 기기를 집에 연결해야 했습니다. 그런 다음 브로드캐스트를 위해 내 장치 주소를 선택했습니다.
이게 뭔가요?
Docker 컨테이너에 패키징된 HTTP를 통해 명령을 수행하기 위해 연결된 웹 서버가 있는 에뮬레이트된 Google 어시스턴트입니다. 컨테이너는 Google 어시스턴트 SDK, Flask REST API/OAuth 인증을 제공하는 Python 스크립트 및 Google 어시스턴트 라이브러리를 기반으로 하는 수정으로 구성됩니다.
나는 이 코드를 작성하지 않았고, 단순히 조각을 뽑아서 함께 작동하도록 수정했습니다. AndBobsYourUncle은 Google 어시스턴트 웹서버 Hassio 애드온을 작성했으며 이 애드온은 주로 기반으로 합니다. Chocomega는 Google 어시스턴트 라이브러리를 기반으로 하는 수정 사항을 제공했습니다.
이것이 AndBobsYourUncle의 Google 어시스턴트 웹서버 와 어떻게 다릅니까 ? 이 프로젝트는 수정되어 원격 미디어 캐스팅(Casting Spotify)과 같은 추가 기능을 허용하는 Google 어시스턴트 서비스가 아닌 Google 어시스턴트 라이브러리를 기반으로 실행됩니다. 여기 표를 참조하세요 . 그러나 이 방법을 사용하려면 호스트 시스템에 마이크 및 스피커 오디오 장치 또는 에뮬레이트된 더미가 필요합니다.
AndBobsYourUncle 홈 어시스턴트 포럼 게시물 및 Hassio 애드온 Github 리포지토리
초코메가 수정
Google 어시스턴트 라이브러리 문서
Docker 에 관심이 있지만 전에 사용한 적이 없습니까? 내 블로그 게시물( Docker In Your HomeLab - 시작하기) 을 확인하십시오 .
설정
전제 조건 - 호스트 시스템에 구성된 마이크 및 스피커 오디오 장치. Michal_Ciemiega는 다음과 같은 경우 실제 사운드 카드가 필요하지 않다고 지적했습니다 sudo modprobe snd-dummy. 확실하지 않거나 도움이 필요한 경우 Google의 오디오 구성 및 테스트 문서를 따를 수 있습니다 .
라이브러리 문서 에서 Google 어시스턴트 삽입 절차의 개발자 프로젝트 및 계정 설정 구성 페이지 로 이동합니다 .
장치 모델 등록 까지의 단계를 따르고 프로젝트 ID와 장치 모델 ID를 기록해 둡니다.
OAuth 2.0 Credentials 파일을 다운로드하고 이름을 로 변경한 다음client_secret.json구성 디렉터리를 만들고/home/$USER/docker/config/gawebserver/config파일을 이동합니다.
/home/$USER/docker/config/gawebserver/assistantGoogle Assistant SDK가 컨테이너 재생성을 통해 유지되어야 하는 파일을 여기에 캐시할 추가 폴더를 만듭니다 .
아래 Docker 구성에서 DEVICE_MODEL_ID및 PROJECT_ID환경 변수를 이전 단계의 값으로 채웁니다. 마지막으로 구성 및 보조 디렉터리를 마운트할 볼륨을 변경 /config하고/root/.config/google-assistant-library/assistant
첫 실행
Docker Run 또는 Docker Compose를 사용하여 컨테이너를 시작합니다. 포트 9324 및 5000에서 수신을 시작합니다 . Get token from google: Authentication 이http://containerip:9324 표시되는 포트 9324( )의 컨테이너로 이동합니다 .
URL을 따라 Google로 인증하고 Google의 문자열을 컨테이너 웹 페이지로 반환하고 연결을 클릭합니다. 페이지에 오류가 발생하고 정상이며 컨테이너가 이제 실행 중입니다.
브로드캐스트 메시지를 작동시키려면 다른 브로드캐스트 장치와 마찬가지로 주소를 설정해야 합니다. Google Home 앱에서 계정 > 설정 > 어시스턴트 로 이동합니다 . 하단에서 ga-webserver를 선택하고 해당 주소를 설정합니다. 여기에서 기본 오디오 및 비디오 전송 장치를 설정할 수도 있습니다.
도커 실행
$ docker run -d --name=gawebserver \
--restart on-failure \
-v /home/$USER/docker/config/gawebserver/config:/config \
-v /home/$USER/docker/config/gawebserver/assistant:/root/.config/google-assistant-library/assistant \
-p 9324:9324 \
-p 5000:5000 \
-e CLIENT_SECRET=client_secret.json \
-e DEVICE_MODEL_ID=device_model_id \
-e PROJECT_ID=project_id \
-e PYTHONIOENCODING=utf-8 \
--device /dev/snd:/dev/snd:rwm \
robwolff3/ga-webserver
도커 작성
version: "3.7"
services:
gawebserver:
container_name: gawebserver
image: robwolff3/ga-webserver
restart: on-failure
volumes:
- /home/$USER/docker/config/gawebserver/config:/config
- /home/$USER/docker/config/gawebserver/assistant:/root/.config/google-assistant-library/assistant
ports:
- 9324:9324
- 5000:5000
environment:
- CLIENT_SECRET=client_secret.json
- DEVICE_MODEL_ID=device_model_id
- PROJECT_ID=project_id
- PYTHONIOENCODING=utf-8
devices:
- "/dev/snd:/dev/snd:rwm"
테스트
웹 브라우저를 통해 명령을 전송하여 새로 만든 ga-webserver를 테스트합니다.
명령 보내기http://containerip:5000/command?message=Play Careless Whisper by George Michael on Kitchen Stereo
메시지 브로드캐스트http://containerip:5000/broadcast_message?message=Alexa order 500 pool noodles
명령이 작동하지 않는 이유를 모르십니까? Google 계정 활동 또는 Google Home 앱의 내 활동 에서 무슨 일이 있었는지 확인하세요 .
홈 어시스턴트
다음은 식기 세척기가 완료되었을 때 홈어시스턴트 에서 ga-webserver를 사용하여 Google 어시스턴트를 통해 브로드캐스트하는 방법의 예입니다.
구성.yaml
notify:
- name: ga_broadcast
platform: rest
resource: http://containerip:5000/broadcast_message
- name: ga_command
platform: rest
resource: http://containerip:5000/command
자동화.yaml
- alias: Broadcast the dishwasher has finished
initial_state: True
trigger:
- platform: state
entity_id: input_select.dishwasher_status
to: 'Off'
action:
- service: notify.ga_broadcast
data:
message: "The Dishwasher has finished."
My Home Assistant 구성 저장소 .
알려진 문제 및 문제 해결
Google Home 앱에 중복 기기가 있습니다 . 컨테이너가 다시 생성될 때마다 device_id컨테이너에 저장된 기기가 삭제됩니다. 이것은 설정에서 내 추가 단계 4로 수정되었습니다. 컨테이너가 새 device_id항목을 저장하면 컨테이너 재생성을 통해 유지됩니다.
오류: UnicodeEncodeError: 'ascii' 코덱이 문자를 인코딩할 수 없음 - zewelor가 로케일 환경에서 잘못된 UTF8 인코딩 설정 문제를 발견했습니다. PYTHONIOENCODING=utf-8그는 Docker 구성에 환경 변수를 추가하여 이 문제를 해결했습니다 .
작동하다가 갑자기 중지된 경우 다시 인증해야 할 수 있습니다. 컨테이너를 중지하고 access_token.json구성 디렉터리에서 파일을 삭제한 다음 위의 첫 번째 실행 절차를 반복합니다.
다른 문제가 있습니까? 컨테이너 로그를 확인합니다.docker logs -f gawebserver
☞ https://11q.kr 에 등록된 자료 입니다. ♠ 정보찾아 공유 드리며 출처는 링크 참조 바랍니다♠
뷰PDF 1,2
office view
관련자료
-
링크
-
이전
-
다음
댓글목록
등록된 댓글이 없습니다.