This repository is no longer matained. Use at your own risk.
I had issues with my project and starting fresh seemed to fix it.
This is a emulated Google Assistant with a webserver attached to take commands over HTTP packaged in a Docker container. The container consists of the Google Assistant SDK, python scripts that provide the Flask REST API / OAuth authentication and modifications that base it from the Google Assistant library.
I did not write this code, I simply pulled pieces and modified them to work together. AndBobsYourUncle wrote Google Assistant webserver Hassio add-on which this is largely based on. Chocomega provided the modifications that based it off the Google Assistant libraries.
How does this differ from AndBobsYourUncle's Google Assistant Webserver? This project is modified, running based on the Google Assistant libraries not the Google Assistant Service which allows for additional functionality such as remote media casting (Casting Spotify) See the table here. However this method requires a mic and speaker audio device or an emulated dummy on the host machine.
Interested in Docker but never used it before? Checkout my blog post: Docker In Your HomeLab - Getting Started.
sudo modprobe snd-dummy
. If you're not sure or need help you can follow Googles Configure and Test the Audio documentation.
client_secret.json
, create a configuration directory /home/$USER/docker/config/gawebserver/config
and move the file there./home/$USER/docker/config/gawebserver/assistant
the Google Assistant SDK will cache files here that need to persist through container recreation.DEVICE_MODEL_ID
and PROJECT_ID
environment variables with the values from previous steps. Lastly change the volume to mount your config and assistant directories to /config
and /root/.config/google-assistant-library/assistant
http://containerip:9324
) where you will see Get token from google: Authentication. $ 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"
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
Not sure why a command isn't working? See what happened in your Google Account Activity or under My Activity in the Google Home App.
Here is an example how I use the ga-webserver in Home Assistant to broadcast over my Google Assistants when my dishwasher has finished.
notify:
- name: ga_broadcast
platform: rest
resource: http://containerip:5000/broadcast_message
- name: ga_command
platform: rest
resource: http://containerip:5000/command
- 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 Configuration repository.
device_id
stored in the container. This is fixed with my add step 4 under Setup. Once the container stores its new device_id
there it will persist through container recreation.PYTHONIOENCODING=utf-8
to the Docker configuration.access_token.json
file from the configuration directory, repeat the First Run procedure above.docker logs -f gawebserver