Es gibt jetzt zwei Wiki Artikel für die Einrichtung und die Ergebnisse aus diesem Thread:
https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Sonos2Mqtthttps://wiki.fhem.de/wiki/Sonos2mqttDazu 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.
InstallationIch 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 TestDann 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 abbildenIch 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