diff --git a/google_assistant/CHANGELOG.md b/google_assistant/CHANGELOG.md index 88be0b8..d6e260b 100644 --- a/google_assistant/CHANGELOG.md +++ b/google_assistant/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 2.5.0 + +- Add an option to enable feedback sounds + ## 2.4.0 - Improve OAuth connection process UI diff --git a/google_assistant/DOCS.md b/google_assistant/DOCS.md index ffc7997..84dce66 100644 --- a/google_assistant/DOCS.md +++ b/google_assistant/DOCS.md @@ -33,6 +33,18 @@ The ID of the model you've registered at Google for this add-on. The model id can also be found under the "Develop - Device registration" tab in the [Google Actions Console][google-actions-console]. +### Option group: `feedback` + +The following options are for the option group: `feedback`. + +#### Option: `feedback.enabled` + +Set to `true` if you want to hear feedback sounds when Google Assistant starts and stops listening to your command. + +#### Option: `feedback.volume` + +The percentage of volume to use for feedback sounds. + ## How to use You first need to enable access to the Google Assistant API. diff --git a/google_assistant/Dockerfile b/google_assistant/Dockerfile index 430ec37..d9b7ab1 100644 --- a/google_assistant/Dockerfile +++ b/google_assistant/Dockerfile @@ -13,6 +13,7 @@ RUN apt-get update \ && apt-get install -y --no-install-recommends \ libportaudio2 \ libasound2-plugins \ + pulseaudio-utils \ python3 \ python3-dev \ build-essential \ diff --git a/google_assistant/config.json b/google_assistant/config.json index bd0e24d..3fc5500 100644 --- a/google_assistant/config.json +++ b/google_assistant/config.json @@ -1,6 +1,6 @@ { "name": "Google Assistant SDK", - "version": "2.4.0", + "version": "2.5.0", "slug": "google_assistant", "description": "A virtual personal assistant developed by Google", "url": "https://github.com/home-assistant/hassio-addons/tree/master/google_assistant", @@ -19,12 +19,20 @@ "options": { "client_secrets": "google_assistant.json", "project_id": null, - "model_id": null + "model_id": null, + "feedback": { + "enable": false, + "volume": 80 + } }, "schema": { "client_secrets": "str", "project_id": "str", - "model_id": "str" + "model_id": "str", + "feedback": { + "enable": "bool", + "volume": "int(0,100)" + } }, "image": "homeassistant/{arch}-addon-google_assistant" } diff --git a/google_assistant/rootfs/etc/services.d/google-assistant/run b/google_assistant/rootfs/etc/services.d/google-assistant/run index 36ae246..cacb259 100644 --- a/google_assistant/rootfs/etc/services.d/google-assistant/run +++ b/google_assistant/rootfs/etc/services.d/google-assistant/run @@ -8,6 +8,7 @@ CRED_JSON=/data/cred.json CLIENT_SECRETS=$(bashio::config 'client_secrets') MODEL_ID=$(bashio::config 'model_id') PROJECT_ID=$(bashio::config 'project_id') +FEEDBACK=$(bashio::config 'feedback') # check if a new assistant file exists if bashio::fs.file_exists "/share/${CLIENT_SECRETS}"; then @@ -24,4 +25,4 @@ fi bashio::log.info "Starting Home Assistant GAssisant SDK..." exec python3 /usr/bin/hassio_gassistant.py \ - "${CRED_JSON}" "${PROJECT_ID}" "${MODEL_ID}" + "${CRED_JSON}" "${PROJECT_ID}" "${MODEL_ID}" "${FEEDBACK}" diff --git a/google_assistant/rootfs/usr/bin/hassio_gassistant.py b/google_assistant/rootfs/usr/bin/hassio_gassistant.py index 2b8e4f7..92f9f8f 100644 --- a/google_assistant/rootfs/usr/bin/hassio_gassistant.py +++ b/google_assistant/rootfs/usr/bin/hassio_gassistant.py @@ -2,7 +2,8 @@ import json import sys from pathlib import Path - +import subprocess +import json import google.oauth2.credentials from google.assistant.library import Assistant @@ -11,11 +12,23 @@ from google.assistant.library.device_helpers import register_device DEVICE_CONFIG = "/data/device.json" +PACAT_MAX_VOLUME = 65536 + +feedback = json.loads(sys.argv[4]) +feedback_volume = feedback.get("volume", 0) * PACAT_MAX_VOLUME // 100 + +def play_sound(sound_file): + if feedback["enable"] and feedback_volume > 0: + subprocess.Popen(["paplay", "--volume={v}".format(v=feedback_volume), "/usr/share/sounds/{f}".format(f=sound_file)]) def process_event(event): if event.type == EventType.ON_CONVERSATION_TURN_STARTED: + play_sound("start_sound.wav") print() + if event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED: + play_sound("end_sound.wav") + try: print(event) except UnicodeEncodeError as err: @@ -29,8 +42,8 @@ if __name__ == '__main__': cred_json = Path(sys.argv[1]) device_json = Path(DEVICE_CONFIG) - # open credentials - print("OAth with Google") + # Open credentials + print("OAuth with Google") with cred_json.open('r') as data: credentials = google.oauth2.credentials.Credentials(token=None, **json.load(data)) @@ -46,7 +59,7 @@ if __name__ == '__main__': device_model_id = sys.argv[3] last_device_id = None - # run assistant + # Run assistant print("Run Google Assistant SDK") with Assistant(credentials, device_model_id) as assistant: events = assistant.start() diff --git a/google_assistant/rootfs/usr/share/sounds/end_sound.wav b/google_assistant/rootfs/usr/share/sounds/end_sound.wav new file mode 100755 index 0000000..3374c29 Binary files /dev/null and b/google_assistant/rootfs/usr/share/sounds/end_sound.wav differ diff --git a/google_assistant/rootfs/usr/share/sounds/start_sound.wav b/google_assistant/rootfs/usr/share/sounds/start_sound.wav new file mode 100755 index 0000000..c41781e Binary files /dev/null and b/google_assistant/rootfs/usr/share/sounds/start_sound.wav differ