Forum eedomus
http://forum.eedomus.fr/

Pour les utilisateurs de SONOS
http://forum.eedomus.fr/viewtopic.php?f=13&t=756
« Précédent  Page 14 sur 18  Suivant »
Auteur:  frenchdm [ 30 Juil 2015 08:30 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Il semble qu'avec la MAJ SONOS, on ne peut plus générer de tts via le script :x
Auteur:  frenchdm [ 31 Juil 2015 22:11 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Arrivez vous à créer un tts depuis ces derniers temps ?
Auteur:  Ferritales [ 02 Août 2015 09:45 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

http://forum.micasaverde.com/index.php/ ... 63.30.html
meme problème pour tout le monde (je vous laisse lire).. mais des solutions aussi (avec modification de code), je regarde a l'occasion.
Auteur:  frenchdm [ 02 Août 2015 11:07 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Merci Ferritales ;) , on ne dira pas merci à Google pour ce coup là ...
Auteur:  Ferritales [ 06 Août 2015 15:06 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Desolé, je vais pas pouvoir regarder de suite. mais les premiers test devrait etre assez simple en lisant les forums de Vera.

F.
Auteur:  toine [ 09 Août 2015 10:02 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Perso, j'ai réglé ce problème en modifiant la ligne concernée dans sonos.class.php:

$mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?q='.$words[$i].'&tl='.$lang.'&idx=0&client=eedomus');

et j'ai également dû raccourcir le texte parlé.

Mais cela remarche chez moi maintenant.
En espérant que cela puisse aider.
A+
Auteur:  enr37 [ 09 Août 2015 11:07 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Punaise j ai jamais réussi à faire fonctionner les tts sur les sonos sur ma V1.comme je compte acheter une V2, est ce que se serait plus facile pour que ça fonctionne ?
Auteur:  frenchdm [ 26 Août 2015 07:51 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

toine a écrit:Perso, j'ai réglé ce problème en modifiant la ligne concernée dans sonos.class.php:

$mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?q='.$words[$i].'&tl='.$lang.'&idx=0&client=eedomus');

et j'ai également dû raccourcir le texte parlé.

Mais cela remarche chez moi maintenant.
En espérant que cela puisse aider.
A+

Chez moi, ça ne fonctionne pas ....
Auteur:  tchex [ 28 Août 2015 09:59 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

moi ça fonctionne, merci !
Auteur:  frenchdm [ 28 Août 2015 11:27 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

toine a écrit:Perso, j'ai réglé ce problème en modifiant la ligne concernée dans sonos.class.php:

$mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?q='.$words[$i].'&tl='.$lang.'&idx=0&client=eedomus');

et j'ai également dû raccourcir le texte parlé.

Mais cela remarche chez moi maintenant.
En espérant que cela puisse aider.
A+

Peux tu indiquer quel numéro de ligne il s'agit ?
Merci !
Auteur:  frenchdm [ 02 Sep 2015 13:20 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

A défaut de réponse, puisque apparemment le fichier sonos.class.php corrigé règle le problème. Qui pourrait mettre en partage le fichier en question car j'ai apporté la correction mais rien ne fonctionne.
Merci d'avance !
Auteur:  tchex [ 02 Sep 2015 13:59 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Bonjour,

En pj tu trouveras la version que j'utilise et qui fonctionne chez moi.
En espérant que ça solutionne tes problèmes.

Pièces jointes:
sonos.class.zip
(5.93 Kio) Téléchargé 435 fois
Auteur:  frenchdm [ 02 Sep 2015 16:38 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Merci beaucoup :oops: ! ... mais ça ne fonctionne pas chez moi
Auteur:  tchex [ 02 Sep 2015 17:08 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Dans l'idéal il faudrait pouvoir utiliser la synthèse vocale de l'eedomus+ (pour ceux qui ont ce modèle) plutôt que d'aller faire des appels sur l'api google (qui sera sûrement modifiée à nouveau, voire fermée ou payante).
A la place d'appeler google translate on appellerait l'adresse ip locale de la box qui en retour nous créerait un mp3.

Je n'ai pas trop suivi ce qui est possible de faire dans ce domaine avec l'eedomus+ mais c'est sûrement une piste à creuser.
D'ailleurs, je ne sais pas si l'eedomus+ fait sa synthèse vocale toute seule ou si elle passe par le net, mais si elle est autonome ça permettrait d'avoir de la synthèse vocale même avec une connexion internet HS.
Auteur:  stany [ 03 Sep 2015 22:28 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Bonsoir,

en grattant ici et là, sur http://www.domotique-fibaro.fr il y a une parade. :)
Il suffit de rajouter le paramètre client=t, soit:
Code : Tout sélectionner
$mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?client=t&q='.$words[$i].'&tl='.$lang);


En effet en tapant
Code : Tout sélectionner
http://translate.google.com/translate_tts?client=t&q=Bonjour&tl=fr
dans un barre d'adresse il n'y a plus le souci du Captcha rajouté par Google et le résultat vocal est toute de suite lancé.

Ne connaissant rien en code PhP, je ne sais pas intégrer cette modification.
Sachant qu'en ajoutant ce paramètre tel quel cela n'a pas marché pour moi :(
Auteur:  frenchdm [ 04 Sep 2015 04:55 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Voilà une bonne avancée, merci ! Reste à pouvoir l'intégrer dans un php
Auteur:  stany [ 04 Sep 2015 08:00 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

J'ai aussi trouvé une 2eme piste avec le site "http://text2speech.us".
J'ai trouvé qu'en tapant l'URL "http://text2speech.us/mp3.php?t=bonjour&lf=fr"dans une barre d'adresse, cela propose le téléchargement du MP3.
Mais pour que cela fonctionne, il faut d'abord ouvrir une première fois "http://text2speech.us" dans le navigateur avant de pouvoir utiliser autant de fois que nécessaire l'URL "http://text2speech.us/mp3.php?t=bonjour&lf=fr" dans la barre d'adresse.

Mais mes connaissances en PhP n'ont pas bien évolué en une nuit ;) .
Auteur:  titi007 [ 09 Sep 2015 14:29 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

je suis peut être hors sujet mais j’aurai une petite question .. sur l'utilisation des sonos.
tout fonctionne parfaitement sauf que dans une pièce, j’ai 2 play1 configurés en stéréo !
du coup, quand je fais « stop », tous les play1 s’arretent mais après quand je fais « lecture», j’ai un echos comme si il y avait une latence dans un des play?
il faut que je les désolidarise et que je recréé la stéréo… pas très pratique
vous auriez une idée ?
faut que je stoppe 1 ou les 2 plays de cette pièce et pour la lecture idem ?
Auteur:  teewee [ 10 Sep 2015 13:46 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Pour le TTS, il y a un fork / pull request du script de DjMomo qui utilise acapela, un autre système de TTS, mieux foutu que google :

https://github.com/Clement87/sonos

Vous pouvez l'utiliser, ca fonctionne sans souci.

=> récupérer sonos.class.php : https://github.com/Clement87/sonos/blob ... .class.php
=> créer un partage samba accessible aussi bien par votre sonos (partage à rajouter dans les bibliotheques musicales de l'app sonos) et dans la variable $directory de vos scripts tts.
=> modifier vos scripts tts en rajoutant la variable $ttsengine = 'acapela' et rajouter la variable $ttsengine à la fin des parametres de vos appels à PlayTTS();


Exemple de script avec le message du matin de ma femme (code crado, mais fonctionnel) :
Code : Tout sélectionner
<?php

require("sonos.class.php");


/***********************************************************/
/******* Paramètres génériques ******/
/***********************************************************/
//Répertoire ou sont stockés les scripts
$directory = "192.168.1.10/www/scripts/sonos";
//TTS
$ttsengine = 'acapela';
$lang = 'fr';

//Parametre pour forcer les sonos a sortir du mute, au cas ou
$force_unmute = 1;

// IP des sonos
$sonos_salon = "192.168.1.51";
$sonos_chambre = "192.168.1.52";
$sonos_fille = "192.168.1.53";
$sonos_bureau = "192.168.1.54";
$sonos_sdb = "192.168.1.55";


$jour = mb_strtolower(date("l"));
switch ($jour)
{
case 'monday':
   $jour = "lundi";
   break;

case 'thuesday':
   $jour ='mardi';
   break;
   
case 'wesnesday':
   $jour ='mercredi';
   break;
   
case 'thursday':
   $jour ='jeudi';
   break;
   
case 'friday':
   $jour ='vendredi';
   break;
   
case 'saturday':
   $jour ='samedi';
   break;

case 'sunday':
   $jour ='dimanche';
   break;
   }
   

$mois = date("n");
switch($mois){
case '1':
   $mois ='janvier';
   break;
   
case '2':
   $mois ='février';
   break;
   
case '3':
   $mois ='mars';
   break;
   
case '4':
   $mois ='avril';
   break;
   
case '5':
   $mois ='mai';
   break;

case '6':
   $mois ='juin';
   break;
   
case '7':
   $mois ='juillet';
   break;
   
case '8':
   $mois ='aôut';
   break;

case '9':
   $mois ='septembre';
   break;
   
case '10':
   $mois ='octobre';
   break;
   
case '11':
   $mois ='novembre';
   break;
   
case '12':
   $mois ='décembre';
   break;
}

/***********************************************************/

//récupération du volume voulu
$volume = $_GET['volume'];
if ($volume > 100){$volume = 100;}
if ($volume < 0){$volume = 0;}
if (!$volume){$volume = 25;}

// Récupération de la sonos voulue
$sonos = $_GET['sonos'];

switch($sonos){
   case salon:
      $sonos_ip = $sonos_salon;
      break;
   case chambre:
      $sonos_ip = $sonos_chambre;
      break;
   case fille:
      $sonos_ip = $sonos_fille;
      break;
   case bureau:
      $sonos_ip = $sonos_bureau;
      break;
   case sdb:
      $sonos_ip = $sonos_sdb;
      break;
}


/***********************************************************/
/********* URL pour récupérer les datas     ****************/
/***********************************************************/
//Temperature
$api_temperature = "http://192.168.1.5/api/get?api_user=xxxxxxxx&api_secret=xxxxxxxxx&action=periph.caract&periph_id=230620";

//Temps pour aller aux carmes
//$api_carmes = "http://192.168.1.5/api/get?api_user=xxxxxxxx&api_secret=xxxxxxxxx&action=periph.caract&periph_id=230902";

//Vent
$api_vent = "http://192.168.1.5/api/get?api_user=xxxxxxxx&api_secret=xxxxxxxxx&action=periph.caract&periph_id=231395";

//Conditions Meteo by Yahoo
$api_conditions = "https://query.yahooapis.com/v1/public/yql?q=select%20item.condition.text%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D'Clermont-Ferrand')%20and%20u%3D'c'&format=json";

/***********************************************************/
/********* Exploitation des JSON            ****************/
/***********************************************************/
// Récupération de la temperature extérieure
$temp_api = file_get_contents($api_temperature);
if (strpos($temp_api, '"success": 1') == false){echo "Une erreur est survenue: [".$temp_api."]";}
else{
$temp_json = json_decode($temp_api);
$temperature = $temp_json->{'body'}->{'last_value'};
}

// Récupération de la vitesse du vent
$temp_api = file_get_contents($api_vent);
if (strpos($temp_api, '"success": 1') == false){echo "Une erreur est survenue: [".$temp_api."]";}
else{
$temp_json = json_decode($temp_api);
$vent = $temp_json->{'body'}->{'last_value'};
}

// Récupération des conditions météo
$temp_api = file_get_contents($api_conditions);
$temp_json = json_decode($temp_api);
$conditions = $temp_json->{'query'}->{'results'}->{'channel'}->{'item'}->{'condition'}->{'text'};
$conditions = mb_strtolower($conditions);

/*
// Récupération du temps de trajet
$temp_api = file_get_contents($api_carmes);
if (strpos($temp_api, '"success": 1') == false){echo "Une erreur est survenue: [".$temp_api."]";}
else{
$temp_json = json_decode($temp_api);
$carmes = $temp_json->{'body'}->{'last_value'};

   //traitement de la réponse pour ne récupérer que la valeur de temps :
   $carmes = substr ($carmes,strpos($carmes, ":")+1,4);
   //On arrondit la valeur à la minute supérieure après avoir remplacé les : par une virgule
   $carmes = str_replace(":", ".",$carmes);
   $carmes = ceil($carmes);
}
*/

/***********************************************************/
/********* Traduction des conditions météos ****************/
/***********************************************************/
//Traduction des conditions météo - Penser à en faire une fonction à l'occasion
if($conditions = 'tornado')$conditions ='tornade';
if($conditions = 'tropical storm')$conditions ='touragan tropical';
if($conditions = 'hurricane')$conditions ='ouragan';
if($conditions = 'severe thunderstorms')$conditions ='orages dangereux';
if($conditions = 'thunderstorms')$conditions ='orages';
if($conditions = 'mixed rain and snow')$conditions ='pluie et neige mélées';
if($conditions = 'mixed rain and sleet')$conditions ='pluie';
if($conditions = 'mixed snow and sleet')$conditions ='neige';
if($conditions = 'freezing drizzle')$conditions ='bruine verglaçante';
if($conditions = 'drizzle')$conditions ='bruine';
if($conditions = 'freezing rain')$conditions ='pluie verglaçante';
if($conditions = 'showers')$conditions ='averses';
if($conditions = 'showers')$conditions ='averses';
if($conditions = 'snow flurries')$conditions ='averses de neige';
if($conditions = 'light snow showers')$conditions ='neige légères';
if($conditions = 'blowing snow')$conditions ='neige soufflante';
if($conditions = 'snow')$conditions ='neige';
if($conditions = 'hail')$conditions ='grêle';
if($conditions = 'sleet')$conditions ='grésil';
if($conditions = 'dust')$conditions ='poussière';
if($conditions = 'foggy')$conditions ='brouillard';
if($conditions = 'haze')$conditions ='brouillard';
if($conditions = 'smoky')$conditions ='enfumé';
if($conditions = 'blustery')$conditions ='intense';
if($conditions = 'windy')$conditions ='venteux';
if($conditions = 'cold')$conditions ='froid';
if($conditions = 'cloudy')$conditions ='nuageux';
if($conditions = 'mostly cloudy (night)')$conditions ='très nuageux (nuit)';
if($conditions = 'mostly cloudy (day)')$conditions ='très nuageux (jour)';
if($conditions = 'partly cloudy (night)')$conditions ='partiellement nuageux  (nuit)';
if($conditions = 'partly cloudy (day)')$conditions ='partiellement nuageux (jour)';
if($conditions = 'clear (night)')$conditions ='dégagé (nuit)';
if($conditions = 'sunny')$conditions ='ensoleillé';
if($conditions = 'fair (night)')$conditions ='juste';
if($conditions = 'fair (day)')$conditions ='juste';
if($conditions = 'mixed rain and hail')$conditions ='mélange pluie et grêle';
if($conditions = 'hot')$conditions ='chaud';
if($conditions = 'isolated thunderstorms')$conditions ='orages isolés';
if($conditions = 'scattered thunderstorms')$conditions ='orages épars';
if($conditions = 'scattered thunderstorms')$conditions ='orages épars';
if($conditions = 'scattered showers')$conditions ='averses éparses';
if($conditions = 'heavy snow')$conditions ='neige dure';
if($conditions = 'scattered snow showers')$conditions ='averses de neige éparses';
if($conditions = 'heavy snow')$conditions ='chute de neige';
if($conditions = 'partly cloudy')$conditions ='partiellement nuageux';
if($conditions = 'thundershowers')$conditions ='orageux';
if($conditions = 'snow showers')$conditions ='averses de neige';
if($conditions = 'isolated thundershowers')$conditions ='orages isolés';
if($conditions = 'not available')$conditions ='inconnu';
if($conditions = 'mostly cloudy')$conditions ='très nuageux';

/***********************************************************/
/********* Les messages                     ****************/
/***********************************************************/

$message1 = "Bonjour xxxxx. J'espère que vous avez bien dormi, en tout cas vous êtes resplendissante!
";

$message2 = "
Nous sommes le ".$jour." ".date("j")." ".$mois.".
Il est ".date("G")." heure ".date("i").".
";

$message3 = "
Le temps s'annonce ".$conditions.", avec une température de ".$temperature." degrés actuellement
et un vent soufflant à ".$vent." kilomètres heure.
";

//$message4 = "
//Il vous faudrait environ ".$carmes." minutes pour arriver au travail si vous partez maintenant.
//";

$message5 = "
Passez une excellente journée. Longue vie et Prospérité. Je ferme maintenant ma gueule et je vous mets la radio.
";



/***********************************************************/
/********* On envoit les messages a la bonne sonos *********/
/***********************************************************/
// Instanciation de la classe

$the_sonos = new SonosPHPController($sonos_ip);
$the_sonos->PlayTTS($message1,$directory,$volume,$force_unmute,$lang,$ttsengine);
$the_sonos->PlayTTS($message2,$directory,$volume,$force_unmute,$lang,$ttsengine);
$the_sonos->PlayTTS($message3,$directory,$volume,$force_unmute,$lang,$ttsengine);
//$the_sonos->PlayTTS($message4,$directory,$volume,$force_unmute,$lang,$ttsengine);
$the_sonos->PlayTTS($message5,$directory,$volume,$force_unmute,$lang,$ttsengine);

//lancer la radio :
$radio = "x-rincon-mp3radio://e1-live-mp3-128.scdn.arkena.com/europe1.mp3";

$radio = new SonosPHPController($sonos_ip);
$radio->SetQueue($radio);
$radio->Play();

?>



Voila voila.

//Edit du code pour éviter l'appel àun fichier externe pour lancer la radio. Comme ca, le fichier peut fonctionner chez tout le monde en copier / coller sauvage.
Auteur:  stany [ 11 Sep 2015 09:28 ]
Sujet du message:  Re: Pour les utilisateurs de SONOS

Bonjour,
merci pour cette autre alternative :D

Je dois gratter de mon coté car quelque soit la solution, j'ai toujours un fichier à 0Ko .... qui me donne une "erreur de codage" sous Sonos. :(
Page 14 sur 18 Le fuseau horaire est UTC+1 heure