Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

Otto123

Zitat von: TomLee am 04 Juni 2020, 11:32:31
Gibts für npm update einen extra Parameter, das man mit sudo npm update -g sonos2mqtt auch die Pre-Release Version bekommt oder geht das nicht ?
Wie auf der Webseite steht npm i sonos2mqtt@3.0.6-beta.2Das installiert die Version in den Pfad wo Du stehst -> ./node_modules/

Eigentlich braucht man das alles nicht global, d.h. man sucht sich eine Pfad seiner Wahl und installiert das dorthin. Du kannst auch mehrere Versionen parallel haben.
Also es braucht auch kein sudo.
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

#91
Hat schon einer schauen können ob die Änderungen drin sind? Er hat sogar im issue den Link aus der Mail übernommen.^^
Das nenne ich mal kooperativ und schnell. Mail ging Dienstag rauß.

Man kann es nun so aussehen lassen:
sonos2mqtt:fhem/music_player/RINCON_7828CAF427B201400/sonos/config:.* { json2nameValue($EVENT) }
sonos2mqtt:fhem/music_player/RINCON_7828CAF4289001400/sonos/config:.* { json2nameValue($EVENT) }


node /usr/local/lib/node_modules/sonos2mqtt/lib/index.js --clientid sonos2mqtt --discoveryprefix fhem --mqtt mqtt://"BENUTZER":"PW"@IP:PORT
--client ID ist nun in der Beta neu und erzeugt sonst mqttjsxxxxxx - zum testen hier sonos2mqtt (was macht hier für euch am meisten Sinn?)
--discoveryprefix ist alt aber sonst stünde da homeassistant... Also dann lieber FHEM :) :-P

Otto123

#92
schaut so aus. Teste aber gerade was anderes :(


ich habe mal noch gleich bei github einen issue wegen mute und dem switchtotv aufgemacht. Mal sehen :)
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

Zitat von: 87insane am 04 Juni 2020, 12:07:45
Man kann es nun so aussehen lassen:
sonos2mqtt:fhem/music_player/RINCON_7828CAF427B201400/sonos/config:.* { json2nameValue($EVENT) }
sonos2mqtt:fhem/music_player/RINCON_7828CAF4289001400/sonos/config:.* { json2nameValue($EVENT) }


node /usr/local/lib/node_modules/sonos2mqtt/lib/index.js --clientid sonos2mqtt --discoveryprefix fhem --mqtt mqtt://"BENUTZER":"PW"@IP:PORT
--client ID ist nun in der Beta neu und erzeugt sonst mqttjsxxxxxx - zum testen hier sonos2mqtt (was macht hier für euch am meisten Sinn?)
--discoveryprefix ist alt aber sonst stünde da homeassistant... Also dann lieber FHEM :) :-P
Die Client ID ist im Prinzip beliebig, und sobald die Bridge "steht", ist es auch irrelevant, jedenfalls solange keiner neue Topic-Strukturelemente erzeugt...

Zu dem Discovery-shit nochmal in aller Deutlichkeit: ABSCHALTEN! Wenn, dann auf homeassistant lassen und den Mist auf IO-Ebene zur Nichtauswertung vorsehen. Das, was darüber kommt, bringt uns NICHTS außer Verwirrung! (Zu meinem eigenen Verständnis: gibt es an der Sachaussage irgendwelche Zweifel? Übersehe ich was wesentliches?!?)

Grundsätzlich zu den Änderungen bei den Topics noch:
Man kann attrTemplate "zur einfachen Verwendung" nur gestalten, wenn man irgendwas hat, an dem man sich "immer" ortientieren kann. Zu viel Freiheiten in der Topic-Gestaltung sind daher zweischneidig, wir brauchen "irgendwas" "irgendwo" (am besten in der readingList), das man nach eindeutigen Maßstäben auswerten kann und das es dann erlaubt, auch den Rest damit zusammenzubauen. Das scheint hier das "RINCON_[A-F0-9]+" zu sein. Bitte dann aber bei der Auswertung für die Parameter an Tasmota orientieren, da kann auch "tele" (&Co) irgendwo stehen.

"sonos" hatte ich jetzt gestern noch in die bridgeRegexp bei MQTT2_CLIENT_general_bridge eingebaut, wenn ihr das jetzt in euren Beispielen zur Disposition stellt, stolpert vermutlich bald der übernächste drüber, der unbedingt mosquitto einsetzen will... (ich schreibe nicht ganz umsonst ins Wiki, dass man möglichst die defaults nur da ändert, wo es einen tieferen Sinn macht ;) .)
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

Hab mir die Readings zu den extra aktivierten --distinct-Messages jetzt genau angeschaut, die werden bei mir wieder deaktiviert.
Jeder einzelne Wert, ohne Ausnahme kommt auch in dem Rincon-Zweig vor.

Das "saubere" volume Reading bekommt man auch mit jsnMap im Rincon-Device.

defmod MQTT2_mqttjs_f5dbb5dd MQTT2_DEVICE mqttjs_f5dbb5dd
attr MQTT2_mqttjs_f5dbb5dd IODev MQTT2_Server
attr MQTT2_mqttjs_f5dbb5dd readingList sonos/status/wohnzimmer/state:.* state\
sonos/status/wohnzimmer/trackUri:.* trackUri\
sonos/status/wohnzimmer/track:.* { json2nameValue($EVENT) }\
sonos/status/wohnzimmer/volume:.* volume
attr MQTT2_mqttjs_f5dbb5dd room MQTT2_DEVICE

setstate MQTT2_mqttjs_f5dbb5dd STOPPED
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:32:52 Album Batbox
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 AlbumArtUri http://192.168.188.38:1400/getaa?u=x-file-cifs:%2f%2f192.168.188.26%2fOwnMusic%2fToene%2fDoorbell.mp3&v=81
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:32:52 Artist Miss Kittin
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 Duration 0:00:08
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 ItemId -1
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 ParentId -1
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 ProtocolInfo x-file-cifs:*:audio/mpeg:*
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 Title Doorbell.mp3
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 TrackUri x-file-cifs://192.168.188.26/OwnMusic/Toene/Doorbell.mp3
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:03 state STOPPED
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:33:02 trackUri x-file-cifs://192.168.188.26/OwnMusic/Toene/Doorbell.mp3
setstate MQTT2_mqttjs_f5dbb5dd 2020-06-04 15:31:39 volume 3


defmod MQTT2_RINCON_000E58F7F67C01400 MQTT2_DEVICE RINCON_000E58F7F67C01400
attr MQTT2_RINCON_000E58F7F67C01400 IODev MQTT2_Server
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" }

setstate MQTT2_RINCON_000E58F7F67C01400 mute
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 coordinatorUuid RINCON_000E58F7F67C01400
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_AlbumArtUri http://192.168.188.38:1400/getaa?u=x-file-cifs:%2f%2f192.168.188.26%2fOwnMusic%2fToene%2fDoorbell.mp3&v=81
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_Duration 0:00:08
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_ProtocolInfo x-file-cifs:*:audio/mpeg:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_Title Doorbell.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_TrackUri x-file-cifs://192.168.188.26/OwnMusic/Toene/Doorbell.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 currentTrack_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 enqueuedMetadata_AlbumArtUri http://192.168.188.38:1400/getaa?u=x-file-cifs:%2f%2f192.168.188.26%2fOwnMusic%2fToene%2fDoorbell.mp3&v=81
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 enqueuedMetadata_ItemId S://192.168.188.26/OwnMusic/Toene/Doorbell.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 enqueuedMetadata_ParentId A:TRACKS
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 enqueuedMetadata_Title Doorbell.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 enqueuedMetadata_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 groupName Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 mute false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 mute_LF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 mute_RF false
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 name Wohnzimmer
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 nextTrack_Duration 0:01:04
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 nextTrack_ItemId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 nextTrack_ParentId -1
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 nextTrack_ProtocolInfo x-file-cifs:*:audio/mpeg:*
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 nextTrack_Title 00 - soundTrack.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 nextTrack_TrackUri x-file-cifs://192.168.188.26/OwnMusic/Unknown Artist/00 - soundTrack.mp3
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 nextTrack_UpnpClass object.item.audioItem.musicTrack
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 playmode NORMAL
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 state mute
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 transportState PAUSED_PLAYBACK
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 ts 1591277933199
setstate MQTT2_RINCON_000E58F7F67C01400 2020-06-04 15:38:53 uuid RINCON_000E58F7F67C01400



Otto123

Ich habe mal noch etwas mit dem Template gespielt und ein paar AddOns gemacht. Ich will jetzt Beta-User nicht jeden Tag ein neues Template überhelfen, deswegen hab ich erst mal etwas eigenes gemacht (musste ja mal sein)
Für euch - wer will - zum probieren, das sollte so in der Raw Def gehen: :)
"wget -qO ./FHEM/lib/AttrTemplate/ottos.template https://raw.githubusercontent.com/heinz-otto/scripts/master/fhem/mein.template"
sleep 5;{ AttrTemplate_Initialize() }


Wenn das ne blöde Idee war dann haut mich ;)

@TomLee ich bin bisher auch der Meinung: eigentlich braucht man nur den RINCON Zweig.
ich überlege, ob es nicht Sinn macht so ein "Sonos Umgebung" Device zu machen, wo man die ganzen config Infos schön nach Devices reinordnet.

Gruß Otto
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

#96
Basierend auf deinem Beispiel mit dem joinGroup:textField-Widget-setter hätt ich ne Frage an Jörg.

Steht im textField immer EVTPART1 oder ist es möglich irgendwie EVTPARTX da raus zu holen? .

Also das man mehrere Parameter in einem Textfeld angeben kann, bspw. Leerzeichen getrennt wie bei Sonos-Modul der speak-Befehl,um sowas in der Art umzusetzen:

{
  "command": "notify",
  "input": {
    "trackUri": "https://cdn.smartersoft-group.com/various/pull-bell-short.mp3",
    "onlyWhenPlaying": false,
    "timeout": 10,
    "volume": 8,
    "delayMs": 700
  }
}


Otto das sleep 5, erscheint mir logisch (zumindest ne Pause), hab ich aber bisher merkwürdigerweise nie gebraucht.

Beta-User

@Otto: paßt schon!

Irgendwie ist der MQTT-Verkehr in großen Teilen an mir vorbeigegangen, aber ich habe weiter den Verdacht, dass "immer alles" gesendet wird. Würde daher mal folgendes vorschlagen:
BASE_TOPIC/DEV_ID:.* { my $rets = json2nameValue($EVENT,'',$JSONMAP);; my %cleaned = map { $_,$rets->{$_} } grep { ReadingsVal($NAME,$_,"unknown") ne $rets->{$_} } keys %{$rets};; return \%cleaned }

Und dann eben noch das jsonMap näher ansehen, in die Richtung, die TomLee vorgeschlagen hat.

Zitat von: TomLee am 04 Juni 2020, 16:07:25
Steht im textField immer EVTPART1 oder ist es möglich irgendwie EVTPARTX da raus zu holen? .
Ähm, also: $EVENT ist hier der setter und das, was in das Textfeld eingegeben wurde. Also ist $EVTPART0 der setter, $EVTPART1 das erste Wort (Leerzeichen-getrennt) usw.. Wenn du also eine Sprachausgabe haben willst mit mehreren Worten, könnte das schwierig werden, da ich davon ausgehe, dass die Ausgabe/der Text selbst in der Regel (eine zuvor noch unbekannte Zahl von) Leerzeichen beinhaltet bzw. das jedenfalls nicht ausgeschlossen ist. Damit kann man spekulieren, ob $EVTPART4 vorhanden ist, die Lautstärke oder die Dauer beinhaltet usw.. Kurz: das ist fehlerträchtig, mit den $EVTPART-Elementen zu arbeiten

Deswegen hatte ich irgendwo hier mal geschrieben, dass man aus $EVENT den setter(+Leerzeichen) via regex-substitute entfernen muß und das irgendwie nachbearbeiten. Um da voranzukommen, würde ich mal in den Quelltext von anderen Modulen schauen, wie die das lösen und ggf. v.a. mal einen Blick auf parseParams werfen. Falls da was umfangreicheres erforderlich ist, kann man das auch in myUtils auslagern und z.B. aus contrib gezielt nachladen, wenn man z.B. die sonos-Bridge "attrTemplatet" (macht z.B. ebus auch so, aktuell Zeile 2543: { Svn_GetFile("contrib/AttrTemplate/99_attrTmqtt2_ebus_Utils.pm", "FHEM/99_attrTmqtt2_ebus_Utils.pm", sub(){ CommandReload(undef, "99_attrTmqtt2_ebus_Utils") }) }).)

(Ansonsten bin ich jetzt erst mal raus, es sei denn, ihr reibt wieder an der Lampe...)
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

Der Spruch ist echt zutreffend. Aber ich hab schon mehr als drei mal dran gerieben :-P

Haben wir denn etwas, was der Programmierer ggf. noch anpassen kann für uns? Wenn ja übernehme ich das gern.
Ich wüsste aktuell nicht wie ich ansonsten helfen kann.

Otto123

#99
Versuch macht kluch:
nachricht:textField sonos/RINCON_347E5C82560801400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}

set xxxx nachricht 30 https://cdn.smartersoft-group.com/various/pull-bell-short.mp3
Dateien vom Server gehen auch, das wäre für mich die Vorstufe zur Sprachausgabe mit vorhandenen Mitteln ohne extra Sprach-Engine:
set player nachricht 15 x-file-cifs://ServerIP/SonosSpeak/Dateiname.mp3

Aber wie Beta-User schon schreibt mit dem Satz zur Ausgabe muss man das an andere Stelle machen.
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

Otto123

Zitat von: TomLee am 04 Juni 2020, 16:07:25
Otto das sleep 5, erscheint mir logisch (zumindest ne Pause), hab ich aber bisher merkwürdigerweise nie gebraucht.
ich wohne hier mit 5Mbit Downloadrate - wenn das die 1 k Datei eine Sekunde zum Nachdenken braucht. Ich werfe ja beide Kommandos in die Raw Def da überholt doch der zweite Befehl den Ersten :)
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

Zitat von: 87insane am 04 Juni 2020, 16:25:31
Haben wir denn etwas, was der Programmierer ggf. noch anpassen kann für uns? Wenn ja übernehme ich das gern.
Ich wüsste aktuell nicht wie ich ansonsten helfen kann.

Falls (!) es so ist, dass alle Status-updates immer alle Infos beinhalten, hätte ich einen ersten Wunsch:
- abschalten bzw. abschaltbar, und nur Differenzmeldungen schicken;
- volle Infos nur auf Anforderung (ähnlich der Announce-Anfordung bei shelly, wenn ich das richtig verstanden habe).

Diese (von mir so empfundene) Neigung, Datenschleudern zu bauen, nur weil es mit JSON so easy ist, empfinde ich als echt nervige Unsitte... Jedenfalls habe ich den Sinn dahinter noch nicht verstanden. (Wofür gibt es "last will"?)

Damit wäre ich bei Wunsch 2:
"last will" unterstützen: Damit weiß man, dass die Verbindung steht, und braucht keine weiteren Infos, weil man davon ausgehen kann, dass sich nichts geändert hat und kann ganz bequem mit den reinen Differenzmeldungen (neuer Track, andere Lautstäre...) leben. Und man braucht keine weitere Überwachung, dass "das Ding noch lebt", hat saubere Events, wenn nicht (und kann das tracken, um den Entwickler zu nerven...), alles easy und "works as designed" (@MQTT-Prinzipien).
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

Cool.

Hab ich irgendwas von Sprachausgabe geschrieben ? Im Prinzip gings mir nur darum die Lautstärke beim File abspielen mitzugeben.




War der ../music_player/... Zweig die ganze Zeit da oder kam der jetzt mit dem update ?

fhem/music_player/RINCON_000E58F7F67C01400/sonos/config:.* { json2nameValue($EVENT) }

87insane

Zitat- abschalten bzw. abschaltbar, und nur Differenzmeldungen schicken;
- volle Infos nur auf Anforderung (ähnlich der Announce-Anfordung bei shelly, wenn ich das richtig verstanden habe).

Wie ich es verstanden habe und weiter gebe:
- event on change so zu sagen...
- announce wie shelly/tasmota
- LWT Unterstützung

TomLee

Auch eigentlich unnötig:

defmod MQTT2_mqttjs_bffaf22d MQTT2_DEVICE mqttjs_bffaf22d
attr MQTT2_mqttjs_bffaf22d IODev MQTT2_Server
attr MQTT2_mqttjs_bffaf22d readingList mqttjs_bffaf22d:fhem/music_player/RINCON_000E58F7F67C01400/sonos/config:.* { json2nameValue($EVENT) }
attr MQTT2_mqttjs_bffaf22d room MQTT2_DEVICE

setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 availability_topic sonos/connected
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_1 adv-command
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_10 playmode
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_11 previous
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_12 queue
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_13 seek
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_14 selecttrack
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_15 setavtransporturi
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_16 sleep
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_17 speak
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_18 stop
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_19 switchtoline
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_2 command
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_20 switchtoqueue
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_21 switchtotv
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_22 toggle
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_23 unmute
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_24 volume
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_25 volumedown
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_26 volumeup
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_3 joingroup
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_4 leavegroup
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_5 mute
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_6 next
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_7 notify
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_8 pause
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 available_commands_9 play
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 command_topic sonos/RINCON_000E58F7F67C01400/control
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 device_class speaker
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 device_identifiers_1 RINCON_000E58F7F67C01400
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 device_manufacturer Sonos
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 device_name Wohnzimmer
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 icon mdi:speaker
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 json_attributes true
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 json_attributes_topic sonos/RINCON_000E58F7F67C01400
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 name Wohnzimmer
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 payload_available 2
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 state_topic sonos/RINCON_000E58F7F67C01400
setstate MQTT2_mqttjs_bffaf22d 2020-06-04 16:11:45 unique_id sonos2mqtt_RINCON_000E58F7F67C01400_speaker