PHP Sonos (Klasse zum Ansteuern einzelner Player)

Ich bin dran und versuche mein Glück. Allerdings bin ich halt (noch nicht) der PHP Held.

Ich lese aus:
$posInfo = $sonos->GetPositionInfo(); // gibt ein Array mit den Informationen zum aktuellen Titel zurück (Keys: position, duration, artist, title, album, albumArtist, albumTrackNumber)

SetValueString(34147 /[Sonos\Master Badezimmer\PosInfo]/, $posInfo);

bekomme zurück:
Warning: Wrong parameter type for SetValueString() in [Sonos\Master Badezimmer] on line 44

Habe eine Variable definiert als String, will aber keinen Wert definieren… little help?

Hi Spacecraft,

ich kenne mich mit IP Symcon jetzt nicht aus, da ich es noch nie benutzt habe. Allerdings sieht der Befehl „SetValueString“, den du verwenden möchtest, stark danach aus, als wollte er als zu setzenden Parameter einen String haben.
Du übergibst aber mit „$posInfo“ aber ein Array.

Versuch es mal mit „$posInfo[‚trackURI‘]“ (natürlich ohne meine Anführungszeichen). Dieses Feld sollte es eigentlich, neben den von dir erwähnten, auch geben (zumindest wird es im Quellcode von GetPositionInfo() gesetzt), es könnte allerdings auch leer sein, wenn ein Fehler beim Erkennen passiert.

Wenn da immer alles Leer bleibt, dann versuch zum Testen der prinzipiellen Funktion erstmal ein bekanntes Feld wie „$posInfo[‚title‘]“.

Grüße Reiner

unglaublich… sag ja, meine PHP Kenntnisse sind wirklich noch nicht die besten, aber so gehts, wieder was gelernt!

Für alle welche auch mal den Toslink direkt aufrufen wollen:

x-sonos-htastream:RINCON_000E58B22FA201400:spdif

Danke Reiner!

Ich habe mir mal Reiners Perl Module angeschaut, dass sieht ja schon sehr umfangreich und robust aus.
Leider habe ich keine Ahnung von FHEM (ich nutze das Perl-basierte misterhouse) und mir fehlt bei dem sehr detailliert beschriebenen Anwendungsbeispiel für FHEM ein Beispiel, wie die einzelnen Perl Routinen aufgerufen werden und die Loop allgemein aussieht.

Hat jemand ein FHEM unabhängiges Perl-Skript zum testen der Perl Module?

Danke&Gruß,
Marc

Hi Marc,

ich fürchte, es wird sehr schwierig mein FHEM-Modul ohne FHEM zu betreiben. Es ist sehr eng damit verzahnt, und verwendet das Nachrichtenmodell und die Speichermöglichkeit von Informationen in FHEM.

Es ist also nicht damit getan, einfach nur „den FHEM-Kern“ zu simulieren. Es sind auch sehr viele interne Funktionalitäten notwendig.

Grüße Reiner

Ich hätte mal eine Frage zu den Umlauten. Umlaute werden bei mir nicht richtig aufgelöst, so bekomme ich z.B. Ã…ke Edwardson statt Åke Edwardson oder Herbert Grönemeyer statt Herbert Grönemeyer in IP Symcon angezeigt.

Ich habe jetzt utf8_decode($posInfo[„artist“])) benutzt um dann die Daten richtig mit Umlauten in die IP-Symcon Variablen abzulegen. Eventuell könnte ja etwas an der PHP Sonos Klasse geändert werden, damit der Array gleich die Namen mit Umlauten richtig enthält.

Hello,

I apologize for writing in English. I do not speak German.
Can you please give me a link to latest version of the script?

From this forum I understand that I should get it from the wikipage but the wikipage says it’s on this thread.
Perhaps I do not understand it right due to the Google translation.

Thank you very much.

Moin…

… kann mir jemand auf die Sprünge helfen und vielleicht kurz einen Beispielcode posten wie ich eine gerspeicherte Playlist auswähle und in die Playlist bekomme oder diese zur Playlist mache?!
Ich hab mich hier jetzt durchs Thema gekämpft, aber nix verwertbares gefunden oder einfach nur übersehen!?
Hintergrund ist, das ich meinen Play:5 vom Netz trenne, da er nur sehr selten benutzt wird. Nach dem einschalten ist aber immer die Playlist leer. Ich würde dann gerne mit IPS ein Playlist einfügen.

Danke und Grüße,
Peter

Kann mir keiner Helfen? Ich kann mit den 2 Schnipseln bezüglich derPlaylisten laden nix anfangen.
Finden tue ich die Playlist per Skript, nur wie bekomme ich Sie geladen?
Gruß,
Peter

Hallo Peter,

du brauchst zum Laden die PlaylistID und die uuid:


foreach ($sonos->GetSONOSPlaylists() as $sonoslist){
  if ($sonoslist['title']==$PlaylistName){
  $PlaylistID= $sonoslist['id'];
  break;
}

Dann kannst du die Liste zuweisen:


$uuid = "RINCON_000E5831FF8401400"
$sonos->AddtoQueue("file:///jffs/settings/savedqueues.rsq#".$PlaylistID]);
$sonos->SetQueue("x-rincon-queue:".$uuid."#0");

Ich hoffe, das hilft dir weiter.

Gruß

Burkhard

Danke Burkhard! Werde ich heute Abend gleich probieren! 1000 Dank…

Peter

So… hier noch mal kurz Feedback zum Laden einer Playlist. Dank der Hilfe von Burkhard hab ich es hin bekommen.

Hier mein Skript…


<?

// DAS SKRIPT SUCHT AUS DER LISTE DER VORHANDENEN PLAYLISTS DIE LISTE MIT DER BEZEICHNUNG "WECKEN" UND LÄDT DIESE.
// ANSCHLIESSEND WIRD DIE PLAYLIST ABGESPIELT.



include("PHPSonos.inc.php");

$sonos_ip = GetValue(19671 /*[AUDIO / VIDEO\SONOS\SONOS Play:5\ZonePlayer IP]*/);
$sonos = new PHPSonos("$sonos_ip"); //Sonos ZP IPAdresse

$PlaylistName = "Wecken";

foreach ($sonos->GetSONOSPlaylists() as $sonoslist){
  if ($sonoslist['title']==$PlaylistName){
  $PlaylistFILE= $sonoslist['file'];
  break;
		}
	}

//echo "$PlaylistFILE";

$uuid = GetValue(47932 /*[AUDIO / VIDEO\SONOS\SONOS Play:5\ZonePlayer Rincon]*/);
$sonos->AddtoQueue("$PlaylistFILE");
sleep(1);
$sonos->Play();

?>

Danke…

Peter

Wo gibt es denn die letzte Version der PHP-Klasse? Ich kann nur eine Version: 1.0, vom 09.07.2009 finden.
Ich wollte mal ein bisschen mit meinem neuen Sonos-System in Verbindung mit IPS „spielen“.

Hallo zusammen
Mir ist gerade aufgefallen das mein Script zum Pausieren des Sonos eine Fehlermedung ausgibt.
Mit diesem Script lasse ich meinen Sonos Pausieren

<?
include("PHPSonos.inc.php");
$sonos = new PHPSonos("xxx.xxx.xxx.xx"); //Sonos ZP IPAdresse
$sonos->Pause();
?>

Und diese Fehlermeldung bekomme ich neuerdings.
Ich hoffe es kann mir jemand helfen.

Fatal error:  Uncaught exception 'Exception' with message 'Error sending command: HTTP/1.1 500 Internal Server ErrorCONTENT-LENGTH: 347
CONTENT-TYPE: text/xml; charset="utf-8"
EXT: 
Server: Linux UPnP/1.0 Sonos/22.0-65180b (ZPS5)
Connection: close


s:ClientUPnPError' in C:\IP-Symcon\scripts\PHPSonos.inc.php:483
Stack trace:
#0 C:\IP-Symcon\scripts\PHPSonos.inc.php(41): PHPSonos->sendPacket('POST /MediaRend...')
#1 C:\IP-Symcon\scripts\23289.ips.php(6): PHPSonos->Pause()
#2 {main}
  thrown in C:\IP-Symcon\scripts\PHPSonos.inc.php on line 483
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/22.0-65180b (ZPS5)
Connection: close


s:ClientUPnPError' in C:\IP-Symcon\scripts\PHPSonos.inc.php:483
Stack trace:
#0 C:\IP-Symcon\scripts\PHPSonos.inc.php(41): PHPSonos->sendPacket('POST /MediaRend...')
#1 C:\IP-Symcon\scripts\23289.ips.php(6): PHPSonos->Pause()
#2 {main}
  thrown
   Error in Script C:\IP-Symcon\scripts\PHPSonos.inc.php on Line 483

Mfg Stefan

Hallo.
ich bin neu und finde das Projekt super! Ich spiele gerade ein wenig mit dem phpSonos über den Webserver meines NAS. Das funktioniert soweit ganz gut, zumal ich noch nie mit php gearbeitet habe.

Hat jemand ggf. eine neue Version der PHPSonos-Datei? Eine Version, die z.B. auch die Sleeptimer-Funktionen enthält?
Ich habe versucht dies in die alte Datei einzubauen, hat aber nicht geklappt. Mache irgendetwas falsch…

Also wenn jemand eine aktuelle Datei anhängen könnte, wäre das toll!

Danke und Gruß,
djhans.

Hallo Burkhard,
im Deinem Scriptauschnitt aus Beitrag #290 ist meine ich ein kleiner Tippfehler enthalten. Beim abspeichern der PlaylistID mußte ich noch 3 Zeichen entfernen, weil die PlaylistID bei mir z.B. als „SQ:13“ abgelegt wird. Anbei den Scriptauschnitt modifiziert.


foreach ($sonos->GetSONOSPlaylists() as $sonoslist){
  if ($sonoslist['title']==$PlaylistName){
  $PlaylistID = substr($sonoslist['id'], 3); #Playlist ID z.B. SQ13 => SQ: entfernen
  break;
}  

entsprechend war dann bei Dir im AddQueue Befehl hinten eine „]“ zuviel.


$uuid = "RINCON_000E5831FF8401400"
$sonos->AddtoQueue("file:///jffs/settings/savedqueues.rsq#".$PlaylistID);
$sonos->SetQueue("x-rincon-queue:".$uuid."#0");  

Damit hat es bei mir funktioiert. Ohne Deinen Auschnitt hätte ich es aber nicht hinbekommen. Hatte schon h an Zeit investiert eine Lösung zum Laden einer Playliste zu finden. Vielen Dank nochmal
Gruß Tom

Hallo zusammen,
bin auch mit Playlisten und Favoriten beschäftigt. Habe verstanden, wie ich die Playlisten einlesen kann. Das geht auch wunderbar! :smiley:
Allerdings bin ich aktuell mehr an den „Favoriten“ interessiert. Wieos? Ich habe Spotify. Wenn ich dort eine Liste zusammenstelle, kann ich diese als Favorit im Sonos hinterlegen. So bleibt die Liste immer schön aktuell wenn ich was hinzufüge oder lösche.
Jetzt müsste ich allerdings die Favoriten Liste in die Queue Adden können und nicht eine Playliste. Leider gibts bei den Favoriten keine ID (jedenfalls keine wie ich wüsste, wie nutzen).

Wenn ich eine Abfrage mache (http://www.ip-symcon.de/forum/threads/7676-PHP-Sonos-(Klasse-zum-Ansteuern-einzelner-Player)?p=194131#post194131) erhalte ich die Listen zurück.

z.B.
[2] => Array
(
[typ] => item
[res] => x-rincon-cpcontainer%3A10060a6cspotify%3Auser%3Aspaceworld02%3Aplaylist%3A14IoOnqZpML6rY6BSl1AUl
[duration] => leer
[albumArtURI] => http://192.168.1.44:1400http://spotify-static-resources.s3.amazonaws.com/img/playlist_default.png
[title] => Syncing
[artist] => leer
[id] => FV%3A2%2F5
[parentid] => FV%3A2
[album] => leer
)

Wie kann ich jetzt aber diese Liste einfugen? $sonos->AddToQueue = ??? :confused:
($sonos->AddtoQueue(„file:///jffs/settings/savedqueues.rsq#“.$PlaylistID):wink:

Gibt ja kein rsq.file??

Help needed :slight_smile:

THX!

Wenn ich mal ganz schüchtern nachfragen darf, hat keiner eine Idee oder ist das ganz einfach nicht möglich?

Gruss & Danke!

Ich habe seit neuestem das selbe Problem. Früher hat es mal funktioniert. Wurde durch ein Sonos Update eventuell etwas an den Befehlen geändert ? Wie kann ich das teile wieder pausieren bzw. Stoppen ? Stoppen reicht völlig aus. Diesen Befehl finde ich leider nicht in den Grundfunktionen vom „Ur“ Script

Kann ich nicht bestätigen. Folgendes Script mal eben schnell zusammengetippt:

<?

require("PHPsonos.inc.php");
$sonos = new PHPSonos("192.168.xxx.xxx"); //Sonos ZP IPAdresse
$sonos->pause();

?>

Funktioniert so, wie es soll.

Gruß,
Christoph