Pb de communication avec TTS web server, et Homeptalk (ou erreur de configuration)

Bonjour @nebz et @abarrau,

Je pense avoir correctement installé et configuré vos plugins respectifs mais rien ne sort de mon HomePod quand j’utilise le plugin ttswebserver comme système TTS.
Rien ne pique les yeux dans les logs mais dans l’historique des messages j’ai un point d’exclamation rouge devant chaque message généré et sur le i informatif s’affiche :
La taille du fichier est trop petite (Min=90000) Risque que la diffusion sur squeezebox, synoAudio ou depuis un archivage « local », ne puisse être réalisé (diffusion de blanc).

Comme autres précisions, je peux vous indiquer que ces 2 plugins sont les seuls déployés sur une VM toute neuve installée en suivant le tutoriel de @akenad avec un jeedom en V4 (4.0.52), que l’installation est 100% fonctionnelle pour le plugin Homeptalk (testé avec le système TTS par défaut) et que le plugin Ttswebserver a une installation partiellement réussie.
Comme le dit @akenad dans son tuto, le paquet « libav-tools » a été remplacé par le paquet « ffmpeg ».
Le plugin Ttswebserver est resté en erreur tant que je n’ai pas choisi cette option dans (Système) Application encodage

Je ne sais plus où regarder pour faire fonctionner ce combo ultime du TTS, j’ai bien l’impression d’après les logs en debug que tout vient de la taille du fichier :

[2020-04-29 09:25:01][DEBUG] :

[2020-04-29 09:25:16][DEBUG] : [THIRD|getAudioFile()] start execute, with _options=Array ( [eqLogicId] => 6 [message] => Encore un test pour voir ce qui se passe [returnType] => path [TWS_isThirdAsk] => 1 [voice] => voxygen.tts.camille [title] => 0 )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)|Dire(78)] Execute(local-play) // starting…, with _options=Array ( [eqLogicId] => 6 [message] => Encore un test pour voir ce qui se passe [returnType] => path [TWS_isThirdAsk] => 1 [voice] => voxygen.tts.camille [title] => 0 )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TTS Web Server(2)] analyseTTSMessage()._matchUnite=Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TTS Web Server(2)] analyseTTSMessage()._msgTTS=« Encore un test pour voir ce qui se passe »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TTS Web Server(2)] getMessageBdd().sql (select) =« SELECT id, date_create, date_last_use, nb_use, text, file_size, file_path, file_where, file_notFound, voice, eqLogic_id FROM ttsWebServer_Message WHERE 1=1 AND text=:text AND file_where=:file_where »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TTS Web Server(2)] getMessageBdd(). nbRow=0
[2020-04-29 09:25:16][DEBUG] : [THIRD|TTS Web Server(2)] getMessageBdd()._aMsg (select) =Array ( [date_create] => [date_last_use] => [nb_use] => 0 [text] => [file_where] => [file_size] => [file_path] => [voice] => [eqLogic_id] => 0 )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] execute(third)._sFilePath=«  » | _dataSelect[file_where]=«  »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] executePlayRemoteSpeaker() starting …
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] sendRequest() send request at : http://192.168.1.150:8089/?method=getTTS&text=Encore+un+test+pour+voir+ce+qui+se+passe&voice=voxygen.tts.camille

[fInfo] => Array         (             [url] => http://192.168.1.150:8089/?method=getTTS&text=Encore+un+test+pour+voir+ce+qui+se+passe&voice=voxygen.tts.camille             [content_type] => audio/wav             [http_code] => 200             [header_size] => 131             [request_size] => 143             [filetime] => -1             [ssl_verify_result] => 0             [redirect_count] => 0             [total_time] => 0.069361             [namelookup_time] => 2.1E-5             [connect_time] => 0.000245             [pretransfer_time] => 0.000271             [size_upload] => 0             [size_download] => 94206             [speed_download] => 1365304             [speed_upload] => 0             [download_content_length] => 94206             [upload_content_length] => -1             [starttransfer_time] => 0.068464             [redirect_time] => 0             [redirect_url] =>              [primary_ip] => 192.168.1.150             [certinfo] => Array                 (                 )              [primary_port] => 8089             [local_ip] => 192.168.1.71             [local_port] => 55642             [http_version] => 1             [protocol] => 1             [ssl_verifyresult] => 0             [scheme] => HTTP             [appconnect_time_us] => 0             [connect_time_us] => 245             [namelookup_time_us] => 21             [pretransfer_time_us] => 271             [redirect_time_us] => 0             [starttransfer_time_us] => 68464             [total_time_us] => 69361             [request_header] => GET /?method=getTTS&text=Encore+un+test+pour+voir+ce+qui+se+passe&voice=voxygen.tts.camille HTTP/1.1 Host: 192.168.1.150:8089 Accept: */*           )  )

[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] network_setHealth()._healthNetwork=Array ( [0] => {« 2020-04-29 09:25:16 »:« o »} [1] => {« 2020-04-29 09:25:16 »:« o »} [2] => {« 2020-04-29 09:25:01 »:« o »} [3] => {« 2020-04-29 09:25:01 »:« o »} [4] => {« 2020-04-29 09:24:56 »:« o »} [5] => {« 2020-04-29 09:24:53 »:« o »} [6] => {« 2020-04-29 09:24:46 »:« o »} [7] => {« 2020-04-29 09:20:01 »:« o »} [8] => {« 2020-04-29 09:15:02 »:« o »} [9] => {« 2020-04-29 09:10:02 »:« o »} [10] => {« 2020-04-29 09:05:02 »:« o »} [11] => {« 2020-04-29 09:00:02 »:« o »} [12] => {« 2020-04-29 09:00:01 »:« o »} [13] => {« 2020-04-29 09:00:01 »:« o »} [14] => {« 2020-04-29 08:55:02 »:« o »} )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] sendRequest() return contents; time=0.0709sec.
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] saveSoundFile(): Start saving… (type=mp3) (where=onbox)
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] checkExistFile(): FILE NOT FOUND : « /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] saveTmpFile(): Start saving…
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] saveTmpFile(): file saved : « /tmp/jeedom_ttsWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869 »
[2020-04-29 09:25:16][DEBUG] : [ttsWebServerTools::convertWav2Other()] command line = « ffmpeg -i /tmp/jeedom_ttsWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869 -codec:a libmp3lame -ac 2 -ar 44100 -b:a 256k -metadata title=« Encore un test pour voir ce qui se passe » -metadata artist=« TTS Web Service » -metadata album=« Jeedom » /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 -y >> /tmp/jeedom_ttsWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.log 2>&1 »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] saveSoundFile(local/mp3): file size is = « 65342 », less than (required=90000), warning it will not played ??..
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] saveSoundFile(local/mp3): is save in local, _return=Array ( [path] => /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 [size] => 65342 )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] getMessageBdd().sql (select) =« SELECT id, date_create, date_last_use, nb_use, text, file_size, file_path, file_where, file_notFound, voice, eqLogic_id FROM ttsWebServer_Message WHERE 1=1 AND text=:text AND file_path=:file_path AND voice=:voice »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] getMessageBdd(). nbRow=0
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] getMessageBdd()._aMsg (select) =Array ( [date_create] => [date_last_use] => [nb_use] => 0 [text] => [file_where] => [file_size] => [file_path] => [voice] => [eqLogic_id] => 0 )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] updateMessageBdd()._aMsg[id] not set, initialize data …
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] updateMessageBdd()._aMsg =Array ( [date_create] => 2020-04-29 09:25:16 [date_last_use] => 2020-04-29 09:25:16 [nb_use] => 1 [text] => Encore un test pour voir ce qui se passe [file_where] => onbox [file_size] => 65342 [file_path] => /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 [voice] => voxygen.tts.camille [eqLogic_id] => 6 [file_notFound] => 1 )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] updateMessageBdd().sql=« REPLACE INTO ttsWebServer_Message SET date_create=:date_create, date_last_use=:date_last_use, nb_use=:nb_use, text=:text, file_where=:file_where, file_path=:file_path, file_size=:file_size, file_notFound=:file_notFound, voice=:voice, eqLogic_id=:eqLogic_id »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] executePlayRemoteSpeaker()._sPathFN[path] (after create) =« /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 »
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] executePlayRemoteSpeaker() is Third Ask, _returnForThird=Array ( [file] => /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 [where] => onbox )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)] execute()._return=Array ( [file] => /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 [where] => onbox )
[2020-04-29 09:25:16][DEBUG] : [THIRD|TWS_192.168.1.150(6)|Dire(78)] execute(local-play) // END (0.184)
[2020-04-29 09:25:16][DEBUG] : [THIRD|getAudioFile()] return value from execute(), analyse it …
[2020-04-29 09:25:16][DEBUG] : [THIRD|getAudioFile()] _return[where]=« onbox » | _sTmpFN=« /var/www/html/plugins/ttsWebServer/3rdparty/tmpMp3/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 »
[2020-04-29 09:25:16][WARNING] : [THIRD|getAudioFile()] ERROR: during copy file « /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 » to « /var/www/html/plugins/ttsWebServer/3rdparty/tmpMp3/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 »
[2020-04-29 09:25:20][DEBUG] : [AJAX|getMessagesTTS|TTS Web Server(2)] getMessageBdd().sql (select) ="SELECT id, date_create, date_last_use, nb_use, text, file_size, file_path, file_where, file_notFound, voice, eqLogic_id FROM ttsWebServer_Message WHERE 1=1 "
[2020-04-29 09:25:20][DEBUG] : [AJAX|getMessagesTTS|TTS Web Server(2)] getMessageBdd(). nbRow=9
[2020-04-29 09:25:20][DEBUG] : [AJAX|getMessagesTTS|TTS Web Server(2)] getMessageBdd()._aMsg (select) =Array ( [0] => Array ( [id] => 1 [date_create] => 2020-04-28 15:04:44 [date_last_use] => 2020-04-28 15:04:44 [nb_use] => 1 [text] => Je ne vois rien [file_size] => 26865 [file_path] => /var/www/dataTTSWebServer/voxygen-tts-camille-266accfc1b08a2212bae4084029ebf46.mp3 [file_where] => onbox [file_notFound] => 1 [voice] => voxygen.tts.camille [eqLogic_id] => 6 [eqLogic_id_name] => [Maison][TWS_192.168.1.150] ) [1] => Array ( [id] => 2 [date_create] => 2020-04-28 15:05:17 [date_last_use] => 2020-04-28 15:05:17 [nb_use] => 1 [text] => Je ne vois rien du tout [file_size] => 36904 [file_path] => /var/www/dataTTSWebServer/voxygen-tts-camille-3f55e9da9dbfa9713bdbd1ddafe6ab29.mp3 [file_where] => onbox [file_notFound] => 1 [voice] => voxygen.tts.camille [eqLogic_id] => 6 [eqLogic_id_name] => [Maison][TWS_192.168.1.150] ) [2] => Array ( [id] => 3 [date_create] => 2020-04-28 15:05:59 [date_last_use] => 2020-04-28 15:05:59 [nb_use] => 1 [text] => Je ne vois pas [file_size] => 23520 [file_path] => /var/www/dataTTSWebServer/voxygen-tts-camille-aa0f06d22b2f5b8c44ba3f38667ca039.mp3 [file_where] => onbox [file_notFound] => 1 [voice] => voxygen.tts.camille [eqLogic_id] => 6 [eqLogic_id_name] => [Maison][TWS_192.168.1.150] ) [3] => Array ( [id] => 4 [date_create] => 2020-04-28 16:41:27 [date_last_use] => 2020-04-28 16:41:27 [nb_use] => 1 [text] => Est ce qu’un test avec un texte plus grand peut passer [file_size] => 76225 [file_path] => /var/www/dataTTSWebServer/voxygen-tts-camille-947cfb37c6dd6bcb1bbd2a4a771d2e73.mp3 [file_where] => onbox [file_notFound] => 1 [voice] => voxygen.tts.camille [eqLogic_id] => 6 [eqLogic_id_name] => [Maison][TWS_192.168.1.150] ) [4] => Array ( [id] => 5 [date_create] => 2020-04-28 16:41:47 [date_last_use] => 2020-04-28 16:41:47 [nb_use] => 1 [text] => Et alors [file_size] => 20171 [file_path] => /var/www/dataTTSWebServer/voxygen-tts-camille-e252291c32de4cb90ee2e45a0328c333.mp3 [file_where] => onbox [file_notFound] => 1

je ne vois aucun log de homepTalk…

Log qui commence par : « Fichier généré par TTSWebServer » dans le log homepTalk en debug

juste après que j’ai fait (pour @abarrau) :

$ttswsOptions = array('eqLogicId'=>$voiceEQID, 'message'=>$message, 'returnType'=>'path', 'TWS_isThirdAsk'=>1);
if ($voiceName!='') $ttswsOptions['voice']=$voiceName;
$ttswsFilePath = ttsWebServer::getAudioFile($ttswsOptions);
log::add('homepTalk','debug','Fichier généré par TTSWebServer ('.json_decode($ttswsOptions).'): '.$ttswsFilePath);

si cette methode n’a pas changé depuis…

En fait @nebz, je ne pense pas que le pb vienne de ton plugin.
Je ne sais pas d’ailleurs si il y bug ou mauvais paramétage de ma part et là, tu pourrais pe me le dire.
Voilà pour le log de ton plugin

[2020-04-29 10:02:25][INFO] : Parle : Options: - Message :Ceci est un test pour le plugin faisant parler HomePod
[2020-04-29 10:02:25][DEBUG] : Valeurs par défaut : 10 fr-FR ttswebserver no 6|voxygen.tts.camille 1
[2020-04-29 10:02:25][DEBUG] : Valeurs modifiées : 10 fr-FR ttswebserver no 6|voxygen.tts.camille 1
[2020-04-29 10:02:25][DEBUG] : FFMPEG existe et c’est un exécutable, on l’utilise
[2020-04-29 10:02:25][DEBUG] : Fichier généré par TTSWebServer ():
[2020-04-29 10:02:25][WARNING] : La phrase n’a pas pu être générée via ttswebserver, vérifiez le log TtsWebServer du plugin TTSWebServer en debug

c’est la phrase que j’écris quand la taille du fichier = 0

non aucune idée, j’ai juste fait un POC mais je n’utilises plus depuis

Bonjour,
Dans la log TTS, je constate l’erreur suivante :

[2020-04-29 09:25:16][WARNING] : [THIRD|getAudioFile()] ERROR: during copy file « /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 » to « /var/www/html/plugins/ttsWebServer/3rdparty/tmpMp3/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 »

Est-il possible de vérifier :

  • si ton répertoire « /var/www/html/plugins/ttsWebServer/3rdparty/tmpMp3/ » existe bien ?
  • via commande linux, si tu as une erreur en réalisant un « cp /var/www/dataTTSWebServer/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 /var/www/html/plugins/ttsWebServer/3rdparty/tmpMp3/voxygen-tts-camille-01eccccbcf826f269a6549082bd20869.mp3 »

Merci

Bien vu @abarrau, le répertoire tmpMp3 n’existe pas.
Le copier coller n’a donc pas marché.
Il faut que je le crée à la main ou il faut faut faire autre chose ?

Excuse moi, le répertoire devrait s’appeler " /var/www/html/plugins/ttsWebServer/3rdparty/_tmpMp3_/"; avec des _ avant et après le nom > peux-tu vérifier ?

S’il n’existe pas, (ce qui est très étrange) oui tu peux le créer à la main.

Qd je regarde avec l’instruction ls, je n’ai que le répertoire plindote
Je vais regarder à créer le répertoire mais je sens que je vais me battre avec les droits. La fonction mkdir n’a pas fonctionné (et il faut que je retrouve où se trouve le caractère _ dans ma console de machine virtuelle)
Je vais regarder ça entre midi et 2 et je te tiens au courant

[2020-04-29 11:57:14][WARNING] : [THIRD|getAudioFile()] ERROR: during copy file « /var/www/dataTTSWebServer/voxygen-tts-camille-3a96d972c572597f5a2ff808279aafb5.mp3 » to « /var/www/html/plugins/ttsWebServer/3rdparty/tmpMp3/voxygen-tts-camille-3a96d972c572597f5a2ff808279aafb5.mp3 »

Je suis passé en root pour créer le répertoire mais quand ça ne veut pas, ça ne veut pas

Voici les commande à passer :

sudo mkdir /var/www/html/plugins/ttsWebServer/3rdparty/_tmpMp3_
sudo chown -R www-data:www-data /var/www/html/plugins/ttsWebServer

comme cela tu remets tout le répertoire du plugin avec les bons droits.

Par ailleurs, je ne comprends pas pourquoi ce répertoire « s’est perdu » sur ton installation.
Il va falloir que je regarde ça dans une prochaine version.

1 « J'aime »

Parfait, ça marche.

Dans l’historique des messages j’ai toujours un point d’exclamation rouge devant chaque message généré mais le TTs marche parfaitement sur le HomePod.

L’installation a été faite sur une V4 abritée sur une machine virtuelle avec 3 plugins installés.
Dans l’ordre home-talk, jeedom link et ton plugin.

L’installation de celui-ci était en erreur sur les dépendance en Nok tant que le système d’encodage était resté par défaut sur avcconv. Dès que j’ai changé sur ffmpg, il n’y a plus eu d’indication de mauvaise installation.
Le seul souci a été celui pour lequel tu as apporté une réponse.

Merci pour le support et pour tes plugins :slight_smile:

1 « J'aime »

Merci pour ton retour.

Pour ce point, oui j’ai mis une limite de taille que j’avais identifié à l’époque lorsque le message était lut par un plugin tier intégré au plugin tts. Il est vrai que maintenant chaque plugin utilise l’api que j’ai mise en place par la suite … ce point d’attention/information n’a peut-être plus de valeur, je vais l’enlever dans une prochaine version.

Bonne utilisation !

Merci @abarrau

Genre brainstorming avec @nebz hier soir, je me posais la question de comment jeedom pouvait savoir que la diffusion d’un message était terminé.
Je lui posai la question d’un éventuel retour d’état au niveau de l’HomePod (réponse négative) puis j’ai eu une autre idée et la question te concerne :slight_smile:

Au vu du fonctionnement du plugin, penses-tu qu’il soit réaliste qu’à l’issue d’une annonce TTS (correspondant à la lecture d’un fichier .mp3) le plugin TTSwebserver envoie toujours un même fichier mp3 (genre un bruit blanc dont le nom serait fin_annonce.mp3) pour qu’un plugin comme homeptalk arrive à interpréter que ce mp3 correspond à une fin d’annonce et s’enrichisse d’un trigger utilisable sous jeedom ?

Dans mon cas, ça servirait à remettre le volume d’une TV là ou il était avant la fin de l’annonce et éteindre une lumière allumée le temps de l’annonce.

heu pas possible de mon coté :wink:

je recois 1 fichier, pas plusieurs ! et c’est une question de durée de lecture…

j’avais pensé estimer la longueur de lecture avec un ffprobe mais ca fait perdre bcp de temps avant de lancer la lecture…

Quand un deuxième fichier t’est envoyé, en fait tu l’envoies à l’HomePod sans savoir quand il sera lu ?

Tu précises « le homepod prend une seconde et un peu plus pour lâcher le flux AirPlay du premier son… et seulement après le deuxième son est généré »

C’est ce après qui me faisait dire que tu avais peut-être la main. Comme dans tes logs, on voir le fichier envoyé par le TTSWebserver, je me disais que tu pouvais interpréter qu’il s’agissait d’une fin d’annonce au vu du nom du fichier

non je lance la commande de génération à ttsweb et puis je fais play sur le homepod mais ma commande se termine direct, même si la lecture continue

Je crois que je vais finir par compter le nombre de caractères d’un message ^^

A mon niveau je ne voix pas comment faire.
Le plugin TTS génère le fichier mp3 et le met à disposition du plugin tier qui lance la lecture de son coté.
Je n’envoi aucune aucune info au plugin tier, c’est lui qui vient chercher l’info.

Je ne peux donc pas savoir quand la lecture est terminée et je doute que coté plugin tier il le sache aussi (que ce soit homepod ou un autre plugin).

Dans la même logique, dans le cas où la diffusion est faite en local sur l’android c’est pareil, je génère le fichier et ensuite je le fais joué coté android … mais je n’ai pas de retour de quand android à terminé sa lecture.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.