Passer un fichier wav en donnée

Bonjour,

Mon problème

Ayant installé HA en docker, donc sans add-on, je galère pour lire des fichiers son (je n’ai pas trouvé deplayer media…). Certain proposent d’installer VLC dans le docker HA, ce qui ne me semble pas trop dans l’esprit des containers.
Utilisant Rhasspy par ailleurs (en container), je souhaite utiliser l’API proposée par cette application.

J’ai donc créé un service adhoc :
configuration.yaml

rest_command:   
  rhasspy_play:                                 
    url: 'http://192.168.1.6:12101/api/play-wav'
    method: 'POST'          
    payload: '{{ payload }}'         
    content_type: audio/wav

L’automatisation


- id: '1636909817124'                                                     
  alias: Il est l or                   
  description: ''                      
  trigger:                             
  - platform: event                    
    event_type: rhasspy_GetTimePlus    
  condition: []                        
  action:                              
  - service: rest_command.rhasspy_speak                                                  
    data:                                                                        
      payload: monsignor.wav                                              
  mode: single

Et le résultat… l’enceinte dit « monsignor wav ». Or j’aimerai entendre le contenue du fichier, pas le titre du fichier…

Merci pour votre aide.

Ma configuration


[center]## System Health

version core-2021.8.8
installation_type Home Assistant Container
dev false
hassio false
docker true
user root
virtualenv false
python_version 3.9.6
os_name Linux
os_version 5.10.60-v7+
arch armv7l
timezone Europe/Paris
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud failed to load: timeout
Lovelace
dashboards 1
resources 0
views 1
mode storage
[/center] ___

Damien

Salut,
Il manque la ligne header avant content_type à mon avis

rest_command:   
  rhasspy_play:                                 
    url: 'http://192.168.1.6:12101/api/play-wav'
    method: POST
    headers:
      content_type: 'audio/wav'
    payload: '{{ payload }}'    

Merci, mais il n’y a pas de changement.
J’ai repris le principe du TTS, qui fonctionne sans headers :

  rhasspy_speak:
    url: 'http://192.168.1.6:12101/api/text-to-speech'
    method: 'POST'
    payload: '{{ payload }}'
    content_type: text/plain

Vu les logs de Rhasspy je penche pour un mauvais envoi de données (j’ai changé au passage monsignor.wav en mettant l’url vers le fichier depuis le répertoire media de HA) :

[DEBUG:2021-11-16 22:31:03,150] rhasspyserver_hermes: Publishing 147 bytes(s) to hermes/tts/say
[DEBUG:2021-11-16 22:31:03,146] rhasspyserver_hermes: -> TtsSay(text='\\_data\\monsignor.wav', site_id='default', lang=None, id='01ccc84a-d94f-4d2f-a8bb-156c45fc3e27', session_id='', volume=1.0)

L’accès au fichier est une autre piste mais à mon avis le header est à garder quand même

Ici le header est spécifié en curl

Ici en version tts confirmé comme comme fonctionnel

Merci. Le curl fonctionne. J’ai tenté cette mise à jour, sans succès :

- id: '1636909817124'
  alias: Il est l or               
  description: ''                  
  trigger:                         
  - platform: event                    
    event_type: rhasspy_GetTimePlus    
  condition: []                                                    
  action:                                                                                
  - service: rest_command.rhasspy_speak                                          
    data:                                                                 
      payload: '/var/lib/docker/volumes/Media/_data/monsignor.wav'
  mode: single

Il y a également ce post, mais je ne suis pas certain de bien comprendre :

Je regarde ça demain !
Merci,

Ton lien indique les 3 méthodes d’échange des informations.
Soit

  • tu précises le type (header) pour traiter correctement le payload
  • soit c’est un chemin (data commence par /) et il faut que ça soit accessible (donc attention aux volumes des containers)
  • soit c’est une URL

Bonjour,

Je continue sur ce vieux post… puisqu’il s’agit (presque) du même sujet, à savoir envoyer un fichier wav à rhasspy depuis HA.
La commande a fini par fonctionner en docker ici : Sending wav File to rhasspy client - #11 by Damien - Help - Rhasspy Voice Assistant le soucis venait du volume mal renseigné, donc sujet [résolu] en docker.

Sauf que j’ai eu la mauvaise surprise de ne pas pouvoir faire fonctionner mon système totalement hors ligne (« standalone ») : MQTT with RPi offline (docker) - Help - Rhasspy Voice Assistant
En effet, pour fonctionner (interface HA-Rhasspy en docker) j’ai pris un MQTT externe avec une IP en 192.168.x.y… or, sans réseau HA et Rhasspy ne semblent pas se connecter pas au MQTT (voir lien ci-avant).
Je ne maîtrise pas trop (du tout) docker, je ne sais pas quelle IP renseigner pour rester en totalement local (mais je garderai une IP fixe du Rpi en 198.168.x.y si j’ai besoin d’y accéder en SSH)
Il me semblait possible de contourner le problème en installant l’add-on Rhasspy (au lieu de docker)… sauf que le chemin d’accès (payload) ne fonctionne plus… MQTT with RPi offline (docker) - #11 by Damien - Help - Rhasspy Voice Assistant

Ma question, est donc la suivante : comment poster un fichier wav (chemin d’accès) vers rhasspy en configuration add-on ?
Merci d’avance !
Damien