From 296ea4e832bf50a72e8f6a7dcec6dd2e2dc4d478 Mon Sep 17 00:00:00 2001 From: PoofyTeddy <33599733+poofyteddy@users.noreply.github.com> Date: Wed, 28 Aug 2019 20:02:31 +0200 Subject: [PATCH 1/5] Disable telemetry by default As in the doc https://cloud.ibm.com/apidocs/text-to-speech?code=python#data-collection Still need to understand how config work in ha --- homeassistant/components/watson_tts/tts.py | 149 +++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/homeassistant/components/watson_tts/tts.py b/homeassistant/components/watson_tts/tts.py index 0b7228fb568b..87af0f567d1d 100644 --- a/homeassistant/components/watson_tts/tts.py +++ b/homeassistant/components/watson_tts/tts.py @@ -77,6 +77,7 @@ DEFAULT_VOICE = "en-US_AllisonVoice" DEFAULT_OUTPUT_FORMAT = "audio/mp3" +DEFAULT_TELEMETRY = False PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -86,6 +87,7 @@ vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT): vol.In( SUPPORTED_OUTPUT_FORMATS ), + vol.Optional(CONF_TELEMETRY, default=DEFAULT_TELEMETRY): cv.boolean, } ) @@ -96,6 +98,153 @@ def get_engine(hass, config): service = TextToSpeechV1(url=config[CONF_URL], iam_apikey=config[CONF_APIKEY]) + supported_languages = list({s[:5] for s in SUPPORTED_VOICES}) + default_voice = config[CONF_VOICE] + output_format = config[CONF_OUTPUT_FORMAT] + service.set_default_headers({'x-watson-learning-opt-out': config[CONF_TELEMETRY]}) + + return WatsonTTSProvider(service, supported_languages, default_voice, output_format) + + +class WatsonTTSProvider(Provider): + """IBM Watson TTS api provider.""" + + def __init__(self, service, supported_languages, default_voice, output_format): + """Initialize Watson TTS provider.""" + self.service = service + self.supported_langs = supported_languages + self.default_lang = default_voice[:5] + self.default_voice = default_voice + self.output_format = output_format + self.name = "Watson TTS" + #test: Watson telemetry opt-out + + @property + def supported_languages(self): + """Return a list of supported languages.""" + return self.supported_langs + + @property + def default_language(self): + """Return the default language.""" + return self.default_lang + + @property + def default_options(self): + """Return dict include default options.""" + return {CONF_VOICE: self.default_voice} + + @property + def supported_options(self): + """Return a list of supported options.""" + return [CONF_VOICE] + + def get_tts_audio(self, message, language=None, options=None): + """Request TTS file from Watson TTS.""" + response = self.service.synthesize( + message, accept=self.output_format, voice=self.default_voice + ).get_result() + + return (CONTENT_TYPE_EXTENSIONS[self.output_format], response.content) +"""Support for IBM Watson TTS integration.""" +import logging + +import voluptuous as vol + +from homeassistant.components.tts import PLATFORM_SCHEMA, Provider +import homeassistant.helpers.config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +CONF_URL = "watson_url" +CONF_APIKEY = "watson_apikey" +ATTR_CREDENTIALS = "credentials" + +DEFAULT_URL = "https://stream.watsonplatform.net/text-to-speech/api" + +CONF_VOICE = "voice" +CONF_OUTPUT_FORMAT = "output_format" +CONF_TEXT_TYPE = "text" + +# List from https://tinyurl.com/watson-tts-docs +SUPPORTED_VOICES = [ + "de-DE_BirgitVoice", + "de-DE_BirgitV2Voice", + "de-DE_BirgitV3Voice", + "de-DE_DieterVoice", + "de-DE_DieterV2Voice", + "de-DE_DieterV3Voice", + "en-GB_KateVoice", + "en-GB_KateV3Voice", + "en-US_AllisonVoice", + "en-US_AllisonV2Voice", + "en-US_AllisonV3Voice", + "en-US_LisaVoice", + "en-US_LisaV2Voice", + "en-US_LisaV3Voice", + "en-US_MichaelVoice", + "en-US_MichaelV2Voice", + "en-US_MichaelV3Voice", + "es-ES_EnriqueVoice", + "es-ES_EnriqueV3Voice", + "es-ES_LauraVoice", + "es-ES_LauraV3Voice", + "es-LA_SofiaVoice", + "es-LA_SofiaV3Voice", + "es-US_SofiaVoice", + "es-US_SofiaV3Voice", + "fr-FR_ReneeVoice", + "fr-FR_ReneeV3Voice", + "it-IT_FrancescaVoice", + "it-IT_FrancescaV2Voice", + "it-IT_FrancescaV3Voice", + "ja-JP_EmiVoice", + "pt-BR_IsabelaVoice", + "pt-BR_IsabelaV3Voice", +] + +SUPPORTED_OUTPUT_FORMATS = [ + "audio/flac", + "audio/mp3", + "audio/mpeg", + "audio/ogg", + "audio/ogg;codecs=opus", + "audio/ogg;codecs=vorbis", + "audio/wav", +] + +CONTENT_TYPE_EXTENSIONS = { + "audio/flac": "flac", + "audio/mp3": "mp3", + "audio/mpeg": "mp3", + "audio/ogg": "ogg", + "audio/ogg;codecs=opus": "ogg", + "audio/ogg;codecs=vorbis": "ogg", + "audio/wav": "wav", +} + +DEFAULT_VOICE = "en-US_AllisonVoice" +DEFAULT_OUTPUT_FORMAT = "audio/mp3" + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_URL, default=DEFAULT_URL): cv.string, + vol.Required(CONF_APIKEY): cv.string, + vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORTED_VOICES), + vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT): vol.In( + SUPPORTED_OUTPUT_FORMATS + ), + } +) + + +def get_engine(hass, config): + """Set up IBM Watson TTS component.""" + from ibm_watson import TextToSpeechV1 + + service = TextToSpeechV1(url=config[CONF_URL], iam_apikey=config[CONF_APIKEY]) + + service.set_default_headers({'x-watson-learning-opt-out': "true"}) supported_languages = list({s[:5] for s in SUPPORTED_VOICES}) default_voice = config[CONF_VOICE] output_format = config[CONF_OUTPUT_FORMAT] From a77fc036d12dc103c6f74ea50323ca4f9c8a48ad Mon Sep 17 00:00:00 2001 From: PoofyTeddy <33599733+poofyteddy@users.noreply.github.com> Date: Wed, 28 Aug 2019 21:25:01 +0200 Subject: [PATCH 2/5] enable the use of enable_telemetry in conf file This should do it from what i understand --- homeassistant/components/watson_tts/tts.py | 146 +-------------------- 1 file changed, 1 insertion(+), 145 deletions(-) diff --git a/homeassistant/components/watson_tts/tts.py b/homeassistant/components/watson_tts/tts.py index 87af0f567d1d..1c49e4a7d54b 100644 --- a/homeassistant/components/watson_tts/tts.py +++ b/homeassistant/components/watson_tts/tts.py @@ -17,6 +17,7 @@ CONF_VOICE = "voice" CONF_OUTPUT_FORMAT = "output_format" CONF_TEXT_TYPE = "text" +CONF_TELEMETRY = "enable_telemetry" # List from https://tinyurl.com/watson-tts-docs SUPPORTED_VOICES = [ @@ -146,148 +147,3 @@ def get_tts_audio(self, message, language=None, options=None): ).get_result() return (CONTENT_TYPE_EXTENSIONS[self.output_format], response.content) -"""Support for IBM Watson TTS integration.""" -import logging - -import voluptuous as vol - -from homeassistant.components.tts import PLATFORM_SCHEMA, Provider -import homeassistant.helpers.config_validation as cv - -_LOGGER = logging.getLogger(__name__) - -CONF_URL = "watson_url" -CONF_APIKEY = "watson_apikey" -ATTR_CREDENTIALS = "credentials" - -DEFAULT_URL = "https://stream.watsonplatform.net/text-to-speech/api" - -CONF_VOICE = "voice" -CONF_OUTPUT_FORMAT = "output_format" -CONF_TEXT_TYPE = "text" - -# List from https://tinyurl.com/watson-tts-docs -SUPPORTED_VOICES = [ - "de-DE_BirgitVoice", - "de-DE_BirgitV2Voice", - "de-DE_BirgitV3Voice", - "de-DE_DieterVoice", - "de-DE_DieterV2Voice", - "de-DE_DieterV3Voice", - "en-GB_KateVoice", - "en-GB_KateV3Voice", - "en-US_AllisonVoice", - "en-US_AllisonV2Voice", - "en-US_AllisonV3Voice", - "en-US_LisaVoice", - "en-US_LisaV2Voice", - "en-US_LisaV3Voice", - "en-US_MichaelVoice", - "en-US_MichaelV2Voice", - "en-US_MichaelV3Voice", - "es-ES_EnriqueVoice", - "es-ES_EnriqueV3Voice", - "es-ES_LauraVoice", - "es-ES_LauraV3Voice", - "es-LA_SofiaVoice", - "es-LA_SofiaV3Voice", - "es-US_SofiaVoice", - "es-US_SofiaV3Voice", - "fr-FR_ReneeVoice", - "fr-FR_ReneeV3Voice", - "it-IT_FrancescaVoice", - "it-IT_FrancescaV2Voice", - "it-IT_FrancescaV3Voice", - "ja-JP_EmiVoice", - "pt-BR_IsabelaVoice", - "pt-BR_IsabelaV3Voice", -] - -SUPPORTED_OUTPUT_FORMATS = [ - "audio/flac", - "audio/mp3", - "audio/mpeg", - "audio/ogg", - "audio/ogg;codecs=opus", - "audio/ogg;codecs=vorbis", - "audio/wav", -] - -CONTENT_TYPE_EXTENSIONS = { - "audio/flac": "flac", - "audio/mp3": "mp3", - "audio/mpeg": "mp3", - "audio/ogg": "ogg", - "audio/ogg;codecs=opus": "ogg", - "audio/ogg;codecs=vorbis": "ogg", - "audio/wav": "wav", -} - -DEFAULT_VOICE = "en-US_AllisonVoice" -DEFAULT_OUTPUT_FORMAT = "audio/mp3" - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_URL, default=DEFAULT_URL): cv.string, - vol.Required(CONF_APIKEY): cv.string, - vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORTED_VOICES), - vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT): vol.In( - SUPPORTED_OUTPUT_FORMATS - ), - } -) - - -def get_engine(hass, config): - """Set up IBM Watson TTS component.""" - from ibm_watson import TextToSpeechV1 - - service = TextToSpeechV1(url=config[CONF_URL], iam_apikey=config[CONF_APIKEY]) - - service.set_default_headers({'x-watson-learning-opt-out': "true"}) - supported_languages = list({s[:5] for s in SUPPORTED_VOICES}) - default_voice = config[CONF_VOICE] - output_format = config[CONF_OUTPUT_FORMAT] - - return WatsonTTSProvider(service, supported_languages, default_voice, output_format) - - -class WatsonTTSProvider(Provider): - """IBM Watson TTS api provider.""" - - def __init__(self, service, supported_languages, default_voice, output_format): - """Initialize Watson TTS provider.""" - self.service = service - self.supported_langs = supported_languages - self.default_lang = default_voice[:5] - self.default_voice = default_voice - self.output_format = output_format - self.name = "Watson TTS" - - @property - def supported_languages(self): - """Return a list of supported languages.""" - return self.supported_langs - - @property - def default_language(self): - """Return the default language.""" - return self.default_lang - - @property - def default_options(self): - """Return dict include default options.""" - return {CONF_VOICE: self.default_voice} - - @property - def supported_options(self): - """Return a list of supported options.""" - return [CONF_VOICE] - - def get_tts_audio(self, message, language=None, options=None): - """Request TTS file from Watson TTS.""" - response = self.service.synthesize( - message, accept=self.output_format, voice=self.default_voice - ).get_result() - - return (CONTENT_TYPE_EXTENSIONS[self.output_format], response.content) From 56f527ecfba7e6ce0a25f86c4f16c9e396ad3491 Mon Sep 17 00:00:00 2001 From: PoofyTeddy <33599733+poofyteddy@users.noreply.github.com> Date: Wed, 28 Aug 2019 21:51:28 +0200 Subject: [PATCH 3/5] Default to disable --- homeassistant/components/watson_tts/tts.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/watson_tts/tts.py b/homeassistant/components/watson_tts/tts.py index 1c49e4a7d54b..12949e758d15 100644 --- a/homeassistant/components/watson_tts/tts.py +++ b/homeassistant/components/watson_tts/tts.py @@ -17,7 +17,7 @@ CONF_VOICE = "voice" CONF_OUTPUT_FORMAT = "output_format" CONF_TEXT_TYPE = "text" -CONF_TELEMETRY = "enable_telemetry" +CONF_TELEMETRY = "disable_telemetry" # List from https://tinyurl.com/watson-tts-docs SUPPORTED_VOICES = [ @@ -78,7 +78,7 @@ DEFAULT_VOICE = "en-US_AllisonVoice" DEFAULT_OUTPUT_FORMAT = "audio/mp3" -DEFAULT_TELEMETRY = False +DEFAULT_TELEMETRY = True PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -118,7 +118,6 @@ def __init__(self, service, supported_languages, default_voice, output_format): self.default_voice = default_voice self.output_format = output_format self.name = "Watson TTS" - #test: Watson telemetry opt-out @property def supported_languages(self): From 1557f9173c0c32a15b888816c618eb5264ad2540 Mon Sep 17 00:00:00 2001 From: PoofyTeddy <33599733+poofyteddy@users.noreply.github.com> Date: Thu, 29 Aug 2019 20:56:07 +0200 Subject: [PATCH 4/5] Switch to static disable as requested by @amelchio, the need to enable telemetry to small to make thing more complicated. --- homeassistant/components/watson_tts/tts.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/homeassistant/components/watson_tts/tts.py b/homeassistant/components/watson_tts/tts.py index 12949e758d15..c01c195863e6 100644 --- a/homeassistant/components/watson_tts/tts.py +++ b/homeassistant/components/watson_tts/tts.py @@ -17,7 +17,6 @@ CONF_VOICE = "voice" CONF_OUTPUT_FORMAT = "output_format" CONF_TEXT_TYPE = "text" -CONF_TELEMETRY = "disable_telemetry" # List from https://tinyurl.com/watson-tts-docs SUPPORTED_VOICES = [ @@ -78,7 +77,6 @@ DEFAULT_VOICE = "en-US_AllisonVoice" DEFAULT_OUTPUT_FORMAT = "audio/mp3" -DEFAULT_TELEMETRY = True PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -88,7 +86,6 @@ vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT): vol.In( SUPPORTED_OUTPUT_FORMATS ), - vol.Optional(CONF_TELEMETRY, default=DEFAULT_TELEMETRY): cv.boolean, } ) @@ -102,7 +99,7 @@ def get_engine(hass, config): supported_languages = list({s[:5] for s in SUPPORTED_VOICES}) default_voice = config[CONF_VOICE] output_format = config[CONF_OUTPUT_FORMAT] - service.set_default_headers({'x-watson-learning-opt-out': config[CONF_TELEMETRY]}) + service.set_default_headers({'x-watson-learning-opt-out': "true"}) return WatsonTTSProvider(service, supported_languages, default_voice, output_format) From 894bfc67c5b5212005c3b27b65b8b6f9ce2f3a6e Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Thu, 12 Sep 2019 18:29:32 +0200 Subject: [PATCH 5/5] Black --- homeassistant/components/watson_tts/tts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/watson_tts/tts.py b/homeassistant/components/watson_tts/tts.py index c01c195863e6..a30d08f31f3d 100644 --- a/homeassistant/components/watson_tts/tts.py +++ b/homeassistant/components/watson_tts/tts.py @@ -99,7 +99,7 @@ def get_engine(hass, config): supported_languages = list({s[:5] for s in SUPPORTED_VOICES}) default_voice = config[CONF_VOICE] output_format = config[CONF_OUTPUT_FORMAT] - service.set_default_headers({'x-watson-learning-opt-out': "true"}) + service.set_default_headers({"x-watson-learning-opt-out": "true"}) return WatsonTTSProvider(service, supported_languages, default_voice, output_format)