Moin,
möchte zwei Sonos Geräte zu einer Gruppe zusammenfassen, die Lösung mit BR_Sonos habe ich gesehen, habe BR_Sonos aber nicht im Einsatz und möchte das auch eigentlich nicht ändern, da ich das bis jetzt nicht brauche. Theoretisch sollte das doch auch so gehen:
<?
include(„PHPSonos.inc.php“);
$sonos = new PHPSonos(„192.168.1.52“); //Sonos ZP IPAdresse
$sonos->AddMember(‚B8E937B934F601400‘);
?>
Die IP oben ist die vom Player im Schlafzimmer, die Member ID unten ist hoffentlich richtig, im Arbeitsplatz wird mir für das Sonos im Bad uuid:RINCON_B8E937B934F601400 angezeigt, ist das hinter RINCON_ denn die Member ID und habe ich die so richtig eingetragen? Das ganze funkioniert nämlich natürlich nicht (Gegencheck mit der Sonos App)
das „RINCON_“ gehört noch mit zur Member-ID. Wenn also in AddMember das nicht hinzugefügt werden sollte, dann musst du es selber beim Aufruf mit hinschreiben…
$sonos = new PHPSonos(„192.168.1.52“); //Sonos ZP IPAdresse
$sonos->AddMember(‚RINCON_B8E937B934F601400‘);
?>
auch so tut sich leider nichts, unter Räume in der Sonos App werden die Räume weiterhin einzeln und nicht als Gruppe angezeigt, was habe ich vergessen bzw. was mache ich falsch?
hmm… was genau macht denn AddMember in deiner Version? Kannst du den Methodenschnipsel mal kurz posten?
Nicht, dass sich dort ein Fehler eingeschlichen hat…
Alternativ kannst du auch einfach direkt eine Datei auf dem Bad wiedergeben.
Als Dateiname musst du dann „x-rincon:RINCON_<ID_DES_SCHLAFZIMMERS>“ angeben. Das bildet dann die Gruppe…
Moin,
ohoh, ich ahne das ich da was falsch verstanden habe… Ich möchte einfach nur eine Gruppe mit Bad und Schlafzimmer aufmachen um im nächsten Schritt dann in beiden Räumen synchron das gleiche abzuspielen, also quasi das gleiche wie wenn ich in der Sonos App zwei Räume zu einer Gruppe hinzufüge, das was ich gepostet habe ist dazu der ganze Code, habe ich da was falsch aufgefasst?
Gruß
PS:
Hast du zu dem Datei wiedergeben mal einen kompletten Codeschnipsel, also was um das „x-rincon:RINCON_<ID_DES_SCHLAFZIMMERS>“ drumrum muss? Überblicke die ganzen Befehle gerade nicht um zu wissen wie ich nun eine Datei abspiele, AddToQueue, SetQueue oder bin ich ganz falsch?
mein Problem ist, dass ich diese Klasse hier gar nicht verwende
Also, kurz zum System der Gruppe:
Es gibt einen Master. Dessen Abspielen wird dann auf alle Slaves übertragen.
Es gibt einen oder mehrere Slaves, die das Wiedergeben, was der Master so abspielt.
In der Sonos-App machst du das darüber klar, welches Lied wo überall abgespielt werden soll, indem du Player einer bestehenden Gruppe (auch ein einzelner Player ist eine Gruppe für sich) hinzufügst.
In deinem Code sagst du einem neuen Slave, dass er den Master-Player sozusagen abspielen soll.
Im Original heißt der Befehl „SetAVTransportURI“; leider weiss ich jetzt nicht, ob und wie die PHPSonos-Klasse das umgesetzt hat…
Anschließend sagst du nur noch deinem Master-Player, was abgespielt werden soll. Deine Slaves folgen dann automatisch…
dafür gibt es einen eigenen Befehl „BecomeCoordinatorOfStandaloneGroup()“. Wenn du das auf dem Master aufrufst, wird die komplette Gruppe aufgelöst, wenn du es auf einem Slave aufrufst, wird der einzelne Player aus der Gruppe gelöst.
Du müsstest mal schauen, wie RemoveMember umgesetzt wurde. Dieser Befehl braucht nur eine 0 als Parameter, und wird auf dem rauszutrennenden Player ausgeführt…
Sonst poste für mich mal bitte den Inhalt von RemoveMember…
Moin,
in der PHPSonos Doku steht folgendes, oder was meinst du mit Inhalt von Remove Member?
Sring function PHPSonos::RemoveMember($MemberID) [line 682]
Function Parameters:
string $MemberID LocalUUID/ Rincon of Player to remove
Removes a Member from an existing ZoneGroup (a single player is also considered an existing group and the action will result in muting the player)
Device: urn:schemas-upnp-org:device:ZonePlayer:1
WSDL: http://play.er.i.p:1400/xml/zone_player.xml
Service: urn:upnp-org:serviceId:GroupManagement
Returns: for now the sendPacketAnswer
Link Wiki
TODO br 20110909 return $this->sendPacket($content); this Line was commented out; i dont understand why… changed this
ich meinte den echten Quelltext dazu
Also deine Datei PHPSonos.inc durchsuchen nach RemoveMember, und den kompletten Funktionsblock (bis zur nächsten Funktion im Quelltext) hier posten…
Wenn ich mich nicht vertan habe, dann könnte das so gehen… Wenn es nicht geht, dann kopiere dir als Vorlage vielleicht den Rahmen von „SetAVTransportURI“, und ersetze den Kern durch den Aufruf von „BecomeCoordinatorOfStandaloneGroup“. Oder vergleiche mal die Unterschiede…
Moin,
mit einfügen in die Sonos PHP Datei ging es nicht, habe den Dienst danach neu gestartet, oder muss beim Aufruf ein Parameter in die Klammer? Habe () gesetzt.
Hier alternativ der Quelltext zu SetAVTransportURI, ich blicke da leider nicht durch…
/**
Sets Av Transport URI
<b>NOTE:</b> Main SOAP method to set play URI - this is the plain SetAVTransportURI
ich kann das leider hier nicht testen oder ausführen… deswegen musst du da etwas rumprobieren.
Hier nochmal ein Versuch auf Basis von SetAVTransportURI:
public function BecomeCoordinatorOfStandaloneGroup()
{
$xml=’<s:Envelope xmlns:s=„http://schemas.xmlsoap.org/soap/envelope/“ s:encodingStyle=„http://schemas.xmlsoap.org/soap/encoding/“><s:Body><u:BecomeCoordinatorOfStandaloneGroup xmlns:u=„urn:schemas-upnp-org:service:AVTransport:1“><InstanceID>0</InstanceID></u:BecomeCoordinatorOfStandaloneGroup></s:Body></s:Envelope>’;
Einen Parameter braucht diese Funktion nicht. Sie wird ja auf der Instanz des Players ausgeführt, der entfernt werden soll…
Am Besten du kopierst sie hinter RemoveMember in die Klassendatei. Wenn sie funktioniert, solltest du noch den Kommentarblock über die Funktionsdefinition eintragen…
Und du musst bestimmt den Webserver, der diese Klasse verwendet, neustarten… aber ich kenne da den Rahmen nicht, und kann da gar nicht helfen…
Ich nehme einen Player wie folgt aus einer Gruppe heraus:
$room = $this->GetRoom($rooms[$i]);
$sonos[$i] = new PHPSonos($room->IPAddr);
$sonos[$i]->SetAVTransportURI("");
…ist nur ein Auszug aus meinem Code, aber ich mit dem Hinweis auf SetAVTransportURI("") solltest du weiterkommen Damit wird der jeweilige Player wieder ein „Einzelkämpfer“
Mein Name ist Marc und ich bin neu hier in dem Forum.
Da ich selbst Sonos Lautsprecher besitze und eine Hager Domovea Visualisierung, möchte ich nun gerne über diese meine Sonos Player steuern. Mittels PHP sollte dies ja funktionieren. Leider bin ich ein Anfänger was PHP angeht. Ich habe nun schon drei Tage lang versucht meine Player anzusteuern, aber ich bekomme es nicht hin. Bitte helft mir weiter. Gibts sowas wie eine Schritt für Schritt Anleitung? Über eure Hilfe wäre ich sehr dankbar.
Hab dich net so recht verstanden…hast du IPS im Einsatz? Wenn ja, dann nimm einfach die IPSLibrary mit IPSSonos. Ist wohl der einfachste Weg seine Sonos Player ins IPS einzubinden.
Wenn du kein IPS im Einsatz hast > hier im Forum finden sich immer wieder Scripte zum Ansteuern der Sonos Boxen, da kannst du dir raussuchen was du benötigst.
ich habe kein IPS in Benutzung. Ich würde meine Sonos Player gern mittels Script ansteuern. Aber ich komme einfach nicht weiter.
Kannst du mir das bitte Step für Step erklären. Muss ich die Sonos.php Dateien irgendwo hin speichern (Dateien als Link angehängt)?