Sonos Modul

Hallo,

also:

  1. SetAVTransportURI spricht dafü, dass gerade eine Quelle eingestellt werden soll.
  2. x-sonos-vli sieht irgendwie nach Spotify aus, was aus der Spotify App an die Box geschickt wurde.

Hier meine Vermutung, was passiert:
Auf der Box ist noch hinterlegt, dass zuletzt Soptify abgespielt wurde. Aber die wiedergabe ist (evtl. schon länger) pausiert.
Jetzt wird mittels PlayFiles (oder so) einwas abgespielt und danach versucht die letzte Wiedergabe wieder einzustellen.
Und das geht nicht, weil es Spotify ist.

Andere Entwickler scheinen aber das Gleiche Problem zu haben :wink:

Liege ich richtig?

Gruß,
Thorsten

Nein invisible ist false.
siehe unten

was auffällig ist der Unterschied Sonos Discovery (trotz aktualisieren) und dem Ergebis vom Script:


Habe nun die IP Nummern im Discovery manuell angepasst und gespeichert. Bei mir waren die Boxen nicht mit fixer IP hinterlegt im DHCP server. Der hatte ein Update mit Neustart - das wird es gewesen sein. Habe jetzt beide Boxen als fix eingetragen.
Seither keine neuen Fehler! Danke - das Script hat den Fehler aufgedeckt.

Allerdings sollte der Discovermode die IP Nummern richtigstellen - oder?

array(3) {
[„RINCON_000E58B693B801400“]=>
array(5) {
[„Name“]=>
string(10) „Wohnzimmer“
[„Model“]=>
string(7) „Playbar“
[„RINCON“]=>
string(24) „RINCON_000E58B693B801400“
[„IPAddress“]=>
string(12) „192.168.2.75“
[„Invivble“]=>
bool(false)
}
[„RINCON_347E5C325F0201400“]=>
array(5) {
[„Name“]=>
string(3) „Bad“
[„Model“]=>
string(9) „Bookshelf“
[„RINCON“]=>
string(24) „RINCON_347E5C325F0201400“
[„IPAddress“]=>
string(13) „192.168.2.141“
[„Invivble“]=>
bool(false)
}
[„RINCON_347E5C30146601400“]=>
array(5) {
[„Name“]=>
string(15) „Schlafzimmer EG“
[„Model“]=>
string(9) „Bookshelf“
[„RINCON“]=>
string(24) „RINCON_347E5C30146601400“
[„IPAddress“]=>
string(13) „192.168.2.143“
[„Invivble“]=>
bool(false)
}
}

Hi Thorsten,

danke für deine Rückmeldung. Deine Theorie könnte etwas damit zu tun haben, aber wir steuern Sonos nicht per Spotify App. Wir hören hier meistens Radio über Tunein (per SNS_SetRadio) und gelegentlich Spotify per Sonos App und manchmal über Alexa getriggert. Das Rückspringen auf die letzte Wiedergabe funktioniert hier bei Ansage über PlayFiles problemlos.

Ich glaube, es tritt auf, wenn ich morgens eine Szene aktiviere, die per Ansage über Sonos quittiert wird und anschließend der Radio-Stream starten soll. Ich denke, er will dann nach der Ansage erstmal wieder zurückspringen, obwohl der alte Transport ja schon lange inaktiv ist bzw. pausiert/gestoppt ist (beides probiert) und dabei bricht er mit dem Fehler ab.

Ich versuche mal, die URI abends zu leeren.

Grüße
Sven

Hallo Thorsten,

ich kann den Fehler hier absolut bestätigen:
Sobald ich über die SpotifyApp auf die Sonos Lautsprecher streame und dann mit SNS_PlayFiles einen Klingelton ausgebe, kommt es zu dem oben genannten Fehler, wie von dir vermutet.
Auch wenn man die Wiedergabe nicht wieder starten kann, weil das API das möglicherweise nicht hergibt: Könntest du in deinem Modul den Fehler abfangen, damit eigene Skripte sauber durchlaufen?
Die werfen einen Fehler, wenn Spotify gestartet ist und man SNS_PlayFiles benutzt. Ich habe schon die @SNS_PlayFiles() Syntax benutzt, aber das Skript bricht an der Stelle ab, nachfolgende Befehle werden nicht mehr ausgeführt.

Gruß,
Georg

Hallo Zusammen,
ich stell mich bissle doof an - wie kann ich denn eine Gruppe erstellen von Lautsprechern?

SNS_SetGroup(int $InstanceID, int $groupCoordinator)
Fügt die Instanz zu einer Gruppe hinzu oder entfernt es aus einer Gruppe.
Wenn die InstanzID eines Gruppenkoordinators mitgegeben wird, wird die instanz dieser Gruppe hinzugefügt.
Wenn 0 mitgegeben wird, wird die Instanz aus allen Gruppen entfernt.

Ich bekomm das net hin - ich mach was falsch!?! Ich will einfach Box 1 und Box 2 und Box 3 in einer gruppe und eine davon soll auch der Coordinator sein… :frowning:

der Befehl ist schon richtig.
einfach die Instanz-ID der entsprechenden Boxen eintragen.
Sonst poste mal deinen Versuch, damit man dir besser helfen kann.

Gruß, Peter

Hallo,

Du hast 3 Boxen:
Box1: Object ID 12345
Box2: Object ID 23456
Box3: Object ID 34567

Beispiele:
Box1 aus allen Gruppen nehmen (-> somit ist Box1 quasi eine eigene Gruppe mit sich selbst als Koordinator):
SNS_SetGroup(12345, 0);

Box3 dem Koordinator Box1 zuordnen:
SNS_SetGroup(34567, 12345);

Das sollte reichen, oder?

Gruß,
Thorsten

Hallo Thorsten,

ich bekomme bei einer Durchsage immer mal wieder folgende Fehlermeldung. Die Durchsage wird auch in diesem Fall nicht ausgegeben:

16.03.2022, 08:40:02 | FlowHandler          | Kann Daten nicht zur Instanz #25147 weiterleiten: 
Fatal error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 402 (UNKNOWN) in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\libs\sonosAccess.php:801
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\libs\sonosAccess.php(558): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'SetAVTransportU...', Array)
#1 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php(604): SonosAccess->SetAVTransportURI('x-sonos-vli:RIN...', '<DIDL-Lite xmln...')
#2 C:\Windows\System32\-(3): SonosPlayer->ReceiveData('{"DataID":"{36E...')
#3 {main}
  thrown in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\libs\sonosAccess.php on line 801

Ich habe das etwas beobachtet, die Box scheint, wenn der Fehler entsteht, erreichbar zu sein.

Der Aufruf erfolgt so:

SNS_PlayFilesGrouping(24536 , json_encode( array( 25147 => array( "volume" => 55),
                                                  11982 => array( "volume" => 35) ) ), json_encode(Array( "http://192.168.100.3/durchsage/ansage.mp3") ), 55);

Hast Du da eine Idee?

LG Tom

Hallo,

ja.
Das „x-sonos-vli“ ist verräterisch.
Schau Dir mal meine Antwort an crandler vom 31.1. an (Sonos Modul - #1746 von crandler).

Es scheint sich um eine Wiedergabe zu handelt, die von der Spotify App aus gestartet wurde.
Solche kann ich nicht resumen.

Wenn ich Zeit finde baue ich ein, dass dann einfach nichts gestartet wird. Ob das besser ist habe ich keine Ahnung, aber dann gibt es zumindest keine Exception…

Gruß,
Thorsten

Das kann durchaus sein. Muss ich beobachten. Das würde jedoch erklären, warum die Wiedergabe mal geht und mal nicht.

Das wäre dann leider nur Kosmetik. Lässt sich da nichts machen um den Fehler zu umgehen?

LG Tom

Hi Thorsten,
das klappt irgendwie nicht…

Unser Code:

//SNS_BecomeCoordinator(54958);

SNS_SetGroup(54958, 0);
SNS_SetGroup(27631, 54958);
SNS_SetGroup(11386, 54958);
SNS_SetGroup(19634, 54958);

Die Fehlermeldung dazu:

Fatal error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 501 (UNKNOWN) in C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php:801
Stack trace:
#0 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php(558): SonosAccess->processSoapCall(’/MediaRenderer/…’, ‚urn:schemas-upn…‘, ‚SetAVTransportU…‘, Array)
#1 C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\SonosPlayer\module.php(1854): SonosAccess->SetAVTransportURI(‚x-rincon:RINCON…‘)
#2 C:\ProgramData\Symcon\scripts__generated.inc.php(1407): SonosPlayer->SetGroup(54958)
#3 C:\ProgramData\Symcon\scripts\53063.ips.php(6): SNS_SetGroup(27631, 54958)
#4 {main}
thrown in C:\ProgramData\Symcon\modules.store\de.kugelberg.sonos\libs\sonosAccess.php on line 801

Hast Du eine Idee dazu?
LG Marcus.

das führt bei mir auch zum Fehler.
Gruß, Peter

zu welchem denn? Ich hoffe Du hast nicht „12345“ als Object ID verwendet.

Hallo,

Also, der Fehler kommt bei SNS_SetGroup(27631, 54958).
Kann es sein, dass diese Box gerade ein Koordinator einer anderen Gruppe ist?

Gruß,
Thorsten

Hi Thorsten,
ja das kann gut sein dass sie gerade einer anderen Gruppe als Koordinator zugeiwesen ist. Deshalb hatte ich auch mal testweise die Zeile BecomeCoordinator (siehe oben) vorne ran gestellt, um sicherzu gehen dass es nicht daran liegt. Aber die Fehlermeldung bleibt die selbe.

Hallo Thorsten,
habe natürlich nicht die „12345“ genommen :slightly_smiling_face:

Fehlermeldung ist

Fatal error: Uncaught Exception: Error during Soap Call: UPnPError s:Client 501 (UNKNOWN) in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\libs\sonosAccess.php:801
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\libs\sonosAccess.php(558): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'SetAVTransportU...', Array)
#1 C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\SonosPlayer\module.php(1854): SonosAccess->SetAVTransportURI('x-rincon:RINCON...')
#2 C:\ProgramData\Symcon\scripts\__generated.inc.php(523): SonosPlayer->SetGroup(38920)
#3 C:\ProgramData\Symcon\scripts\38043.ips.php(31): SNS_SetGroup(38260, 38920)
#4 {main}
  thrown in C:\ProgramData\Symcon\modules\.store\de.kugelberg.sonos\libs\sonosAccess.php on line 801

Meine Gruppierungs-Sequenz ist:

case 1:				// Party-Modus = alle Lautsprecher an
		SNS_SetGroup($group_id, 0);		// gibt Fehler
		SNS_SetGroup($buero_id,$group_id);
		SNS_SetGroup($kueche_id,$group_id);
		SNS_SetGroup($sz_id,$group_id);
		SNS_SetGroup($bad_id,$group_id);
		SNS_SetGroup($gabi_id,$group_id);
		SNS_SetGroup($wk_id,$group_id);
		SNS_SetDefaultGroupVolume($group_id);
		// SONOS starten
		SNS_Play($group_id);
	break;

Den ersten Befehl SNS_SetGroup($group_id, 0); habe ich erst neu hinzugefügt.

Gruß, Peter

Hallo,

diese Funktion macht die angegebene Instanz zum Koordinator der Gruppe in der die Box gerade ist.
Wenn aber 11386 in der Gruppe von 27631 ist, hilft ein SNS_BecomeCoordinator(54958); nicht.

Wenn Du sichergehen willst, dass keine Box in einer Gruppe ist könntest Du folgendes für alle Player machen:
Wenn SNS_IsCoordinator() false liefert, ein SNS_SetGroup(, 0) ausführen.

Danach solltest Du keine Player in Gruppen haben.

Gruß,
Thorsten

Hallo,

wenn Du Dir mal den Callstack anschaust, siehst Du da bei „#3“: SNS_SetGroup(38260, 38920)

Kann es sein, dass 38260 noch andere Boxen als Member hat?

Gruß,
Thorsten

nein, eigentlich nicht.
Aber das ist eine Box, bei der schonmal die WLAN-Verbindung abbricht.
Ich habe den Aufruf nochmal gestartet als ich mir sicher war, dass die BOX erreichbar ist.
Der Fehler trat nicht mehr auf!
War wohl eine Verkettung verschiedener Ursachen.
Sorry, für die Verwirrung.

Gruß, Peter

Hat sich erledigt: Ich hatte Player in verschiedenen Subnetzen. Nun habe ich pro Subnetz einen eigenen Splitter angelegt und die dazugehörigen Player damit verbunden. Jetzt geht es wieder wie gewünscht.

Hallo Thorsten,

ich habe derzeit einen komischen Effekt, wo ich leider nicht sagen kann, woher der kommt. Hatte ich jedenfalls bisher nicht.

Sobald ich einen Player mittels der App (Desktop oder auch Smartphone) in eine Gruppe aufnehme, wird der Status des Players der hinzugefügt wird als auf „Wiedergabe“ angezeigt. Der Master, der den zweiten Player aufnimmt, steht auf „Stop“. Der aufgenommene Player spielt auch nichts. Trenne ich die Gruppe, ist der Player wieder auf Stop.

Woher könnte das kommen?

Tom