Seite 1 von 1

Sonos Gruppierung

Verfasst: 28. Feb 2020 11:11
von DennisSch
Hallo Zusammen,

ich habe gefühlt schon das halbe Internet durchsucht aber ich komm nicht drauf, kann auch sein das ich einfach auf der Leitung stehe. Sorry dafür und danke für die Hilfe.

Ich habe eine Sonos Play1, eine Sonos Play 3 und eine Symfonik in der Wohnung.
Für diverse Regeln möchte ich sie unterschiedlich gruppieren und einen Radiosender starten.

Meine Testregel sieht wie folgt aus:

Code: Alles auswählen

rule "Tester"
when
    Item vTest changed to ON
then
    Sonos3AddGroup.sendCommand("RINCON_000E58F2B65001400")
    Sonos1AddGroup.sendCommand("RINCON_000E58F2B65001400")
    Thread::sleep(5000)
    sendCommand(Sonos3Tuneinstationid, "24903")
end
Wenn ich die Regel ausführe sehe ich das die beiden Speaker erst mal gruppiert werden.
Sobald aber das Kommando für den Radiosender / Tuneinstation kommt - löst sich die Gruppe wieder auf.
Auch wenn ich den dritten Lautsprecher noch in die Gruppe mit aufnehmen fällt der Sonos1 wieder raus und die neue Gruppe ist dann Sonos3 + Symfonik.

Ich habe ebenfalls mit dem Coordinator div. Sachen ausprobiert konnte hier aber das verhalten nicht ändern. Hat mir hier jemand einen Tip?

Noch eine kurze Frage - das "AddGroup" Kommando befiehlt einem Lautsprecher einer Gruppe beizutreten (in meinem Beispiel der Gruppe: RINCON_000E58F2B65001400) oder gibt es vom System eine Gruppe und ich befehle dem Lautspreccher sich mit seinem Namen in der Gruppe zu melden (dann hätte ich in meiner Regel in der Gruppe einen doppelten Namen: RINCON_000E58F2B65001400).

Vielen Dank schonmal für Antworten.
Dennis

Re: Sonos Gruppierung

Verfasst: 28. Feb 2020 11:24
von Darkwin101
Hier hast du mal eine Regel zum Gruppieren die von udo1toni geschrieben wurde funktioniert wunderbar
Ich mache es immer so ich starte die Musik auf dem Hauptplayer und Gruppiere da entsprechende Lautsprecher dazu

Code: Alles auswählen

rule "Gruppiere Partymodus ohne Feierabendmodus"
   when
       Item Party changed from OFF to ON                          // Trigger
   then
       if((Feierabend.state != OFF && Party.state != OFF) || tParty !== null) return;     // Rule abbrechen, falls Timer bereits läuft oder Feierabend nicht OFF
         iParty = 0                                                 // Zähler auf null
         tParty = createTimer(now.plusMillis(100), [|               // Timer definieren
         iParty += 1                                            // Zähler hochzählen (entspricht iParty = iParty + 1
            switch(iParty){                                        // Fallunterscheidung nach Zähler
               case 1: {                                          // 1. Schritt
                   Wake_Move.sendCommand(ON) 
                   SonosBuero_Control.sendCommand("PLAY")
                  }
               case 2: SonosBuero_Add.sendCommand("Bad")          // 2. Schritt...
               case 3: SonosBuero_Add.sendCommand("Arbeitsplatte")
               case 4: SonosBuero_Add.sendCommand("Kueche")
               case 5: SonosBuero_Add.sendCommand("TV")
               case 6: SonosBuero_Add.sendCommand("Hoerspiel")
               case 7: SonosBuero_Add.sendCommand("Buero_2")
               case 8: SonosBuero_Add.sendCommand("Flur")
            }
            switch(iParty) {                                        // 2. Fallunterscheidung nach Zähler
               case 1 : tParty.reschedule(now.plusSeconds(1))      // 1. Wartezeit kürzer
               case 8 : tParty = null                              // beim letzten Durchgang Timervariable deinitialisieren
               default: tParty.reschedule(now.plusSeconds(10))     // ansonsten lange Wartezeit
            }
         ])
end
Du sagst immer dem Master welchen anderen Lautsprecher er Aufnehmen soll.

Re: Sonos Gruppierung

Verfasst: 28. Feb 2020 11:33
von DennisSch
Danke dir ich versuche es nochmal ich kenne den Thread (für alle: viewtopic.php?f=15&t=3032&p=15212&hilit=sonos#p15212 ) . Melde mich nochmal ;)

Re: Sonos Gruppierung

Verfasst: 28. Feb 2020 11:36
von Darkwin101
In deinem Fall Passiert folgendes Sonos3 wird zum Master und nimmt Rincon auf dann sagst du Sonos 1 er soll Rincon nehmen also hast du am ende Sonos3 alleine und Sonos1 und Rincon gruppiert.
Es ist Ratsam zwischen dem Adden zu einer Gruppe immer 10sec. zu warten bis ein neuer ADD Befehl gesetzt wird meine Erfahrungen haben gezeigt das Zeiten kleiner 10sec. dazu führt das mal ein Lautsprecher vergessen wird.
Ich würde deine regel so schreiben

Code: Alles auswählen

rule "Tester"
when
    Item vTest changed to ON
then
    sendCommand(Sonos3Tuneinstationid, "24903")
    Thread::sleep(500)
    Sonos3AddGroup.sendCommand("Symfonisk")
    Thread::sleep(10000)
    Sonos3AddGroup.sendCommand("Sonos1")
    end
    
Wobei Thread::Sleep zu vermeiden wäre und das ganze über Timer laufen sollte aber so auf die schnelle

Re: Sonos Gruppierung

Verfasst: 28. Feb 2020 11:52
von DennisSch
Hi Darkwin,

vielen Dank ich habe deine erste Regel kurz angepasst und siehe da es funktioniert und ich glaube ich habe es verstanden.

Code: Alles auswählen

var Timer tParty = null                                        // Timervariable
var Integer iParty = 0                                         // Schrittzähler

rule "Gruppiere Partymodus ohne Feierabendmodus"
   when
       Item vTest changed from OFF to ON                          // Trigger
   then
    if(tParty !== null) return;     // Rule abbrechen, falls Timer bereits läuft oder Feierabend nicht OFF
         iParty = 0                                                 // Zähler auf null
         tParty = createTimer(now.plusMillis(100), [|               // Timer definieren
         iParty += 1                                            // Zähler hochzählen (entspricht iParty = iParty + 1
            switch(iParty){                                        // Fallunterscheidung nach Zähler
               case 1: {                                          // 1. Schritt
                   sendCommand(Sonos3Tuneinstationid, "24903") 
                   Sonos3Control.sendCommand("PLAY")
                  }
               case 2: Sonos3AddGroup.sendCommand("RINCON_347E5C43D21C01400")          // 2. Schritt...
               case 3: Sonos3AddGroup.sendCommand("RINCON_347E5C3B9FFA01400")
            }
            switch(iParty) {                                        // 2. Fallunterscheidung nach Zähler
               case 1 : tParty.reschedule(now.plusSeconds(1))      // 1. Wartezeit kürzer
               case 3 : tParty = null                              // beim letzten Durchgang Timervariable deinitialisieren
               default: tParty.reschedule(now.plusSeconds(10))     // ansonsten lange Wartezeit
            }
         ])
end
Mein Denkfehler war das ich mit dem Add Befehl jedem Lautsprecher sagen wollte der Gruppe beizutreten es ist aber anderst gemeint. Mit dem Add Befehl sag ich dem Hauptlautsprecher er soll andere Lautsprecher mit aufnehmen! Korrekt?

Ich bin mir noch nicht ganz sicher warum ich die Lautsprecher mit der RICON_ "Adresse" ansprechen muss aber ich denke das liegt an meinen Things bzw. Items.

Vielen Dank das hat mir sehr geholfen.
Dennis

Sonos Gruppierung

Verfasst: 28. Feb 2020 12:05
von Darkwin101
Ja genau du sagst dem Hauptlautsprecher welche er aufnehmen soll. Hauptlautsprecher wird immer der bei dem du anfängst.
Die Namen werden in der things Datei festgelegt


Gesendet von iPhone mit Tapatalk