Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

Otto123

#195
Der speak Befehl mit "Boardmitteln"

Voraussetzung: Samba installiert, Freigabe SonosSpeak auf /var/SonosSpeak.
Empfohlen: Paket mp3wrap für TTS installiert

Syntax (fast) wie "bisher": set Player speak <volume> text
Man nehme: 1 x Text2Speech, 
define SonosTTS Text2Speech none
attr SonosTTS TTS_CacheFileDir /var/SonosSpeak
attr SonosTTS TTS_UseMP3Wrap 1
attr SonosTTS userReadings cifsName {my $hostip=(split(' ', qx(hostname -I)))[0];my $lastFileName=ReadingsVal($name,"lastFilename","");$lastFileName=~s/\/var/x-file-cifs:\/\/$hostip/g;$lastFileName}
ein notify
define n_SonosSpeak notify SonosTTS:playing:.0 {fhem("set ".ReadingsVal($NAME,"Player","")." notify ".ReadingsVal($NAME,"volume","")." ".ReadingsVal($NAME,"cifsName",""))}
und eine Ergänzung setList beim Player
speak:textField { my $tts="SonosTTS";my $payload = $EVENT;$payload =~ s/$EVTPART0 $EVTPART1 //g; fhem("setreading $tts Player $NAME;setreading $tts volume $EVTPART1;set $tts tts $payload");"{}"}

Ich weiß - die Sprachauswahl -  :-X das bekommen wir sicher auch noch kompatibel :)
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

Beta-User

(moser) ...das mit Samba gefällt mir gar nicht. Hat mMn. auf einem FHEM-Server nicht wirklich was verloren (nur meine 2ct). Müßte doch auch linux-kompatibel mit den richtigen Rechten auf das Verzeichnis gehen?
Sonst: Cool!
Zitat von: TomLee am 09 Juni 2020, 18:37:20
Enttäuschung  ;D , auf der Suche warum dein mute Befehl noch nicht klappt, hab ich folgendes im Log bemerkt:
Falls uns wg. der sub nichts besseres einfällt, wäre die Frage, ob wir nicht wirklich Richtung myUtils gehen. Davor wäre evtl. noch zu checken, ob es nicht eine (generischere) Kürzungsfunktion irgendwo in den vorhandenen Perl-libs gibt? (who dunnit?)

Schade auch, dass das mit dem mute nicht auf Anhieb geklappt hat (ich habe das nur auf dem Testsystem ohne MQTT-Anbindung angesehen, und der optische Effekt war das, was m.E. zu erreichen sein sollte; sonst wäre die Frage, ob man das in devStateIcon mit einer 3. Tabellenspalte hinbekäme?).



Was anderes noch:
Jemand (wuppie68?) hatte hier mal eine readingList gepostet, in der auch die "set"-Zweige drin waren. Würde mich interessieren, warum.

Zum Hintergrund:
Ich halte das für falsch, kann aber noch nicht sagen, ob es ein Problem von sonos2mqtt ist, oder ob es ein Mißverständnis auf User-Seite ist.
Meine Erwartung - was Anweisungen angeht - ist die: Irgend ein Client sendet einen Befehl an den Broker, der gibt es (nur) an das eigentliche Ziel (hier: sonos2mqtt) weiter, der Client verarbeitet das und gibt dann eine Vollzugsmeldung an den Broker zurück, der verteilt es dann wieder an alle anderen Clients.

Falls das hier nicht so sein sollte, wäre das ein Design-Wunsch an @svrooij.

Zur Frage des "User-Mißverständnisses":
Wer "die Abkürzung" nimmt und seinen Client die Anweisung bereits als Ausführungsbestätigung behandeln läßt, bekommt nicht (gleich) den zutreffenden Status zurück. Deswegen sollte man mMn. bei mehr als FHEM als "weisungsbefugtem Client" jeweils alle "set" (oder cmnd)-Zweige direkt am IO abschneiden. Das ist z.B. der tiefere Sinn hinter dem attrTemplate "MQTT2_IO_ignoreRegexp_basic": Das verwirft alle "typischen" Shelly- und Tasmota-set-Anweisungen direkt am IO.

Falls dazu Fragen sind, bitte melden!

(Ich schreibe das erst mal hier, weil doch einige Multiplikatoren hier zu Gange sind; muß mal überlegen, wie ich das beizeiten ins Wiki bringe, bin aber nicht traurig, wenn jemand anderes das übernimmt...)
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

ZitatMüßte doch auch linux-kompatibel mit den richtigen Rechten auf das Verzeichnis gehen?
Eventuell Deine Unkenntnis: der Sonosplayer muss ja die Datei erreichen/laden können die man ihm anbietet.
Zitat(moser) ...das mit Samba gefällt mir gar nicht.
ist aber quasi Standard bei dem bisherigen Sonos Modul.
UND: ich wollte auch umstellen/parallel betreiben. ;)

Für die Ausgabe von Sprachnachrichten gibt es sicher Alternativen.
Aber meines Wissens kann man über FHEMWEB keine Dateien ausliefern, bedeutet zusätzlicher HTPP Server auf dem FHEM Server? Klar kann man einen anderen smb Server im Netz nehmen - wenn man hat. Das ist was für die Zukunft. Man kann auch irgendwas anderes einbinden, Stephan bietet ja eine eigene TTS an.
Ist das alles schöner als Samba?
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

Beta-User

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

Beta-User

Zitat von: TomLee am 09 Juni 2020, 18:37:20
Enttäuschung  ;D , auf der Suche warum dein mute Befehl noch nicht klappt, hab ich folgendes im Log bemerkt:
Kannst du mal checken, ob das hier ohne Fehlermeldung läuft (ungetestet...):
attr Test10 devStateIcon { my $trim30 = sub { return length($_[0]) < 29 ? $_[0] : substr($_[0],0,25).'...';; };;\
my $imgct = ReadingsVal($name,"enqueuedMetadata_AlbumArtUri","");;\
my $imgnt = ReadingsVal($name,"nextTrack_AlbumArtUri","");;\
my $ctitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Title","no title")) : ReadingsVal($name,"state","");;\
my $ititle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Artist","no artist")) : ReadingsVal($name,"state","");;\
my $atitle = ReadingsVal($name,"currentTrack_ProtocolInfo","") =~ ".*radio.*" ?\
$trim30->(ReadingsVal($name,"enqueuedMetadata_Title","no title")) : ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Album","no title")) : ReadingsVal($name,"state","");;\
my $nctitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Title","no title")) : ReadingsVal($name,"state","");;\
my $nititle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Artist","no artist")) : ReadingsVal($name,"state","");;\
my $natitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Album","no album")) : ReadingsVal($name,"state","");;\
my $duration = ReadingsVal($name,"state","") eq "PLAYING" ? ReadingsVal($name,"nextTrack_Duration","no duration") : ReadingsVal($name,"state","");;\
"<div style='float:left;;padding:10px;;'>\
<img src='$imgct' style='width:265px;;height:265px;;border-radius:5px;;'>\
</div>\
<div style='text-align:left;;float:left;;padding:10px;;width:300px;;height:265px;;'>\
<span>Titel:&nbsp$ctitle</span><br>\
<span>Interpret:&nbsp$ititle</span><br>\
<span>Album:&nbsp$atitle</span><br><br>\
<span>Nächster&nbspTitel:</span><br>\
<span>Titel:&nbsp$nctitle</span><br>\
<span>Interpret:&nbsp$nititle</span><br>\
<span>Album:&nbsp$natitle</span><br>\
<span>Dauer:&nbsp$duration</span><br><br>\
<div style='float: left;;padding-right:25px;;'>\
<img src='$imgnt' style='width:75px;;height:75px;;border-radius:3px;;'>\
</div>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage("rc_PREVIOUS")."</a>\
<a href=\"/fhem?cmd.dummy=set $name play&XHR=1\">".FW_makeImage("rc_PLAY")."</a>\
<a href=\"/fhem?cmd.dummy=set $name pause&XHR=1\">".FW_makeImage("rc_PAUSE")."</a>\
<a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage("rc_NEXT")."</a>\
</span><br>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage("rc_VOLDOWN")."</a>\
<a href=\"/fhem?cmd.dummy=set $name mute&XHR=1\">".FW_makeImage("rc_MUTE")."</a>\
<a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage("rc_VOLUP")."</a>\
<a href=\"/fhem?cmd.dummy=set $name stop&XHR=1\">".FW_makeImage("rc_STOP")."</a>\
</span>\
</div>"}
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

Die Warnung kam immer beim aufrufen des Raumes in dem sich das Device befindet und der Detail-Ansicht des Device selbst.
Ich mein, nach kurzem testen, die Warnung kommt nicht mehr nach Änderung auf my $trim30 = sub

Beta-User

 :)

...dann bliebe jetzt noch das toggelnde Icon (bzw. zwei: play/pause und mute/unmute)...

Im Code sollte sich das mit 2*2 Variablen lösen lassen für $cmnd_pp/$icon_pp bzw. $cmnd_mute/$icon_mute?
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

und der optische Effekt war das, was m.E. zu erreichen sein sollte;

ja der ist ja auch gegeben, s. Bild i. A, allerdings werden die Kommandos nicht ausgeführt und sind auch nicht falschrum wie man sieht.
Es passiert einfach nichts (mit verbose 5 am Server geprüft) beim betätigen des Icon.
Auch wird in der DeviceOverview kein Icon angezeigt mit webCmd mute, mit der alten Version mute:on,off { my $value = $EVTPART1 eq "on" ? "mute" : "unmute";; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "$value" } ) } schon.

Im Code sollte sich das mit 2*2 Variablen lösen lassen für $cmnd_pp/$icon_pp bzw. $cmnd_mute/$icon_mute?

Weiß ehrlich gesagt nicht auf was du aus bist, eventuell steh ich auch nur auf dem Schlauch und die Erleuchtung kommt erst etwas später.

Beta-User

Das mit 2*2 Variablen war so gemeint, dass man statt zwei Einträgen (hier erst mal für play/pause)
<a href=\"/fhem?cmd.dummy=set $name play&XHR=1\">".FW_makeImage("rc_PLAY")."</a>\
<a href=\"/fhem?cmd.dummy=set $name pause&XHR=1\">".FW_makeImage("rc_PAUSE")."</a>\

nur einen schreibt:
<a href=\"/fhem?cmd.dummy=set $name $cmnd_pp&XHR=1\">".FW_makeImage($icon_pp)."</a>\
$cmnd_pp etc. muß dann eben vorher ermittelt werden ;) ...
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

Welches Ziel haben wir denn jetzt überhaupt, die Kommandos aus devstateIcon nach webcmd verlagern oder beibehalten ?
Das man eine Lösung für beides findet schadet ja nicht, bin bloß irritiert, mal so mal so.

Beta-User

...mir ist das im Prinzip egal; letztlich sollte es hübsch aussehen.

Meine _Vermutung_ wäre, dass es in webCmd eigentlich hübscher und einfacher wäre, weil man z.B. einen volume-Slider  dort einfacher darstellen könnte; dazu müßte aber das mit webCmd/webCmdLabel/cmdIcon irgendwie besser funktionieren. Tut es aber nicht, ich bekomme auch keine Events :o ...

Mal mein modifiziertes Test-Gerät:
defmod Test10 MQTT2_DEVICE RINCON_000E58F7F67C01400
attr Test10 IODev m2server
attr Test10 cmdIcon volumeUp:rc_VOLUP volumeDown:rc_VOLDOWN previous:rc_PREVIOUS next:rc_NEXT stop:rc_STOP
attr Test10 devStateIcon { my $trim30 = sub { return length($_[0]) < 29 ? $_[0] : substr($_[0],0,25).'...';; };;\
my $imgct = ReadingsVal($name,"enqueuedMetadata_AlbumArtUri","");;\
my $imgnt = ReadingsVal($name,"nextTrack_AlbumArtUri","");;\
my $ctitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Title","no title")) : ReadingsVal($name,"state","");;\
my $ititle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Artist","no artist")) : ReadingsVal($name,"state","");;\
my $atitle = ReadingsVal($name,"currentTrack_ProtocolInfo","") =~ ".*radio.*" ?\
$trim30->(ReadingsVal($name,"enqueuedMetadata_Title","no title")) : ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Album","no title")) : ReadingsVal($name,"state","");;\
my $nctitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Title","no title")) : ReadingsVal($name,"state","");;\
my $nititle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Artist","no artist")) : ReadingsVal($name,"state","");;\
my $natitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Album","no album")) : ReadingsVal($name,"state","");;\
my $duration = ReadingsVal($name,"state","") eq "PLAYING" ? ReadingsVal($name,"nextTrack_Duration","no duration") : ReadingsVal($name,"state","");;\
"<div style='float:left;;padding:10px;;'>\
<img src='$imgct' style='width:265px;;height:265px;;border-radius:5px;;'>\
</div>\
<div style='text-align:left;;float:left;;padding:10px;;width:300px;;height:265px;;'>\
<span>Titel:&nbsp$ctitle</span><br>\
<span>Interpret:&nbsp$ititle</span><br>\
<span>Album:&nbsp$atitle</span><br><br>\
<span>Nächster&nbspTitel:</span><br>\
<span>Titel:&nbsp$nctitle</span><br>\
<span>Interpret:&nbsp$nititle</span><br>\
<span>Album:&nbsp$natitle</span><br>\
<span>Dauer:&nbsp$duration</span><br><br>\
<div style='float: left;;padding-right:25px;;'>\
<img src='$imgnt' style='width:75px;;height:75px;;border-radius:3px;;'>\
</div>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage("rc_PREVIOUS")."</a>\
<a href=\"/fhem?cmd.dummy=set $name play&XHR=1\">".FW_makeImage("rc_PLAY")."</a>\
<a href=\"/fhem?cmd.dummy=set $name pause&XHR=1\">".FW_makeImage("rc_PAUSE")."</a>\
<a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage("rc_NEXT")."</a>\
</span><br>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage("rc_VOLDOWN")."</a>\
<a href=\"/fhem?cmd.dummy=set $name mute&XHR=1\">".FW_makeImage("rc_MUTE")."</a>\
<a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage("rc_VOLUP")."</a>\
<a href=\"/fhem?cmd.dummy=set $name stop&XHR=1\">".FW_makeImage("rc_STOP")."</a>\
</span>\
</div>"}
attr Test10 event-on-change-reading .*
attr Test10 icon audio_volume_low
attr Test10 jsonMap volume_Master:volume mute_Master:mute volume_LF:0 volume_RF:0 mute_LF:0 mute_RF:0 enqueuedMetadata_ItemId:0 enqueuedMetadata_ParentId:0 currentTrack_ItemId:0 currentTrack_ParentId:0 coordinatorUuid:0 transportState:state nextTrack_ItemId:0 nextTrack_ParentId:0
attr Test10 model sonos2mqtt_speaker
attr Test10 readingList sonos/status/unknown/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\
  sonos/status/unknown/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }\
  sonos/RINCON_000E58F7F67C01400:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr Test10 room Test,MQTT2_DEVICE
attr Test10 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" }\
  toggle:iconSwitch,PLAYING,rc_PAUSE,PAUSED,rc_PLAY sonos/RINCON_000E58F7F67C01400/control { "command": "toggle" }\
  volumeUp:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumeup" }\
  volumeDown:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumedown" }\
  switchToQueue:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtoqueue" }\
  switchToTv:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtotv" }\
  switchToLine:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtoline" }\
  volume:colorpicker,BRI,0,1,100 sonos/RINCON_000E58F7F67C01400/control { "command": "volume", "input": $EVTPART1 }\
  mute:iconSwitch,on,rc_MUTE,off,rc_VOLUP { 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" }\
  x_raw_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //g;; qq(sonos/RINCON_000E58F7F67C01400/control $payload)}\
  joinGroup:textField sonos/RINCON_000E58F7F67C01400/control { "command": "joingroup",  "input": "$EVTPART1"}\
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_000E58F7F67C01400","groupName","all");; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "leavegroup",  "input": "$value" } ) }\
  setAVTUri:textField sonos/RINCON_000E58F7F67C01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}\
  notify:textField sonos/RINCON_000E58F7F67C01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}
attr Test10 setStateList play pause stop
attr Test10 webCmd volume:volumeDown:volumeUp:mute:pause:previous:next

setstate Test10 set_pause
setstate Test10 2020-06-09 16:08:07 currentTrack_Album Batbox
setstate Test10 2020-06-09 16:35:45 currentTrack_AlbumArtUri https://cdn-profiles.tunein.com/s57109/images/logoq.png
setstate Test10 2020-06-09 16:35:45 currentTrack_Artist Cyndi Lauper
setstate Test10 2020-06-09 16:08:07 currentTrack_Duration 0:03:03
setstate Test10 2020-06-09 16:35:45 currentTrack_ProtocolInfo x-rincon-mp3radio:*:*:*
setstate Test10 2020-06-09 16:35:45 currentTrack_Title Time after time
setstate Test10 2020-06-09 16:35:45 currentTrack_TrackUri x-rincon-mp3radio://http://hr-edge-204b.fra-lg.cdn.addradio.net/hr/hr3/live/mp3/128/stream.mp3?ar-distributor=f0a1
setstate Test10 2020-06-09 16:35:45 currentTrack_UpnpClass object.item
setstate Test10 2020-06-09 16:08:00 enqueuedMetadata_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate Test10 2020-06-09 16:35:45 enqueuedMetadata_AlbumArtUri https://cdn-profiles.tunein.com/s57109/images/logoq.png
setstate Test10 2020-06-09 16:08:00 enqueuedMetadata_Artist Johannes Ackner
setstate Test10 2020-06-09 16:35:45 enqueuedMetadata_Title 89.3 hr 3 Frankfurt
setstate Test10 2020-06-09 16:35:45 enqueuedMetadata_UpnpClass object.item.audioItem.audioBroadcast
setstate Test10 2020-06-09 16:35:45 groupName Wohnzimmer
setstate Test10 2020-06-10 13:07:26 mute set on
setstate Test10 2020-06-09 16:35:45 name Wohnzimmer
setstate Test10 2020-06-10 13:30:53 next set
setstate Test10 2020-06-09 16:08:07 nextTrack_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate Test10 2020-06-09 16:08:07 nextTrack_AlbumArtUri http://192.168.188.38:1400/getaa?u=x-file-cifs:%2f%2f192.168.188.26%2fOwnMusic%2fH%c3%b6rb%c3%bccher%2fDer%20Struwwelpeter.mp3&v=81
setstate Test10 2020-06-09 16:08:07 nextTrack_Artist Johannes Ackner
setstate Test10 2020-06-09 16:08:07 nextTrack_Duration 0:14:23
setstate Test10 2020-06-09 16:08:07 nextTrack_ProtocolInfo x-file-cifs:*:audio/mpeg:*
setstate Test10 2020-06-09 16:08:07 nextTrack_Title Der Struwwelpeter
setstate Test10 2020-06-09 16:08:07 nextTrack_TrackUri x-file-cifs://192.168.188.26/OwnMusic/Hörbücher/Der Struwwelpeter.mp3
setstate Test10 2020-06-09 16:08:07 nextTrack_UpnpClass object.item.audioItem.musicTrack
setstate Test10 2020-06-09 16:35:45 playmode NORMAL
setstate Test10 2020-06-10 13:30:52 previous set
setstate Test10 2020-06-10 13:30:51 state set_pause
setstate Test10 2020-06-09 16:35:45 ts 1591713344697
setstate Test10 2020-06-09 16:35:45 uuid RINCON_000E58F7F67C01400
setstate Test10 2020-06-10 13:29:08 volume set 78
setstate Test10 2020-06-10 13:32:00 volumeDown set
setstate Test10 2020-06-10 13:32:02 volumeUp set

Strippe ich das runter auf
defmod Test10 MQTT2_DEVICE RINCON_000E58F7F67C01400
attr Test10 IODev m2server
attr Test10 devStateIcon { my $trim30 = sub { return length($_[0]) < 29 ? $_[0] : substr($_[0],0,25).'...';; };;\
my $imgct = ReadingsVal($name,"enqueuedMetadata_AlbumArtUri","");;\
my $imgnt = ReadingsVal($name,"nextTrack_AlbumArtUri","");;\
my $ctitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Title","no title")) : ReadingsVal($name,"state","");;\
my $ititle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Artist","no artist")) : ReadingsVal($name,"state","");;\
my $atitle = ReadingsVal($name,"currentTrack_ProtocolInfo","") =~ ".*radio.*" ?\
$trim30->(ReadingsVal($name,"enqueuedMetadata_Title","no title")) : ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"currentTrack_Album","no title")) : ReadingsVal($name,"state","");;\
my $nctitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Title","no title")) : ReadingsVal($name,"state","");;\
my $nititle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Artist","no artist")) : ReadingsVal($name,"state","");;\
my $natitle = ReadingsVal($name,"state","") eq "PLAYING" ? $trim30->(ReadingsVal($name,"nextTrack_Album","no album")) : ReadingsVal($name,"state","");;\
my $duration = ReadingsVal($name,"state","") eq "PLAYING" ? ReadingsVal($name,"nextTrack_Duration","no duration") : ReadingsVal($name,"state","");;\
"<div style='float:left;;padding:10px;;'>\
<img src='$imgct' style='width:265px;;height:265px;;border-radius:5px;;'>\
</div>\
<div style='text-align:left;;float:left;;padding:10px;;width:300px;;height:265px;;'>\
<span>Titel:&nbsp$ctitle</span><br>\
<span>Interpret:&nbsp$ititle</span><br>\
<span>Album:&nbsp$atitle</span><br><br>\
<span>Nächster&nbspTitel:</span><br>\
<span>Titel:&nbsp$nctitle</span><br>\
<span>Interpret:&nbsp$nititle</span><br>\
<span>Album:&nbsp$natitle</span><br>\
<span>Dauer:&nbsp$duration</span><br><br>\
<div style='float: left;;padding-right:25px;;'>\
<img src='$imgnt' style='width:75px;;height:75px;;border-radius:3px;;'>\
</div>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage("rc_PREVIOUS")."</a>\
<a href=\"/fhem?cmd.dummy=set $name play&XHR=1\">".FW_makeImage("rc_PLAY")."</a>\
<a href=\"/fhem?cmd.dummy=set $name pause&XHR=1\">".FW_makeImage("rc_PAUSE")."</a>\
<a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage("rc_NEXT")."</a>\
</span><br>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage("rc_VOLDOWN")."</a>\
<a href=\"/fhem?cmd.dummy=set $name mute&XHR=1\">".FW_makeImage("rc_MUTE")."</a>\
<a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage("rc_VOLUP")."</a>\
<a href=\"/fhem?cmd.dummy=set $name stop&XHR=1\">".FW_makeImage("rc_STOP")."</a>\
</span>\
</div>"}
attr Test10 event-on-change-reading .*
attr Test10 icon audio_volume_low
attr Test10 jsonMap volume_Master:volume mute_Master:mute volume_LF:0 volume_RF:0 mute_LF:0 mute_RF:0 enqueuedMetadata_ItemId:0 enqueuedMetadata_ParentId:0 currentTrack_ItemId:0 currentTrack_ParentId:0 coordinatorUuid:0 transportState:state nextTrack_ItemId:0 nextTrack_ParentId:0
attr Test10 model sonos2mqtt_speaker
attr Test10 readingList sonos/status/unknown/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\
  sonos/status/unknown/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }\
  sonos/RINCON_000E58F7F67C01400:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr Test10 room Test,MQTT2_DEVICE
attr Test10 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" }\
  toggle:iconSwitch,PLAYING,rc_PAUSE,PAUSED,rc_PLAY sonos/RINCON_000E58F7F67C01400/control { "command": "toggle" }\
  volumeUp:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumeup" }\
  volumeDown:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumedown" }\
  switchToQueue:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtoqueue" }\
  switchToTv:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtotv" }\
  switchToLine:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtoline" }\
  volume:colorpicker,BRI,0,1,100 sonos/RINCON_000E58F7F67C01400/control { "command": "volume", "input": $EVTPART1 }\
  mute:iconSwitch,on,rc_MUTE,off,rc_VOLUP { 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" }\
  x_raw_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //g;; qq(sonos/RINCON_000E58F7F67C01400/control $payload)}\
  joinGroup:textField sonos/RINCON_000E58F7F67C01400/control { "command": "joingroup",  "input": "$EVTPART1"}\
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_000E58F7F67C01400","groupName","all");; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "leavegroup",  "input": "$value" } ) }\
  setAVTUri:textField sonos/RINCON_000E58F7F67C01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}\
  notify:textField sonos/RINCON_000E58F7F67C01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}
attr Test10 setStateList play pause stop
attr Test10 webCmd mute

setstate Test10 set_pause
setstate Test10 2020-06-09 16:08:07 currentTrack_Album Batbox
setstate Test10 2020-06-09 16:35:45 currentTrack_AlbumArtUri https://cdn-profiles.tunein.com/s57109/images/logoq.png
setstate Test10 2020-06-09 16:35:45 currentTrack_Artist Cyndi Lauper
setstate Test10 2020-06-09 16:08:07 currentTrack_Duration 0:03:03
setstate Test10 2020-06-09 16:35:45 currentTrack_ProtocolInfo x-rincon-mp3radio:*:*:*
setstate Test10 2020-06-09 16:35:45 currentTrack_Title Time after time
setstate Test10 2020-06-09 16:35:45 currentTrack_TrackUri x-rincon-mp3radio://http://hr-edge-204b.fra-lg.cdn.addradio.net/hr/hr3/live/mp3/128/stream.mp3?ar-distributor=f0a1
setstate Test10 2020-06-09 16:35:45 currentTrack_UpnpClass object.item
setstate Test10 2020-06-09 16:08:00 enqueuedMetadata_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate Test10 2020-06-09 16:35:45 enqueuedMetadata_AlbumArtUri https://cdn-profiles.tunein.com/s57109/images/logoq.png
setstate Test10 2020-06-09 16:08:00 enqueuedMetadata_Artist Johannes Ackner
setstate Test10 2020-06-09 16:35:45 enqueuedMetadata_Title 89.3 hr 3 Frankfurt
setstate Test10 2020-06-09 16:35:45 enqueuedMetadata_UpnpClass object.item.audioItem.audioBroadcast
setstate Test10 2020-06-09 16:35:45 groupName Wohnzimmer
setstate Test10 2020-06-10 13:37:55 mute on
setstate Test10 2020-06-09 16:35:45 name Wohnzimmer
setstate Test10 2020-06-10 13:30:53 next set
setstate Test10 2020-06-09 16:08:07 nextTrack_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate Test10 2020-06-09 16:08:07 nextTrack_AlbumArtUri http://192.168.188.38:1400/getaa?u=x-file-cifs:%2f%2f192.168.188.26%2fOwnMusic%2fH%c3%b6rb%c3%bccher%2fDer%20Struwwelpeter.mp3&v=81
setstate Test10 2020-06-09 16:08:07 nextTrack_Artist Johannes Ackner
setstate Test10 2020-06-09 16:08:07 nextTrack_Duration 0:14:23
setstate Test10 2020-06-09 16:08:07 nextTrack_ProtocolInfo x-file-cifs:*:audio/mpeg:*
setstate Test10 2020-06-09 16:08:07 nextTrack_Title Der Struwwelpeter
setstate Test10 2020-06-09 16:08:07 nextTrack_TrackUri x-file-cifs://192.168.188.26/OwnMusic/Hörbücher/Der Struwwelpeter.mp3
setstate Test10 2020-06-09 16:08:07 nextTrack_UpnpClass object.item.audioItem.musicTrack
setstate Test10 2020-06-09 16:35:45 playmode NORMAL
setstate Test10 2020-06-10 13:30:52 previous set
setstate Test10 2020-06-10 13:30:51 state set_pause
setstate Test10 2020-06-09 16:35:45 ts 1591713344697
setstate Test10 2020-06-09 16:35:45 uuid RINCON_000E58F7F67C01400
setstate Test10 2020-06-10 13:29:08 volume set 78
setstate Test10 2020-06-10 13:32:00 volumeDown set
setstate Test10 2020-06-10 13:32:02 volumeUp set

und setze ein setreading Test10 mute on ab, kann ich das Ding gut am Web-IF toggeln - bis ich einen Browser-refresh machen...

(Nicht schön. Glaube, wir sollten lieber eine dritte eigene Spalte nach devStateIcon basteln und den Vol.-slider da irgendwie via Perl generieren, falls das geht; sonst eben nur volume in webCmd?)
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

#206
Cool, Pause/Play mute/unmute klappt in DevstateIcon.

Hab jetzt nicht nochmal geschaut, meine hatte ich schonmal, es gibt kein Pendant zu rc_MUTE !?
Habs erstmal mit einer Farbangabe gelöst  :P

defmod Test11 MQTT2_DEVICE RINCON_000E58F7F67C01400
attr Test11 IODev MQTT2_Server
attr Test11 devStateIcon {
my $trim30 = sub { return length($_[0]) < 29 ? $_[0] : substr($_[0],0,25).'...';; };;\
my $imgct = ReadingsVal($name,"enqueuedMetadata_AlbumArtUri","");;\
my $imgnt = ReadingsVal($name,"nextTrack_AlbumArtUri","");;\
my $cmnd_pp = ReadingsVal($name,"state","") eq "PLAYING" ? "pause" : "play";;\
my $icon_pp = ReadingsVal($name,"state","") eq "PLAYING" ? "rc_PAUSE" : "rc_PLAY";;\
my $cmnd_mu = ReadingsVal($name,"mute","") eq "false" ? "mute on" : "mute off";;\
my $icon_mu = ReadingsVal($name,"mute","") eq "true" ? "rc_MUTE\@red" : "rc_MUTE\@green";;\
my $ctitle = ReadingsVal($name,"state","") eq "PLAYING" ? (trim30(ReadingsVal($name,"currentTrack_Title","no title"))) : ReadingsVal($name,"state","");;\
my $ititle = ReadingsVal($name,"state","") eq "PLAYING" ? (trim30(ReadingsVal($name,"currentTrack_Artist","no artist"))) : ReadingsVal($name,"state","");;\
my $atitle = ReadingsVal($name,"currentTrack_ProtocolInfo","") =~ ".*radio.*" ?\
(trim30(ReadingsVal($name,"enqueuedMetadata_Title","no title"))) : ReadingsVal($name,"state","") eq "PLAYING" ? (trim30(ReadingsVal($name,"currentTrack_Album","no title"))) : ReadingsVal($name,"state","");;\
my $nctitle = ReadingsVal($name,"state","") eq "PLAYING" ? (trim30(ReadingsVal($name,"nextTrack_Title","no title"))) : ReadingsVal($name,"state","");;\
my $nititle = ReadingsVal($name,"state","") eq "PLAYING" ? (trim30(ReadingsVal($name,"nextTrack_Artist","no artist"))) : ReadingsVal($name,"state","");;\
my $natitle = ReadingsVal($name,"state","") eq "PLAYING" ? (trim30(ReadingsVal($name,"nextTrack_Album","no album"))) : ReadingsVal($name,"state","");;\
my $duration = ReadingsVal($name,"state","") eq "PLAYING" ? ReadingsVal($name,"nextTrack_Duration","no duration") : ReadingsVal($name,"state","");;\
"<div style='float:left;;padding:10px;;'>\
<img src='$imgct' style='width:265px;;height:265px;;border-radius:5px;;'>\
</div>\
<div style='text-align:left;;float:left;;padding:10px;;width:300px;;height:265px;;'>\
<span>Titel:&nbsp$ctitle</span><br>\
<span>Interpret:&nbsp$ititle</span><br>\
<span>Album:&nbsp$atitle</span><br><br>\
<span>Nächster&nbspTitel:</span><br>\
<span>Titel:&nbsp$nctitle</span><br>\
<span>Interpret:&nbsp$nititle</span><br>\
<span>Album:&nbsp$natitle</span><br>\
<span>Dauer:&nbsp$duration</span><br><br>\
<div style='float: left;;padding-right:25px;;'>\
<img src='$imgnt' style='width:75px;;height:75px;;border-radius:3px;;'>\
</div>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage("rc_PREVIOUS")."</a>\
<a href=\"/fhem?cmd.dummy=set $name $cmnd_pp&XHR=1\">".FW_makeImage($icon_pp)."</a>\\
<a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage("rc_NEXT")."</a>\
<a href=\"/fhem?cmd.dummy=set $name stop&XHR=1\">".FW_makeImage("rc_STOP")."</a>\
</span><br>\
<span>\
<a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage("rc_VOLDOWN")."</a>\
<a href=\"/fhem?cmd.dummy=set $name $cmnd_mu&XHR=1\">".FW_makeImage($icon_mu)."</a>\
<a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage("rc_VOLUP")."</a>\
</span>\
</div>"}
attr Test11 event-on-change-reading .*
attr Test11 icon audio_volume_low
attr Test11 jsonMap volume_Master:volume mute_Master:mute volume_LF:0 volume_RF:0 mute_LF:0 mute_RF:0 enqueuedMetadata_ItemId:0 enqueuedMetadata_ParentId:0 currentTrack_ItemId:0 currentTrack_ParentId:0 coordinatorUuid:0 transportState:state nextTrack_ItemId:0 nextTrack_ParentId:0
attr Test11 model sonos2mqtt_speaker
attr Test11 readingList sonos/status/unknown/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\
  sonos/status/unknown/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }\
  sonos/RINCON_000E58F7F67C01400:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr Test11 room Test,MQTT2_DEVICE
attr Test11 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" }\
  toggle:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "toggle" }\
  volumeUp:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumeup" }\
  volumeDown:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumedown" }\
  switchToQueue:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtoqueue" }\
  switchToTv:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtotv" }\
  switchToLine:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "switchtoline" }\
  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" }\
  x_raw_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //g;; qq(sonos/RINCON_000E58F7F67C01400/control $payload)}\
  joinGroup:textField sonos/RINCON_000E58F7F67C01400/control { "command": "joingroup",  "input": "$EVTPART1"}\
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_000E58F7F67C01400","groupName","all");; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "leavegroup",  "input": "$value" } ) }\
  setAVTUri:textField sonos/RINCON_000E58F7F67C01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}\
  notify:textField sonos/RINCON_000E58F7F67C01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}

setstate Test11 PLAYING
setstate Test11 2020-06-10 13:10:27 currentTrack_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate Test11 2020-06-10 13:49:53 currentTrack_AlbumArtUri https://cdn-profiles.tunein.com/s20293/images/logoq.png?t=1
setstate Test11 2020-06-10 13:49:53 currentTrack_Artist Ich wachte auf / Gilbert
setstate Test11 2020-06-10 13:10:27 currentTrack_Duration 0:14:23
setstate Test11 2020-06-10 13:49:53 currentTrack_ProtocolInfo x-rincon-mp3radio:*:*:*
setstate Test11 2020-06-10 13:49:53 currentTrack_Title stream.mp3?ar-distributor=f0a1
setstate Test11 2020-06-10 13:49:53 currentTrack_TrackUri x-rincon-mp3radio://http://swr-edge-2028.dus-lg.cdn.addradio.net/swr/swr4/bw/mp3/128/stream.mp3?ar-distributor=f0a1
setstate Test11 2020-06-10 13:49:53 currentTrack_UpnpClass object.item
setstate Test11 2020-06-10 13:10:27 enqueuedMetadata_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate Test11 2020-06-10 13:49:53 enqueuedMetadata_AlbumArtUri https://cdn-profiles.tunein.com/s20293/images/logoq.png?t=1
setstate Test11 2020-06-10 13:10:27 enqueuedMetadata_Artist Johannes Ackner
setstate Test11 2020-06-10 13:49:53 enqueuedMetadata_Title 90.1 SWR4 Baden-Württemberg Stuttgart
setstate Test11 2020-06-10 13:49:53 enqueuedMetadata_UpnpClass object.item.audioItem.audioBroadcast
setstate Test11 2020-06-10 13:49:53 groupName Wohnzimmer
setstate Test11 2020-06-10 13:49:53 mute true
setstate Test11 2020-06-10 13:49:53 name Wohnzimmer
setstate Test11 2020-06-10 13:10:27 nextTrack_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate Test11 2020-06-10 13:10:27 nextTrack_AlbumArtUri http://192.168.188.38:1400/getaa?u=x-file-cifs:%2f%2f192.168.188.26%2fOwnMusic%2fH%c3%b6rb%c3%bccher%2fDer%20Struwwelpeter.mp3&v=81
setstate Test11 2020-06-10 13:10:27 nextTrack_Artist Johannes Ackner
setstate Test11 2020-06-10 13:10:27 nextTrack_Duration 0:14:23
setstate Test11 2020-06-10 13:10:27 nextTrack_ProtocolInfo x-file-cifs:*:audio/mpeg:*
setstate Test11 2020-06-10 13:10:27 nextTrack_Title Der Struwwelpeter
setstate Test11 2020-06-10 13:10:27 nextTrack_TrackUri x-file-cifs://192.168.188.26/OwnMusic/Hörbücher/Der Struwwelpeter.mp3
setstate Test11 2020-06-10 13:10:27 nextTrack_UpnpClass object.item.audioItem.musicTrack
setstate Test11 2020-06-10 13:49:53 playmode NORMAL
setstate Test11 2020-06-10 13:49:53 state PLAYING
setstate Test11 2020-06-10 13:49:53 ts 1591789793178
setstate Test11 2020-06-10 13:49:53 uuid RINCON_000E58F7F67C01400
setstate Test11 2020-06-10 13:34:07 volume 12



Beta-User

...Farbe ist bäh...
(*lach*)
Im Ernst: aus der Stellung zwischen den beiden anderen ergibt sich eigentlich schon die Funktion. Wie wäre ein weiterer "rc_VOLDOWN" denn nicht irgendwie eleganter (ein "rc"-Speaker ohne Bogen wäre das Optimum...)?
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

#208
wie wärs mit neuen icons (rc_VOLPLUS/rc_VOLMINUS) für volume up/down und für mute rc_VOLDOWN/rc_MUTE  ;)

TomLee

Im Sonos-Modul gibts auch keinen Slider, sind zwei zusätzliche Custom-VolumeUP/DOWN-Kommando-Icons die die Lautstärke ><10+ stellen eventuell eine alternative zum Slider ? Die äußeren für +/- 5 die inneren für +/- 10+
Braucht man wieder ein unmute-Icon, wenn jemand frägt bekommen wir ja vlt. eines  :)