Da hast du dir ja richtig viel Arbeit gemacht. Jedoch ist es als Laie wie ich einer bin doppelt schwer, wenn man der englischen Sprache nicht mächtig ist.
Naja, ich habe bisher für ca. die Hälfte der Klasse entsprechende erste Kommentare (bei weitem noch nicht vollständig) in den Quellcode gebaut um daraus automatisch so ein PDF erzeugen zu können. Vieles macht phpdoc automatisch, ich musste mich eher mal einarbeiten und verstehen wie das funktioniert.
An einigen Stellen sind auch bereits Links zu Foren oder Wikiartikeln eingebaut, welche ja wenn man vom Forum spricht immer deutsch oder beim Wiki deutsch und english sind.
Ich versuche jetzt noch einmal über die restliche PHPSonos drüberzugehen und vielleicht noch ein zweites mal mit ergänzenden Informationen und dann den Quellcode mit den Kommentaren und ein PDF zu veröffentlichen. Vielleicht finden sich dann noch weitere User (?) die das ergänzen und die Dokumentation wird automatisch immer besser und besser…
Hab hier mal getestet aber irgendwie bringt mir
SetAvtransportUri immer einen Fehler wenn ich die var[$radio][„res“] einsetzte
Hat hier schon jemand eine Lösung ?
Hi Bruno,
falls Du das Problem mit einer URL „x-sonosapi-stream…“ hast (so sehen die über die interne Radiofunktion angelegten aus in „res“), kann ich das Prob. nachvollziehen.
// klappt nicht
$sonos->SetRadio($browselist[0]['res']);
// eigentlich gleich - klappt
$sonos->SetRadio("x-sonosapi-stream:s90495?sid=254&flags=32");
Ich denke es ist ein encoding Problem, aber ich konnte das Problem leider bisher (1,5 h :mad:) noch … nicht beheben.
Grüße, Benjamin
Hallo Benjamin,
das ist ja interessant. Habe natürlich sofort versucht das bei mir umzusetzen. Aber wie gewöhnlich klappt das bei mir nicht richtig, da ich nicht genau weis, wo diese Zeilen hin gehören. Habe ein neues Script erstellt:
<?
if($IPS_SENDER == "WebFront")
{
SetValue($IPS_VARIABLE, $IPS_VALUE);
require ("functions.inc.php"); // use PHPSonos.inc.php here
// Player has no configured input
$sonos = new PHPSonos("192.168.2.134"); //Sonos ZP IPAdresse
// Play
$sonos->SetRadio(urldecode($browselist[0]['res']));
$sonos->Play();
}
?>
Dieses Script habe ich der Variablen „Radio“ als Actionscript zugeordnet und bekomme im Webfront bei Klick auf eine Radiostation eine Fehlermeldung.
Hallo Bruno,
hatte ja vorher schon das von dir genannte Script ausgeführt. Dadurch wurde mir ja die Favoritenliste in die Variable geschrieben. Damit im WF bei Klick auf einen Favoriten dieser auch abgespielt wird, habe ich dieses von mir gepostete Script erstellt und als Actionscript für die Variable „Radio“ hinterlegt. Das produziert jedoch die von mir gezeigte Fehlermeldung. In der Fehlermeldung wird das Script 32305.ips.php (das von mir oben gepostete Script) bei line 12 beanstandet. Das ist folgende Zeile: $sonos->SetRadio(urldecode($browselist[0][‚res‘]));
Hallo Ihr Zwei,
ich habe das für mich (in Verbindung mit br_sonos) ein wenig aufgebohrt.
Das von mir zuerst gepostet Skript müsst Ihr nur ausführen, wenn sich die Radiosender mal ändern oder z.B. per Timer nur täglich.
Das beigefügte Skript (prinzipiell ist es br_sonos_update.php, aber etwas zusammengedampft) hängt Ihr über „bei Variablenaktualisierung“ an die Radio Variablen und es schaltet dann automatisch den richtigen Zoneplayer (falls die Zonen verknüpft sind den Coordinator oder hart den Aktuellen - ist konfigurierbar).
Es reicht ürbigens eine DataID für alle Zonen, welche dann im Skript zu hinterlegen ist. Die Auswahlvariable muss aber pro Kategorie/ Zone vorhanden sein (muss jedoch nicht im Skript angepasst werden; ein Skript für alle Zonen).
Hallo Benjamin, Bruno,
das hier ist ja ganz großes Kino!! Funktioniert jetzt tadellos. Hat zwar etwas gedauert, bis ich gerafft habe, dass die Variable $RadioFavSelID direkt ins Hauptverzeichnis der Zonen rein muss. Sonst weiß das Script ja gar nicht, welcher Player angesprochen werden muss. Nochmals vielen Dank; weiter so.
Besten Dank für deine Antwort. Sagen wir, meine Wohnzimmer S5 ist Slave vom TV-Zimmer. Wenn ich nun auf dem Wohnzimmer bin, habe ich eine Chance, wie ich die IP-Adresse vom TV-Zimmer erhalten kann?
hm, ich bin mir sicher ich hab deine Frage nicht verstanden, aber ich antworte trotzdem mal:
Die Sonos-Klasse in diesem Thread setzt voraus das du die IP der anzusteuernden SONOS in das Script einträgst. Man kann das natürlich auch in eine Variable auslagern.
Also liest man die IP nicht irgendwo aus (zumindest nicht im Kontext dieses Threads) sondern man weiß diese vorher und trägt diese ins Script/Variable ein.
Vielleicht beschreibst Du einfach mal was du erreichen möchtest.
Ja, das ist mir bewusst. Ich möchte von einem Sonos-Gerät (dessen IP ich eingetragen habe, wie von dir beschrieben) wissen, sofern gesetzt, wer der Master ist.
Wenn ich dem Gang die Küche zuweise, ist m.W. der Gang der Master der Küche.
Ich habe mir eine iPhone-Webapp gebaut und gehe nun auf die Küche - erhalte dort aber keine Daten, da nicht Master. Nun möchte ich die IP vom Gang „erhalten“ (oder wenigstens der Name oder sonstwas - ich kann die Zuordnung IP-Unique ID ja selber machen). Damit möchte ich dann auf der Detailseite der Küche auf den Gang weiterleiten.
Also, idealerweise machst Du einen Subscribe und erhälst die Informationen dann als Event zurück (sobald sich die Zonen Topologie ändert). Die Subscribe Funktion ist in PHPSonos bereits implementiert - die Auswertung mittels Registervariablen derzeit in IPS noch nicht (wobei ich ein wenig Beispielcode habe). Funktionierenden Beispielcode zum Umgang mit der Antwort ohne IPS findest Du in diesem Thread (ein Artikel von talun; find eich just nicht auf die schnelle).
Ansonsten ist es auch möglich an Hand von Indizien in den Rückgabewerten von vielen Methoden auf den Master (richtig: Coordinator) einer Zone zu schließen. z.B. spielt der „Slave“ die „Rincon ID“ des Coordinators (Renderers) ab, wenn Du GetPositionInfo abfragst. So mache ich es derzeit noch im Paket „br_sonos“ (Thread und Wikiartikel ist ebenfalls hier zu finden).
Beispiel (Ausschnitt):
$posInfo = $sonos->GetPositionInfo(); // gibt ein Array mit den Informationen zum aktuellen Titel zurück (Keys: position, duration, artist, title, album, albumArtist, albumTrackNumber)
if (strstr($posInfo["trackURI"],"x-rincon:")){ // Detection Zone Master or not
// TrackUri to ZoneplayerIP
preg_match("/^x-rincon:(?P<Rincon>\w+)/i", $posInfo["trackURI"], $match); //Got real RIncon
// print_r($match);
//echo $arrzoneplayers[$match['Rincon']]['IPAddress']."!!!!!!!!!!!!"; // DEBUG
$curCoord=$match['Rincon'];
Von der ID auf die IP kannst Du ja lt. Deinem Post selbst schließen - dann sollte Dir das o.g. erstmal weiter helfen.
Super Benjamin, vielen Dank! Ich habe mir mithilfe eines assoziativen Arrays weitergeholfen.
Noch eine Frage: Wie kann ich in Sonos eine definierte Playliste abspielen? Nehmen wir an, ich habe eine Liste „Background Sounds“ - besteht die Möglichkeit, diese auf einer Boxe abzuspielen? Und wenn ja, kann ich dieser dann noch Slaves anhängen?