Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

Otto123

Es gibt jetzt zwei Wiki Artikel für die Einrichtung und die Ergebnisse aus diesem Thread:
https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Sonos2Mqtt
https://wiki.fhem.de/wiki/Sonos2mqtt

Dazu gibt es auch noch einen Beitrag in meinem Blog:
https://heinz-otto.blogspot.com/2020/05/sonos2mqtt-so-weit-bin-ich.html

########
Der folgende Text ist der Original Post und entspricht nach wenigen Tagen nicht mehr dem Stand der Entwicklungen
Viele Spaß beim Testen
########

Hallo liebe FHEM-Sonos User,

Für mich ist dies mehr so ein Versuch - aus Interesse. Vielleicht gibt es ja interessierte Mitstreiter oder die eine oder andere Idee vom Spezi :)

Ich verwende das Sonos Modul im minimalem Umfang, die Visualisierung spielt dabei für mich keine Rolle:

  • play, pause, volume,
  • Gruppierung,
  • start Radio, Sprachausgaben.
Ich habe eigentlich wenig Probleme damit, mich interessiert mehr so die Vereinheitlichung der Anbindung von Geräten.

sonos2mqtt ist (ein 2 Jahre altes?) Projekt welches aktiv entwickelt wird, offenbar primär für die Anbindung an Homeassistent. Aber von der Sache her ist es eine Bridge Sonos - MQTT.

Installation
Ich habe die lokale Installation gewählt, ich habe erstmal eine separate Linux Instanz verwendet. Aber aus meiner Sicht ist die Sache unkritisch, man kann es in jede Umgebung einbinden.  Falls noch kein nodejs existiert muss man das zuerst installieren (ab Pi2):
sudo bash -c "curl -sL https://deb.nodesource.com/setup_10.x | bash -"
sudo apt-get install nodejs

Dann sonos2mqtt installieren (siehe Projekt Webseite):
sudo npm install -g sonos2mqtt
sudo npm install pm2 -g

Mal schauen ob es geklappt hat
node /node_modules/sonos2mqtt/lib/index.js --version
Wenn man noch nicht hat, braucht man in FHEM eine MQTT Instanz, man könnte erstmal eine separate machen:
define sonosmqtt MQTT2_SERVER 1800 global

Erster Test
Dann kann man den nodejs Service schon mal zum Test starten (den automatischen Start würde ich später über pm2 machen):
node /node_modules/sonos2mqtt/lib/index.js --mqtt mqtt://myuser:the_secret_password@192.168.0.3:1800
Per autocreate wird jetzt ein MQTT2_Device entstehen. Die CID lautet z.B. mqttjs_5d4378c3 - die 8-stellige Hexzahl ist zufällig. Ich habe noch keine Möglichkeit gefunden diese fest zu vergeben. So würde bei jedem Neustart ein neues Device entstehen.
Bei dem Ersten habe ich dann mit diesem bridgeRegExp experimentiert.
attr Device bridgeRegexp sonos/RINCON_([0-9A-F]+):.* "Sonos_$1"\
homeassistant/music_player/RINCON_([0-9A-F]+)/sonos/config:.* "Sonos_$1"

Danach entstehen getrennte MQTT2_Devices die, die jeweiligen Sonos Geräte repräsentieren.
Übrig bleibt noch ein Device mit Topics in der Art. Zusätzlich dem connect Status. 
sonos/status/kueche/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/kueche/avtransport:.* { json2nameValue($EVENT) }

Hier habe ich erstmal keine Idee wie man diese Topics in die entstandenen Geräte "sortiert" - vielleicht auch gar nicht nötig?.
Ob man avtransport und renderingcontrol wirklich braucht? Es scheint, es sind ein Großteil redundante Informationen.

Sonos Player abbilden
Ich habe dann mal manuell Geräte gebaut.
defmod MQTT2_Sonos_347E5C82560801400 MQTT2_DEVICE Sonos_347E5C82560801400
attr MQTT2_Sonos_347E5C82560801400 IODev sonosmqtt
attr MQTT2_Sonos_347E5C82560801400 readingList homeassistant/music_player/RINCON_347E5C82560801400/sonos/config:.* { json2nameValue($EVENT) }\
sonos/RINCON_347E5C82560801400:.* { json2nameValue($EVENT) }\
sonos/status/arbeitszimmer/renderingcontrol:.* { json2nameValue($EVENT) }\
sonos/status/arbeitszimmer/avtransport:.* { json2nameValue($EVENT) }
attr MQTT2_Sonos_347E5C82560801400 room MQTT2_DEVICE
attr MQTT2_Sonos_347E5C82560801400 setList stop:noArg sonos/RINCON_347E5C82560801400/control { "command": "stop"}\
play:noArg sonos/RINCON_347E5C82560801400/control { "command": "play"}\
Volume:slider,0,1,100 sonos/RINCON_347E5C82560801400/control { "command": "volume",  "input": $EVTPART1}

Damit ist der Player verfügbar und ich kann erstmal pause,play und volume.

Aber da geht prinzipiell mehr, z.B einen Sound abspielen
set mqtt2s publish sonos/RINCON_B8E93743FCBE01400/control {
  "command": "notify",
  "input": {
    "trackUri": "https://cdn.smartersoft-group.com/various/pull-bell-short.mp3",
    "onlyWhenPlaying": false,
    "timeout": 10,
    "volume": 15,
    "delayMs": 700
  }
}

Aber die Beispiele sind sehr dürftig, die Beschreibung der Schnittstelle für mich nicht sehr aussagekräftig.

Da wären jetzt zwei Seiten zu betrachten:
Die Einbindung in MQTT und der Bau eines "bedienbaren" Players

  • ich weiß von mqtt nur so ein paar Basics, ich hoffe auf Tipps und Ideen
  • Welche Geräte baut man jetzt und wie verteilt man Funktionen? FHEM-Sonos hat ja auch eine Struktur, da kann man vielleicht anlehnen - oder gerade nicht?
  • Am Ende hat man dann vieleicht ein Template und die Einrichtung geht ganz easy. :)
Das Verständnis: Wie funktioniert diese Schnittstelle.

  • Es gibt ja offenbar noch weitere Programme vom gleichen Autor. Node-sonos-ts und sonos-cli. Vielleicht hilft das zum Verstehen.
  • Mich wundert, dass man im Netz ganz wenig findet. Entweder gibt es keine Anwender - oder in Homeassistent funktioniert das völlig ohne Fragen und automatisch?
  • Ich werde also mal eine Homeassistent Instanz aufbauen und schauen was da passiert und funktioniert. ;)

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

87insane

#1
Überflogen, bin dabei...!
Lese es aber nochmal in Ruhe. War aber beireits nach deiner Erwähnung von sonos2mqtt im anderen Thread damit am testen :)

Im Thema mqtt bin ich technisch drin. Was die fhem Umwandlung angeht würde ich so 50% sagen. Hier ist in meinen Augen Beta-User verantwortlich. Klingt hart aber zb bei der Umwandlung von meinen mqtt Test Skripten via powershell hat er sehr unterstützt. Ohne in den thread zu sehen, bin ich sicher du auch ;)
Ich weiß aber worauf das ganze hinaus läuft und freue mich unterstützen zu dürfen :)

Daumen hoch!

Gesendet von meinem LM-G810 mit Tapatalk

87insane

#2
Ach ja...

ich glaube dein
node /node_modules/sonos2mqtt/lib/index.js --mqtt mqtt://myuser:the_secret_password@192.168.0.3:1800
ist so einfach zufällig, wenn du die ID nicht mit gibst.

Options:
  --prefix           instance name. used as mqtt client id and as prefix for
                     connected topic


{
  "command": "adv-command",
  "input": {
    "cmd": "RenderingControlService.SetVolume",
    "val": {
      "InstanceID": 0,
      "Channel": "Master",
      "DesiredVolume": 20
    }
  },

}



EDIT: Jetzt sehe ich was du meinst! Ich glaube das ist egal. Wir sprechen ja zu dem Zweig sonos/status/... oder sonos/.... oder sonos/RINCON.*
Ich weis nicht warum die blablabla:hier/ist/der/eigentliche/zweig in FHEM immer davor stehen. In meinen Augen gibt es immer eine Bridge XY.
Diese (egal wie sie heißt nach neustart) sendet an den Zweig. --discoveryprefix sollte aber angepasst werden. Hier steht sonst eben homeassistant.

Otto123

Der --prefix ändert den Topic aber eben nicht die CID aus der dann die Form Devicename wird MQTT2_mqttjs_xxxxxxxx
Damit erzeugt MQTT2 immer ein neues Device.
Muss nochmal nachlesen was Rudi da genau implementiert hatte, stand irgendwo.


Wozu der --discoveryprefix ist habe ich nicht verstanden. Ja das führt zu dem Topic homeassistent - aber das ist mir irgendwie auch egal ob der jetzt Willi oder sonstwas heisst :)
Für HA muss der Topic ja offenbar wichtig sein, mir gelingt es auf die Schnelle nicht den HA zu bewegen mit sonos2mqtt etwas zu machen. Also automatisch ist offenbar nichts  ::)

Der HA kennt Sonos von sich aus (UPNP?) wozu braucht es dann denn dort überhaupt sonos2mqtt?
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

#4
Kenne den HA nicht... ist mir in dem Fall auch egal. Es  gibt so viele die ich noch testen muss :(

Wenn du die CID aus der readingslist entfernst, wird auch kein neues Gerät mehr angelegt. Also wäre es das Verhalten, wie aus jeder anderen Bridge. Müsste bei Erstellung der Bridge nur beachtet werden.

Beispiel bei mir...

sonos/connected:.* connected
homeassistant/music_player/RINCON_5CAAFD79D52801400/sonos/config:.* { json2nameValue($EVENT) }
homeassistant/music_player/RINCON_7828CAF4289001400/sonos/config:.* { json2nameValue($EVENT) }
homeassistant/music_player/RINCON_7828CAF427B201400/sonos/config:.* { json2nameValue($EVENT) }
sonos/status/wohnzimmer/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/k\xc3\xbcche/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/badezimmer/avtransport:.* { json2nameValue($EVENT) }
sonos/status/badezimmer/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/RINCON_7828CAF427B201400:.* { json2nameValue($EVENT) }
sonos/RINCON_7828CAF4289001400:.* { json2nameValue($EVENT) }
sonos/RINCON_5CAAFD79D52801400:.* { json2nameValue($EVENT) }
sonos/status/wohnzimmer/avtransport:.* { json2nameValue($EVENT) }
sonos/status/k\xc3\xbcche/avtransport:.* { json2nameValue($EVENT) }



Jeder Player/jede Box liefert über diese Bridge:
1 x homeassistant/music_player/RINCON_ID/sonos/config:.* { json2nameValue($EVENT) }
1 x sonos/status/PLAYERNAME/SONOS_BOX_NAME/renderingcontrol:.* { json2nameValue($EVENT) }
1 x sonos/status/PLAYERNAME/SONOS_BOX_NAME/avtransport:.* { json2nameValue($EVENT) }
1 x sonos/RINCON_ID:.* { json2nameValue($EVENT) }

Geht ganz gut. Steuere noch nix und mache auch nur Tests bisher... Aber könnte man mit diversen Bridges vergleichen.

Hast du eine Version vom installierten sonos2mqtt oder aber einen online Status der Bridge? Leider habe ich das nicht.

Otto123

Ja hast Du Recht. Mein Fehler: beim bridgeregexp setzen wird ja die ReadingsList erstmal gelöscht.

ReadingsList wieder modfiziert einfügen und geht :)
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

Aber dein Part mit der regex ist ja eh schon 3/4 der arbeit! Danke!

Den Rest können wir abgucken vom eigentlichen Modul oder neu erfinden. Das waren aber lange 2stunden :-P

Gesendet von meinem LM-G810 mit Tapatalk


hoppel118

#7
Ich lese hier auch mal mit.

Neulich habe ich mit Beta-User und Rudi meine Fröling Heizung per MQTT2-Server angebunden. Mehr Erfahrung habe ich auf dem Gebiet MQTT auch noch nicht.

Der MQTT Client der Open Source Software ,,p4d" zur Anbindung meiner Heizung war ursprünglich auch für homeassistant geschrieben. Der Entwickler dahinter war aber offen für alles mögliche und hat einige Anpassungen für FHEM und Openhab vorgenommen, so dass man nun den homeassistant spezifischen Kram deaktivieren kann.

Momentan bin ich erstmal ein paar Wochen unterwegs und nicht am Rechner.

Viele Grüße Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Otto123

Zitat von: 87insane am 31 Mai 2020, 21:25:26

Hast du eine Version vom installierten sonos2mqtt oder aber einen online Status der Bridge? Leider habe ich das nicht.
Wie meinst Du das.

Die Bridge erzeugt ein Reading connected, da steht 0 oder 2 drin
Die Version zeigt er beim start mit --version

BTW: Ich bekomme beim HA das MQTT addon nicht konfiguriert. Das ist wieder ne andere Sprache, ne andere Philosophie, die Beschreibung und Doku vom Insider für Insider  :'( Ich hatte gehofft das geht ganz einfach  :-X

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

87insane

#9
ZitatWie meinst Du das.
Hätte gerne in der Bridge ein Reading mit Version und dem Status ob online/offline. Haben bisher alle Bridges mit denen ich bei MQTT arbeite. Weiß nur noch nicht wie ich es bei sonos2mqtt rauß ziehen kann :\

Also ich hab HA schon ein paar mal bedient und auch bei Kollegen gesehen. Allerdings ist das in meinen Augen hier echt OT. Ich habe null gegen andere Plattformen aber das ist ggf echt einen eigenen Thread wert (das ich das mal sagen werde  ???). Sicher ist aber das die Kollegen auf einer der anderen Seiten sehr kooperativ sind! Hatte durch andere Projekte immer mal wieder Kontakt mit der "anderen Seite" :-P.
Spaß bei Seite. Das Modul kann wie alle anderen auch einen Schalter bekommen das die HA individuellen Dinge aus sind. Hat man z.B. sehr sichtbar auch in der SIDOH Bridge.

Ich spiele gerade noch mit den bridgeRegexp herum. Die gefallen mir so nicht.
Die bisherigen...
sonos/RINCON_([0-9A-F]+):.* "Sonos_$1"\
homeassistant/music_player/RINCON_([0-9A-F]+)/sonos/config:.* "Sonos_$1"



erzeugen diese Zweige:

Das bekommen wir ein mal:
sonos/connected:.* connected

Ab hier von jedem Player ein mal:
homeassistant/music_player/RINCON_5CAAFD79D52801400/sonos/config:.* { json2nameValue($EVENT) }
sonos/status/wohnzimmer/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/wohnzimmer/avtransport:.* { json2nameValue($EVENT) }
sonos/RINCON_7828CAF427B201400:.* { json2nameValue($EVENT) }


Erzeugt wird dadurch:
- Jeder Player als: MQTT2_sonos_RINCON_HEX_ID_ und ReadingsList
- Ein Gerät mit dem Namen MQTT2_mqttjs_ID und ReadingsList homeassistant/music_player/RINCON_HEX_ID/sonos/config:.* { json2nameValue($EVENT) } ------ Für alle Player gemeinsam
- Ein Gerät mit dem Namen MQTT2_sonos_connected_ und ReadingsList sonos/connected:.* connected ------- In meinen Augen der Status der Bridge
- Ein Gerät mit dem Namen MQTT2_sonos_status_ und ReadingsList sonos/status/PLAYERNAME/avtransport:.* { json2nameValue($EVENT) } und sonos/status/PLAYERNAME/renderingcontrol:.* { json2nameValue($EVENT) } ------ Für alle Player gemeinsam


Jetzt müssten in meinen Augen zu den Playern auch:
- Die Komandos, diese sind im mqttjs_ID Gerät
Internals:
   CFGFN     
   CID        mqttjs_6ebdc533
   DEF        mqttjs_6ebdc533
   DEVICETOPIC MQTT2_mqttjs_6ebdc533
   FUUID      5ed428a3-f33f-fcb4-c175-e05d47dba7242d57
   IODev      sonosmqtt
   NAME       MQTT2_mqttjs_6ebdc533
   NR         6247
   STATE      ???
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-05-31 23:58:59   availability_topic sonos/connected
     2020-05-31 23:58:59   available_commands_1 adv-command
     2020-05-31 23:58:59   available_commands_10 playmode
     2020-05-31 23:58:59   available_commands_11 previous
     2020-05-31 23:58:59   available_commands_12 queue
     2020-05-31 23:58:59   available_commands_13 seek
     2020-05-31 23:58:59   available_commands_14 selecttrack
     2020-05-31 23:58:59   available_commands_15 setavtransporturi
     2020-05-31 23:58:59   available_commands_16 sleep
     2020-05-31 23:58:59   available_commands_17 speak
     2020-05-31 23:58:59   available_commands_18 stop
     2020-05-31 23:58:59   available_commands_19 switchtoline
     2020-05-31 23:58:59   available_commands_2 command
     2020-05-31 23:58:59   available_commands_20 switchtoqueue
     2020-05-31 23:58:59   available_commands_21 switchtotv
     2020-05-31 23:58:59   available_commands_22 toggle
     2020-05-31 23:58:59   available_commands_23 unmute
     2020-05-31 23:58:59   available_commands_24 volume
     2020-05-31 23:58:59   available_commands_25 volumedown
     2020-05-31 23:58:59   available_commands_26 volumeup
     2020-05-31 23:58:59   available_commands_3 joingroup
     2020-05-31 23:58:59   available_commands_4 leavegroup
     2020-05-31 23:58:59   available_commands_5 mute
     2020-05-31 23:58:59   available_commands_6 next
     2020-05-31 23:58:59   available_commands_7 notify
     2020-05-31 23:58:59   available_commands_8 pause
     2020-05-31 23:58:59   available_commands_9 play
     2020-05-31 23:58:59   command_topic   sonos/RINCON_5CAAFD79D52801400/control
     2020-05-31 23:58:59   device_class    speaker
     2020-05-31 23:58:59   device_identifiers_1 RINCON_5CAAFD79D52801400
     2020-05-31 23:58:59   device_manufacturer Sonos
     2020-05-31 23:58:59   device_name     Badezimmer
     2020-05-31 23:58:59   icon            mdi:speaker
     2020-05-31 23:58:59   json_attributes true
     2020-05-31 23:58:59   json_attributes_topic sonos/RINCON_5CAAFD79D52801400
     2020-05-31 23:58:59   name            Badezimmer
     2020-05-31 23:58:59   payload_available 2
     2020-05-31 23:58:59   state_topic     sonos/RINCON_5CAAFD79D52801400
     2020-05-31 23:59:01   subscriptions   sonos/+/control sonos/cmd/+ sonos/set/+/+
     2020-05-31 23:58:59   unique_id       sonos2mqtt_RINCON_5CAAFD79D52801400_speaker
Attributes:
   IODev      sonosmqtt
   readingList mqttjs_6ebdc533:homeassistant/music_player/RINCON_7828CAF4289001400/sonos/config:.* { json2nameValue($EVENT) }
mqttjs_6ebdc533:homeassistant/music_player/RINCON_7828CAF427B201400/sonos/config:.* { json2nameValue($EVENT) }
mqttjs_6ebdc533:homeassistant/music_player/RINCON_5CAAFD79D52801400/sonos/config:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE


- Die Einstellungen der Player und auch die Trackinfos. Diese sind im MQTT_sonos_status Gerät:
Internals:
   CFGFN     
   CID        sonos_status_
   DEF        sonos_status_
   DEVICETOPIC MQTT2_sonos_status_
   FUUID      5ed428a3-f33f-fcb4-d7cf-847acbc230c4f24e
   IODev      sonosmqtt
   NAME       MQTT2_sonos_status_
   NR         6248
   STATE      ???
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-05-31 23:59:04   AVTransportURI  x-sonosapi-stream:s306651?sid=254&flags=8224&sn=0
     2020-05-31 23:59:00   AVTransportURIMetaData_AlbumArtUri https://img.ardmediathek.de/standard/00/42/92/13/72/-295433861/1x1/576?mandant=ard
     2020-05-31 23:59:04   AVTransportURIMetaData_ItemId -1
     2020-05-31 23:59:04   AVTransportURIMetaData_ParentId -1
     2020-05-31 23:59:04   AVTransportURIMetaData_Title DJ Mag Germany Radio by iloveradio.de
     2020-05-31 23:59:04   AVTransportURIMetaData_UpnpClass object.item.audioItem.audioBroadcast
     2020-05-31 23:59:04   AlarmRunning    false
     2020-05-31 23:59:01   Bass            0
     2020-05-31 23:59:04   CurrentCrossfadeMode false
     2020-05-31 23:59:04   CurrentMediaDuration NOT_IMPLEMENTED
     2020-05-31 23:59:04   CurrentPlayMode NORMAL
     2020-05-31 23:59:04   CurrentRecordQualityMode NOT_IMPLEMENTED
     2020-05-31 23:59:04   CurrentSection  0
     2020-05-31 23:59:04   CurrentTrack    1
     2020-05-31 23:59:04   CurrentTrackDuration 0:00:00
     2020-05-31 23:59:04   CurrentTrackMetaData_AlbumArtUri http://192.168.20.71:1400/getaa?s=1&u=x-sonosapi-stream:s306651%3fsid%3d254%26flags%3d8224%26sn%3d0
     2020-05-31 23:59:04   CurrentTrackMetaData_ItemId -1
     2020-05-31 23:59:04   CurrentTrackMetaData_ParentId -1
     2020-05-31 23:59:04   CurrentTrackMetaData_ProtocolInfo sonos.com-http:*:audio/mpeg:*
     2020-05-31 23:59:04   CurrentTrackMetaData_Title x-sonosapi-stream:s306651?sid=254&flags=8224&sn=0
     2020-05-31 23:59:04   CurrentTrackMetaData_TrackUri x-sonosapi-stream:s306651?sid=254&flags=8224&sn=0
     2020-05-31 23:59:04   CurrentTrackMetaData_UpnpClass object.item.audioItem.musicTrack
     2020-05-31 23:59:04   CurrentTrackURI aac://http://stream02.iloveradio.de/iloveradio4-aac.mp3
     2020-05-31 23:59:04   CurrentTransportActions Set, Stop, Play
     2020-05-31 23:59:00   CurrentValidPlayModes SHUFFLE,REPEAT,REPEATONE,CROSSFADE
     2020-05-31 23:59:04   DirectControlIsSuspended false
     2020-05-31 23:59:04   EnqueuedTransportURI x-sonosapi-stream:s306651?sid=254&flags=8224&sn=0
     2020-05-31 23:59:00   EnqueuedTransportURIMetaData_AlbumArtUri https://img.ardmediathek.de/standard/00/42/92/13/72/-295433861/1x1/576?mandant=ard
     2020-05-31 23:59:04   EnqueuedTransportURIMetaData_ItemId -1
     2020-05-31 23:59:04   EnqueuedTransportURIMetaData_ParentId -1
     2020-05-31 23:59:04   EnqueuedTransportURIMetaData_Title DJ Mag Germany Radio by iloveradio.de
     2020-05-31 23:59:04   EnqueuedTransportURIMetaData_UpnpClass object.item.audioItem.audioBroadcast
     2020-05-31 23:59:01   HeadphoneConnected false
     2020-05-31 23:59:01   Loudness        true
     2020-05-31 23:59:01   Mute_LF         false
     2020-05-31 23:59:01   Mute_Master     false
     2020-05-31 23:59:01   Mute_RF         false
     2020-05-31 23:59:04   NumberOfTracks  2
     2020-05-31 23:59:01   OutputFixed     false
     2020-05-31 23:59:04   PlaybackStorageMedium NETWORK
     2020-05-31 23:59:04   PossiblePlaybackStorageMedia NONE, NETWORK
     2020-05-31 23:59:04   PossibleRecordQualityModes NOT_IMPLEMENTED
     2020-05-31 23:59:04   PossibleRecordStorageMedia NOT_IMPLEMENTED
     2020-05-31 23:59:01   PresetNameList  FactoryDefaults
     2020-05-31 23:59:04   RecordMediumWriteStatus NOT_IMPLEMENTED
     2020-05-31 23:59:04   RecordStorageMedium NOT_IMPLEMENTED
     2020-05-31 23:59:04   RestartPending  false
     2020-05-31 23:59:04   SleepTimerGeneration 0
     2020-05-31 23:59:04   SnoozeRunning   false
     2020-05-31 23:59:01   SpeakerSize     5
     2020-05-31 23:59:01   SubCrossover    0
     2020-05-31 23:59:01   SubEnabled      true
     2020-05-31 23:59:01   SubGain         0
     2020-05-31 23:59:01   SubPolarity     0
     2020-05-31 23:59:04   TransportPlaySpeed NOT_IMPLEMENTED
     2020-05-31 23:59:04   TransportState  STOPPED
     2020-05-31 23:59:04   TransportStatus OK
     2020-05-31 23:59:01   Treble          0
     2020-05-31 23:59:01   Volume_LF       100
     2020-05-31 23:59:01   Volume_Master   18
     2020-05-31 23:59:01   Volume_RF       100
     2020-05-31 23:59:04   associatedWith  MQTT2_sonos_bridge
Attributes:
   IODev      sonosmqtt
   readingList sonos/status/wohnzimmer/avtransport:.* { json2nameValue($EVENT) }
sonos/status/badezimmer/avtransport:.* { json2nameValue($EVENT) }
sonos/status/wohnzimmer/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/k\xc3\xbcche/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/badezimmer/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/k\xc3\xbcche/avtransport:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE


Was ich noch noch nicht weiß, wie ich über bridgeRegexp die zusammenhängenden Infos auch zusammen führen kann.
- Beispielsweise trägt das mqttjs Gerät ein Reading (device_name) mit dem Playernamen als Inhalt. Bei mir sind das Raumnamen.
- Gleichzeitig trägt das Player Device ein Reading (name) mit dem Playernamen als Inhalt bei sich (Auch Player oder bei mir Raumname).
- Was mir noch sorgen macht ist das status Gerät. Hier steht kein Name oder so drin. Hier hat man in meinen Augen nur die IP als Indiz, welches Gerät hier gerade Party macht. Diese auch nicht direkt sondern aus dem Reading "CurrentTrackMetaData_AlbumArtUri" ausgefiltert.

Wenn wir das hinbekommen würden, hätten wir eine laufende Bridge und könnten das einfach zu einem Template umwandeln. So wie auch die SIDOH Bridge.
Ich glaube das die o.g. Zusammenhänge zwischen den Geräten sicher auch dafür sorgen können, das diese zu einem DEV werden via Regex. Aber die Regex packe ich nicht :(
Die beiden Geräte mit dem RINCON_.* bekomme ich noch hin aber die Zuordnung zu dem Playernamen?!

So sollte ein Gerät aussehen in meinen Augen:
Internals:
   CFGFN     
   CID        sonos_RINCON_7828CAF427B201400_
   DEF        sonos_RINCON_7828CAF427B201400_
   DEVICETOPIC MQTT2_sonos_RINCON_7828CAF427B201400_
   FUUID      5ed428a5-f33f-fcb4-47bf-1e8f246956108ee7
   IODev      sonosmqtt
   LASTInputDev sonosmqtt
   MSGCNT     4
   NAME       MQTT2_sonos_RINCON_7828CAF427B201400_
   NR         6249
   STATE      ???
   TYPE       MQTT2_DEVICE
   sonosmqtt_MSGCNT 4
   sonosmqtt_TIME 2020-06-01 00:40:14
   READINGS:
     2020-06-01 00:40:09   Bass            0
     2020-06-01 00:40:09   HeadphoneConnected false
     2020-06-01 00:40:09   Loudness        true
     2020-06-01 00:40:09   Mute_LF         false
     2020-06-01 00:40:09   Mute_Master     false
     2020-06-01 00:40:09   Mute_RF         false
     2020-06-01 00:40:09   OutputFixed     false
     2020-06-01 00:40:09   PresetNameList  FactoryDefaults
     2020-06-01 00:40:09   SpeakerSize     5
     2020-06-01 00:40:09   SubCrossover    0
     2020-06-01 00:40:09   SubEnabled      true
     2020-06-01 00:40:09   SubGain         0
     2020-06-01 00:40:09   SubPolarity     0
     2020-06-01 00:40:09   Treble          0
     2020-06-01 00:40:09   Volume_LF       100
     2020-06-01 00:40:09   Volume_Master   20
     2020-06-01 00:40:09   Volume_RF       100
     2020-05-31 23:59:01   associatedWith  MQTT2_sonos_bridge
     2020-06-01 00:40:09   availability_topic sonos/connected
     2020-06-01 00:40:09   available_commands_1 adv-command
     2020-06-01 00:40:09   available_commands_10 playmode
     2020-06-01 00:40:09   available_commands_11 previous
     2020-06-01 00:40:09   available_commands_12 queue
     2020-06-01 00:40:09   available_commands_13 seek
     2020-06-01 00:40:09   available_commands_14 selecttrack
     2020-06-01 00:40:09   available_commands_15 setavtransporturi
     2020-06-01 00:40:09   available_commands_16 sleep
     2020-06-01 00:40:09   available_commands_17 speak
     2020-06-01 00:40:09   available_commands_18 stop
     2020-06-01 00:40:09   available_commands_19 switchtoline
     2020-06-01 00:40:09   available_commands_2 command
     2020-06-01 00:40:09   available_commands_20 switchtoqueue
     2020-06-01 00:40:09   available_commands_21 switchtotv
     2020-06-01 00:40:09   available_commands_22 toggle
     2020-06-01 00:40:09   available_commands_23 unmute
     2020-06-01 00:40:09   available_commands_24 volume
     2020-06-01 00:40:09   available_commands_25 volumedown
     2020-06-01 00:40:09   available_commands_26 volumeup
     2020-06-01 00:40:09   available_commands_3 joingroup
     2020-06-01 00:40:09   available_commands_4 leavegroup
     2020-06-01 00:40:09   available_commands_5 mute
     2020-06-01 00:40:09   available_commands_6 next
     2020-06-01 00:40:09   available_commands_7 notify
     2020-06-01 00:40:09   available_commands_8 pause
     2020-06-01 00:40:09   available_commands_9 play
     2020-06-01 00:40:09   command_topic   sonos/RINCON_7828CAF427B201400/control
     2020-06-01 00:40:14   coordinatorUuid RINCON_7828CAF427B201400
     2020-06-01 00:40:14   currentTrack_AlbumArtUri http://192.168.20.70:1400/getaa?u=x-rincon-mp3radio:%2f%2fhttps:%2f%2fwdr-1live-live.icecastssl.wdr.de%2fwdr%2f1live%2flive%2fmp3%2f128%2fstream.mp3%3far-distributor%3df0e2&v=1
     2020-06-01 00:40:14   currentTrack_ItemId -1
     2020-06-01 00:40:14   currentTrack_ParentId -1
     2020-06-01 00:40:14   currentTrack_ProtocolInfo x-rincon-mp3radio:*:*:*
     2020-06-01 00:40:14   currentTrack_Title 1LIVE
     2020-06-01 00:40:14   currentTrack_TrackUri x-rincon-mp3radio://https://wdr-1live-live.icecastssl.wdr.de/wdr/1live/live/mp3/128/stream.mp3?ar-distributor=f0e2
     2020-06-01 00:40:14   currentTrack_UpnpClass object.item
     2020-06-01 00:40:09   device_class    speaker
     2020-06-01 00:40:09   device_identifiers_1 RINCON_7828CAF427B201400
     2020-06-01 00:40:09   device_manufacturer Sonos
     2020-06-01 00:40:09   device_name     Wohnzimmer
     2020-06-01 00:40:14   enqueuedMetadata_AlbumArtUri https://img.ardmediathek.de/standard/00/42/92/13/72/-295433861/1x1/576?mandant=ard
     2020-06-01 00:40:14   enqueuedMetadata_ItemId -1
     2020-06-01 00:40:14   enqueuedMetadata_ParentId -1
     2020-06-01 00:40:14   enqueuedMetadata_Title 1LIVE
     2020-06-01 00:40:14   enqueuedMetadata_UpnpClass object.item.audioItem.audioBroadcast
     2020-06-01 00:40:14   groupName       Wohnzimmer
     2020-06-01 00:40:09   icon            mdi:speaker
     2020-06-01 00:40:09   json_attributes true
     2020-06-01 00:40:09   json_attributes_topic sonos/RINCON_7828CAF427B201400
     2020-06-01 00:40:14   mute_LF         false
     2020-06-01 00:40:14   mute_Master     false
     2020-06-01 00:40:14   mute_RF         false
     2020-06-01 00:40:14   name            Wohnzimmer
     2020-06-01 00:40:09   payload_available 2
     2020-06-01 00:40:14   playmode        NORMAL
     2020-06-01 00:40:09   state_topic     sonos/RINCON_7828CAF427B201400
     2020-06-01 00:40:14   transportState  STOPPED
     2020-06-01 00:40:14   ts              1590964814183
     2020-06-01 00:40:09   unique_id       sonos2mqtt_RINCON_7828CAF427B201400_speaker
     2020-06-01 00:40:14   uuid            RINCON_7828CAF427B201400
     2020-06-01 00:40:14   volume_LF       100
     2020-06-01 00:40:14   volume_Master   20
     2020-06-01 00:40:14   volume_RF       100
Attributes:
   IODev      sonosmqtt
   alias      wz
   readingList sonos/RINCON_7828CAF427B201400:.* { json2nameValue($EVENT) }
sonos/status/wohnzimmer/renderingcontrol:.* { json2nameValue($EVENT) }
homeassistant/music_player/RINCON_7828CAF427B201400/sonos/config:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE


Natürlich ist hier KEIN DESIGN oder so drin. Erstmal nur richtig zuordnen und zusammen führen...
setlist habe ich für heute mal weg gelassen. das ergibt sich dann ja eh. Du hattest damit auch schon angefangen, wie ich sah.

PS: Play, Pause, Vol gehen bei mir so nicht. Aber für heute ist auch genug

Soooooo.. gute Nacht zusammen :)

Beta-User

Moin zusammen,

habe auch diese Art Hardware nicht und auch keine Neigung, mir so ein Java-Gedönse ins Haus zu holen, aber trotzdem mal meine 2ct:

- Da JAva, wird wohl einmal mehr Paho genutzt werden zur MQTT-Anbindung. Das "liebt" randomized CIDs. Wie 87insane schon geschrieben hat, bekommt man die ignoriert, sobald man passende MQTT2_DEVICES hat ohne den CID-Präfix in der readingList oder der bridgeRegexp => mit letzterer ist schon alles gut :) .

- Der homeassistant-Teil verwirrt nur und dient ausschließlich der Konfiguration in HA. Empfehlung: IO mit einer ignoreRegexp ausstatten, es gibt ein attrTemplate dafür ;) (aufzurufen aber über ein M2-Device).
Anm.: Es gibt eine extended version,  die auch die "set"-Zweige für Tasmota-Devices "himmelt", was für Netze mit mehreren Quellen für Befehle an diesen Gerätetyp hilfreich ist ;) .

- Dass ein 2. Server nicht aus technischen Gründen erforderlich ist, dürfte klar sein?

- via bridgeRegexp auch Dinge aus unterschiedlichen Zweigen "zusammenzumischen" und in ein Device zu überführen, ist auch kein Problem. Wichtig ist, dass jeweils für das am Zeilenende (Pseudo-CID) was identisches rauskommt, vorne ist es eben (zeilenweise) regex.

(Den Rest - einschl. der Erstellung von attrTemplates - bekommt ihr sicher auch ohne mich hin, wenn es spezielle Fragen gibt: einfach melden :) ).

Schönen Feiertag,
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

Otto123

87insane: Du kommst erstmal zum ähnlichen Ergebnis wie ich :) Du hast das vierte readingList außen vor gelassen: sonos/status/Playername/avtransport

Meine große Frage ist derzeit: Ob die Infos nicht so redundant sind, das man erstmal was weglässt.

ZitatWichtig ist, dass jeweils für das am Zeilenende (Pseudo-CID) was identisches rauskommt, vorne ist es eben (zeilenweise) regex.
Ja genau das bekomme ich nicht hin, bei sonos/status/"Playername" steht die die Pseudo-CID in den Werten/Readings bei den anderen ..../RINCON_xxxxx steht der Playername (auch eine mögliche pseudo-CID) auch wieder in den Werten/Readings
Wahrscheinlich muss man

  • einen Topic Zweig als bridgeRegexp nehmen,
  • den Rest als ignore definieren
  • Geräte erstellen lassen
  • Dann auf die Geräte die readingsList setzen.

Zitatder Erstellung von attrTemplates - bekommt ihr sicher auch ohne mich hin,
Du bist ein Optimist, ich habe fast keine Ahnung :)

Den 2. Server braucht man nicht, völlig richtig. Es ist überhaupt kein Teufelszeug, finde ich.  8)

Zitatdient ausschließlich der Konfiguration in HA. Empfehlung: IO mit einer ignoreRegexp ausstatten,
ich hatte gedacht genau da muss doch alles wichtig drin stehen um ein Gerät zu erzeugen :) Was HA kann können wir doch schon lange ;)

Ich mache jetzt mal für einen Player 4 einzel Devices mit den jeweiligen Topics, vielleicht sieht man da besser was los ist und kann ein Template extrahieren. Mal sehen wie weit mich die bisherige Beschreibung und "Erfahrung" treibt :)

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

87insane

#12
Nur Handy deswegen kurz...

Ich hatte das reading mit aufgelistet. Habe auch alle erstmal pro Dev manuell übernommen. Will erstmal reading Inhalt sammeln..

Gleichzeitig habe ich aber auch deine regex übernommen und probiere noch rum. Die infos aus dem Status Dev sind in meinen Augen nicht redundant. Allerdings geht es nur um announcen... Da ich aber davon ausgehe, dass wenn wir das hier aufbauen, nicht alles einfach abgucken sondern treu dem Motto "super geil" was neues und altags taugliches schaffen, passt das super
.. Ich sammel noch. Ggf spuckt Sonos noch mehr aus. Schreibe morgen den entwickler an. Er wird sicher eine bessere Erklärung im Kopf ala im Netz haben.

Heute war ich aber bis auf kleine Sachen faul. Hatte bis gerade Besuch und nun auch Sonnenbrand [emoji26][emoji12] hab heut Nacht aber in meinen Augen noch eine gute Sammlung an Infos gesammelt und hier auch eingestellt. Gleiche Ergebnisse wie du auch... Du hattest noch einen player gepostet. Bei mir geht das so nicht. Muss aber noch schauen warum. Innerhalb von mqtt und fhem können wir auf jeden Fall viel machen. Mqtt ist mir mit unter deswegen so lieb, da fhem da nicht immer ganz die Regeln einhält. Man kann und darf die Geräte verdrehen wie man will. Für so einige Aufgaben bräuchte man sonst einen dummy. Naja ...egal.... Sollen wir uns einen Plan erstellen und das als projekt aufnehmen? Ich hätte Lust, da ich aus den gleichen Gründen gerne über einheitliche Schnittstellen verfüge.
- leichter zu überwachen
- updates legen entweder alles lahm oder eben nichts. Bzw ist es eine fehlerquelle und nicht 5 oder 6
- einheitliche templates mit guter Qualitäts Überwachung
- erweiterbar (so wie mir scheint) bis ins unendliche. Immer mehr xyz2mqtt Schnittstellen kommen auf den Markt
- mqtt ist an sich einfach ein zu binden und die Selbstbau Geräte kann jeder "zusammen stecken" oder löten.


Die liste kann ich so weiter machen.

Ich weiß gerade du und die anderen "oberen/großen" haben super viel zu tun aber ich würde gerne so gut wie möglich helfen. Ich habe fhem damals über einen Arbeits Kollegen kennen gelernt. Ich hab die ersten drei Wochen nur an einen Befehl gedacht. UNINSTALL! Nun stehe ich aber um so mehr auf fhem und die weiter Entwicklung ist wichtig. HA ist zb dein neuer "freund" :-P Spaß bei Seite...lass uns los legen :)

Ps: bei den templates kann ich gerne helfen. Beta-user würde mich nach dem ganzen Text vermutlich suchen lassen und quälen, wenn ich da nicht so antworte. Habe schon bei ein, zwei templates geholfen. Deswegen hoffe ich das du quasi meine schwache seite übernimmst. :)



Gesendet von meinem LM-G810 mit Tapatalk

Beta-User

Zitat von: Otto123 am 01 Juni 2020, 17:29:55
Meine große Frage ist derzeit: Ob die Infos nicht so redundant sind, das man erstmal was weglässt.
Das könnte eine "Nebenwirkung" dieses autodiscovery-features sein. Kann also nur empfehlen, das zu ignorieren, FHEM macht meistens auch ohne vorher "viel zu wissen" "das richtige".

Wenn, dann würde ich empfehlen, den homeassistant-Zweig gesondert zu betrachten und dann die JSON "im Ganzen" anzusehen (also nicht mit json2nameValue() auszupacken). Vielleicht findest du ja einen cleveren Weg, das nutzbar zu machen ;) . (Imo sind das völlig überflüssige Infos, und das ganze ein verschwenderischer Ansatz, was insgesamt dazu führt, dass homeassistant dem Vernehmen nach 20 MB Speicher pro MQTT-Gerät braucht...

Zitat
Ja genau das bekomme ich nicht hin, bei sonos/status/"Playername" steht die die Pseudo-CID in den Werten/Readings bei den anderen ..../RINCON_xxxxx steht der Playername (auch eine mögliche pseudo-CID) auch wieder in den Werten/Readings
Das ist genau die Folge von dem "Super-JSON" für homeassistant. So wie ich das lese, ist alles zu einem Player auch nur unter einem Topic zu finden, von daher paßt das mit der bridgeRegexp vermutlich.

ZitatDu bist ein Optimist, ich habe fast keine Ahnung :)
Das mit der Erfahrung wird schon, believe me...
Und wenn du ein passendes bridge-Gerät hast, konfiguriert sich jedes einzel-Sub-Gerät dann (in FHEM) fast von selbst, wenn der Autor der MQTT-Software sich etwas bei dem Topic-Tree gedacht hat (und nicht den Sonderfall homeassistant vorrangig im Blick hatte). Es gibt ja in der attrTemplate-File zwischenzeitlich wirklich für fast jeden Anwendungsfall irgendein Bausteinchen, das man ggf. einfach nur "portieren" muß.

Und mit attrTemplate haben wir mMn. einen Mechanismus, der es mit der autodiscovery gut aufnehmen kann (sofern man attrTemplate überhaupt "braucht", um die logische Struktur des Gerätes sinnvoll zu erfassen, MQTT2_DEVICE macht schon von sich aus vieles "richtig", zumindest, was Readings angeht).

Bin mal gespannt, ob du mir da bald zustimmen wirst ;D .
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

Die Steuerbefehle waren aus meiner Sicht erstmal simpel. Musst natürlich die RINCON_ID richtig setzen.
set mqttserver publish sonos/RINCON_347E5C82560801400/control {  "command": "volume",  "input": 10}
set mqttserver publish sonos/RINCON_347E5C82560801400/control {  "command": "stop"}
set mqttserver publish sonos/RINCON_347E5C82560801400/control {  "command": "play"}

Der hier funktioniert nicht, nicht implementiert, obwohl die readings was anderes sagen
set mqttserver publish sonos/RINCON_B8E93743FCBE01400/control {  "command": "switchtotv"}

Wenn man die Topics einzeln zu Readings verarbeitet, hat man so ca 130. Kombiniert in einem Device dann bloß noch ca. 60 - da ist schon einiges doppelt :)

naja und Sonos "redet" wie der Teufel, deswegen muss man ja beim Sonos Modul verbose 1 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