Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

Beta-User

Na ja, über "das rote Fragezeichen" bekommst du eine Liste, und bei mir ist der Raum MQTT2_DEVICE in der Regel nicht lange vorhanden und daher ziemlich übersichtlich ;D ...

(Aber wie immer: viele Wege führen nach Rom :) ).

Und das mit dem Löschen finde ich irgendwie unschön. MQTT ist prinzipbedingt nicht abhängig davon, dass immer eine Verbindung besteht, da scheint das Sonos-Modul viel empfindlicher zu sein. Hier aber sollte man solche Umwege lassen können, ohne dass irgendwas blockiert.

Vielleicht beschäftigst du dich als nächstes mal mit "setStateList" => da geht es darum festzustellen, ob ein Befehl auch angekommen ist (sonst: set_xyz als Reading/state-Inhalt).
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

Otto123

Ich habe mal noch mit diesen Ergänzungen in der setList experimentiert, ich würde die zu diesem Zeitpunkt noch nicht unbedingt ins Template nehmen.
  switchToTv:noArg BASE_TOPIC/DEV_ID/control { "command": "switchtotv" }\
  adv-command:textField BASE_TOPIC/DEV_ID/control {"command":"adv-command","input":$EVTPART1}\
  joinGroup:textField BASE_TOPIC/DEV_ID/control {  "command": "joingroup",  "input": "$EVTPART1"}\
  leaveGroup:noArg { my $value = ReadingsVal("DEV_ID","groupName","all");; qq(BASE_TOPIC/DEV_ID/control { "command": "leavegroup",  "input": "$value" } ) }\
  setAVTUri:textField BASE_TOPIC/DEV_ID/control {  "command": "setavtransporturi",  "input": "$EVTPART1"}\
  notify:textField BASE_TOPIC/DEV_ID/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}

Beim advanced command muss man quasi den input im Textfeld übergeben, Beispiel mit der LED
{"cmd":"DevicePropertiesService.SetLEDState","val":{"DesiredLEDState":"Off"}}
Die ganze payload sieht so aus:
{"command":"adv-command","input":{"cmd":"DevicePropertiesService.SetLEDState","val":{"DesiredLEDState":"Off"}}}
Man muss also darauf achten keine Leerzeichen im String zu haben - ist jetzt eher für den advanced User gedacht :)

Bei setAVTuri und notify (Volume & Leerzeichen & String) gehen solche Strings:
x-sonos-htastream:RINCON_347E5C82560801400:spdif
x-sonosapi-stream:s6628?sid=254&flags=8224&sn=0
x-file-cifs://192.168.56.83/SonosSpeak/RINCON_000E586BE2A201400_MR_Speak_46997c34b47c65d08088f6e6f011de47b09bea29.mp3
https://cdn.smartersoft-group.com/various/pull-bell-short.mp3

leavegroup schmeisst den Player einfach aus seiner Gruppe
bei joinGroup gibt man den Player- Gruppennamen an.
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

Ich verstehe noch nicht warum ein Player weg sein sollte? Wenn ein Play in den Müll geht, lösche ich ihn. Wenn ein Player offline ist, soll er als solches angezeigt werden aber nicht gelöscht. Ein Neues Gerät könnte am Ende mehrere Templates haben. Minimal nur für kleinen Player zb. oder aber ein großen Player mit Cover usw. Deswegen kann das nicht automatisch passieren.

ZitatViele User wollen einfach eine C&P Vorlage ohne Nachdenken
Das stimmt aber auch! Nun hätte man das mit den Templates. An sich ist die Idee mit dem notify super.
Aber spätestens bei mehreren möglichen Player Templates, wird es dann schwer.

Grundsätzlich ist das aber eine Inspiration für einige und ich würde das als optionale Sache mit in die Anleitung schreiben.
Hat jemand die ganze Befehlsliste schon durch geklickt? In den Templates ist ja noch nicht alles.

Ggf. macht es Sinn im ersten Beitrag (@Otto123), eine Zusammenfassung zu erstellen. Da kannst du auch die aktuell möglichen Befehle auflisten. So sehen wir genau welchen Stand wir alle haben :)

@Beta-User: Ich hatte beim spielen mit MiLight (zigbee2MQTT) gesehen, dass bei den RGB+CCT Templates z.B. so schick aussehende Knöpfe im devstate haben. Das würde ich gerne auch hier sehen. Leider ist mir bei Template-Prüfung nicht klar geworden wie du die dahin bekommen hast. Das wären super Player Button!
Du weiß ja, bei mir muss es nicht nur laufen, sondern es darf gern auch schick aussehen. Am Ende springt das einem Template-User auch als erstes auf ;) - Ich denke die C&P-ler, interessiert es auch nicht wie es umgesetzt wird. Schade aber die haben sicher andere Hobbies ;)

Beta-User

Zu dem "advanced" ein Vorschlag, das zu entschärfen (dürfte auch für andere "Multi-EVTPART"-Bedarfe passen):
adv-command:textField { my $payload = $EVENT =~ s/$EVTPART0 //g; qq(BASE_TOPIC/DEV_ID/control {"command":"adv-command","input":$payload})}


Was das mit dem MiLight-Ding angeht, weiß ich nicht ganz genau, was du haben willst; miene Vermutung geht in Richtung webCmd/webCmdLabel (und ggf. cmdIcon):
attr DEVICE webCmd brightness:dim:hue:command:color_temp:program:saturation:mode
attr DEVICE webCmdLabel   brightness:dim\
  :hue:command\
  :color_temp:program\
  :saturation:mode
Am besten aufschreiben, was da sein soll.

(Mir fehlt auch noch ein "Wiki"-Baustein für die Konfiguration von MQTT2_DEVICE (als Beispiel). Also: Wie geht man am besten vor, wie gehört was zusammen. Mein Freiwilliger ist dazu leider schon länger stumm.
Anfangen mit webCmd (und sofern erforderlich eventMap), den Rest später...)
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

ZitatWas das mit dem MiLight-Ding angeht, weiß ich nicht ganz genau, was du haben willst;
Hab leider aktuell keine Möglichkeit einen Screen zu machen. Man hat rechts neben den Slidern für Helligkeit usw noch so Knöpfe (sage ich mal dazu).
Ich würde vom lesen her denken, das sind das was du geschickt hast sollte es sein. Muss ich mal testen. Hab ich so noch nie benutzt, finde ich aber ganz schön. Man könnte ja so einen kleinen Player bauen.

ZitatMein Freiwilliger ist dazu leider schon länger stumm.
Das war aber hoffentlich nicht ich, oder? Ich fasse das mal als Gruppenarbeit am Ende dieses Aufbaus auf.

Beta-User

Zitat von: 87insane am 05 Juni 2020, 12:02:41
Das war aber hoffentlich nicht ich, oder? Ich fasse das mal als Gruppenarbeit am Ende dieses Aufbaus auf.
Nein, keine Sorge.

Mein "Wunschgerät", bei dem man das ggf. mal "von Hand" nachvollzieht, was das attrTemplate macht, wäre ein shelly-plug-s, ggf. dann noch ein shellybulb oder so (wg. der "Knöpfe" und anderen Wigets).

Sonos hier finde ich etwas zu speziell, und das mit dem Shelly (+) ist eigentlich eher eine Fleißaufgabe und (mMn.) nichts besonders kompliziertes. Wäre top, wenn du das übernehmen wolltest, Rest ggf. dann in einem separaten Thread (Wiki?).
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

Otto123

Das mit den command testen ist ne Fleißaufgabe: das hilft dabei:
command:textField BASE_TOPIC/DEV_ID/control {"command":$EVTPART1}

Ich habe einiges getestet was sinnvoll für mich ist, das geht alles :) Ich vervollständige erstmal mein template auf github zum testen, wenn ich da durch bin kann man wieder was übernehmen?

Danke für den Code mit dem Mulitpart :)
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

#142
ZitatWäre top, wenn du das übernehmen wolltest
Am besten machst du generell einen auf für sowas und ich melde mich einfach direkt und biete mich für den PlugS an. Habe ich sogar noch einen zuhause. Eine Bulb kann ich leider nicht bieten.

ZitatDas mit den command testen ist ne Fleißaufgabe: das hilft dabei:
Hatte mir einfach eine Box neben meinem Platz aufgestellt. So höre ich in den meisten Fällen ob es klappt :-P
Oder ich hab in der App geschaut ob die gewünschte Veränderung ankommt. Allerdings hatte ich nur basics getestet.

EDIT:
ZitatWas das mit dem MiLight-Ding angeht, weiß ich nicht ganz genau, was du haben willst
Ich bekomme die Worte zwar dahin aber bei MiLight waren da quasi so Kästchen drumherum. Die bekomme ich mit webcmd und webcmdlabel nicht hin.

TomLee

Das mit webCmdlabel interressiert mich, soweit war ich heute morgen noch nicht und kann erst später wieder spielen, hier sind schonmal erste cmdIcons  :)

defmod MQTT2_RINCON_000E58F7F67C01400 MQTT2_DEVICE RINCON_000E58F7F67C01400
attr MQTT2_RINCON_000E58F7F67C01400 IODev MQTT2_Server
attr MQTT2_RINCON_000E58F7F67C01400 cmdIcon mute:rc_MUTE previous:rc_PREVIOUS next:rc_NEXT play:rc_PLAY pause:rc_PAUSE stop:rc_STOP shuffleT:rc_SHUFFLE repeatT:rc_REPEAT
attr MQTT2_RINCON_000E58F7F67C01400 icon audio_volume_low
attr MQTT2_RINCON_000E58F7F67C01400 jsonMap volume_Master:volume mute_Master:mute
attr MQTT2_RINCON_000E58F7F67C01400 model sonos2mqtt_speaker
attr MQTT2_RINCON_000E58F7F67C01400 readingList 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" }\
  pause:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "pause" }\
  volume:slider,0,1,100 sonos/RINCON_000E58F7F67C01400/control { "command": "volume", "input": $EVTPART1 }\
  mute:on,off { my $value = $EVTPART1 eq "on" ? "mute" : "unmute";;;; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "$value" } ) }\
  next:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "next" }\
  previous:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "previous" }\
nachricht:textField sonos/RINCON_000E58F7F67C01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}
attr MQTT2_RINCON_000E58F7F67C01400 webCmd mute:previous:play:pause:stop

setstate MQTT2_RINCON_000E58F7F67C01400 mute
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 coordinatorUuid RINCON_000E58F7F67C01400
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_Album Weihnachts CD
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_AlbumArtUri http://192.168.188.38:1400/getaa?s=1&u=x-sonos-http:library%2ftracks%2f35754a47-37ea-4c09-b522-8c3af89953fe%2f.mp3%3fsid%3d201%26flags%3d0%26sn%3d5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_Artist Prinzessin
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_Duration 1:12:28
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_ProtocolInfo sonos.com-http:*:audio/mpeg:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_Title PrinzessinLillifeeunddaskleineEinhornDasOriginal-HörspielzumKinofilm_ep7_HhMVFs_dp65-zrBUJZhrIkDdS9
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_TrackUri x-sonos-http:library/tracks/35754a47-37ea-4c09-b522-8c3af89953fe/.mp3?sid=201&flags=0&sn=5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 currentTrack_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:32:18 enqueuedMetadata_Album Reggae Gold 1997
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:32:18 enqueuedMetadata_AlbumArtUri http://192.168.188.38:1400/getaa?u=x-file-cifs:%2f%2f192.168.188.26%2fOwnMusic%2fTony%20Rebel%2fIf%20Jah.mp3&v=81
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:32:18 enqueuedMetadata_Artist Tony Rebel
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:32:18 enqueuedMetadata_ItemId S://192.168.188.26/OwnMusic/Tony%20Rebel/If%20Jah.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:32:18 enqueuedMetadata_ParentId A:TRACKS
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:32:18 enqueuedMetadata_Title If Jah
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:32:18 enqueuedMetadata_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 groupName Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 mute true
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 mute_LF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 mute_RF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 name Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_Album Rasta Philosophy
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_AlbumArtUri http://192.168.188.38:1400/getaa?s=1&u=x-sonos-http:library%2ftracks%2f92c25731-b9a2-4bcf-a119-f78a9b2b965a%2f.mp3%3fsid%3d201%26flags%3d0%26sn%3d5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_Artist Iqulah
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_Duration 0:05:06
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_ProtocolInfo sonos.com-http:*:audio/mpeg:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_Title Rasta Magic
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_TrackUri x-sonos-http:library/tracks/92c25731-b9a2-4bcf-a119-f78a9b2b965a/.mp3?sid=201&flags=0&sn=5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 nextTrack_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 playmode NORMAL
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 21:29:27 state mute
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 transportState PLAYING
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 ts 1591306079324
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 uuid RINCON_000E58F7F67C01400
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 volume 10
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 volume_LF 100
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 23:27:59 volume_RF 100



TomLee

Was ich mich frage, wie man das hier jetzt mit mute löst, dazu müsste man ja toggeln können ?

Otto123

@Beta-user Dein Code hat einen bug, der liefert bloß ein "1":
adv-command:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(BASE_TOPIC/DEV_ID/control {"command":"adv-command","input":$payload})}\
Oder geht das einfacher?

ZitatWas ich mich frage, wie man das hier jetzt mit mute löst, dazu müsste man ja toggeln können ?
Wieso? mute on und mute off oder ich versteh es falsch.
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

Mach mal
webcmd:
previous:play:pause:next::::volumedown_5:volume:volumeup_5:mute

cmdIcon:
mute:rc_MUTE previous:rc_PREVIOUS next:rc_NEXT play:rc_PLAY pause:rc_PAUSE stop:rc_STOP shuffleT:rc_SHUFFLE repeatT:rc_REPEAT volumedown_5:rc_VOLDOWN volumeup_5:rc_VOLUP

Haste einen kleinen Player. Mute übernimmt er aus der setList. Also wäre das in dem Fall ein Dropdown Menü. Ansonsten eben den Befehl anpassen.

Ich bin mir noch nicht sicher wie "mein" Player am Ende aussehen soll. Aber so sind die Basics schonmal da.
@Beta-User: Das webcmdlabel macht ja nur den Text davor. Der ist mir aber erstmal egal: Ich möchte diese kleinen Schaltflächen^^

Beta-User

Das mit dem toggle klappt afaik nur, wenn man es via devStateIcon löst.

@87insane: Mmn. brauche ich dazu keinen Thread aufzumachen, es gehört thematisch im weiteren Sinne zu dem hier: https://forum.fhem.de/index.php/topic,95897.0.html.

Ziel ist einfach, "manuell" (in der "richtigen Reihenfolge") zu erläutern, welche Optionen dass es gibt (bei dem shelly eben dann mit dem "Bonus", dass es ggf. eben Einfluss auf die Funktionalität hat), passende screenshots bereitzustellen, damit man das "sieht", was da passiert (und ggf. leichter auf andere Fälle übertragen kann). Die "Krux" mit dem jetzigen Artikel "Device Overview anpassen" ist, dass er zu speziell geraten ist, und die Hardware nicht mehr so verbreitet (unter Einsteigern). Ich hatte halt nichts passenderes als diese virtuellen Kontakte...

@Otto: doppel mal die ";". Einfacher sehe ich im Moment nicht wirklich (außer direkt $EVENT zu manipulieren).




@87insane
volumeup_5 ist vermutlich nicht Development-Module-AV-API konform. Bitte setter usw. von dort nehmen und nichts erfinden, was dort schon irgendwie vorhanden/vorgeschlagen ist. Und "mehr" bitte zur Abstimmung stellen (es gibt irgendwo in der Perl-Ecke einen Thread dazu).
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

Das oben mit den cmdIcons klappt aber nur wenn man dem setter nix mitgeben muss, cmdIcons war das erste an was ich heute morgen gedacht habe das war schnell mal definiert und das wars, beschäftigt hab ich mich noch nicht wirklich mit.

87insane

#149
ZitatDas oben mit den cmdIcons klappt aber nur wenn man dem setter nix mitgeben muss, cmdIcons war das erste an was ich heute morgen gedacht habe das war schnell mal definiert und das wars, beschäftigt hab ich mich noch nicht wirklich mit.
Ist einfach aber Perl ist hier eben immer geiler in meinen Augen :) Aber das kann ja jeder halten wie er mag. Je nach Ziel geht es ja auch ab und an nicht anders.

Zitatvolumeup_5 ist vermutlich nicht Development-Module-AV-API konform
Das ist mir komplett egal! Es ist erstmal nur ein Test. Am Ende ist die Benamung erstmal nur so, damit sie
A) Auffällig ist
B) Zum testen schneller als zu gucken was es schon gibt
C) Am Ende muss es ja für jeden erkennbar sein. Denke bis dahin muss erstmal der Weg bekannt sein :)

Ich habe mir die Regeln dort nicht angesehen und habe es auch nicht vor. Wenn ich so tief drin stecke wie ihr, die auch hoch laden ins SVN, dann wäre das was anderes.
Soll nun aber auch keine Diskussion auslösen. Denke die Gründe kann man zum TESTEN verstehen. Es sollte natürlich sobald sinnig auch angepasst werden, nachdem was du hier sagtest.
Will gar nicht wissen wie "krum" mein FHEM aus Sicht der Development-Module-AV-API ist.... haha

ZitatZiel ist einfach, "manuell" (in der "richtigen Reihenfolge") zu erläutern,
Hmmm... Ich gebe mein Bestes. Ich weiß nicht wie schnell ich das schaffe. Sagte sowas die Tage ja schon mal. Schaue mir mal an was da aktuell drin steht und versuche das "leichter" zu beschreiben. Ich kenne aber einige Sachen auch nicht. Wie z.B. diese LED Lampe, die aufeinmal aus dem nichts kam und nun aber wundervoll in ein paar Templates ist (devStateIcon, welches Helligkeit und Farbe anzeigt). Oder wie jetzt gerade die Geschichte mit den Rahmen um den Button, wie im Template https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template#L2762.

Kannst du mir (am besten sicher via PN) die nötigen Links senden? Dann sende ich dir, nach Fertigstellung die Doku. So kannst du kurz drüber fliegen und direkt meine Fragen beantworten :) und dazu prüfen ob das "konform" ist.


EDIT: Ach ja - Im "original" SONOS Player gibt es noch:
Favourites:LastActionResult.*?GetFavouritesWithCovers.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Radios:LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Playlists:LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Queue:LastActionResult.*?GetQueueWithCovers.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, currentTrackPosition:LastActionResult.*?GetCurrentTrackPosition.* { if (ReadingsVal($name, "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }
Glaube Otto123 hatte hier auch schon was zu geschrieben. Das es möglich sein sollte am Ende die Favoriten usw ab zu fragen. Ggf. bringt das ja was. Poste es erstmal nur hier rein als Gedankenstütze.