IPSSonos

Hi Jörg,

nach heutigem Update habe ich diesen Fehler.

Quasi keine function dieser Art vorhanden.

Bei mir das gleiche

Habe erst mal die IPSSonos_Query.inc gegen die alte ersetzt, geht erst mal. fehlt halt die function

Hallo.

Für die fehlende Function bitte folgendes in die IPSSonos_Custom kopieren.

 function IPSSonos_Custom_PlayerType($roomName, $PlayerType)  {
 }
 

Autsch! Stimmt, die Dateien im Config werden ja beim Installieren nicht mehr überschrieben. Im Default- bzw. Example-Ordner liegen die Vorlagen zum Anlegen.

Hab auch gerade ein Fix mit Version 1.0.3 freigegeben, damit muss man die IPSSonos_Custom nur dann anpassen, wenn man die Funktion auch nutzen möchte.

Sorry für den Stress

Jörg

So, jetzt habe ich mal auf 1.03 geupdatet. Jetzt aktualisiert sich die Covers unter Remote nicht mehr, weder bei Playlist noch Radiolist.

Bockt es nur bei mir oder ist da was falsch gelaufen?

Beir mir aktualisiert sich allgemein nichts mehr … Wenn ich per Android App Stoppe oder die Lautstärke ändere, ändert sicht im WF nichts

Ladet doch mal bitte die neue Version 1.0.4, dort ist der Auftuf der CallBack-Methode optimiert und damit sollte jetzt auch wieder das Aktualisieren der Remote funktioneren.

Läuft.

Kleiner Featurewunsch von meiner Seite.

Um meine Audiosteuerung einheitlich zu halten käme es mir gelegen wenn das Cover, der Titel und die Position als Variable vorliegen würden.

Die Remote-HTML-Box gefällt mir nicht wirklich und da ich meine Visiu mit Links selber erstelle wäre es eben von Vorteil wenn die vorher genannten als Variablen vorliegen würden.

Als Beispiel hier meine Squeezeboxanzeige. (rot markiert meine Wünsche):smiley:

Bei mir kommt nach Update auf 1.0.4 folgendes:

12.09.2014 21:34:01.642 | 41901 | MESSAGE | ExecuteThreadID #2 | [Program\IPSLibrary\app\modules\IPSSonos\IPSSonos_ChangeSettings] =
Warning: Objekt mit Ident PLAYERDETAILS wurde nicht gefunden in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 125

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 125

Warning: Objekt mit Ident PLAYERDETAILS wurde nicht gefunden in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 139

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 140

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 141

Warning: Objekt mit Ident PLAYERDETAILS wurde nicht gefunden in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 125

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 125

Warning: Objekt mit Ident PLAYERDETAILS wurde nicht gefunden in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 139

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 140

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSSonos\IPSSonos_Room.class.php on line 141

Irgend eine Idee hierzu?
Ich deinstalliere mal komplett und installiere dann neu.

Ich habe jetzt nicht gleich deinstalliert, sondern nur mal nachträglich drüber installiert … DAS hat den Knoten platzen lassen. Nun sind die Fehler weg.

yep, nach dem Update muss noch „Modul installieren“ gedrückt werden.

Ein „Update“ lädt lediglich die neue Version von GIT auf den IPS-Rechner, mit „Installieren“ werden dann, basierend auf den Einstellung in der Config-Datei, zusätzlich lokale Objekte erzeugt.

Bei Dir war durch den Update schon der neue Software-Stand vorhanden, die lokale Objekte haben aber noch gefehlt -> Fehler

Hallo,

ich möchte mich ebenfalls für das HERVORAGENDE Modul bedanken. Installiert und funktioniert … fehlerfrei !!!

Das Cover, den Titel und die aktuelle Titel-Position als Anzeige (am liebsten gleich ins WF eingebaut) und eine Durchsagefunktion sind auch die Dinge die ich mir noch wünschen würde !!!

Gruß Proxima

Super Sache!!

Hab es installiert und es läuft. Klasse :slight_smile:

Die Ausgabe von Meldungen auf dem Sonos System mache ich so:


function TTS_Play_Sonos($Player_IP,$ansagetext,$ton)
{
/*=============================================================
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
$ton                 ->          Der Ton/Melodie die vor dem Ansagetext abgespielt werden soll


Änderungen
----------

tt.mm.jjjj von Version x.x -> y.y

Beschreibung:

================================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$wav = array
(
	"hinweis"  => "x-file-cifs://HOMECONTROL-PC/media/Sound/hinweis.wav",
   "meldung"  => "x-file-cifs://HOMECONTROL-PC/media/Sound/meldung.wav",
   "abmelden" => "x-file-cifs://HOMECONTROL-PC/media/Sound/abmelden.wav",
   "aus"      => "x-file-cifs://HOMECONTROL-PC/media/Sound/aus.wav",
   "chimes"   => "x-file-cifs://HOMECONTROL-PC/media/Sound/chimes.wav",
   "bell"     => "x-file-cifs://HOMECONTROL-PC/media/Sound/bell.wav"
);

//-------------------------------------------------------------


//--------------------------- 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();

//Abspielen der gewählten Ton's
$sonos->SetVolume(50);
$sonos->SetAVTransportURI($wav[$ton]);
$sonos->Play();

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

//Generieren der Sprachausgabe
TTS_GenerateFile(54665 /*[.Sound\Text To Speech]*/, $ansagetext,IPS_GetKernelDir()."media/Sprache1.wav",39);
IPS_Sleep(75);

//Abspielen der Sprachausgabe
$sonos->SetVolume(30);
$sonos->SetAVTransportURI("x-file-cifs://HOMECONTROL-PC/media/Sprache1.wav");
$sonos->Play();

//Abfragen ob der Player noch spielt
IPS_Sleep(1000);
while ($sonos->GetTransportInfo()==1)
{
	IPS_Sleep(200); //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);

//------------------------- Main ENDE --------------------------
}
?>

Hallo Martin,

habe mal dein Skript getestet und habe ein kleines Problem damit. Und zwar funktioniert (fast) alles.
Die wav. Datei wird erzeugt, die Sonos fährt die Lautstärke langsam runter sehe auch das das Wavfile sowie der ausgewählte Ton (in meinem Fall „chimes.wav“) im Remotefenster angezeigt wird, aber ich höre da keinen Ton.
Habe hier schon alles durchgelesen, finde aber nicht wirklich etwas???

Das Script kann so bei dir nicht laufen. Du musst das Array für die Wave-Dateien auf deine Verhältnisse anpassen.

Wo liegen bei dir die Dateien?
Wie heißt dein PC im Netz usw.

Des weiteren musst Du die ID von TTS im Script eintragen. Ich hatte das Scrit nur als Beispiel gepostet. Das ist kein allgemein gültiges Script.
Wenn Du das Wave-Dateien Array abänderst und die ID deiner TTS Instanze einträgst müsste das Teil so laufen.

Hallo Zusammen,

folgende zwei Änderungen gibt es mit der neuen Version 1.0.5:

1. Im WebFrontEnd wird nun ein Tab-Screen verwendet

Kleinere optische Verbesserung:

IPSSONOS12.JPG

2. Zusätzliche Informationen der Player

Diese Änderung ist hauptsächlich für Leute interessant, die eine eigene Oberfläche für IPSSonos erstellen wollen. Mit dem Parameter IPSSONOS_VAR_PLAYERDETAILS in der IPSSonos_Configuration kann gesteuert werden, ob zusätzliche Variablen mit weiteren Informationen aus den Playern sowohl im Backend als auch WebFront angelegt werden sollen (momentan 8 zusätzliche Variablen pro Raum). Wer diese Infromationen nicht braucht, ändert entweder die IPSSonos_Config nicht oder gibt als Wert „Standard“ an.


function IPSSonos_GetServerConfiguration() {
	return array(
		IPSSONOS_VAR_IPADDR			=>	'192.168.2.110',	
		IPSSONOS_VAR_PLAYERDETAILS 	=>    'High',	       //Use 'High' for additional information or 'Standard'		
	);

Nach einem „Modul installieren“ sind nun folgenden zusätzlichen Informationen verfügbar:

Als Spielerei: Die Positionsanzeige reagiert auch auf Eingaben!

Viele Grüße

Jörg

Hallo Martin,

vielen Dank für die Blumen und den Code :slight_smile: Sieht recht kompatibel aus zu dem, was in IPSSonos passiert. Ich schau mal, wie man das zusammen zum laufen bringt.

Viele Grüße

Jörg

Hi, Martin, ja das ist klar. Habe alles geändert auch das Array angepasst. Es funktioniert ja auch alles aber ich höre es nicht.

Hallo Schablone,

an dem Thema Sprachausgabe auf Sonos brech ich mir seit einiger Zeit auch auch schon einen ab. Daher erst mal vielen Dank für den Code.

Leider funktioniert der bei mir, auch mit Deinen Tipps nicht.

Ich nutze die PHPSonos.inc.php * - 120205 - PeterChrisben/br improved phpdoc for setplaymode and gettransportsettings

Dein script hab ich folgendermassen angepasst:

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

$Player_IP_Keller = getvalue(12124 /*[Logisch\MultiMedia\Sonos\Keller\SONOS_IP]*/);
$ansagetext = 'hello world';
$ton = 'gemecker';

$sprachdateiFolder = IPS_GetKernelDir()."media\\Sprachausgaben\\"; // wo soll die Sprachausgabedatei gespeichert werden
//echo $sprachdateiFolder."
";
//$soundFolder = IPS_GetKernelDir().'media\\Sounds\\'; // wo ist die Tondatei gespeichert // kommt in der function nicht an
//echo $soundFolder."
";

TTS_Play_Sonos($Player_IP_Keller,$ansagetext,$ton);


function TTS_Play_Sonos($Player_IP_Keller,$ansagetext,$ton)
{
/*=============================================================
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
$ton                 ->          Der Ton/Melodie die vor dem Ansagetext abgespielt werden soll


Änderungen
----------

tt.mm.jjjj von Version x.x -> y.y

Beschreibung:

================================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$wav = array
(
   "gemecker"  => IPS_GetKernelDir()."\media\Sounds\gemecker.wav"
);

//--------------------------- Main ----------------------------
// Sonos Player
$sonos                         = new PHPSonos($Player_IP_Keller);        //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();

//Abspielen der gewählten Ton's
$sonos->SetVolume(12);
$sonos->SetAVTransportURI($wav[$ton]);
$sonos->Play();

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

//Generieren der Sprachausgabe
TTS_GenerateFile(29148  /*[Logisch\Alarme\Ausgaben\TTS\Das Gartenwasser ist noch an]*/, $ansagetext, $sprachdateiFolder.'test.wav',39);
IPS_Sleep(75);

//Abspielen der Sprachausgabe
$sonos->SetVolume(30);
$sonos->SetAVTransportURI($sprachdateiFolder.'test.wav');
$sonos->Play();

//Abfragen ob der Player noch spielt
IPS_Sleep(1000);
while ($sonos->GetTransportInfo()==1)
{
    IPS_Sleep(200); //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);

//------------------------- Main ENDE --------------------------
}
?>

Folgender Fehler wird im Script ausgegeben:



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/27.2-80271 (ZPS3)
Connection: close

s:ClientUPnPError' in D:\IPS\scripts\PHPSonos.inc.php:2310
Stack trace:
#0 D:\IPS\scripts\PHPSonos.inc.php(1676): PHPSonos->sendPacket('POST /MediaRend...')
#1 D:\IPS\scripts\15409.ips.php(73): PHPSonos->SetAVTransportURI('D:\IPS\\media\S...')
#2 D:\IPS\scripts\15409.ips.php(13): TTS_Play_Sonos('192.168.178.58', 'hello world', 'gemecker')
#3 {main}
  thrown in D:\IPS\scripts\PHPSonos.inc.php on line 2310
IPS-Err-PHP                  2014-09-24 23:12:59.244  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/27.2-80271 (ZPS3)    Connection: close        s:ClientUPnPError' in D:\IPS\scripts\PHPSonos.inc.php:2310  Stack trace:  #0 D:\IPS\scripts\PHPSonos.inc.php(1676): PHPSonos->sendPacket('POST /MediaRend...')  #1 D:\IPS\scripts\15409.ips.php(73): PHPSonos->SetAVTransportURI('D:\IPS\\media\S...')  #2 D:\IPS\scripts\15409.ips.php(13): TTS_Play_Sonos('192.168.178.58', 'hello world', 'gemecker')  #3 {main}    thrown     Error in Script D:\IPS\scripts\PHPSonos.inc.php on Line 2310    134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)     33 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)    121 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_PhpErrorHandler)        in IPSLogger_PhpFatalErrorHandler
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/27.2-80271 (ZPS3)
Connection: close

s:ClientUPnPError' in D:\IPS\scripts\PHPSonos.inc.php:2310
Stack trace:
#0 D:\IPS\scripts\PHPSonos.inc.php(1676): PHPSonos->sendPacket('POST /MediaRend...')
#1 D:\IPS\scripts\15409.ips.php(73): PHPSonos->SetAVTransportURI('D:\IPS\\media\S...')
#2 D:\IPS\scripts\15409.ips.php(13): TTS_Play_Sonos('192.168.178.58', 'hello world', 'gemecker')
#3 {main}
  thrown
   Error in Script D:\IPS\scripts\PHPSonos.inc.php on Line 2310

Im Gegensatz zu UVoigi wird bei mir nicht mal die Sprachausgabedatei erstellt. Nur die Lautstärke fährt runter und wieder rauf.

Auch wenn ich die test.wav im Verzeichnis D:\IPS\media\Sprachausgaben\ von hand anlege funktionierts nicht.

in der Zeile „#1 D:\IPS\scripts\15409.ips.php(73): PHPSonos->SetAVTransportURI(‚D:\IPS\media\S…‘)“ ist ein Doppelbackslasch. Wo hab ich den denn eingebaut? Ich blicks gerade nicht.

Kannst Du bitte mal schauen was da nicht stimmt?

Danke im Voraus,