FHEM - Hausautomations-Systeme > MQTT

Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

(1/221) > >>

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):

--- Code: ---sudo bash -c "curl -sL https://deb.nodesource.com/setup_10.x | bash -"
sudo apt-get install nodejs
--- Ende Code ---
Dann sonos2mqtt installieren (siehe Projekt Webseite):

--- Code: ---sudo npm install -g sonos2mqtt
sudo npm install pm2 -g
--- Ende Code ---
Mal schauen ob es geklappt hat

--- Code: ---node /node_modules/sonos2mqtt/lib/index.js --version
--- Ende Code ---
Wenn man noch nicht hat, braucht man in FHEM eine MQTT Instanz, man könnte erstmal eine separate machen:

--- Code: ---define sonosmqtt MQTT2_SERVER 1800 global
--- Ende Code ---

Erster Test
Dann kann man den nodejs Service schon mal zum Test starten (den automatischen Start würde ich später über pm2 machen):

--- Code: ---node /node_modules/sonos2mqtt/lib/index.js --mqtt mqtt://myuser:the_secret_password@192.168.0.3:1800
--- Ende Code ---
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.

--- Code: ---attr Device bridgeRegexp sonos/RINCON_([0-9A-F]+):.* "Sonos_$1"\
homeassistant/music_player/RINCON_([0-9A-F]+)/sonos/config:.* "Sonos_$1"
--- Ende Code ---
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. 

--- Code: ---sonos/status/kueche/renderingcontrol:.* { json2nameValue($EVENT) }
sonos/status/kueche/avtransport:.* { json2nameValue($EVENT) }
--- Ende Code ---
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.

--- Code: ---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}

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

Aber da geht prinzipiell mehr, z.B einen Sound abspielen

--- Code: ---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
  }
}

--- Ende Code ---
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

87insane:
Ü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:
Ach ja...

ich glaube dein

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


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


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


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?

87insane:
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...

--- Code: ---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) }

--- Ende Code ---


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.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln