Sonos Modul

Hallo,

anscheinen nicht. Wenn man etwas auf der anderen Box ausführt, gibt es SOAP Error…
Scheint das Konzept von Sonos zu sein.

Die braucht man für einiges.

[ul]
[li]Gruppensteuerung
[/li][li]Playlisten
[/li][li]…
[/li][/ul]

Wie gesagt, sollte automatisch gefüllt sein, es sei denn alle Boxen sind als „Griup Coordinator“ markiert.
Der Update erfolgt alle 600 Sekunden vom _updateGrouping scrtipt, sofern das Feld leer ist.
Aber anscheinend scheint das nicht immer zu funktinieren. Ich muss da noch mal schauen.

Gruß,
Thorsten

PS: Für die Antwort an Schablone brauche ich etwas längert, da ich jetzt einen Tagesworkshop habe…

Ohhh was habe ich da angerichtet. :o

Nabend,

nix. Ich brauche nur zum Tippen immer so lange, und hatte heute keine Zeit :smiley:

Doch, geht.

  1. In dem Parameter „Stations in Webfront“ nichts (auch nicht „<all>“) eintragen
  2. Den Haken „Include TuneIn favorites“ setzen
  3. Den Knopf „update Radiolist“ drücken

Also:
Bezüglich Gruppen hast Du 2 Möglichkeiten (gesteuert durch den Parameter „Force Grouping in Sonos“).

  1. Sonos gibt die Gruppen vor (Haken nicht gesetzt)
  2. IPS gibt die Gruppen vor (Haken gesetzt)

Die Gruppierung wird bei jedem Durchlauf des Scriptes „_updateGrouping“ aungepasst. Es läuft automatisch alle 600 Sekunden, da sich meiner Meinung nach die Gruppierung nicht so oft ändert.

Folgendes macht es:

  1. Wenn an der Instanz das Flag „Group Coordinator“ gesetzt ist, wird das Script sofort beendet, ohne etwas zu tun.
  2. Es wird sichergestellt, dass alle Sonos Instanzen die RINCON gesetzt haben.
  3. Es wird die Gruppierung ausgelesen und ermittelt an welcher Gruppe die betreoffene Instanz hängt
  4. Wenn „Force Grouping in Sonos“
    a) aus ist, wird die Gruppierung aus dem Sonos System in IPS übernommen
    b) an ist, wird die Konfiguration aus IPS in Sons System hergestellt

Der Usecase für b) ist, dass man eine mobile Box hat, die nach dem Stromverlust automatisch wieder in eine Gruppe aufgenommen wird.

Jetzt muss man noch wissen, dass eine Playlist die AV Transport URI auf „x-rincon-queue:<RINCON der Instanz>#0“ setzt.
Das setzen des SPDIF Eingangs auf „x-sonos-htastream:<RINCON der Instanz>:spdif“, des Analogen Eingangs auf „x-rincon-stream:<RINCON der Instanz>“ und das zuordnen zu einer Gruppe auf „x-rincon:<RINCON des Gruppen Koordinators>“.

Wenn Du jetzt also

  • die Box in einer Gruppe ist, auf der Radio läuft
  • und dann das „_updateGrouping“ Script mit „Force Grouping in Sonos“ läuft
  • und im IPS die Box nicht in der Gruppe ist
    dann wird die Box aus der Gruppe genommen.

Sollte jetzt klar sein, oder?

Der Player wird nicht abgestellt, sondern die „AV Transport URI“ wird geändert. Und zwar auf eine wo gerade nichts läuft. Kleiner aber feiner Unterschied.

Zwei Möglichkeiten:

  1. „Force Grouping in Sonos“ an, und dann im IPS die Gruppen so einstellen wie gewünscht. (Achtung, dann auch Quellenwechsel wie SetRadio, SetPlaylist, … nur auf der Group Koordinator instanz ausführen; Wenn man es auf einem Member einer Gruppe ausführt, wird dieser automatisch aus der Gruppe genommen.)
  2. „Force Grouping in Sonos“ aus, dann sollte an der Gruppierung (also der „AV Transport URI“) nichts geändert werden.

Sollte sich auch oben erklärt haben. Wenn nicht, frag doch noch mal nach.

Gruß,
Thorsten

Hallo Thorsten,

besten Dank für die ausführliche Antwort.

Das hat soweit funktioniert.

Ich habe immer noch nicht verstanden wozu der Haken „Group Coordinator“ ist. Asche auf mein Haupt! :o

Wenn der Player weder in IPS noch in Sonos in einer Gruppe hängt warum wird dann die „AV Transport URI“
auf eine wo gerade nichts läuft geändert?

Das ist jetzt mein Setup und der Player läuft seit 20 Minuten.

Besten Dank für deine Hilfe!!

Doch, geht.

  1. In dem Parameter „Stations in Webfront“ nichts (auch nicht „<all>“) eintragen
  2. Den Haken „Include TuneIn favorites“ setzen
  3. Den Knopf „update Radiolist“ drücken

das ist genau was ich gesucht habe.

Danke für die Antwort.

Hallo Thorsten,

ich bekomme das Modul einfach nicht zum laufen.

Ich schaue mir das jetzt mal in Ruhe an.

Ich melde mich wenn ich mehr weiß.

[EDIT]

Ich habe jetzt die Option „Group Coordinator“ aktiviert.
Somit rennt er nicht mehr durch das Script „_updateGrouping“.
Jetzt hab ich ruhe! Irgend was passt da nicht.
Egal ob ich „Force Grouping in Sonos“ anhake oder nicht sobald das Script „_updateGrouping“
durchlaufen wird schmeißt der mir den Player aus der aktiven Gruppe.

Wenn ich mehr weiß melde ich mich nochmal.

[EDIT/]

Oh, oh Kollege „Schnürschuh“ .

wenn ich sowas sehe:

$allSonosInstances = IPS_GetInstanceListByModuleID("{F6F3A773-F685-4FD2-805E-83FD99407EE8}");

Sollte ich erwähnen das ich erst einen von fünf Playern in IPS integriert habe!!!

Nicht das Du jetzt ins offene Messer läufst.

Hallo,

aus den letzten Schilderungen habe ich gelernt, dass das mit dem automatischen ermitteln der RINCON nicht so zuverlässig zu sein scheint.

Kannst Du bitte mal schauen, on in der Instanzconfig das Feld RINCON gefüllt ist?
Wenn ja sollte es so aussehen:
„RINCON_<MAC der Sonos BOX>1400“ also z.B „RINCON_000E58C3863C01400“.

Wenn dem nicht so ist, schreib mir doch mal nitte auf welcher Plattform (Windows, Linux, Symbox,…) dein IPS läuft.

Was auch helfen würde wäre ein output von
var_dump($rinconMapping);
in Zeile 43 (also vor „$ipAddress = IPS_GetProperty(IPS_GetParent($_IPS[„SELF“]), „IPAddress“);“)

Aber nicht vergessen es danach wieder zu entfernen.

Mir wird jetzt erst klar, wie viel doch mittlerweile von der RINCON abhängt.
Du findest die richtrige RINCON, wenn Du http://<sonos IP>:1400/xml/device_description.xml öffnest. Da gibt es die Zeile „<UDN>uuid:RINCON_000E58C3863C01400</UDN>“.

Es kann auch sein, wenn er anhand der RINCON keine passende Instanz findet, dass er dann quatsch macht…
Da könnte ich noch etwas einbaue, was das abfängt. Mal sehen.

Ich unterteile die Boxen in 2 Arten:

  • Gruppen Koordinator
  • Gruppen Member

Ich habe das mal so entschieden, weil es zu meiner Verwendung passt. Sonos selber macht das dynamisch und eigentlich sollte ich das mal ändern…

Anhand des Haken „Group Coordinator“ steure ich jetzt z.B. ob Gruppen funktionen erlaubt sind, oder nicht.
Auch blende ich dann Variablen ein und aus.

Und jetzt mal eine Frage aus Interesse:
Liest eigentlich jemand die Doku im GitHub?
Es interessiert mich nur ob ich die verbessern müsste. Ich hätte gehofft, dass die eine oder andere Frage sich dort erklärt hätte…

Gruß,
Thorsten

Hallo Thorsten,

In der Instanzconfiguration steht in dem Feld RINCON etwas.
Was da drin steht ist richtig!

Ich benutze die SymBox.

Das habe ich gemacht. In der Scriptausgabe steht das:

Notice: Undefined variable: sonosGroupCoordinatorID in /mnt/data/symcon/scripts/29158.ips.php on line 60

Notice: Undefined variable: sonosGroupCoordinatorID in /mnt/data/symcon/scripts/29158.ips.php on line 62

Notice: Undefined variable: sonosGroupCoordinatorID in /mnt/data/symcon/scripts/29158.ips.php on line 66

Warning: Objekt mit Ident Playlist wurde nicht gefunden in /mnt/symcon/scripts/__ipsmodule.inc.php on line 36

Warning: Root kann nicht geändert werden in /mnt/data/symcon/modules/SymconSonos/Sonos/module.php on line 534

Warning: Objekt mit Ident Sleeptimer wurde nicht gefunden in /mnt/symcon/scripts/__ipsmodule.inc.php on line 36

Warning: Root kann nicht geändert werden in /mnt/data/symcon/modules/SymconSonos/Sonos/module.php on line 536

Komischerweise macht er den var_dump erst nach mehrmaligem versuchen !?
Das ist mir Gestern schon aufgefallen. Zu Debugg-Zwecken habe ich an unterschiedlichen stellen
„echo“ Ausgaben eingefügt. Unter anderem auch in Zeile 2.
Diese Ausgabe wurde nur nach dem speichern des Scriptes gemacht. Sonst nicht!! :eek:

Hier nun das var_dump-Ergebnis:

array(1) {
[0]=>
array(2) {
[„ID“]=>
int(42175)
[„RINCON“]=>
string(24) „RINCON_000E585924B601400“
}
}

OK. Dh. Du verdonnerst einen festen Player als Koordinator zu fungieren.
Macht es dann Sinn den Haken bei „Group coordinator“ zu setzen wenn ich „Force grouping in Sonos“ nicht setze?

Jetzt schauen wir mal was wir noch alles brauchen und finden damit das Modul läuft.
Danach würde ich die Dokumentation nochmals überarbeiten.

Ich möchte nochmals darauf hinweisen das ich erst einen von fünf Playern in IPS integriert habe!!!
Das kann ja nicht das Problem sein oder?

Hi,

dann bin ich ja beruhigt.

Das erklärt es aber.
Wenn im array aller bekannten Instanzen der Gruppenkoordinator nicht gefunden wird (scheint bei Dir der Fall zu sein)
ist die InstanzID des Gruppenkoordinators nicht bekannt.
Und das versursacht das Problem.


    $sonos                    = new SonosAccess($ipAddress);
    $sonosGroupCoordinator    = explode(":",$sonos->GetZoneGroupAttributes()["CurrentZoneGroupID"])[0];

    foreach($rinconMapping as $key=>$value) {
        if($value["RINCON"] === $sonosGroupCoordinator ){
            $sonosGroupCoordinatorID = $value["ID"] ;
            break;
        }
    }

    // If groupCoordinator in Sonos = this instance --> set ID to 0 (does not belong to group)
    if ($sonosGroupCoordinatorID === IPS_GetParent($_IPS["SELF"]))  $sonosGroupCoordinatorID = 0;

    if ( $sonosGroupCoordinatorID !== $MemberOfGroup ){
        if($groupForcing){
            SNS_SetGroup(IPS_GetParent($_IPS["SELF"]),$MemberOfGroup);
            }else{
            SNS_SetGroup(IPS_GetParent($_IPS["SELF"]),$sonosGroupCoordinatorID);
        }
    }

  • Ich hole mir $sonosGroupCoordinator aus dem Sonos System --> da steht dann die RINCON drin.
  • Ich schaue in allen im IPS konfigurierten INstanzen nach, welche Instanz diese RINCON hat.
  • Wenn es die gleiche Instanz ist, auf der ich gerade arbeite löse ich die Gruppe auf (SetGroup(0))
  • Wenn es eine andere Instanz ist, füge ich die Instanz dem Gruppenkoordinator hinzu.(SetGroup(Instanz))

Ich sehe schon, ich habe unbewusst angenommen, dass alle Sonos Boxen im IPS vohanden sind.
Füge doch wenigstens mal den aktiven Grppenkoordinator hinzu, das sollte helfen.

Weiterhin nehme ich mal in mein Backlog auf diese Stelle robuster zu machen.
Wenn allerdings die Box in einer Gruppe ist, und dies im IPS nicht ersichtlich wird es zu Fehlern im „_updateStatus“ Script führen… Nur so als Hinweis.

Ja. Nur so kann man die Gruppierung modellieren. Auch kann man die Gruppen aus dem IPS raus ändern. Halt nicht automatisch, aber händisch.

Sieht doch so aus.

Gruß,
Thorsten

Hallo Thorsten,

Deine Doku ist natürlich nützlich. Für mich persönlich ist es umständlich wenn auf Englischer Sprache.
Aber da binn ich wohl der einzige, daher kann man es vernachläsigen :rolleyes:

Hallo Thorsten,

ich habe noch einen zweiten Player mit eingebunden.
Das Problem ist das gleiche. Ein Player (der nicht Group Coordinator ist)
wird beim ausführen des Scriptes _updateGrouping abgeschaltet.

Jetzt nochmal eine Verständnisfrage:

Nutzt Du bei Dir alle Player in einer Gruppe?
Ist diese Gruppe immer gleich?
Und alle Player die in keiner Gruppe sind, werden auch nicht gestartet/genutzt?

Hallo Thorsten,
ich finde es für meine Situation sehr hilfreich. Ich nutze immer die gleichen beiden player in einer Gruppe. Da ich nach dem hören immer den Strom trenne ist es für mich ein großer Vorteil, dass das Modul bei Strom an die hinterlegten Player automatisch gruppiert. Die Player im anderen Stockwerk habe ich nicht in IPS hinterlegt und steuere eigentlich zu 95% eh mit der SonosApp.

LG Bruno

Ich denke in ähnlicher Form werden das alle so nutzen.
Eine feste Gruppe. Keine einzelnen Player.

Mich wundert dass ich der erste bin der darüber stolpert.

Hallo,

Irgendwas ist da noch flasch bei Dir.
Bist Du sicher, dass Du den Gruppenkoordinator aufgenommen hast?
Die Schwachstelle ist halt, dass Der Gruppenkoordinator auch als Gruppenkoordinator geflagt ist.

Aber wenn das richtig konfiguriert ist, sollte es funktionieren.

Ordne doch mal die eine Box der anderen im WebFront zu (Member of Group), und schau ob und wie es sich im Sonos verändert…

Ja.
Ich habe eine Gruppe (Mit dem Koordinator Küche) in dem alle anderen Boxen (Flur, Wohnzimmer, Schlafzimmer) hängen. Eigentlich immer.

Lediglich wenn das Relais vom Fernseher angeht, wird die Box im Wohnzimmer automatisch rausgenommen ( SNS_SetGroup(<InstanzID>, 0); ) und beim ausschalten wieder reingenommen SNS_SetGroup(<InstanzID>, <KoordinatorInstanz>);.

Auch habe ich das „force Grouping“ an, da wir immer mal wieder eine Box mit auf die Terrasse nehmen…

Worüber?
Ja, das Fehlerhandling in dem Script _updateGrouping ist verbesserungswürdig, aber einen konkreten Fehler konnte ich noch nicht erkennen.

Gruß,
Thorsten

Hallo Thorsten

Wie nehme ich den einen Gruppenkoordinator auf?
Wie Flag ich den einen Gruppenkoordinator?

Ich kann es ja nicht richtig konfiguriert haben! Sonst würde es ja laufen. :wink:

So habe ich das nicht gemeint! Ich denke immer noch das mein Problem an meinem Rechner sitzt. :smiley:

Hi,

Da Du Dich ja weigerst ( :smiley: ) alle Boxen aufzunehmen, musst Du gerne als koordinator hättest.
Dann in der Instanz Konfiguration den Haken „Group Coordinator“ setzen.

Danach über WebFront auf dem Gruppen Member das Knöpfchen drücken, um die Box dem Koordinator hinzuzufügen.

Kurz Not so machen, wie Du es gerne hättest. Die Sonos App kann dann damit umgehen.

Gruß,
Thorsten

Hallo Thorsten,

wenn ich alle Player in IPS einbinden würde.
Bräuchte ich dann in keinem Player
„Goup coordinator“ und „force grouping in Sonos“ anhaken?

Edit:

Ich habe jetzt alle möglichen Varianten probiert.
Wenn ich bei allen Playern „Goup coordinator“ anhake
dann funktioniert es so wie ich es gebrauchen kann.
Alles andere funktioniert nicht.

Mach Dir keine weitere Mühe. Ich lass das jetzt so.

Dickes Danke für deine Nervenstärke!!

Hallo Schablone,
ein Player coordinator, ein, oder mehrere andere force grouping. Probier mal so. Zur Not 5Minuten (300sek) warten.

@ Thorsten, zu meinem Nutzerverhalten würde es passen den update skript timer auf 10 sek. zu setzen, siehst du da Nachteile?

LG
Bruno

Hi,

Ich habe immer „Angst“ vor Performance (Kommt aus meinem Berufsleben).
Aber ich könnte mit einen Parameter „GroupUpdateFreqency“ oder so vorstellen…

Steht jetzt auf meinem Backlog.

Gruß,
Thorsten