[TTS] Problème lecture Sonos

Hello,

Un problème est récemment apparu depuis mon implémentation de Duck DNS et l’ouverture à l’extérieur.

J’avais une petite routine message vers Sonos pour informer mes enfants de se préparer pour l’école.

La config

# Text to speech
tts:
  - platform: google_translate
    language: "fr-fr"

Pour le script et l’automation j’ai récupéré ce qui était fait dans la doc HA ici

Mon automation

  alias: Préparer pour l'école
  description: ''
  trigger:
  - platform: time
    at: '07:40:00'
  condition: []
  action:
  - service: script.sonos_say
    data:
      sonos_entity: media_player.salon
      volume: 0.2
      message: Arthur, Olivia, il est l'heure d'aller a lécole
  mode: single

Rien de bien transcendant et tout marchait bien.

Depuis mon installation de Duck DNS et la MAJ de HA, la routine ne fonctionne plus.
Après moultes recherches, je trouve qu’il y a un problème de lecture de fichier Sonos depuis un site avec un certificat perso et je suis arrivé sur ce post très intéressant

J’ai donc modifié ma configuration générale pour définir les External URL et Internal URL. J’ai rajouté le module NGINX Home Assistant SSL proxy mais cela ne fonctionnait toujours pas. Le seul progrès que j’arrive à faire c’est en modifiant la config de mon TTS avec le base_url vers mon nom de domaine public (en mettant mon IP locale, cela ne fonctionne pas du tout)

tts:
  - platform: google_translate
    language: "fr-fr"
    base_url: "https://[mondomaine].duckdns.org:8123"

A ce niveau là, Sonos dit le premier mot « Arthur » et s’arrête. Quand je regarde l’appli Sonos sur mon téléphone j’ai le message d’erreur

« [id de mon fichier audio].mp3 » n’est plus disponible sur [mondomaine].duckdns.org:8123

J’avoue ne plus trop comprendre étant donné qu’il commence à lire le fichier.

Quelqu’un aurait des pistes à m’apporter ?

Merci

C’est exactement ce qu’il fallait faire :+1:

Une autre méthode, est de mettre cette url dans le champ Url Externe et Url Interne maintenant que tu es en SSL et ne pas ajouter base_url à l’intégration Text-to-Speech.

Ca c’est bizarre…

Si tu veux tester en parallèle de la diffusion, il suffit simplement de tester l’adresse suivant :

https://NOM_DE_DOMAINE.duckdns.org:PO/api/tts_proxy/des_chiffres_et_des_lettres_0124.mp3

dans ton navigateur pour voir si le fichier est accessible depuis l’extérieur.

Tu peux vérifier aussi que le fichier est toujours présent dans ton dossier \tts (qui est au même niveau que ton fichier configuration.yaml)

1 « J'aime »

En faisant ça, rien n’est déclenché côté Sonos.

Il y est bien

Erreur 404, donc pas accessible depuis l’extérieur en effet, je vais essayer d’approfondir cette piste. Merci :slight_smile:

Avais tu redémarrer HA ?

1 « J'aime »

J’en suis à mon 253e redémarrage de HA :joy:

2 « J'aime »

Petit progress sur le sujet, j’ai rajouté

homeassistant:
  whitelist_external_dirs:
    - /config/tts

J’arrive à accéder à mon fichier sur Chrome, Sonos me prononce toujours le 1er mot et j’ai aucune erreur côté appli Sonos :woozy_face:

Dans le journal HA, j’ai ça
Sonos issue
Est-ce normal les « started », « activé », « éteint » en un peu plus d’une seconde ?

Essaye d’ajouter une temporisation dans ton automatisation/script (delay: 30 pour 30secondes par exemple).

J’aurais dû y penser :pensive:

1 « J'aime »

T’es un boss !!! Mais je ne comprends pas pourquoi avant cela fonctionnait sans avoir besoin de delay. Donc si je comprends, le delay permet au processus de ne pas se cut et permet d’attendre la fin du message !?
Pour info, ce qui a permis de résoudre mon problème
Configuration (ajout de la whitelist + base_url externe malgré que la doc dise qu’on puisse s’en passer depuis les Internal URL et External URL qui sont configurés de mon côté)

homeassistant:
  whitelist_external_dirs:
    - /config/tts

# Text to speech
tts:
  - platform: google_translate
    language: "fr-fr"
    base_url: "https://[nom_domaine].duckdns.org:8123"
    cache: true
    cache_dir: /config/tts
    time_memory: 300

Automatisation (ajout du delay)

alias: Préparer pour l'école
  description: ''
  trigger:
  - platform: time
    at: '16:54:00'
  condition: []
  action:
  - service: script.sonos_say
    data:
      sonos_entity: media_player.salon
      volume: 0.6
      message: Arthur, Olivia, il est l'heure d'aller a lécole
      delay: 10
  mode: single

Pour rappel le script est celui proposé de base ici

1 « J'aime »

Super !!
Par curiosité, as-tu essayé sans le base_url mais avec le whitelist ?
Cela confirmerait que le base_url n’est plus nécessaire.

J’ai essayé en effet et de nouveau erreur de Sonos qui essaye d’accéder au fichier par mon adresse IP locale et qui ne trouve rien

Tu avais remis le nom de domaine dans la partie url_interne en parallèle de la liste blanche ?

:smirk:

Oui cette config, je l’ai faite dans l’onglet Général de l’UI et je ne l’ai jamais touchée. Où me parles-tu d’autre chose ?
HA URL

Bein en fait, à la place de ton ip dans le champ url interne, tu mets la même que le champ url externe, vu que tu es en https maintenant.

1 « J'aime »

En effet, en mettant l’url externe dans le champ URL interne :thinking: ca fonctionne sans le base_url :slight_smile:

Merci pour tout :smiley:

1 « J'aime »

@Matilas : mais qu’est ce que tu avais fait alors concernant ma proposition ? :joy: :rofl:

J’avais essayé mais comme le folder n’était pas whitelist j’avais l’erreur Sonos qui ne pouvait pas accéder au fichier :laughing:

1 « J'aime »

Bonsoir,

Je viens sur le sujet puisque je teste cette fonctionnalité et que j’ai un petit souci :
Dans ma conf :

# Text to speech
tts:
  - platform: google_translate
    language: "fr-fr"
    base_url: "https://mondomaine.fr/"
    cache: true
    cache_dir: /config/tts
    time_memory: 300
    service_name: google_say

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

#BLC ajoute
homeassistant:
  customize: !include customize.yaml
  whitelist_external_dirs:
    - /config/tts

L’automatisation :
Je la déclenche, il y a bien un fichier mp3 lisible de créé dans /config/tts, l’ampli se met sous tension mais le message n’est pas lu.
Dans l’idée, la nuit si il y a une fuite d’eau et que je suis là je souhaite avoir une alerte via l’ampli.

alias: Text
description: ''
trigger:
  - platform: device
    type: turned_on
    device_id: acdc114488f304753324b40cf7dc0b05
    entity_id: light.lampe_salon
    domain: light
condition: []
action:
  - service: tts.google_say
    data:
      entity_id: media_player.denon_avc_x3700h
      message: Ce que tu vas me dire
  - delay:
      hours: 0
      minutes: 0
      seconds: 10
      milliseconds: 0
mode: single

Je teste un peu les nombreuses possibilité de HA :wink:

Bob

System Health

version core-2021.11.5
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.17-v8
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4939
Installed Version 1.18.0
Stage running
Available Repositories 911
Installed Repositories 10
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 6.6
update_channel stable
supervisor_version supervisor-2021.10.8
docker_version 20.10.8
disk_total 457.7 GB
disk_used 10.2 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons deCONZ (6.10.0), Let’s Encrypt (4.12.0), File editor (5.3.3), Samba share (9.5.1), Network UPS Tools (0.9.0), Spotify Connect (0.10.0), Terminal & SSH (9.2.1), Portainer (2.0.0), InfluxDB (4.3.0), Grafana (7.3.1), Node-RED (10.1.1), Studio Code Server (3.7.0)
Lovelace
dashboards 1
resources 8
views 7
mode storage

Malheureusement, depuis une mise à jour de cet été, y a pas mal de problèmes de TTS avec Sonos. Perso, ça ne fonctionne plus depuis cet été. J’ai vérifié et ne comprend pas le problème.
Mon TTS fonctionne sur mon pc ou n’importe quel autre device, ma card Multimédia pour contrôler ma Sonos fonctionne aussi pour la lecture de musique Spotify ou quoi mais dès que je lance du TTS sur la Sonos, je vois bien que la Sonos veut le lire mais aucun son ne sort de l’enceinte.

J’ai réussi à refaire fonctionner mon TTS sur Sonos :slight_smile:
Depuis ma dernière config, j’ai basculé sur Nabu Casa et rajoutant mon adresse Nabu Casa dans le base URL, cela fonctionne de nouveau
Donc ma config TTS est la suivante

tts:
  - platform: google_translate
    language: 'fr'
    cache: true
    cache_dir: /config/tts
    time_memory: 300
    service_name: google_say
    base_url: https://xxx.nabu.casa

Pour ton problème @Bob, ça vient peut être du language car depuis une certaine mise à jour plus tôt, je me souviens que j’avais dû passer de ‹ fr-fr › à ‹ fr ›

Bonsoir,
J’ai mis dans le même ordre que toi, avec des simples quotes et le ‹ fr › (j’avais déjà essayé sans succès) , j’ai aussi mis à jour vers la dernière version et ça fonctionne, mon ampli me parle :slight_smile:

# Text to speech
tts:
  - platform: google_translate
    language: 'fr'
    cache: true
    cache_dir: /config/tts
    time_memory: 300
    service_name: google_say
    base_url: 'https://domaine.fr'

Merci :+1: