Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

Axel_S

Hallo zusammen,
erst einmal vielen Dank für dieses tolle Modul!
Ich habe sonos2mqtt nach Anleitung installiert und eingerichtet, seit ca. 2 Wochen läuft alles stabil. Nur tts funktioniert trotz aller Versuche noch nicht richtig. Die Erzeugung der mp3 über VoiceRSS klappt, diese werden auch im Verzeichnis /opt/fhem/cache abgelegt und lassen sich extern abspielen. SonosSpeakWeb ist mit cache cache angelegt. Zum testen hab ich ein notify (mit https://cdn.smartersoft-group.com/various/pull-bell-short.mp3) abgeschickt, das wird sauber abgespielt. Wenn ich aber ein notify mit einer vorher erzeugten Sprachdatei abschicke (http://192.168.100.xx:8083/fhem/cache/4d082aa86ab506dce974c4b36667f05d.mp3) gibt es nur eine Pause und es wird nichts abgespielt. Es muss also wohl an der Bereitstellung der mp3-Dateien im cache-Verzeichnis liegen. Ein Aufruf von http://192.168.100.xx:8083/fhem/cache/4d082aa86ab506dce974c4b36667f05d.mp3 über einen Webbrowser ist möglich, führt komischerweise aber zu der Abfrage ob die Datei als .wav gespeichert werden soll, auch wenn der Browser mp3 eigentlich abspielen soll.
Vielleicht hat jemand eine Idee, ich bin jetzt leider erstmal am Ende mit meinem Latein.
Gruß Axel

ch.eick

#1381
Hallo zusammen,
erstmal vielen Dank für den SONOS Container und das MQTT Device im FHEM.

Ich verwende den Container bereits seit längerem ohne Probleme, jedoch habe ich eine Group, die ich dynamisch erstelle, bei der die Lautstärkeregelung etwas schwierig ist.

Im Wohnzimmer ist eine Sonos Playbase, die ich mit zwei Sonos One als Stereo Paar erweitere. Das gibt einen schönen Raumklang den ich Sonos_7.1_pseudo getauft habe. Um das anzupassen muss ich jedoch die Balance korrigieren und auch unterschiedliche Lautstärken einstellen, was ebenfalls klappt.

Nun kommt die Herausforderung, in der Sonos App gibt es eine Gruppen Laufstärke, die ich auch gerne vom FHEM aus steuern möchte. Das scheint jedoch im MQTT Device noch nicht umgesetzt zu sein.
Dazu hat mir Stephan van Rooij diese Hinweise gegeben setgroupvolume und setvolume . Leider bin ich im MQTT nicht fit und weiß nicht, wie ich das einbauen müsste.

Es geht letzlich um die Gruppen Lautstärke und die Balance (SetRelativeVolume).

Mit der derzeitigen Implementierung kann ich bereits die Lautstärken passend setzen und auch die Gruppe erzeugen, sowie auflösen. Auch eine Reaktion auf Mute oder Lautstärke 0 habe ich umgesetzt. Balance und Gruppen Lautstärke würde jedoch einiges erleichtern.

Ich würde mich sehr freuen, wenn mir da jemand helfen könnte.

EDIT:
im setList müsste eventuell sowas noch rein, aber das funktioniert so nicht.
volume_LF:slider,0,1,100 {sonos2mqtt($NAME,$EVENT)}
volume_RF:slider,0,1,100 {sonos2mqtt($NAME,$EVENT)}
volumeGroup:slider,0,1,100 {sonos2mqtt($NAME,$EVENT)}

VG  Christian

Im List kann ich da leider auch nichts zu finden.
EDIT: oder eventuell diese Definition "sonos/status/[^/]+/renderingcontrol:.* {}" , da müsste es wohl auch ein "GroupRenderingControl" geben
Internals:
   CID        mqttjs_5a898895
   DEF        mqttjs_5a898895
   FUUID      625e8576-f33f-61a8-86f9-f9b6e25feb27ee4c
   FVERSION   10_MQTT2_DEVICE.pm:0.279350/2023-09-05
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_172.18.0.7_47766
   MQTT2_FHEM_Server_MSGCNT 6015
   MQTT2_FHEM_Server_TIME 2024-04-01 11:12:30
   MSGCNT     6015
   NAME       MQTT2_Sonos_bridge
   NR         491
   STATE      2
   TYPE       MQTT2_DEVICE
   eventCount 13
   READINGS:
     2024-03-17 16:06:45   IODev           MQTT2_FHEM_Server
     2022-04-19 12:02:22   attrTemplateVersion 20210303
     2024-03-25 18:45:01   config_RINCON_48A6B8D1200601400 {"available_commands":["adv-command","clearqueue","command","joingroup","leavegroup","mute","next","notify","notifytwo","pause","play","playmode","previous","queue","seek","selecttrack","setbass","setbuttonlockstate","setledstate","setnightmode","setavtransporturi","settreble","sleep","speak","speaktwo","stop","switchtoline","switchtoqueue","switchtotv","toggle","unmute","volume","volumedown","volumeup"],"command_topic":"sonos/RINCON_48A6B8D1200601400/control","device":{"identifiers":["RINCON_48A6B8D1200601400"],"manufacturer":"Sonos","name":"Keller"},"device_class":"speaker","icon":"mdi:speaker","json_attributes":true,"json_attributes_topic":"sonos/RINCON_48A6B8D1200601400","name":"Keller","state_topic":"sonos/RINCON_48A6B8D1200601400","unique_id":"sonos2mqtt_RINCON_48A6B8D1200601400_speaker","availability_topic":"sonos/connected","payload_available":"2"}
     2024-03-25 18:45:01   config_RINCON_5CAAFD32186D01400 {"available_commands":["adv-command","clearqueue","command","joingroup","leavegroup","mute","next","notify","notifytwo","pause","play","playmode","previous","queue","seek","selecttrack","setbass","setbuttonlockstate","setledstate","setnightmode","setavtransporturi","settreble","sleep","speak","speaktwo","stop","switchtoline","switchtoqueue","switchtotv","toggle","unmute","volume","volumedown","volumeup"],"command_topic":"sonos/RINCON_5CAAFD32186D01400/control","device":{"identifiers":["RINCON_5CAAFD32186D01400"],"manufacturer":"Sonos","name":"Wohnzimmer"},"device_class":"speaker","icon":"mdi:speaker","json_attributes":true,"json_attributes_topic":"sonos/RINCON_5CAAFD32186D01400","name":"Wohnzimmer","state_topic":"sonos/RINCON_5CAAFD32186D01400","unique_id":"sonos2mqtt_RINCON_5CAAFD32186D01400_speaker","availability_topic":"sonos/connected","payload_available":"2"}
     2024-03-25 18:45:01   config_RINCON_7828CAE8A7C201400 {"available_commands":["adv-command","clearqueue","command","joingroup","leavegroup","mute","next","notify","notifytwo","pause","play","playmode","previous","queue","seek","selecttrack","setbass","setbuttonlockstate","setledstate","setnightmode","setavtransporturi","settreble","sleep","speak","speaktwo","stop","switchtoline","switchtoqueue","switchtotv","toggle","unmute","volume","volumedown","volumeup"],"command_topic":"sonos/RINCON_7828CAE8A7C201400/control","device":{"identifiers":["RINCON_7828CAE8A7C201400"],"manufacturer":"Sonos","name":"Mobil 2"},"device_class":"speaker","icon":"mdi:speaker","json_attributes":true,"json_attributes_topic":"sonos/RINCON_7828CAE8A7C201400","name":"Mobil 2","state_topic":"sonos/RINCON_7828CAE8A7C201400","unique_id":"sonos2mqtt_RINCON_7828CAE8A7C201400_speaker","availability_topic":"sonos/connected","payload_available":"2"}
     2024-03-25 18:45:01   config_RINCON_7828CAE8A8AE01400 {"available_commands":["adv-command","clearqueue","command","joingroup","leavegroup","mute","next","notify","notifytwo","pause","play","playmode","previous","queue","seek","selecttrack","setbass","setbuttonlockstate","setledstate","setnightmode","setavtransporturi","settreble","sleep","speak","speaktwo","stop","switchtoline","switchtoqueue","switchtotv","toggle","unmute","volume","volumedown","volumeup"],"command_topic":"sonos/RINCON_7828CAE8A8AE01400/control","device":{"identifiers":["RINCON_7828CAE8A8AE01400"],"manufacturer":"Sonos","name":"Mobil 2"},"device_class":"speaker","icon":"mdi:speaker","json_attributes":true,"json_attributes_topic":"sonos/RINCON_7828CAE8A8AE01400","name":"Mobil 2","state_topic":"sonos/RINCON_7828CAE8A8AE01400","unique_id":"sonos2mqtt_RINCON_7828CAE8A8AE01400_speaker","availability_topic":"sonos/connected","payload_available":"2"}
     2024-03-25 18:45:01   config_RINCON_949F3EE130B001400 {"available_commands":["adv-command","clearqueue","command","joingroup","leavegroup","mute","next","notify","notifytwo","pause","play","playmode","previous","queue","seek","selecttrack","setbass","setbuttonlockstate","setledstate","setnightmode","setavtransporturi","settreble","sleep","speak","speaktwo","stop","switchtoline","switchtoqueue","switchtotv","toggle","unmute","volume","volumedown","volumeup"],"command_topic":"sonos/RINCON_949F3EE130B001400/control","device":{"identifiers":["RINCON_949F3EE130B001400"],"manufacturer":"Sonos","name":"Mobil"},"device_class":"speaker","icon":"mdi:speaker","json_attributes":true,"json_attributes_topic":"sonos/RINCON_949F3EE130B001400","name":"Mobil","state_topic":"sonos/RINCON_949F3EE130B001400","unique_id":"sonos2mqtt_RINCON_949F3EE130B001400_speaker","availability_topic":"sonos/connected","payload_available":"2"}
     2024-03-25 18:45:01   connected       2
     2022-04-19 17:06:07   subscriptions   sonos/+/control sonos/cmd/+ sonos/set/+/+
Attributes:
   DbLogExclude .*
   bridgeRegexp sonos/(RINCON_[A-Z0-9]+)[:/].* "$1"
   devStateIcon 0:10px-kreis-rot 1:10px-kreis-gelb 2:10px-kreis-gruen
   devicetopic sonos
   getList    Favorites:noArg Favorites {sonos2mqtt($NAME,$EVENT)}
Reply:Favorites,Radios,Playlists Reply {sonos2mqtt($NAME,$EVENT)}
listalarms:noArg Alarms {sonos2mqtt($NAME,$EVENT)}
   icon       mqtt_bridge_2
   model      sonos2mqtt_bridge
   readingList sonos/status/[^/]+/renderingcontrol:.* {}
homeassistant/music_player/RINCON_([0-9A-Z]+)/sonos/config:.* { $TOPIC =~ m,(RINCON_[0-9A-Z]+),; { "config_$1"=>$EVENT }}
sonos/RINCON_([0-9A-Z]+)/Favorites:.* Favorites
sonos/RINCON_([0-9A-Z]+)/Reply:.* Reply
sonos/alarms:.* Alarms
sonos/connected:.* connected
sonos/status/[^/]+/avtransport:.* {}
   room       MQTT2_DEVICE
   setList    CheckSubscription:noArg $DEVICETOPIC/cmd/check-subscriptions
PauseAll:noArg $DEVICETOPIC/cmd/pauseall
announcementall:textField {sonos2mqtt($NAME,$EVENT)}
notifyall:textField {sonos2mqtt($NAME,$EVENT)}
setalarm:textField $DEVICETOPIC/cmd/setalarm
   stateFormat connected
   userReadings favlist:Favorites.* {sonos2mqtt_ur($name,'favlist')},
grouplist:Favorites.* {sonos2mqtt_ur($name,'grouplist')}
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Otto123

Christian hat hier diese Frage gestellt https://forum.fhem.de/index.php?topic=88021.msg1309358#msg1309358

Leider sehe ich in Stephans Code keine direkte Realisierung der gewünschten Befehle in sonso2mqtt?
Die hier gezeigten groupvolume Befehle funktionieren nicht und wenn man in den verlinkten Stellen im Code schaut sind die mMn auch nicht in sonos2mqtt implementiert.

Aber es funktioniert - ich erinnere mich: Stephan hat viele Dinge nicht mehr speziell sondern allgemein über advanced commands implementiert. 
Auf die Schnelle geht es ganz einfach :) mit dem json welches man hier erklärt findet,
{
  "command": "adv-command",
  "input": {
    "cmd": "GroupRenderingControlService.SetGroupVolume",
    "val": {
      "InstanceID": 0,
      "Channel": "Master",
      "DesiredVolume": 20
    }
  }
}
{
  "command": "adv-command",
  "input": {
    "cmd": "GroupRenderingControlService.SetRelativeGroupVolume",
    "val": {
      "InstanceID": 0,
      "Channel": "Master",
      "Adjustment": "+20"
    }
  }
}
dies wirft man zum Test einfach in das Textfeld oder in die FHEM Kommandozeile
set alias=Bad x_raw_payload {...}
Probiere das mal bitte - man kann das später in die sonos2mqttUtils implementieren.

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

Otto123

Zitat von: ch.eick am 01 April 2024, 11:02:18im setList müsste eventuell sowas noch rein, aber das funktioniert so nicht.
Dazu muss noch die sonos2mqttUtils erweitert werden...
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

ch.eick

Zitat von: Otto123 am 01 April 2024, 11:48:55dies wirft man zum Test einfach in das Textfeld oder in die FHEM Kommandozeile
Code Auswählen Erweitern
set alias=Bad x_raw_payload {...}
Probiere das mal bitte - man kann das später in die sonos2mqttUtils implementieren.
Hallo Otto,
das klappt auch bei mir
set alias=Wohnzimmer x_raw_payload {"command": "adv-command","input": {"cmd": "GroupRenderingControlService.SetRelativeGroupVolume","val": {"InstanceID": 0,"Channel": "Master","Adjustment": "+2"}}}
Damit werde ich dann mal mein Sonos_7.1_pseudo Device umbauen, auch wenn es noch nicht im sonos2mqttUtils umgesetzt ist.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Moinsen,
leider habe ich für die Balance noch nicht den Payload gefunden :-)

Bei der Gruppen Lautstärke gibt es auch noch ein kleines Problem, denn wenn man über die Fernbedienung auf der Base die Lautstärke ändert, dann wird dies nicht auf die Gruppe gemappt. Ändert man die Gruppen Lautstärke in der Handy App, wirkt dies natürlich auf alle Lautsprecher.

Meine Idee wäre nun die Änderung der Lautstärke vom Gruppen Master im FHEM zu erkennen, diese dann zwischen zu speichern und auf dem Master im ersten Schritt wieder zurück zu nehmen. Im zweiten Schritt würde dann stattdessen die Gruppenlautstärke mit dem Lautstärkedelta verändert.

Für bessere Vorschläge wäre ich offen.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick