Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

TomLee

ZitatIch bekomme die Worte zwar dahin aber bei MiLight waren da quasi so Kästchen drumherum. Die bekomme ich mit webcmd und webcmdlabel nicht hin.

Du meinst sicher uzsuToggle uzsuSelect und uzsuSelectRadio

87insane

Muss ich schauen...

Hab mal ein wenig vor gearbeitet. Habe den "mini-Player" mal als Perl / devstateicon Variante gebaut. Absichtlich auch so, das man es versteht und sehr einfach.
Den Volume Slider hätte ich gern noch drin aber ich kann hier nicht testen aktuell und im Kopf habe ich leider nicht wie ich einen Slider erzeuge.

{
my $previouspic = 'rc_PREVIOUS';;
my $playpic = 'rc_PLAY';;
my $pausepic = 'rc_PAUSE';;
my $nextpic = 'rc_NEXT';;
my $voldownpic = 'rc_VOLDOWN';;
my $voluppic = 'rc_VOLUP';;
my $mutepic = 'rc_MUTE';;
"<div>
<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage($previouspic)."</a>
<a href=\"/fhem?cmd.dummy=set $name play&XHR=1\">".FW_makeImage($playpic)."</a>
<a href=\"/fhem?cmd.dummy=set $name pause&XHR=1\">".FW_makeImage($pausepic)."</a>
<a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage($nextpic)."</a>
&nbsp;&nbsp;&nbsp;&nbsp;
<a href=\"/fhem?cmd.dummy=set $name volumedown_5&XHR=1\">".FW_makeImage($voldownpic)."</a>
HIER SOLLTE DER VOL SLIDER SEIN
<a href=\"/fhem?cmd.dummy=set $name volumeup_5&XHR=1\">".FW_makeImage($voluppic)."</a>
<a href=\"/fhem?cmd.dummy=set $name mute&XHR=1\">".FW_makeImage($mutepic)."</a>
</div>"
}



Für einen erweiterten Player oder aber wenn gewünscht auch schon bei dem mini-Player wäre das hier ggf. schon mal ein kleines Grundgerüst.

Beta-User

Nochmal: Es wird einfacher, wenn wir nicht devStateIcon in Perl machen (und wenn, sollte man dann ggf. für solche Zuordnungslisten Hashes verwenden, siehe e-go-charger).

Und den Hinweis auf die AV-Developer-API hatte ich ernst gemeint! Das kann man ohne große Vorkenntnisse verstehen, und wenn man es gleich beherzigt, gibt es ggf. auch gleich sinnvolle Symbole usw.. (Genau dafür gibt es diese Konventionen, und wenn es noch nicht funktioniert, muß man es ggf. an einer zentralen Stelle anpassen, damit es überall geht...).
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

Kann man in stateformat bzw dann devstateicon über normalen weg bilder rein packen?

Allgemein, wie würde ich da in Perl einen slider machen?

Zu den Richtlinien.. Sicher haben die ihren nutzen, sagte ich ja auch.

Gesendet von meinem LM-G810 mit Tapatalk


Beta-User

Zitat von: 87insane am 05 Juni 2020, 15:16:11
Kann man in stateformat bzw dann devstateicon über normalen weg bilder rein packen?
Jein. Multiline wäre das Stichwort... Wenn man Perl-stateFormat macht, eben mit \n (siehe den verlinkten "Problem"-Thread).

ZitatAllgemein, wie würde ich da in Perl einen slider machen?
Das geht bestimmt, aber da weiß ich auch nicht wie; der Slider u.ä. gehören mMn. nach webCmd; da ist es dann easy (vorausgesetzt, man bekommt die response vom Gerät her auch wieder auf das Reading gemappt).

ZitatZu den Richtlinien.. Sicher haben die ihren nutzen, sagte ich ja auch.
Ich bin nur irritiert, dass du pauschal behauptest, das wäre nichts, was man auf Anhieb verstehen kann (das impliziert das "soll sich später jemand anderes drum kümmern..."). Es sind da grade mal ~20 typische Kommando/Readingnamen und deren Bedeutung gelistet (https://wiki.fhem.de/wiki/DevelopmentGuidelinesAV#Kommandos). Was spricht also dagegen, statt "volumeup_5" den dort gelisteten "volumeUp"-Befehl zu nehmen - da sind die 5% als default hinterlegt (und um die kompliziertere Variante kann sich dann ggf. später jemand kümmern, der es "noch fancier" haben will, falls das das Zielgerät auch versteht, wenn man z.B. (nach einer Umwandlung) "volume_up 10" als payload senden würde oder eben daraus ein errechnetes Volume ermitteln usw.)...
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

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

Die 1 am Anfang bei einer Zeile braucht man nicht ich weiß.
War das so gemeint ? würdest das so lösen, wenn die cmdIcons wirklich ins Template kommen sollten ?

defmod MQTT2_RINCON_000E58F7F67C01400 MQTT2_DEVICE RINCON_000E58F7F67C01400
attr MQTT2_RINCON_000E58F7F67C01400 IODev MQTT2_Server
attr MQTT2_RINCON_000E58F7F67C01400 cmdIcon previous:rc_PREVIOUS next:rc_NEXT play:rc_PLAY pause:rc_PAUSE stop:rc_STOP
attr MQTT2_RINCON_000E58F7F67C01400 devStateIcon 1.true:rc_MUTE:mute+off 1.false:rc_MUTE:mute+on
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" }\
test:true,false sonos/RINCON_000E58F7F67C01400/control { "command": "mute", "input": $EVTPART1 }\
  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 stateFormat 1:mute
attr MQTT2_RINCON_000E58F7F67C01400 webCmd previous:play:pause:stop

setstate MQTT2_RINCON_000E58F7F67C01400 1:false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 coordinatorUuid RINCON_000E58F7F67C01400
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_Album Dr. Heinrich Hoffmann - Der Struwwelpeter
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_AlbumArtUri http://192.168.188.38:1400/getaa?s=1&u=x-sonos-http:library%2ftracks%2fa4e8b0d9-c416-431b-96f2-448d1230972d%2f.mp3%3fsid%3d201%26flags%3d0%26sn%3d5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_Artist Johannes Ackner
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_Duration 0:14:23
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_ProtocolInfo sonos.com-http:*:audio/mpeg:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_Title Der Struwwelpeter
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_TrackUri x-sonos-http:library/tracks/a4e8b0d9-c416-431b-96f2-448d1230972d/.mp3?sid=201&flags=0&sn=5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 currentTrack_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 15:48:52 enqueuedMetadata_Album Reggae Gold 1997
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 15:48:52 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-05 15:48:52 enqueuedMetadata_Artist Tony Rebel
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 15:48:52 enqueuedMetadata_ItemId S://192.168.188.26/OwnMusic/Tony%20Rebel/If%20Jah.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 15:48:52 enqueuedMetadata_ParentId A:TRACKS
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 15:48:52 enqueuedMetadata_Title If Jah
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 15:48:52 enqueuedMetadata_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 groupName Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 mute false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 mute_LF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 mute_RF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 name Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_Album Unknown Album
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_AlbumArtUri http://192.168.188.38:1400/getaa?s=1&u=x-sonos-http:library%2ftracks%2fdb2e40d8-1706-4c8b-b623-c8ddc37dbf34%2f.mp3%3fsid%3d201%26flags%3d0%26sn%3d5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_Artist Unknown Artist
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_Duration 0:00:03
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_ProtocolInfo sonos.com-http:*:audio/mpeg:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_Title Doorbell.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_TrackUri x-sonos-http:library/tracks/db2e40d8-1706-4c8b-b623-c8ddc37dbf34/.mp3?sid=201&flags=0&sn=5
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 nextTrack_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 playmode NORMAL
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:55 state mute
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:27:56 transportState PLAYING
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 ts 1591367361736
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:29:22 uuid RINCON_000E58F7F67C01400
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:17:29 volume 13
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:17:29 volume_LF 100
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-05 16:17:29 volume_RF 100


Beta-User

#156
So war es in etwa gemeint.
Wie es optimal ist, kann ich auch nicht sagen, etwas "ungeschickt" ist, dass man STATE (devStateIcon-Bereich) und webCmd-Bereich nicht wirklich gut "zusammenkleben" kann (man kann aber die Zeilenausrichtung für STATE ändern, dann ist es etwas besser, ich weiß nur leider grade nicht mehr, wie... EDIT: devStateStyle style="text-align:right;;").

Meine weiteren Gedanken (ausdrücklich: noch nicht ausgegoren!):
- "1" ist testweise ok, aber "in echt" fände ich sprechendere Namen besser; man kann nur aus naheliegenden Gründen nicht "mute" verwenden; "mted" ist aber auch nicht so dolle?
- alles, was irgendwie "toggelt" würde ich eher über devStateIcon lösen, also insbesondere play/pause dorthin verschieben und nur stop nach webCmd? (kann aber sein, dass man dann Perl in stateFormat braucht. Bitte dann darauf achten, dass es möglichst "menschenlesbar" ist, es gibt auch User mit screenreadern, und die mögen aus guten Gründen nicht zu viel html-Code in stateFormat...
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

Zitat- alles, was irgendwie "toggelt" würde ich

Du, haben wir das auch vor ? das mit den Icons war vorhin noch ein Vorschlag, ich hab bloß ein Beispiel gezeigt in welche Richtung es gehen könnte  (eventuell wie ich es mir bei meinem Device vorstellen könnte), wie sehen denn die anderen die DeviceOverview für das Template ?

Otto123

@Beta-User Du hast mich weiter oben "gerügt" ich soll die ";" verdoppeln. Es ist doch so - oder irre ich?

  • Im Attribute setList ist es nur eins {bla;bla}
  • In der Raw Def sind es dann zwei {bla;;bla}
  • Im Template muss es doch auch nur eins  {bla;bla} sein?
Also zumindest funktioniert mein Code im Template mit einem  {bla;bla} aber bei Dir sind immer zwei drin  {bla;;bla} und in der Raw Def dann 4  ???

Mit setStateList hast Du mir ja eine Aufgabe gegeben :( das wird ja für einen Befehl schon schwierig - aber für die Liste! ;D
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

@Otto:
was die ";" angeht, bin ich auch immer am rätseln und übersehe vermutlich auch hin und wieder, wenn mir zu viele geliefert werden... Grundsätzlich ist aber RAW=attrTemplate.
(War nur irritiert, dass scheinbar nichts passiert).

setStateList ist einfacher als du denkst: im Zweifel Unsinn reinschreiben ;) . Bzw. eben nur die Dinge, die man auch in state haben will, wobei ich noch nicht weiß, was das sein soll (play/stop/pause?).

(Und an sich ist es so, dass ihr bestimmen könnt und dürft, wie das am Ende aussehen soll, ich versuche nur die Bausteinchen zu liefern, die man nutzen _kann_ - eben so, wie mir das sinnvoll erscheint, was aber keinesfalls "richtig" oder "besser" sein muß...)



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

#160
ZitatGrundsätzlich ist aber RAW=attrTemplate.
@Beta-User Ich wäre da jetzt hartnäckig und würde behaupten Attribute setList = attrTemplate
(nur bezüglich der semikolon!) was wirklich verwirrend ist, denn die \ müssen sein wie bei Raw Def.  :o

Ich habe mal noch etwas Code ausprobiert:
define Titel dummy
define MQTT2_RINCON_347E5C82560801400_notify_1 notify MQTT2_RINCON_347E5C82560801400:currentTrack_Title:.* {my $title=ReadingsVal($NAME,"enqueuedMetadata_Title","");;$title=~s/\s/_/g;;my $uri=ReadingsVal($NAME,"currentTrack_TrackUri","");;fhem("setreading Titel $title $uri") }


Da füllen sich dann Readings, wenn man etwas umspielt und danach geht dann sowas.
Radio starten
set MQTT2_RINCON.*:FILTER=name=Arbeitszimmer setAVTUri [Titel:Deutschlandfunk_Kultur];set MQTT2_RINCON.*:FILTER=name=Arbeitszimmer play

Ist jetzt ein sehr rudimentärer Ansatz - aber immerhin :)
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

TomLee

Otto, etwas kürzer  :P:

setAVTUri:textField BASE_TOPIC/DEV_ID/control {  "command": "setavtransporturi",  "input": "$EVTPART1","command": "play"}

Bei mir klappt zwar (noch?) nicht das abspielen eines Radiosenders mit der Uri aus currentTrack_TrackUri, aber mit einer lokalen Uri funzt das Beispiel oben.

Otto123

@TomLee Deine Variante funktioniert bei mir nicht. Setzen und play danach funktioniert .
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

TomLee

Gerade auch gemerkt, mal klappts mal nicht. Habs noch nicht verstanden.

87insane

Zitatmal klappts mal nicht
meist alt besetzte oder nachgelagerte events/readings - Steht also was altes drin, deswegen klappt´s/oder nicht.

Sorry für meine Abwesenheit.
Haben wir ein weiteres vorgehen? Aktuell glaube ich ein wenig, wir laufen überall hin. @Otto123, deine Versuche sind immer sehr interessant und impulsiv. Was passiert heute? :)
Mir geht es darum das wir teils doppelte Dinge machen. Sollen wir nicht irgendwo eine kleine Checkliste machen, von den Dingen, die wir aktuell wissen und wollen? Erweitern kann man die immer noch.

Geil wie weit das Projekt hier, bisher gekommen ist! Danke - Auch für die Peitsche (@lass ich mal lieber).

Gute Nacht!