[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