Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

Begonnen von Otto123, 31 Mai 2020, 18:30:55

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: TomLee am 02 Juni 2020, 16:48:45
Nur zur Vollständigkeit, war zu schnell, hab jetzt mal s2m neugestartet, es gibt mit dem Template jetzt 2 Readings.
MMn. sieht das gut aus (abgesehen davon, dass man über homeassistant weiter diskutieren kann...); hättest du mehr erwartet?

Zitat von: 87insane am 02 Juni 2020, 16:31:37
[...] kann ich das vermutlich bis dahin fertig aus dem SVN laden.
Ob es fertig ist, werden wir sehen, aber via svn verfügbar ist es jetzt...

Habe nur die bridgeRegexp noch geringfügig angepaßt.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

play und stop klappt auch mit dem Speaker-Template, nur volume nicht.

Seh aber keinen Unterschied zu dem Beispiel aus dem ersten Post von Otto zu dem Volume-setter.

defmod MQTT2_RINCON_000E58F7F67C01400 MQTT2_DEVICE RINCON_000E58F7F67C01400
attr MQTT2_RINCON_000E58F7F67C01400 IODev MQTT2_Server
attr MQTT2_RINCON_000E58F7F67C01400 readingList sonos/status/wohnzimmer/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\
  sonos/status/wohnzimmer/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }\
  sonos/RINCON_000E58F7F67C01400:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr MQTT2_RINCON_000E58F7F67C01400 room MQTT2_DEVICE
attr MQTT2_RINCON_000E58F7F67C01400 setList stop:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "stop" }\
  play:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "play" }\
  volume:slider,0,1,100 sonos/RINCON_000E58F7F67C01400/control { "command": "volume", "input": $EVTPART1 }"

setstate MQTT2_RINCON_000E58F7F67C01400 volume
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentCrossfadeMode false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentPlayMode NORMAL
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentSection 0
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrack 1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackDuration 0:00:00
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_AlbumArtUri https://cdn-radiotime-logos.tunein.com/s2485q.png
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_Artist DIE ÄRZTE
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_ProtocolInfo aac:*:application/octet-stream:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_Title M&;F
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_TrackUri aac://http://streams.regenbogen.de/rr-mannheim-128-aac?usid=0-0-H-A-V-02
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackMetaData_UpnpClass object.item
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_CurrentTrackURI aac://http://streams.regenbogen.de/rr-mannheim-128-aac?usid=0-0-H-A-V-02
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_EnqueuedTransportURI x-rincon-mp3radio://http://opml.radiotime.com/Tune.ashx?id=e88185605&;sid=s2485&;formats=aac,mp3,hls&;partnerId=rjyYMwEH&;serial=AHFLNOA3T2XT6VWH2BAPMLPWOGLA
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_EnqueuedTransportURIMetaData_AlbumArtUri https://cdn-radiotime-logos.tunein.com/s2485q.png
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_EnqueuedTransportURIMetaData_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_EnqueuedTransportURIMetaData_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_EnqueuedTransportURIMetaData_Title 102.8 Radio Regenbogen Heidelberg
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_EnqueuedTransportURIMetaData_UpnpClass object.item.audioItem.audioBroadcast
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_NumberOfTracks 1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 AV_TransportState PLAYING
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:39:12 associatedWith MQTT2_mqttjs_b2916b6c
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 coordinatorUuid RINCON_000E58F7F67C01400
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_AlbumArtUri https://cdn-radiotime-logos.tunein.com/s2485q.png
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_Artist DIE ÄRZTE
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_ProtocolInfo aac:*:application/octet-stream:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_Title M&;F
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_TrackUri aac://http://streams.regenbogen.de/rr-mannheim-128-aac?usid=0-0-H-A-V-02
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 currentTrack_UpnpClass object.item
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 enqueuedMetadata_AlbumArtUri https://cdn-radiotime-logos.tunein.com/s2485q.png
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 enqueuedMetadata_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 enqueuedMetadata_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 enqueuedMetadata_Title 102.8 Radio Regenbogen Heidelberg
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 enqueuedMetadata_UpnpClass object.item.audioItem.audioBroadcast
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 groupName Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 mute_LF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 mute_Master false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 mute_RF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 name Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 playmode NORMAL
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:35 state volume
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 transportState PLAYING
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 ts 1591109902093
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 uuid RINCON_000E58F7F67C01400
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 volume_LF 100
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 volume_Master 18
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-02 16:58:22 volume_RF 100




TomLee

Jetzt seh ichs, das " am Ende der rL wars. Das kommt sus dem Template.

87insane

#48
Auch geil.. Ich lade mir die Templates manuell rein, mache noch kurz ein Update, Neustart und auf einmal sind die doppelt drin.
Hast die zeitgleich ins SVN gestellt.

Aber um so besser, muss ich das nicht manuell erledigen. Danke! Ich versuche mal zu schauen was wir noch an Befehlen rauß kitzeln können. Sprache ist hier auch wieder ein Thema. Denn ich hab darüber meine Klingel usw laufen. Bin gespannt ob wir das hinbekommen.

Aso... Ich kann das natürlich eben eingeben aber du schiebst es ja eh ins SVN. Anbei die möglichen befehle:

https://github.com/svrooij/sonos2mqtt/blob/master/README.md#supported-command

Unter Text 2 speach findet man noch weitere befehle wie Wecker stellen oder sowas.

Die connected Geschichte ist auch nicht wie ich sagte. Ich hab zufällig 2 Speakers angeschlossen. Deswegen ist die 2 aber nicht da

https://github.com/svrooij/sonos2mqtt/blob/master/README.md#connect-messages

TomLee

Net manuell, über die Kommandozeile  ;)  :P

{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }

87insane

Jo das geht aber ich hatte ja eh ein Update gemacht.

@Beta-User: (OT) Info: Shelly hat x neue Firmwares raus geschoben. Es wurden diverse Readings geändert. Nicht wundern das da wieder eine Welle kommen könnte. Ich selber hab auch noch nicht alle erfasst. Kann man das was FHEM als change ansieht und sagt man solle speichern, da sonst weg nach Neustart - Auch irgendwo geschrieben sehen? Dann könnte ich dir das alles bereit stellen.

Beta-User

... den " beseitige ich bei Gelegenheit noch, aber so langsam aber sicher seid ihr wieder dran...

"speak" kann man wohl machen, man müßte vermutlich nur erst den $EVENT um den ersten Teil "säubern" (das Kommando) (und das eben alles in Perl machen; habe auf die Schnelle noch kein Beispiel im Kopf, wo das ähnlich wäre).

Zu "connected" fällt euch bestimmt auch was "hübsches" ein, für stateFormat z.B....

Zu OT: bitte gesondert (im shelly-MQTT2-Thread) adressieren und bitte gleich changelogs oä. von der Shelly-Seite her verlinken, dann kann ich mir ggf. schneller ein Bild machen. Prinzipiell sollte es immer so sein, dass die attrTemplate den letzten firmwarestand berücksichtigen, aber wenn man weder attrTemplate erneut andwendet und auch kein firmware-update macht, passiert auch nichts und alles sollte funktional bleiben...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

87insane

Bitte nicht doppelt arbeiten.. Als Info - ich tippe gerade die ganzen setlist befehle ein. Ich versuche erstmal was ich so aus dem Kopf kann. Den Rest bitte gemeinsam oder ich muss eben alles noch nachsehen, dass dauert dann aber ;)

Ich habe noch kein Changelog gefunden. Ggf kommt das gleich noch...Wollte dir auch nur schonmal die Info geben.

87insane

#53
Anbei sL und was ich so an Fragen habe ;)

Folgende Befehle sind mal durchgeklickt aber nicht wirklich getestet. Entsprechen aber der Logok und machen so umgesetzt in meinen Augen Sinn:

joingroup                      Join another group by name                           name of other device
leavegroup              Remove current device from the group it's in   
mute                            🔈   Mute the volume   
next                           ⏩   Go to next song in queue   
notify                   🔔   Play a notification sound and restore playback   see notifications
pause                      Pause playback   
play                           ▶️   Start playback   
playmode                   🔀   Change the playmode, when using queue           NORMAL, REPEAT_ALL, SHUFFLE or SHUFFLE_NOREPEAT.
previous                   ⏪   Go to previous song in queue   
queue                   ➕   Add a song to the queue                                   Track uri
seek                           🕞   Seek in the current track                                   Time like 0:02:45
selecttrack                      Select another track in the current queue             number
setavtransporturi   🔡   Set the current playback uri, for advanced cases.   playback or track uri (check out the trackUri topic to find the required value)
sleep                           💤   Set a sleeptimer for x minutes                           number
speak                   💬   Generate text-to-speech file and play as notification 🎉   see text-to-speech
stop                           🚫   Stop Playback   
switchtoline              Switch to line-in (on supported devices)   
switchtoqueue              Switch to queue   
switchtotv                      Switch to TV input (on supported devices, eg. playbar)   
toggle                      Toggle between pause and play   
unmute                   🔇   Unmute the volume   
volume                   🔈   Set the volume to a value   number (between 1 and 100)
volumedown          ➖   Decrease volume with 5 or number                 optional number
volumeup                  ➕   Increase volume with 5 or number                 optional number


stop:noArg sonos/RINCON_7828CAF427B201400/control { "command": "stop" }
  play:noArg sonos/RINCON_7828CAF427B201400/control { "command": "play" }
  volume:slider,0,1,100 sonos/RINCON_7828CAF427B201400/control { "command": "volume", "input": $EVTPART1 }
  leavegroup:noArg sonos/RINCON_7828CAF427B201400/control { "command": "leavegroup" }
  mute:on,off { $EVTPART1 eq "on" ? 'sonos/RINCON_7828CAF427B201400/control { "command": "mute" }' : 'sonos/RINCON_7828CAF427B201400/control { "command": "unmute" }'}
  next:noArg sonos/RINCON_7828CAF427B201400/control { "command": "next" }
  pause:noArg sonos/RINCON_7828CAF427B201400/control { "command": "pause" }
  playmode:NORMAL,REPEAT_ALL,SHUFFLE,SHUFFLE_NOREPEAT sonos/RINCON_7828CAF427B201400/control { "command": $EVTPART1 }
  previous:noArg sonos/RINCON_7828CAF427B201400/control { "command": "previous" }
  queue sonos/RINCON_7828CAF427B201400/control { "command": "queue", "input": $EVTPART1 }
  seek sonos/RINCON_7828CAF427B201400/control { "command": "seek", "input": $EVTPART1 }
  selecttrack sonos/RINCON_7828CAF427B201400/control { "command": "selecttrack", "input": $EVTPART1 }
  setavtransporturi sonos/RINCON_7828CAF427B201400/control { "command": "setavtransporturi", "input": $EVTPART1 }
  sleep sonos/RINCON_7828CAF427B201400/control { "command": "sleep", "input": $EVTPART1 }
  switchtoline:noArg sonos/RINCON_7828CAF427B201400/control { "command": "switchtoline" }
  switchtoqueue:noArg sonos/RINCON_7828CAF427B201400/control { "command": "switchtoqueue" }
  switchtotv:noArg sonos/RINCON_7828CAF427B201400/control { "command": "switchtotv" }
  toggle:noArg sonos/RINCON_7828CAF427B201400/control { "command": "toggle" }


Hier gibt es die Möglichkeit entweder nur den Befehl zu senden (+5/-5) oder man kann manuell eine Zahl eingeben. Bin mir nicht sicher wenn ich { "command": "volumedown" EVTPART1 } nutze ob dann EVTPART1 in dem Moment etwas enthalten könnte. Deswegen habe ich das gesplittet. Das wisst ihr aber sicher...
    volumedown_5:noArg sonos/RINCON_7828CAF427B201400/control { "command": "volumedown" }
  volumedown_5:noArg sonos/RINCON_7828CAF427B201400/control { "command": "volumedown" }
  volumedown_manuel noArg sonos/RINCON_7828CAF427B201400/control { "command": "volumedown", "input": $EVTPART1 }
  volumeup_5:noArg sonos/RINCON_7828CAF427B201400/control { "command": "volumeup" }
  volumeup_manuel noArg sonos/RINCON_7828CAF427B201400/control { "command": "volumeup", "input": $EVTPART1 }


Hier brauche ich Denkanstöße...
joingroup:So hatte ich mir das gedacht. Geht natürlich nicht. Ideen? Dropdown Menü, REGEX für alle Sonos sonos/RINCON_7828CAF427B201400/control { "command": $EVTPART1 }
notify: Ist die Payload aber übersteigt meine Ideen erstmal ohne zu gucken. Hier bräuchte man ja Text Felder, Dropdown usw{
  "command": "notify",
  "input": {
    "trackUri": "https://cdn.smartersoft-group.com/various/pull-bell-short.mp3",
    "onlyWhenPlaying": false,
    "timeout": 10,
    "volume": 8,
    "delayMs": 700
  }
}
speak Payload anbei. Befehl: sonos/RINCON_7828CAF427B201400/speak {
  "text": "Someone at the front-door",
  "endpoint": "https://your.tts.endpoint/api/generate",
  "lang": "en-US",
  "gender": "male",
  "volume": 50,
  "onlyWhenPlaying": false,
  "delayMs": 700
}


EDIT: BITTE BEACHTEN - Leichte Verbesserungen an sL List um 18:42 Uhr

TomLee

Für die endgültige Fassung des Templates würd ich mir wünschen das das muten, wie auch im Sonos-Modul, mit einem setter mute umgesetzt wird. Dann aber nicht mit 1/0 sondern on/off, weil ich der Meinung bin das die Umsetzung mit 1/0 eher die Ausnahme ist. Bei LGTV_WebOS ist es bspw. auch on/off.

Also so in der Art, weiß aber erst mal nicht wie mans richtig macht:

mute:on,off { EVTPART1 eq "on"?"sonos/RINCON_7828CAF427B201400/control { "command": "mute" }":"sonos/RINCON_7828CAF427B201400/control { "command": "unmute" }"}

87insane

Hey nochmal...

sonos2MQTT devstateicon Vorschlag für die Bridge mit Funktion, wenn man will ;)?
{ my $amp = ReadingsVal($name,"connected","0") eq "0" ? "rot" : ReadingsVal($name,"connected","0") eq "1" ? "gelb" : "gruen";;
my $stateinfo = ReadingsVal($name,"connected","0") eq "0" ? "sonos2MQTT Dienst ist aus" : ReadingsVal($name,"connected","0") eq "1" ? "sonos2MQTT findet kein SONOS Gerät" : "sonos2MQTT läuft!";;
my $show = "<a href=\"/fhem?cmd.dummy=set $name restart&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>";;
"<div> $show $stateinfo </div>" }


sL Idee für die Bridge:
restart:noArg {system ("sudo -u root /opt/fhem/FHEM/restart.sh &")}
start:noArg {system ("sudo -u root /opt/fhem/FHEM/start.sh &")}
stop:noArg {system ("sudo -u root /opt/fhem/FHEM/stop.sh &")}


Geht natürlich und sicher auch in einem Script mit Übergabe des Befehls aber ich wollte das nur mal kurz zeigen.
Auch wäre möglich den neustart Befehl des Dienstes z.B. direkt zu nutzen, denke ich.

Was passiert hier überhaupt?
Bei klicken auf den kleinen Kreis, der folgendes aussagt:
0 or missing is not connected (set by will functionality). = rot
1 is connected to mqtt, but not to any sonos device. = gelb
2 is connected to mqtt and at least one sonos speaker. (ultimate success!) = grün

wird der Dienst neugestartet.

Anbei mal ein schnelles Paint...

87insane

Zitat von: TomLee am 02 Juni 2020, 18:55:10
Für die endgültige Fassung des Templates würd ich mir wünschen das das muten, wie auch im Sonos-Modul, mit einem setter mute umgesetzt wird. Dann aber nicht mit 1/0 sondern on/off, weil ich der Meinung bin das die Umsetzung mit 1/0 eher die Ausnahme ist. Bei LGTV_WebOS ist es bspw. auch on/off.

Also so in der Art, weiß aber erst mal nicht wie mans richtig macht:

mute:on,off { EVTPART1 eq "on"?"sonos/RINCON_7828CAF427B201400/control { "command": "mute" }":"sonos/RINCON_7828CAF427B201400/control { "command": "unmute" }"}

Habe es mal ausgebessert (war fast richtig :)) und mit aufgenommen. Guter Input!

  mute:on,off { $EVTPART1 eq "on" ? 'sonos/RINCON_7828CAF427B201400/control { "command": "mute" }' : 'sonos/RINCON_7828CAF427B201400/control { "command": "unmute" }'}

Otto123

Ihr seid hyperaktive :) da brauch ich erstmal meine letzte Flasche Goldriesling ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

87insane

Muss ehrlich gestehen, dass es eben auch einfach Spaß macht wenn alle mitmachen und beitragen was sie können.
Ich kann das nicht, egal jemand anderes hat das schon erledigt. Ich kann dafür das und jemand anders nicht usw.... T.E.A.M. lese ich hier im positiven :)

Wenn das so weiter geht, steht das Ding am Ende der Woche :) Gönn dir ruhig deinen Riesling. Ich bin auch beim Bier gelandet gerade. Für heute bin ich durch. Habe aber schon ein wenig Angst wie viele Seiten ich dann morgen lesen darf :-P

@Otto123: Macht es nicht Sinn, den ersten Beitrag auf aktuellem Stand zu halten? Dann findet jeder sofort was er sucht. Oder machst du am Ende nochmal einen anderen Thread auf?

87insane

#59
Kleine Idee doch noch....

Ist eine Idee und eine Fleißarbeit. Kann man aber aus den setList Befehlen komplett abgucken und ist fast nur copy & paste. Man könnte die ganzen Einträge in Untermenüs packen. z.B.
- controll =
  toggle:noArg sonos/RINCON_7828CAF427B201400/control { "command": "toggle" }
  volume:slider,0,1,100 sonos/RINCON_7828CAF427B201400/control { "command": "volume", "input": $EVTPART1 }"
  next:noArg sonos/RINCON_7828CAF427B201400/control { "command": "next" }
  previous:noArg sonos/RINCON_7828CAF427B201400/control { "command": "previous" }
  mute:on,off { $EVTPART1 eq "on" ? 'sonos/RINCON_7828CAF427B201400/control { "command": "mute" }' : 'sonos/RINCON_7828CAF427B201400/control { "command": "unmute" }'}
  play:noArg sonos/RINCON_7828CAF427B201400/control { "command": "play" }
  stop:noArg sonos/RINCON_7828CAF427B201400/control { "command": "stop" }
  pause:noArg sonos/RINCON_7828CAF427B201400/control { "command": "pause" }
 
- advanced control =
  seek sonos/RINCON_7828CAF427B201400/control { "command": "seek", "input": $EVTPART1 }
  selecttrack sonos/RINCON_7828CAF427B201400/control { "command": "selecttrack", "input": $EVTPART1 }
  setavtransporturi sonos/RINCON_7828CAF427B201400/control { "command": "setavtransporturi", "input": $EVTPART1 }
  leavegroup:noArg sonos/RINCON_7828CAF427B201400/control { "command": "leavegroup" }
  queue sonos/RINCON_7828CAF427B201400/control { "command": "queue", "input": $EVTPART1 }
  playmode:NORMAL,REPEAT_ALL,SHUFFLE,SHUFFLE_NOREPEAT sonos/RINCON_7828CAF427B201400/control { "command": $EVTPART1 }

- extras = 
  sleep sonos/RINCON_7828CAF427B201400/control { "command": "sleep", "input": $EVTPART1 }
  switchtoline:noArg sonos/RINCON_7828CAF427B201400/control { "command": "switchtoline" }
  switchtoqueue:noArg sonos/RINCON_7828CAF427B201400/control { "command": "switchtoqueue" }
  switchtotv:noArg sonos/RINCON_7828CAF427B201400/control { "command": "switchtotv" }
 

Ist nur so ne Idee... Hab das mal versucht, es für mich so halbwegs logisch auch in der Sortierung. Da will ich mich weder bei Benamung oder Reihenfolge festlegen aber ist ne Idee.... Wer will, kann anfangen :-P

Das ganze hat den Hintergrund, das niemand diese ganzen Optionen wirklich braucht. Deswegen würde ich das schon selektieren.