Plugin-Daten
AutorOliver Lewald
Logo
StatusSTABLE
Version5.4.0
Min. LB Version2.0.0
Release Downloadhttps://github.com/Liver64/LoxBerry-Sonos/archive/refs/tags/v5.4.0.zip
BeschreibungDas Sonos4Lox Plugin stellt basierend auf dem LoxBerry eine Komplettlösung zur Steuerung einer Sonos Multi Room Installation zur Verfügung.
SprachenEN, DE
Diskussionhttps://www.loxforum.com/forum/projektforen/loxberry/plugins/74862-loxberry-sonos-plugin-v1-0-0-verf%C3%BCgbar

Sonos4Loxone

Aufgabe des Plugins

Das Plugin dient zur Steuerung einer Sonos Multi Room Installation aus Loxone heraus. Es stehen die gängigen Standardbefehle, aber auch Text-to-speech (T2S), Sonos-to-speech, Clock-to-speech und bei installiertem Wunderground Plugin auch weather-to-speech zur Verfügung. Darüberhinaus können auch Werte (z.B. Temperatur oder Fensterstatus) von Loxone in die text-to-speech Ansagen integriert werden. 

Zusätzlich werden Informationen wie Titel/Interpret, Play/Stop/Pause und Lautstärke je Zone per UDPoder MQTT und über virtuelle Texteingangsverbinder zur Verfügung gestellt.

Ein ganz besonderer Dank gilt Michael Schlenstedt und Sven Thierfelder ohne deren Hilfe das Plugin nicht hätte realisiert werden können 

Allgemeines

Das Sonos System ist grundsätzlich sehr ausgeklügelt und durchdacht aufgebaut, auch von seiner Topology und der Flexibilität. Grundsätzlich funktioniert Sonos und das Plugin nahezu wartungsfrei, es gibt aber ein/zwei Besonderheiten die es bei der Nutzung zu beachten gibt.

Die Sonos Player sind nicht gerade als Stromsparwunder bekannt, von daher gibt es User die ihre Player (Zonen) über schaltbare Steckdosen ausschalten und nur bei Bedarf wieder einschalten. Das kann, gerade bei einer Programmierung in einer Hausautomation, zu Problemen z.B. bei T2S führen, so dass im schlimmsten Fall die T2S nicht abgespielt werden kann, da eine Zone nicht erreichbar ist. Von daher empfehle ich alle Zonen immer am Netz zu lassen, da diese auch bis zu 2 Minuten benötigen um im SonosNet als Zone zur Verfügung zu stehen. Es ist zwar auch eine Abfrage bzgl. Online Verfügbarkeit eingebaut, diese aber nicht in der stabilen Qualität läuft wie ich es mir eigentlich wünsche.

Des weiteren gibt es noch LAN-Installationen die eine Sonos Bridge verwenden, diese produzierte in der Vergangenheit immer mal wieder Probleme durch eine Mischinstallation mit WLAN. Von daher empfehle ich jedem seine Sonos Installation per Wireless zu betreiben, wobei ja mind. 1 Zone per LAN verbunden sein sollte, aber halt ohne Bridge. Außerdem bereitet die Bridge im Verbund mit dem Plugin zunehmend Probleme, gerade bei der folgenden Grundkonfiguration.

WICHTIG: Um einen möglichst reibungslosen Betrieb des Plugins zu gewährleisten MÜSSEN alle Sonos Player über statische IP-Adressierung verfügen, da das Plugin IP basierend die einzelnen Befehle ausführt. Das Gleiche gilt für die IP-Adresse des LoxBerry's, diese sollte statisch oder noch besser über einen DNS Service eingebunden sein. Falls die lokale IP-Adresse des LB's geändert wird bitte das Plugin aufrufen und 1x speichern damit diese Änderung zum Tragen kommt.

Zusammenfassung:

  • Alle Sonos Player am Netz lassen
  • Sonos Bridge aus dem Netzwerk entfernen
  • Sonos Player mit statischer IP Adressierung

Konfigurationsoptionen Loxberry

Als erstes muss eine Grundkonfiguration durchgeführt werden. Das heißt im Detail die vorhanden Sonos Player hinzufügen und diverse Parameter ergänzen.

Sonos Zonen hinzufügen

Durch Betätigen des Buttons "Scan Zonen" durchsucht das Plugin dein Netzwerk nach vorhanden Sonos Playern. Dabei werden Bridge, Dock, Boost und Subwoofer nicht berücksichtigt.

Hinweis: Bitte vorher unbedingt sicherstellen das alle Player ONLINE sind!

Nach erfolgtem Scan sollte folgender Bildschirm erscheinen:

Falls nach dem Scan keine Player erscheinen überprüfe dein Netzwerk (Fritzbox, Switch, Firewall, Virenscanner etc.) ob Mulitcast enabled ist. Eigentlich sollte das im Standard der Fall sein, aber gerade Virenscanner und managed Switches haben Multicast zum Teil disabled.

Das Skript sucht basierend auf dem SSDP Protokoll nach UPnP Devices mit folgender Multicast Adresse: 239.255.255.250 Port:1900. Dieser Port muss nicht explizit im Router konfiguriert werden!

Die Angaben für Raum und Modell sind NICHT änderbar und sind analog zur Sonos App. Falls eine Zone in der Sonos App umbenannt wird, muss anschließend in der Konfiguration der alte Eintrag gelöscht werden (Tick-box vor der jeweiligen Zone) und speichern, dann erneut einen Scan ausführen um die umbenannte Zone zu finden. Das gleiche gilt auch für neu hinzugefügte Player.

Wenn du einen Player aus irgendeinem Grund löschen möchtest, markiere die Tick-Box des entsprechenden Players und speichere die Konfiguration. Solange du nicht wieder den Scan Button betätigst ist die Zone für den MS nicht mehr erreichbar.

Als nächsten Schritt müssen folgende 3 Werte je Zone/Player ergänzt werden:

  • T2S: Player der für T2S Anouncements verwendet werden soll
  • T2S Volume: Der eingegebene Wert (zwischen 0-100) ist die Standard Lautstärke für T2S Durchsagen für diese Zone.
  • Sonos Volume: Der eingegebene Wert (zwischen 0-100) ist die Standard Sonos Lautstärke für diese Zone.
  • Sonos maximal Volume: Der eingegebene Wert (zwischen 0-100) ist die maximale Sonos Lautstärke für diese Zone.
  • TV Volume: Der eingegebene Wert (zwischen 0-100) ist die TV Einschaltlautstärke für diese Zone. (Nur für Soundbar und eingeschaltetem TV Monitor)

Die Spalte Clip gibt an ob der entsprechende Player die T2S AudioClip Funktion unterstützt.

Standard bedeutet dass ohne Angabe von Volume innerhalb der Syntax diese Lautstärkewerte genommen werden. Näheres über die Verwendung von Volume in der Syntax findest du im Kapitel "Syntax".

Erst nach erfolgreicher Ergänzung dieser Werte lässt sich das Plugin speichern.

Text-to-speech (T2S)

Um die speech Funktionen nutzen zu können benötigt man eine Speech Engine, diese kann entweder Online oder Offline sein. Folgende T2S Optionen stehen zur Auswahl:

  • VoiceRSS → Online Engine, benötigt nur einen API key (nur eine weibliche Stimme)
  • Amazon Polly → Online Engine, benötigt einen API und einen secret key. (eine weibliche und eine männliche Stimme) ACHTUNG: Preismodell beachten.
  • Mac OSX → Offline Engine, benötigt einen OSX Server
  • Pico2Wave → Offline Engine, bei installiertem Text2SIP Plugin (nur eine weibliche Stimme)
  • Google → begrenzt auf max. 100 Zeichen, dafür multilingual
  • ResponsiveVoice → Online Engine, benötige keine keys (nur eine weibliche Stimme)
  • GoogleCloud → Online Engine, benötigt einen API key (multilingual und Auswahl an Stimmen/Qualität/Gender ACHTUNG: Preismodell beachten 
  • MS Azure → Online Engine, benötigt einen API key (multilingual und Auswahl an Stimmen ACHTUNG: Preismodell beachten  Empfehlung
  • ElevenLabs → Online KI basierende Engine, benötigt einen API key (multilingual und Auswahl an Stimmen ACHTUNG: Preismodell beachten  

Nach erfolgreichem Generieren der entprechenden Key(s) müssen diese in den entsprechenden Feldern eingetragen werden. Wenn jemand die Offline T2S Version für OS X verwenden möchte kann ich ihm gerne einen Ansprechpartner nennen, da ich selber keinen OS X Server besitze.

  • Text-to-speech Funktion: Die T2S Funktion kann temporär ausgeschaltet werden (default = ON). Ausnahme: Eine T2S wird mit dem Parameter &urgent ausgeführt, dann wird die T2S bei ausgeschalteter Funktion trotzdem announced.

API key: Bitte den gültigen API key von VoiceRSS/Google Cloud/MS Azure oder AWS Polly eingeben

Secret key: Bitte den gültigen secret key von Polly eingeben

Auswahl der Standardstimme (Azure/Google Cloud/Polly/ElevenLabs): wähle Stimme

Die Stimme, als auch die Sprache, kann innerhalb der Syntax für T2S jederzeit geändert werden.

Verweildauer der MP3 Dateien: Anzahl der Tage oder Cache Größe die eine MP3 gespeichert werden soll bevor Sie automatisch gelöscht wird.

Dateiname für Jingle MP3: Name der Datei die vor einer Durchsage abgespielt werden soll. Diese Datei muss in das Unterverzeichnis /tts/mp3 kopiert werden. Als Beispiel ist die Datei "2_Airport_gong.mp3" bereits enthalten. Näheres zur Nutzung der Funktion unter T2S Durchsagen

Sonos Daten senden: Schalter um verschiedenste Infos an Loxone per UDP/MQTT, und Titel/Interpret Informationen über virtuelle Texteingang Verbinder zu senden. Näheres zur Nutzung der Funktion unter Loxone Anbindung

Kommunikation zum Miniserver entweder per UDP oder MQTT

UDP-Port: Port des MS an den die UDP Pakete geschickt werden sollen. 

Feineinstellungen

Bei den Feinstellungen können noch einige nice-to Optionen nachjustiert werden.

Sprachnachricht T2S fehlerhaft: Gibt eine T2S aus falls die Standardausgabe nicht prozessiert wurde.

Lautstärke Änderung per Klick: Hier handelt es sich um eine typische Tasterfunktion um die Lautstärke einer Zone zu ändern. Der hier angegebene Wert erhöht/verringert in den jeweilig angegebenen Sprüngen die Lautstärke.

Ansage der Radio Station: Bei der Funktion say&sonos kann zwingend die Ansage des aktuell laufenden Senders vorgegeben werden

Lautstärkeanhebung: Bei den Funktionen nextradio und zapzone gibt es optional die Möglichkeit den Titel/Interpret/Radio Sender vorm abspielen ansagen zu lassen (nur bei Single Playern, nicht für Gruppen). Dabei kann es sein das die Ansagelautstärke u.U. zu leise ist. Durch Anpassen des Schiebereglers kann diese etwas lauter eingestellt werden.

Rampto Parameter: Rampto ist eine Funktion zum langsamen, kontinuierlichem Erhöhen der Lautstärke. Es stehen 3 verschiedene Parameter zur Verfügung die alle leider nicht in der Laufzeit konfigurierbar sind:

  1. Sleep → erhöht UND verringert die Lautstärke langsam innerhalb von ca. 17 Sekunden auf die gewünschte Lautstärke (typische Weckeinstellung)
  2. Alarm → erhöht zügig und kontinuierlich die Lautstärke auf den gewünschten Wert.
  3. Auto→ erhöht relativ schnell die Lautstärke auf den gewünschten Wert.

Bsp: Die Zone steht auf Pause und die Funktion Play wird betätigt. Ist die gegenwärtige Lautstärke < 25 greift der Rampto Parameter und erhöht gemäß der Konfiguration die Lautstärke, ist der Wert darüber geht es mit diesem Lautstärkewert unvermittelt los.

Rampto Volume: Schwellwert der angegebenen oder gerade laufenden Lautstärke unterhalb dessen einer der 3 zur Verfügung stehenden Parameter automatisch greifen soll.

Lautstärke bei Anruf: Wert auf den die Lautstärke bei Anruf (Fritz.box) zügig reduziert werden soll

Unterdrückung T2S während Telefonates: Bei Ein wird eine evtl. anfallende T2S während eines Anrufes blockiert

Wartezeit bis T2S erneut ausgegeben wird: Zeit innerhalb der eine T2S nicht ein 2. Mal ausgegeben werden soll (Notwendig für T2S aus dem Statusbaustein)

Radio Favoriten für Tasterbedienung

Hierbei handelt es sich auch um eine typische Tasterfunktion mit Hilfe derer man durch einen jeweiligen Tastenklick sich durch seine Radiofavoriten durchzappen kann. Ist das Script am Ende der Liste angekommen beginnt es wieder von vorne. Die URL Daten für deine Favoriten werden folgendermaßen ermittelt:

Suche dir deine(n) Sender im Internet (z.B.: google.com und dann Schlagworte "SWR3 URL stream"). Kopiere dann die gewünschte Stream URL ins Feld "Sender URL" und gebe bei "Sender Name" den Sendernamen ein. Achte bitte darauf das nur Streams die mit http:// beginnen genutzt werden können und folgende Zeichen nicht Bestandteil der URL sein dürfen ? { } | & ~ ! [ ] ( ) ^ " =

Beispiel: Für SWR3 wäre die URL für 128 kBit/s Qualität dann http://mp3-live.swr3.de/swr3_m.m3u

Weitere Sender findet man hier: https://streamurl.link/

Der entscheidende Vorteil liegt in der Sonos unabhängigen URL Struktur und des daraus resultierenden Performance Zuwachs beim Wechseln der Sender.

Diese Schritte musste du für jeden deiner Favoriten Sender erneut durchführen.

Gimmick am Rande

Als Sender Name kannst du auch irgendwas anderes eingeben (z.B. "Namen deiner Frau> Lieblingssender" um deine Frau zu überraschen. Der Name erscheint dann auch automatisch in der Sonos App.

Wenn alle Parameter ergänzt wurden speichere bitte die Konfiguration und teste die erfolgreiche Installation als erstes im Browser bevor es an die Loxone Integration geht.

Dafür kopierst du aus dem Bereich Syntax einen Befehl, ergänzt die Zone und solltest dann eigentlich etwas hören. Nur nicht bitte Play wenn in der entsprechenden Zone weder Radio noch eine Playliste geladen ist ;-(

Download

  • Altes Wiki als PDF:

 1228539788.pdf

Fehlerberichte

Fehlerberichte bitte direkt im Forum oder Github posten.

Tipps & Tricks

Die Erfahrung zeigt dass es Sinn macht die zu verwendende Syntax immer erst einmal im Browser zu testen bevor sie in Loxone als Ausgangsbefehl angelegt wird.

Es ist auch möglich z.B. für immer wiederkehrende Ansagen (Waschmaschine fertig usw.) vor erstellte MP3 Dateien zu nutzen ohne ständig die T2S Engines zu nutzen. Diese MP3 Dateien müssen a: numerisch sein (4.mp3) und b: mit Hilfe von z.B. WinSCP im Verzeichnis loxberry/data/plugins/sonos4lox/tts/mp3/ gespeichert werden. 

Um numerische MP3 Dateien zu erstellen mache bitte folgendes:

  1. Generiere eine Textansage:

/plugins/sonos4lox/index.php?zone=DEINE_ZONE&playgong=yes&action=sendmessage&text=Waschmaschine ist fertig&volume=20

  1. Wechsel in das Verzeichnis  loxberry/data/plugins/sonos4lox/tts/ und benenne die oberste Datei die ungefähr so aussehen müsste 7e7fbecd034c7c8eb7d6fdd2f2790949.mp3 in 1.mp3 um
  2. kopiere mit Hilfe von z.B. WinSCP diese Datei in das Verzeichnis loxberry/data/plugins/sonos4lox/tts/mp3/
  3. Rufe Sie anschließend über folgende Syntax immer wieder auf:

/plugins/sonos4lox/index.php?zone=DEINE_ZONE&playgong=yes&action=sendmessage&messageid=1

Ich persönlich mache mir dann immer noch eine Kopie der numerischen MP3 Datei und hänge mir noch einen Text dran damit ich weiß um welchen Ansagetext es sich handelt (1_Waschmaschine.mp3)

Zusatz Software

Apps für iOS

  • Sprachnachrichten direkt vom iPhone an Sonos:

https://itunes.apple.com/us/app/sonos-voice/id689673100?mt=8

  • Alternative Sonos App welche aus der Visu heraus aufgerufen werden kann und direkt zum jeweiligen Raum springt:

https://itunes.apple.com/de/app/sonophone/id815251931?mt=8

  • Widget für die Steuerung im Sperrbildschirm:

https://itunes.apple.com/de/app/sonocontrols-widget-for-sonos/id1082647737?mt=8

Bekannte Probleme

  • T2S bei Playlisten mit mehr als 1.000 Titeln → erledigt
  • T2S an Stereopaar (2 Player zusammen) → erledigt
  • Bei T2S und bestimmten Gruppenkonstallation werden nicht alle Zonen wieder in den Ursprungszustand zurückgesetzt → erledigt
  • Parameter rampto auch für Radiosender nutzen → erledigt
  • keine Anzeige der Titel/Interpret Info wenn die Zone Member einer Gruppe ist. → erledigt
  • Bei der Übergabe des Radiosenders an Loxone wird der Name das Senders teilweise übergangen bzw. nicht korrekt angezeigt. → erledigt
  • bei nextradio beginnt Skript nicht wieder am Anfang der Radio Favoriten (Korrektur: Hängt am Sender der nicht korrekt übermittelt wird) . → erledigt
  • T2S bei Playlisten im Shuffle Modus (erneute Wiedergabe der Playliste an gleicher Position nur mit anderem Titel)  → erledigt
  • bei Nutzung der Spotify App zur Musikwiedergabe wird Sonos Playliste nach T2S aufgerufen. → verworfen (würde eine weitere komplette Entwicklung sein)
  • gegenwärtige Lautstärke soll beibehalten werden anstatt entweder Standard Lautstärke bzw. Volume Angabe aus der Syntax → erledigt

Roadmap

  • Einbinden des Line-in Einganges bei den Playern → erledigt
  • Multilinguale Sprachunterstützung (bis zu 51 Sprachen) für T2S (kein sonos-/clock-/weather-to-speech) → erledigt
  • Bei den Radio Favoriten kann derzeit kein Sender eingegeben werden der ein einfaches oder auch doppeltes Hochkomma enthält → erledigt
  • Handling von Stereo Paaren (PLAY:1, PLAY:3 und PLAY:5) → erledigt
  • T2S Pico2Wave Offline Engine einbinden → erledigt
  • Einbinden von Fritz-Lox Plugin zur Stummschaltung wenn Telefonanruf→ offen
  • Zusätzlicher Parameter Radio oder Playliste in UDP Daten bereitstellen → erledigt
  • T2S AWS Polly Engine einbinden → erledigt
  • Microsoft T2S bzw. Translator und Speech Engine einbinden → erledigt
  • Möglichkeit das T2S als batch gespeichert werden und zu einem späterem Zeitpunkt sämtliche gespeicherte Ansage erfolgen  → erledigt
  • Bei nextradio soll der Radio Sender anstatt des Titel / Interpreten angesagt werden → erledigt
  • Nutzung der Sonos Favoriten als Playliste (ohne Radio)  → erledigt
  • callback Funktionen (selbstständige Rückmeldungen von Sonos)
  • Warten auf die offizielle Sonos API in Q2/2017 
  • Umschalten von PL/Radio auf Line-In (User Wunsch)  → erledigt
  • Nutzen von userspezifischen Spotify Playlisten (User Wunsch)  → erledigt
  • Funktion um zufällig gewählte Playlisten/Radiosender abzuspielen Bsp. Bewegungsmelder (User Wunsch)  → erledigt

FAQ / Troubleshooting

  • Warum bekomme ich beim Scan Zonen keine Player angezeigt?
  • Ist evtl. in der Sonos App der UPnP Dienst deaktiviert. Bitte Sonos Einstellungen überprüfen
  • Ich verwende eine Sonos Bridge in meinem Netzwerk. Am besten entfernen und erneut scannen.
  • Was mache ich wenn ich eine Zone nicht mehr benötige?
  • Vor der nicht mehr benötigten Zone den Papierkorb anticken und speichern
  • Was mache ich wenn ich eine Zone in der Sonos App umbennene? 
  • Vor der umbenannten Zone den Papierkorb anticken und speichern. Anschließend den Scan neu ausführen, Daten ergänzen und speichern. Ggf. den Raum in den Ausgangsverbindern im MS anpassen.
  • Was mache ich wenn ich eine neue Zone hinzufügen möchte?
  • Den Scan erneut aufrufen, Daten ergänzen und speichern
  • Warum bekomme ich bei T2S eine Fehlermeldung bezüglich curl_init?
  • Du hast das LoxBerry Image auf einer VM installiert. Aus derzeit unerfindlichen Gründen werden 3 Pakete bei der Grundinstallation vom LoxBerry nicht installiert. Bitte installiere mit dem root User manuell folgende Pakete: apt-get install curl libcurl3 php5-curl
  • Warum bekomme ich einen Fehler bei einer Gruppendurchsage?
  • Eine Zone darf innerhalb der Syntax nur einmal verwendet werden und nicht über member= noch einmal hinzugefügt werden.
  • Bsp. falsch: http://<DEINE IP>/plugins/sonos4lox/index.php?zone=kueche&action=sendgroupmessage&member=kueche,buero&text=dies ist ein test&groupvolume=15
  • Bsp. richtig: http://<DEINE IP>/plugins/sonos4lox/index.php?zone=kueche&action=sendgroupmessage&member=buero&text=dies ist ein test&groupvolume=15
  • Warum bekomme ich keine Daten per UDP in den Miniserver?
  • Der Datentransfer in der Konfiguration ist ausgeschaltet.
  • Das Portforwarding am Router nicht durchgeführt. (siehe "Miniserveranbindung" → "Portforwarding") 
  • Senderadresse im virtuellen UDP-Eingang leer lassen
  • Warum höre ich keinen playgong/jingle vor meiner T2S?
  • Das Jingle MP3 File muss in folgendes Verzeichnis kopiert werden: /loxberry/data/plugins/sonos4lox/tts/mp3
  • Warum wird keine messageid abgespielt?
  • Die numerischen MP3 Files müssen in folgendes Verzeichnis kopiert werden: /loxberry/data/plugins/sonos4lox/tts/mp3
  • Warum wird keine MP3 (T2S oder messageid) abgespielt?
  • Du hast in deinem Router die IPv6 Unterstützung markiert.
  • Warum bekomme ich nur 1x eine T2S und danach muss ich die Zone vom Netz nehmen? Z. B. Fehler "/PHPSonos.php on line 2478" (wird sich mit Release 2.0 erledigen)  → erledigt
  • Derzeit ist mir die Ursache nicht bekannt, ich kann es auch nicht reproduzieren. Ein Workaround ist die aktuelle Playliste aus der Queue löschen, die Zone ca. 2 Minuten vom Strom zu nehmen und dann sollte es funktionieren.
  • Bei Nutzung von Radio oder leerer Queue sollte es einwandfrei funktionieren. Es kann auch sein das evtl. mind. 1 Titel der Playliste (z.B. Streaming Liste) nicht mehr erreichbar ist und von daher gibt es den Fehler beim Speichern der Playliste.
  • Warum wird eine T2S zweimal abgespielt obwohl im virtuellen Ausgangsbefehl nur ein Eintrag bei "Befehl bei EIN" vorhanden ist?
  • Im virtuellen Ausgangsbefehl ist der Haken bei "Als Digitalausgang verwenden" nicht entfernt. Das muss bei Ansage eines Textes mit dem Parameter <v> (Übernahme eines Wertes aus Loxone) durchgeführt werden. Wenn kein Wert ausgegeben werden soll muss der Haken bleiben.
  • Im virtuellen Ausgang ist der Haken bei "Verbindung nach Senden schließen" nicht gesetzt
  • Die Ansage erfolgt basierend auf einer Textgenerierung aus einem Stausbaustein heraus. Hierzu weiter oben im Wiki unter Einzel-/Gruppendurchsagen aus einem Statusbaustein heraus nachschauen.

Wer Fehler im How-to findet darf sie gerne behalten oder selber korrigieren