AudioManager / Sonos2Mqtt

Begonnen von Guybrush, 26 August 2026, 17:36:42

Vorheriges Thema - Nächstes Thema

Guybrush

Ich hab jetzt auch mal meinen AudioManager auf github hochgeladen. Mit dem AudioManager kann man seine Sonos Lautsprecher komfortabel ohne eigenen Logikcode steuern. Dabei kümmert sich das Modul um Parallelität, Abfolge, Konflikte usw selbst. Es geht natürlich auch über direkte Befehle an Lautsprecher, aber das erfordert je nach Komplexität dann doch einiges an Logikcode. Beispielsweise bei Sprachdurchsagen müsste man selbst sicherstellen, dass diese richtig eingereiht und nicht parallel laufen. Das macht alles der AudioManager. Auch das Fortsetzen des Streams/Queue/Mp3 nach einer Sprachdurchsage wird automatisch verwaltet. Man kann beispielsweise auch definieren, wie laut was um welche Uhrzeit sein darf/muss. Ich hab das alles in der Readme so gut es ging festgehalten:

https://github.com/next81/fhem.AudioManager

Hintergrund für die Entwicklung war, dass es bei mir ständig Konflikte mit Sprachansagen, Musik usw gab und die Logik in fhem immer größer und nicht mehr wartungsfreundlich bei mir war. Der AudioManager ist modular aufgebaut und unterstützt grundsätzlich auch andere backends, wobei derzeit nur sonos2mqtt integriert ist, da ich selbst auch nur Sonos hab. AudioManager ersetzt nichts, sondern fungiert als reine zentrale Verwaltung beliebig vieler Lautsprecher/Gruppen. Die Lautsprecher könnten also theoretisch weiterhin parallel angesteuert werden. Das bringt dann nur keinen Komfortgewinn.

Installation:
update all https://raw.githubusercontent.com/next81/fhem.AudioManager/main/controls_AudioManager.txt
define Audio AudioManager sonos2mqtt=Sonos.FlurEG,Sonos.Kueche,Sonos.Wintergarten

Statt Sonos.FlurEG,Sonos.Kueche,Sonos.Wintergarten einfach die  Devicenames der Sonos Lautsprecher in Fhem angeben, die darüber gesteuert werden sollen.

Die Sonos Devices selbst müssen in setList zumindest x_raw_payload (als eigene Zeile) anbieten. playUri, volume, mute, play, pause usw sind optional. playFav muss zumindest bei einem player definiert sein, wenn man Radio per Name steuern will.

binford6000

2026.08.26 19:32:16 1: UPD FHEM/90_AudioManager.pm
2026.08.26 19:32:16 1: Got 14 bytes for FHEM/90_AudioManager.pm, expected 103656
2026.08.26 19:32:16 1: aborting.

Zitatsollte behoben sein. Der Generator zählte Windows-CRLF-Bytes. GitHub liefert das Modul mit LF aus: 72144 statt 73810 Bytes. Hatte für die generierung der controls noch keinen unittest hinterlegt. dadurch viel das nicht auf

Hallo Guybrush,
gleiches Thema wie hier.

VG Sebastian

Guybrush

tatsächlich nicht. Ich hab nur vergessen den pre-commit hook dafür anzulegen, so dass die Datei garnicht aktualisiert wurde. jetzt sollte es aber gehen

binford6000

Zitattatsächlich nicht. Ich hab nur vergessen den pre-commit hook dafür anzulegen, so dass die Datei garnicht aktualisiert wurde. jetzt sollte es aber gehen

Na gut, dann so ;-)

Ein sehr mächtiges Modul! 

Und gleich eine Frage: Ich nutze sonos2mqtt + sonos-tts-polly via docker. Auf dem Testsystem habe ich dazu das Text2Speech Modul installiert und konfiguriert. Das möchte ich auf meinem Prod System nicht machen da ja alles praktisch schon im sonos-tts-Polly vorhanden ist und läuft. Wäre es also möglich, alternativ zu einem TTS-Device sonos-tts-polly zu nutzen?

Gruß,
Sebastian

Guybrush

klar, TTS ist ja nur ein backend. Solang es ähnlich funktioniert, ist das kein Problem auch TTS-Polly zu unterstützen. Es Bedarf nur eine Stelle, die aus Text ein MP3 macht.

binford6000

ZitatEs Bedarf nur eine Stelle, die aus Text ein MP3 macht.
lastError
ttsDevice fehlt oder existiert nicht
2026-08-27 09:14:49

Mit set audio speak... kommt der obige Fehler. Es wird also ein TTS-Device vorausgesetzt.

Im Falle von SONOS brauchtes das aber gar nicht. Eigentlich(TM) nur einen Schalter (Attribut),
welcher bei SONOS-Devices die bereits eingebaute speak Funktionalität nutzt.
Diese wiederum nutzt den bei sonos2mqtt konfigurierten sonos-tts-polly container.

Guybrush

#6
Du musst das Attribut ttsDevice im AudioManager Device setzen für speak. Das funktioniert mit Text2Speech. Für Polly müsste man vermutlich was anpassen, probiert habe ich das aber noch nicht. Eine native Sprachumwandlung in den Sonos Lautsprechern kenn ich nicht. Die haben doch keine Logik drin oder meintest du Polly?

Guybrush

grad geschaut: https://wiki.fhem.de/wiki/Text2Speech

das unterstützt Polly bereits nativ. Dann sollte das auch direkt mit dem AudioManager funktionieren. Du musst nur als Attribut ttsDevice den devicename deines text2speech devices setzen