Después de mucho tiempo de estarlo esperando, ya tenemos solución para el TTS de Google en Home Assistant. El Text-to-Speech (TTS) permite que Home Assistant hable contigo, es decir, que te mande notificaciones.
Código a copier en configuration.yaml
tts:
- platform: google_translate
Automatización de ejemplo.
- id: '1607270421988'
alias: tts new
description: ''
trigger:
- platform: time
at: '16:05'
condition: []
action:
- service: tts.google_translate_say
data:
entity_id: media_player.salon
language: es
message: Este es otro mensaje de prueba para ver si esto funciona!!
mode: single
Mira el vídeo!
Los siguientes parámetros opcionales se pueden utilizar con cualquier plataforma. Sin embargo, la integración TTS solo buscará configuraciones globales bajo la configuración de la primera plataforma configurada:
VARIABLES DE CONFIGURACIÓN
caché booleano ( opcional , predeterminado: verdadero )
Permita que TTS almacene en caché el archivo de voz en el almacenamiento local.cadena cache_dir ( opcional , predeterminado: tts )
Nombre de carpeta o ruta a una carpeta para almacenar archivos en caché.time_memory integer ( opcional , predeterminado: 300 )
Es hora de guardar los datos de voz en la memoria para una reproducción rápida en un reproductor multimedia. El mínimo es 60 sy el máximo 57600 s (16 horas).cadena base_url ( opcional , predeterminado: valor de la URL interna )
Una URL base para usar en lugar de la establecida en la configuración de Home Assistant . El tts
componente lo utiliza tal cual . En particular, debe incluir el esquema de protocolo http://
o https://
y el número de puerto correcto. No se agregarán automáticamente.service_name string ( opcional)
Defina el nombre del servicio.
El nombre de servicio predeterminado establecido en _decir. Por ejemplo, para google_translate tts, su nombre de servicio predeterminado es google_translate_say
.
El ejemplo extendido de arriba se vería como el siguiente ejemplo:
tts:
- platform: google_translate
cache: true
cache_dir: /tmp/tts
time_memory: 300
base_url: http://192.168.0.10:8123
service_name: google_say
_url
está personalizado para esta configuración de plataforma TTS en particular. No sugiere que utilice la URL interna que ha establecido para la configuración principal de Home Assistant. La razón por la que podría necesitar hacer esto se describe en la siguiente sección.
¿Cuándo necesitas establecer base_url aquí?
La respuesta general es «siempre que la URL interna global establecida en la configuración de Home Assistant no sea adecuada para permitir la say
ejecución del servicio». El say
servicio opera generando un archivo multimedia que contiene el discurso correspondiente al texto que se pasa al servicio. Luego, el say
servicio envía un mensaje al dispositivo multimedia con una URL que apunta al archivo. El dispositivo obtiene el archivo multimedia en la URL y reproduce el contenido multimedia. Algunas combinaciones de dispositivo multimedia, configuración de red y configuración de Home Assistant pueden hacer que el dispositivo no pueda recuperar el archivo multimedia.
Las siguientes secciones describen algunos de los problemas encontrados con los dispositivos multimedia.
CERTIFICADOS AUTOFIRMADOS
Este problema ocurre cuando su instancia de Home Assistant está configurada para ser accedida a través de SSL y está utilizando un certificado autofirmado en su URL interna.
El tts
servicio enviará una https://
URL al dispositivo multimedia, que comprobará el certificado y lo rechazará. Entonces no reproducirá su archivo. Si pudiera hacer que el dispositivo aceptara su certificado, reproduciría el archivo. Sin embargo, muchos dispositivos multimedia no permiten cambiar la configuración para aceptar certificados autofirmados. En última instancia, su opción puede ser entregar archivos a dispositivos locales en http://
lugar de https://
.
DISPOSITIVOS GOOGLE CAST
Los dispositivos Google Cast (Google Home, Chromecast, etc.) presentan los siguientes problemas:
- Se rechazan los certificados de firma propia .
- No funcionan con URL que contienen nombres de host establecidos por medios de denominación local. Digamos que su instancia de Home Assistant se está ejecutando en una máquina conocida localmente como
ha
. Todas sus máquinas en su red local pueden acceder a él comoha
. Sin embargo, por más que lo intente, su dispositivo de transmisión no descargará los archivos multimedia de suha
máquina. Eso es porque su dispositivo de transmisión ignora su configuración de nombres local. En este ejemplo, elsay
servicio crea una URL comohttp://ha/path/to/media.mp3
(ohttps://...
si está utilizando SSL). Si está no utiliza SSL, el establecimiento de una dirección URL interna que contiene la dirección IP de su servidor funciona en torno a este tema. Al usar una dirección IP, el dispositivo de transmisión no tiene que resolver el nombre de host. - Si está utilizando un SSL (por ejemplo,
https://yourhost.example.org/...
), debe utilizar el nombre de host en el certificado (por ejemplo,base_url: https://yourhost.example.org
). No puede utilizar una dirección IP ya que el certificado no será válido para la dirección IP y el dispositivo de transmisión rechazará la conexión.
Servicio dice
El say
soporte de servicio language
y en algunas plataformas también options
para el sistema, es decir, voz, movimiento, velocidad, etc . El texto para voz se establece con message
. Desde la versión 0.92, el nombre del servicio se puede definir en la service_name
opción de configuración .
Diga a todas las media_player
entidades del dispositivo:
# Replace google_translate_say with <platform>_say when you use a different platform.
service: tts.google_translate_say
entity_id: "all"
data:
message: 'May the Force be with you.'
Dile a la media_player.floor
entidad del dispositivo:
service: tts.google_translate_say
entity_id: media_player.floor
data:
message: 'May the Force be with you.'
Dile a la media_player.floor
entidad del dispositivo en francés:
service: tts.google_translate_say
entity_id: media_player.floor
data:
message: 'Que la force soit avec toi.'
language: 'fr'
Con una plantilla:
service: tts.google_translate_say
data:
message: "Temperature is {{states('sensor.temperature')}}."
cache: false
Cache
La integración tiene dos cachés. Ambas cachés se pueden controlar con la cache
opción en la configuración de la plataforma o la llamada de servicio say
. Se ubicará una caché de mucho tiempo en el sistema de archivos. La memoria caché en memoria para respuestas rápidas a los reproductores multimedia se limpiará automáticamente después de un breve período.
API REST
POST / API / TTS_GET_URL
Devuelve una URL al archivo TTS generado. Se requieren plataforma y mensaje.
{
"platform": "amazon_polly",
"message": "I am speaking now"
}
El código de retorno es 200 si se genera el archivo. El cuerpo del mensaje contendrá un objeto JSON con la URL.
{
"url": "http://127.0.0.1:8123/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3"
}
Comando de muestra :
$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \
-H "Content-Type: application/json" \
-d '{"message": "I am speaking now", "platform": "amazon_polly"}' \
http://localhost:8123/api/tts_get_url