IPSSonos + TTS_GenerateFile + Windows Server2012 VM Ohne Soundkarte

Guten Abend,

Als erstes möchte ich mich entschuldigen falls die Fragen die ich stelle schon beantwortet wurden oder sehr doof sind :-).
Ich habe die Suchfunktion benutzt aber keine passende Antwort gefunden die zu meinem Problem passt.

Zu meinem System

ESXi mit mehreren VM’s
IP-SSymcon läuft einer Windows Server 2012 VM. Ohne Soundkarte
IPSSOnos wurde installiert und funktioniert
SONOS PLAY1

Ich würde gerne Texte durch Scripte durch Sonos Play1 durchsagen lassen.
Soweit ich gelesen habe funktioniert es mit TTS nicht und mich muss den Text mit TTS_GenerateFile durchsagen lasse…
Leider weis ich nicht wie ich das anstellen soll…

Benötigt der Server eine Soundkarte um Texte Über Sonos aussprechen zu lassen?

Wenn ich folgenden Script laufen lasse wird die Musik leiser geschaltet für 10 Sekunden und wieder laut ohne dass ein Text gesprochen wird.

ich mache wohl irgend etwas falsch.

IPSUtils_Include (‚IPSSonos.inc.php‘, ‚IPSLibrary::app::modules::IPSSonos‘);
IPSSonos_PlayTTSByRoomSimple(‚Küche,Schlafzimmer‘, ‚Dies ist ein Test‘

Es wäre nett wenn mir jemand weiter helfen könnte

MFG

Mir ist aufgefallen dass die Datei richtig generiert wird.
Wenn ich diese über die Sonos app abspilene funktioniert es auch aber nicht über den Script…
Weiss jemand Warum?

Manchmal bekomme ich diese Fehlermeldung:

Fatal error: Uncaught exception ‚Exception‘ with message 'Error sending command: HTTP/1.1 500 Internal Server Error
CONTENT-LENGTH: 347
CONTENT-TYPE: text/xml; charset=„utf-8“
EXT:
Server: Linux UPnP/1.0 Sonos/28.1-83040 (ZPS1)
Connection: close

s:ClientUPnPError’ in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\PHPSonos.inc.php:2308
Stack trace:
#0 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\PHPSonos.inc.php(965): PHPSonos->sendPacket(‚POST /MediaRend…‘)
#1 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Server.class.php(891): PHPSonos->Play()
#2 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Server.class.php(555): IPSSonos_Server->PlayMessage(Array)
#3 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos.inc.php(356): IPSSonos_Server->SendData(‚SRV‘, ‚Flur‘, ‚MSGTTSRS‘, ‚Hallo! Was soll…‘)
#4 C:\IP-Symcon\scripts\52390.ips.php(4): IPSSonos_PlayTTSByRoomSimple(‚Flur‘, ‚Hallo! Was soll…‘)
#5 {main}
thrown in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\PHPSonos.inc.php on line 2308
Abort Processing during Fatal-Error: Uncaught exception ‚Exception‘ with message 'Error sending command: HTTP/1.1 500 Internal Server Error
CONTENT-LENGTH: 347
CONTENT-TYPE: text/xml; charset=„utf-8“
EXT:
Server: Linux UPnP/1.0 Sonos/28.1-83040 (ZPS1)
Connection: close

s:ClientUPnPError’ in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\PHPSonos.inc.php:2308
Stack trace:
#0 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\PHPSonos.inc.php(965): PHPSonos->sendPacket(‚POST /MediaRend…‘)
#1 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Server.class.php(891): PHPSonos->Play()
#2 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Server.class.php(555): IPSSonos_Server->PlayMessage(Array)
#3 C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos.inc.php(356): IPSSonos_Server->SendData(‚SRV‘, ‚Flur‘, ‚MSGTTSRS‘, ‚Hallo! Was soll…‘)
#4 C:\IP-Symcon\scripts\52390.ips.php(4): IPSSonos_PlayTTSByRoomSimple(‚Flur‘, ‚Hallo! Was soll…‘)
#5 {main}
thrown
Error in Script C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\PHPSonos.inc.php on Line 2308

Hallo MichB,

ich weiss nicht obs was hilft, da ich andere SonosScripte verwende, aber ich hatte am Anfang auch Porbleme mit TTS auf Sonos. Bei mir gings, nachdem ich das Verzeichnis in das meine TTS-Files abgelegt werden freigegeben habe und in der Sonos-Software unter „Verwalten - Einstellungen der Musikbibliothek - Ordner“ dieses Verzeichnis hinzugefügt hab.

Hallo
Vielen Dank für deine Antwort. Dies habe ich gemacht kann die generierte Datei auch manuell über Sonos abspielen. Nur wird sie eben nicht durch den Script abgespielt.
Hast du sonst noch eine Idee woran es liegen kann? Könntest Du vieleicht mal deinen ascript posten
Mfg

Hallo noch mal,

Ich habe das Problem lösen können. Es lag tatsächlich an der Freigabe. Die Ordnerstruktur in der die Datei abgespeichert wurde: c:ips-config/sounds
Die Freigabe hatte ich auf den Ordner Sounds erteilt und in Sonos interface hinzugefügt: \ip/sounds
Konnt auch mit dem sonos interface darauf zugreifen.
Ich erstellte erneut eine Freigabe diesmal jedoch auf den Ordner ips-config und in Sonos folgendermassen hinzugefügt:
\ip/ips-config/sounds
Dann hats funktioniert, villeicht kann das jemandem weiterhelfen

Mfg

Hallo MichB,

ich arbeite mit PHPSonos.
PHP Sonos (Klasse zum Ansteuern einzelner Player)

Die PHPSonos.inc.php im Scripts-Verzeichnis ist die Basis.

Dann hab ich ein PHP-Script (irgend wo hier aus dem Forum leicht abgeändert) FunctionAnsageAufSonos:

<?
include("PHPSonos.inc.php");

function TTS_Play_Sonos($Player_IP,$ansagetext)
{
/*=============================================================
TTS_Play_Sonos - Martin Heinzel - 09.07.2013
Version: 0.1

Beschreibung:
Diese Funktion ersetzt die Sprachausgabe von "Ferengie-Master"
für die Sprachausgabe auf Soundkarten. Zur Sprachausgabe wird
ein Sonosplayer genutzt.

Parameter:
$Player_IP           ->          Die IP-Adresse des Sonosplayers
$ansagetext          ->          Der Ansagetext der ausgegeben werden soll
*/

//--------------------------- Main ----------------------------
// Sonos Player
$sonos                         = new PHPSonos($Player_IP);        //Sonos ZP IPAdresse

//Einlesen und runterrampen der Lautstärke
$volume                         = $sonos->GetVolume();                 // gibt die Lautstärke als Integer zurück

//Runterrampen der Lautstärke
while ($sonos->GetVolume()>=6)
{
    $sonos->SetVolume($sonos->GetVolume() -5);
    IPS_Sleep(500);
}

//Speichern der Aktuellen Informationen
$oldpi = $sonos->GetPositionInfo();
$oldmi = $sonos->GetMediaInfo();
$radio=(strpos($oldmi['CurrentURI'],"x-sonosapi-stream:")>0)===false;
$oldti = $sonos->GetTransportInfo();

//Generieren der Sprachausgabe

TTS_GenerateFile(29148 /*[Logisch\Alarme\Ausgaben\TTS\TTS-Steffi]*/ , $ansagetext,IPS_GetKernelDir()."/media/Sprachausgaben/sprachausgabe.wav",39);
IPS_Sleep(75);

//Abspielen der Sprachausgabe
$sonos->SetVolume(12);
$sonos->SetAVTransportURI("x-file-cifs://laptop01/media/Sprachausgaben/sprachausgabe.wav");
$sonos->Play();


//Abfragen ob der Player noch spielt
//IPS_Sleep(1000);
while ($sonos->GetTransportInfo()==1)
{
    IPS_Sleep(20); //Alle 200ms wird abgefragt
}

//Player wieder Starten
if ($radio)
{
    $sonos->SetRadio($oldmi['CurrentURI']);
}
else
{
    $sonos->SetAVTransportURI($oldmi['CurrentURI'],$oldmi['CurrentURIMetaData']);
}

try
{
    // Seek TRack_Nr
   $sonos->Seek("TRACK_NR",$oldpi['Track']);
   // Seek REl_time
   $sonos->Seek("REL_TIME",$oldpi['RelTime']);
}
catch (Exception $e)
{

}
if ($oldti==1) $sonos->Play();
$sonos->SetVolume($volume);

}
?>

Aufgerufen wird dieses Script mit einem anderen, das die Parameter übergibt:

<?

include('59538.ips.php'); // function ansage auf sonos ohne ton

$Player_IP = '192.168.x.x'; // anpassen!
$ansagetext = 'Die Waschmaschiene ist fertig';

//function TTS_Play_Sonos($Player_IP,$ansagetext)
/*=============================================================
TTS_Play_Sonos - Martin Heinzel - 09.07.2013
Version: 0.1

Beschreibung:
Diese Funktion ersetzt die Sprachausgabe von "Ferengie-Master"
für die Sprachausgabe auf Soundkarten. Zur Sprachausgabe wird
ein Sonosplayer genutzt.

Parameter:
$Player_IP           ->          Die IP-Adresse des Sonosplayers
$ansagetext          ->          Der Ansagetext der ausgegeben werden soll
*/

TTS_Play_Sonos($Player_IP,$ansagetext)

?>

zu spät …

Danke für deine Informationen…

Was ist denn der unterschiecvon IPSSonos zu PhpSonos?