Autor Thema: Sonos Gruppen trennen  (Gelesen 5025 mal)

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1137
Sonos Gruppen trennen
« am: 29 Juli 2015, 11:29:57 »
Hallo,
ich möchte zu einer bestimmten Uhrzeit zwei Sonos-Player vom Rest der Gruppe abtrennen, aber nur, wenn Sie auc verbunden sind. Dieser Code funktioniert zwar, scheint mir aber zu umständlich. Hat jemand eine Idee, wie man das vereinfachen könnte?

*09:59
{
  if (sameGroup('OG.kz.SON.ZP_S1_L','OG.sz.SON.ZP_S1_L'))
  {
   fhem "set Sonos Groups [OG.sz.SON.ZP_S1_L, OG.bz.SON.ZP_S1_L] [OG.kz.SON.ZP_S1_L]"
  }
  if (sameGroup('DG.kz.SON.ZP_S1','OG.sz.SON.ZP_S1_L'))
  {
   fhem "set Sonos Groups [OG.sz.SON.ZP_S1_L, OG.bz.SON.ZP_S1_L] [DG.kz.SON.ZP_S1]"
  }
 }

Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Sonos: 5 x Play1, 2 x Play 3, ConnectAmp, SUB | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R | AVM: FB7390, Repeater 300E, 2 x MT-F

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
Antw:Sonos Gruppen trennen
« Antwort #1 am: 30 Juli 2015, 07:37:41 »
Habe mir mal verschiedene Sonos-Helper-Functions für die myUtils gebastelt:

z.B. zum ungroupieren:
### Sonos Ungroup/RemoveFromGroup function ###
# 1st parameter must be the sonos-player
# (optional without restore Volume) To only remove from group set 2nd parameter to any true value, else to 0 (false)
# (optional) To restore Volume to level before grouping set 3rd parameter to any true value
sub sonosUngroup($@) {
my ($SONOS,@param) = @_;
my @groups = split('\], ', CommandGet(undef, 'SONOS groups'));
my (@devices,$master,$member);
for (@groups) {
s/[\[\]]//g;
@devices = split(', ');
if(scalar(@devices) > 1) {
if (grep {$_ eq $SONOS} @devices) {
$master = shift(@devices) ;
while($member=shift(@devices)) {
                    if(!$param[0] || $member eq $SONOS) {
                        CommandSet(undef, "$master RemoveMember $member");
if($param[1]) { CommandSet(undef, "$member VolumeRestore"); }
                    } elsif($param[0] && $master eq $SONOS) {
                        CommandSet(undef, "$master RemoveMember $master");
                        last;
                    }
}
last;
}
}
}
}

Damit sollte das so gehen:
{ sonosUngroup('OG.kz.SON.ZP_S1_L',1); sonosUngroup('OG.sz.SON.ZP_S1_L',1) }damit werden diese 2 Player von Ihrer Gruppe abgetrennt aber die Gruppe bleibt noch bestehen. Evtl. musst du halt zuvor noch prüfen ob sie sich in einer bestimmten oder der gleichen Gruppe befinden.

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1137
Antw:Sonos Gruppen trennen
« Antwort #2 am: 01 August 2015, 08:05:17 »
Hallo rapster,
Das ist ja genial! Probiere ich direkt aus, wenn ich wieder zu Hause bin.....
Vielen Dank dafür!

 Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Sonos: 5 x Play1, 2 x Play 3, ConnectAmp, SUB | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R | AVM: FB7390, Repeater 300E, 2 x MT-F

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2028
Antw:Sonos Gruppen trennen
« Antwort #3 am: 01 August 2015, 08:22:05 »
Hallo Spartacus,

eigentlich brauchst du doch nur den Sonos-Gruppierer aufrufen, und eben diese beiden Player nicht gruppieren.
Also sowas wie
set Sonos Groups [OG.kz.SON.ZP_S1_L], [OG.sz.SON.ZP_S1_L]

Das macht eigentlich auch keine Probleme, wenn die Player bereits alleine sind.
Klappt das bei dir nicht wie erwartet?

Grüße
Reinerlein

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1137
Antw:Sonos Gruppen trennen
« Antwort #4 am: 17 August 2015, 15:06:30 »
Hallo Reinerlein,
danke für den Tipp. Ich habe das heute mal ausprobiert. Das funktioniert ganz gut. Allerdings wollte ich die Routine nur durchlaufen, wenn die Player Bestandteil der Gruppe sind.
*04:00
set Sonos Groups [OG.kz.SON.ZP_S1_L], [DG.kz.SON.ZP_S1], [OG.br.SON.ZP_S3]

wenn ich das so mache, werden hier jeden Tag um 0400 die Player abgetrennt. Es scheint zumindest so, als habe das keine Auswirkungen auf die  Player, wenn die Gruppe nicht besteht.

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Sonos: 5 x Play1, 2 x Play 3, ConnectAmp, SUB | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R | AVM: FB7390, Repeater 300E, 2 x MT-F

Offline 50watt

  • Developer
  • Full Member
  • ****
  • Beiträge: 128
Antw:Sonos Gruppen trennen
« Antwort #5 am: 16 Oktober 2015, 22:11:32 »
Ich möchte ein set Sonos_Bad Speak 30 de ...
Die Ausgabe soll NUR auf Sonos_Bad erfolgen, ganz egal ab Sonos_Bad in einer group ist oder nicht.
Idealerweise wird nach dem "Speak" wieder die gleiche Gruppierung hergestellt wie vor dem "Speak".

Gibt es dafür eine einfache Lösung?
Lohnt es sich dafür den Befehl "set xxx speak" oder "set xxx group" zu erweitern?

Das Szenario ist etwa wie folgt: Es gibt diverse Sonos Player, die in wechselnden Gruppierungen betrieben werden (von "alle einzeln" bis "alle in einer Gruppe"). Wenn am Morgen das Licht im Bad eingeschaltet wird, "sagt" der Sonos-Player im Bad diverse Wetterdaten. Diese Wetterdaten sollen aber nur im Bad zu hören sein (und nicht auch im Schlafzimmer ;-) da könnte ja noch jemand schlafen)...
« Letzte Änderung: 17 Oktober 2015, 15:01:04 von 50watt »
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18644
Antw:Sonos Gruppen trennen
« Antwort #6 am: 16 Oktober 2015, 22:16:05 »
wenn das gruppieren und auflösen nicht so langsam wäre würde ich mir noch das umgekehrte wünschen: gruppieren für eine synchrone ausgabe auf alle erreichbaren devices und danach wieder auflösen in den zustand vorher und jeweils so weiterspielen wie zuvor.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2028
Antw:Sonos Gruppen trennen
« Antwort #7 am: 17 Oktober 2015, 10:09:57 »
Hallo,

ja, die Gruppenbildung ist nicht die schnellste.

Aber das mit der Durchsage kann man vielleicht mit der folgenden Sequenz lösen:
{
  my $oldGroups = CommandGet(undef, 'Sonos Groups');
  fhem('set Sonos Groups [Sonos_Bad]');
  fhem('set Sonos_Bad Speak de +0 Durchsage');
  fhem('set Sonos Groups '.$oldGroups);
}
Das hat nur den Nachteil, dass eine Gruppenänderung während der Durchsage wieder zurückgesetzt wird...
Du musst halt mal schauen, ob das sauber nachinander ausgeführt wird, oder ob etwas überholt wird...

Grüße
Reiner

Offline 50watt

  • Developer
  • Full Member
  • ****
  • Beiträge: 128
Antw:Sonos Gruppen trennen
« Antwort #8 am: 17 Oktober 2015, 15:51:07 »
Danke für die rasche Antwort. set Sonos Groups [Sonos_Bad] ändert nichts an den Sonos Gruppen hier, überprüft via get Sonos Groups.

Vorher und nachher:
[Sonos_Bad, Sonos_Test01_Schlafzim, Sonos_Test01_Schlafzim_RF, Sonos_Wohnzimmer, Sonos_Kueche] Anbei ein Auszug aus dem verbose 5 log...

2015.10.17 15:09:07 5: SONOS0: Desired-Crowd: []

2015.10.17 15:09:07 5: SONOS0: Desired-List: [
  [
    'Sonos_Bad'
  ]
]

2015.10.17 15:09:34 3: SONOS0: Connection accepted from localhost:56786
2015.10.17 15:09:34 5: SONOS0: Received: 'hello'
2015.10.17 15:09:34 5: SONOS0: Received: 'goaway'
2015.10.17 15:09:34 4: SONOS0: Got correct Answer from Subprocess...

Darüberhinaus würden alle Sonos player aufhören weiter das bisherige "Programm" wiederzugeben, wenn der "Master" bisher Sonos_Bad war, oder irre ich mich da?
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2028
Antw:Sonos Gruppen trennen
« Antwort #9 am: 17 Oktober 2015, 21:27:31 »
Hallo,

ich werde einen neuen Befehl einbauen, mit dem man einen Player direkt aus seiner Gruppe holen kann, und ihn alleine dastehen lassen kann. Intern ist der Befehl sowieso schon da, da ich ihn für den Groups-Befehl brauche...
Das mit der Veröffentlichung wird aber noch ein paar Tage dauern, ich hänge noch an der Speak-URL-Umstellung fest...

Damit kannst du einen Player schon mal sicher aus irgendwelchen Gruppenkonstellationen holen...

Grüße
Reiner

Offline m0urs

  • Full Member
  • ***
  • Beiträge: 152
    • Urs-o-Log
Antw:Sonos Gruppen trennen
« Antwort #10 am: 09 November 2015, 14:33:42 »
So einen Befehel zum Herauslösen eines Palyers würde ich auch sehr begrüßen ;-) Und wenn ich gerade dabei bin Wünsche zu äußern: Ein Befehl eine Durchsage an alle Sonos-Player zu machen ud danach wieder alle in der vorherigen Einstellung (Gruppe, Radio bzw. Playlist etc.) weiterspielen zu lassen, wäre auch der Hit :-)

Offline Elektrolurch

  • Hero Member
  • *****
  • Beiträge: 1443
Antw:Sonos Gruppen trennen
« Antwort #11 am: 09 November 2015, 16:51:59 »
Zitat:
Ein Befehl eine Durchsage an alle Sonos-Player zu machen ud danach wieder alle in der vorherigen Einstellung (Gruppe, Radio bzw. Playlist etc.) weiterspielen zu lassen, wäre auch der Hit :-)

Ja, ja. Darüber denke ich auch  gerade nach, wie ich das am Besten lösen kann. Wobei bei mir noch ein weiterer Faktor hinzukommt: Um Strom zu spatren, werden die Player bei Nichtbenutzung über einen FS20 St3 ausgeschaltet, d.h. ich muss zuerst alle Player einschalten, dann warten bis die alle hochgefahren sind, dann Gruppieren und nach der Durchsage wieder ausschalten, falls sie vorher ausgeschaltet waren.

Und wenn man so was baut, dann kann man es ja auch zur Weckfunktion erweitern.

Überlegung ist, so eine Art offline-Buffer für die Befehle zu bauen, wenn dann da etwas drin ist, den entsprechenden Player über die Steckdose einzuschalten usw. wie oben.

Frickel da gerade an einem Konzept herum.

Das o.g. Featur mit dem Gruppieren wäre da auch schon mal hilfreich (z.B. für eine Alarmanlage....)

Elektrolurch
configDB und Windows befreite Zone!

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2028
Antw:Sonos Gruppen trennen
« Antwort #12 am: 09 November 2015, 17:32:57 »
Hi,

geht denn die Abfolge der Befehle für gruppieren, Durchsage und un-gruppieren?
Also z.B.:
{
  my $groups = CommandGet(undef, 'Sonos Groups');
  fhem('set Sonos Groups [Sonos_Wohnzimmer, Sonos_Schlafzimmer, Sonos_Bad]');
  fhem('set Sonos_Wohnzimmer Speak 10 de Durchsage hier machen');
  fhem('set Sonos Groups '.$groups);
}
Das könnte ich als Speak-Befehl am Sonos-Device einbauen.

Grüße
Reiner

Offline 50watt

  • Developer
  • Full Member
  • ****
  • Beiträge: 128
Antw:Sonos Gruppen trennen
« Antwort #13 am: 20 Dezember 2015, 15:24:55 »
Der Befehl für das Herausnehmen eines Players ist nun da - vielen Dank!
Mit
set Sonos_Bad makeStandaloneGroupvor dem "speak" spielen die anderen Player weiter und Sonos_Bad "sagt" die Durchsage.

RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

Offline willib

  • Full Member
  • ***
  • Beiträge: 187
Antw:Sonos Gruppen trennen
« Antwort #14 am: 20 Dezember 2018, 14:08:17 »
Ich versuche mich gerade an dem Thema SONOS Player für eine Durchsage zu gruppieren und danach wieder zu trennen.
Ich möchte anmerken, dass
set Sonos_Bad makeStandaloneGroupin der FHEM reference nicht existiert.
Wie macht ihr das mit dem gruppieren und trennen bei einer Durchsage?
Raspberry P1 3B, Homematic, Hue, Intertechno, Jeelink, Harmony Hub, VU+ Uno 4K

Offline e3xtreme

  • Full Member
  • ***
  • Beiträge: 101
Antw:Sonos Gruppen trennen
« Antwort #15 am: 20 Januar 2019, 19:30:40 »
Ein Befehl eine Durchsage an alle Sonos-Player zu machen ud danach wieder alle in der vorherigen Einstellung (Gruppe, Radio bzw. Playlist etc.) weiterspielen zu lassen, wäre auch der Hit :-)

Das würde ich auch gerne haben  ;D... gibts da schon was neues?
LG

 

decade-submarginal