Allgemein
IPSSonos ist ein Modul zur Steuerung des Sonos Musiksystems.
Folgende Funktionen stellt das Modul momentan zur Verfügung:
- Steuerung von Sonos-Geräten in beliebig vielen Räumen
- Synchronisation und Auswahl von Radiostationen und Sonos-Playlists
- Integration in die Event-Steuerung der IPSLibrary (z.B. Steuerung der Lautstärke über IR-Events)
- Ausgabe von Nachrichten (TextToSpeech und Töne)
- API zur Steuerung aller Funktionen
Link zum Foren Thread
IPSSonos setzt sich aus einer Server-Komponente und mindestens einem Raum zusammen. Ein Raum entspricht dabei einem physikalischem Sonos-Gerät. Die Server-Komponente übernimmt Raum-übergreifende Funktionen wie z.B. die Synchronisation von Playlists.
Download und Installation
Die Installation gliedert sich wie für alle IPSLibrary Module in 3 Teile:
- Download
- Konfiguration
- Installation
Download und Installation können über das IPSModuleManagerGUI Modul vorgenommen werden.
Konfiguration
Die Konfigurationsdateien befinden sich im Config-Ordern der IPSLibrary.
IPSSonos_Configuration.inc.php
In der Datei IPSSonos_Configuration.inc.php werden die Einstellungen für den IPSSonos Server und die einzelnen Räume vorgenommen.
Für den Server wird momentan nur die IP-Adresse eines der SONOS-Player benötigt (Achtung: keine Bridge). Idealerweise ist dies ein Gerät, welches ständig/oft eingeschaltet ist. Das Gerät muss aber zumindest dann erreichbar sein, wenn die Server-Funktionen wie z.B. die Playlists synchronisert werden.
function IPSSonos_GetServerConfiguration() { return array( IPSSONOS_VAR_IPADDR => '192.168.2.110', ); }Für die Räume werden mehrere Einstellungen benötigt:
'Wohnzimmer' => array( IPSSONOS_VAR_IPADDR => '192.168.2.108', IPSSONOS_VAR_RINCON => 'RINCON_000E5829F33A01400', IPSSONOS_VAL_MAXVOL => '30'),
- Die jeweilige IP-Adresse und RINCON eines Sonos-Geräts lassen sich beispielsweise mir Rechts-Click im Windows-Explorer (Eingeschaften) ermitteln.
- MAXVOL: Maximal erlaubte Lautstärke. Jede Änderung der Lautstärke innerhalb IPSSonos wird mit diesem Wert verglichen und bei Überschreiten nicht ausgeführt.
Achtung: Nach Änderungen an obigen Parametern, muss IPSSonos über das WebFront erneut installiert werden.
Für die Ausgabe von Nachrichten müssen folgende Informationen gepflegt werden:
function IPSSonos_GetMessageConfiguration() { return array( IPSSONOS_VAR_LPATH => 'D:\\IPS-Config\\Sounds\\', IPSSONOS_VAR_SMBPATH => '//192.168.2.3/IPS-Config/Sounds/', IPSSONOS_VAR_TTSID => '37725', ); }
- IPSSONOS_VAR_LPATH – Lokaler Pfad auf dem IPS-Rechner in dem die *.wav und *.mp3 Dateien abgelegt werden.
- IPSSONOS_VAR_SMBPATH – SMB-Freigabe des Ordners
- IPSSONOS_VAR_TTSID – ID des IPS-Moduls für TTS (Text-To-Speech)
Der SMB-Freigabepfad muss auch in der Sonos-Library mit Hilfe der Sonos-App (Windows/Mac OSX) bekannt gemacht werden.
IPSSonos_Custom.inc.php
In dieser Datei können über Callback Funktionen benutzerspezifische Erweiterungen an IPSSonos vorgenommen werden. Detailierte Beschreibungen sind in der Datei selbst und im Examples-Ordner zu finden.
IPSMessageHandler_Configuration.inc.php
IPSSonos lässt sich auch über den MessageHandler der IPSLibrary steueren.
Hier Beispiele für den Aufruf von Funktionen ausgelöst durch IRTrans-Events:
function IPSMessageHandler_GetEventConfigurationIR() { $config = array( 'jk_sonos.power_on' => array('IPSComponentSensor_Button','IPSModuleSensor_IPSSonos,IPSSonos_SetRoomPower,Wohnzimmer,1'), 'jk_sonos.power_off' => array('IPSComponentSensor_Button','IPSModuleSensor_IPSSonos,IPSSonos_SetRoomPower,Wohnzimmer,0'), 'jk_sonos.vol_up' => array('IPSComponentSensor_Button','IPSModuleSensor_IPSSonos,IPSSonos_IncVolume,Wohnzimmer,3'), 'jk_sonos.vol_down' => array('IPSComponentSensor_Button','IPSModuleSensor_IPSSonos,IPSSonos_DecVolume,Wohnzimmer,3'),
GUI
Übersicht
Player-Details (Remote)
Für die Remote wird eine idealerweise sekündliche Abfrage der Status des Players benötigt. Hierfür existiert ein Abfrageskript, welches die relevanten Informationen der gerade aktiven Geräte abfrägt und in IPS aktualisert. Praktische Erfahrungen zeigen, dass dies im alltäglichen Betrieb erstaunlich gut funtioniert. Trotzdem ist ein periodische Poll nicht überall gewünscht/möglich. In diesem Fall kann im Tab-Config das Verhalten des Pollings eingestellt werden.
Tab Config
Im Tab Config können die Server-Funktionen (z.B. Synchronisation) aufgerufen werden und das Polling der Player-Details aktiviert/gesteuert werden.
Musikdienste
Radio
IPSSonos unterstützt die unter „My Radio Stations“ gespeicherten Radiostationen.
Spotify
Lieder und Playlists aus Spotify können über IPSSonos abgespielt werden, solange sie in Sonos-Playlisten enthalten sind.
API Funktionen
Alle in der GUI verfügbaren Funktionen können auch über die API aufgerufen werden. Die Beschreibung der einzelnen Funktionen befindet sich direkt im Include File von IPSSonos (zu finden unter „…/IP-Symcon/scripts/IPSLibrary/app/modules/IPSSonos/IPSSonos.inc.php“)
Einfache Funkionen
Raum einschalten
IPSUtils_Include ('IPSSonos.inc.php', 'IPSLibrary::app::modules::IPSSonos'); IPSSonos_SetRoomPower("Küche", true);
Lautstärke absolut
IPSUtils_Include ('IPSSonos.inc.php', 'IPSLibrary::app::modules::IPSSonos'); IPSSonos_SetVolume("Küche", 15);
Lautstärke um 5 erhöhen
IPSUtils_Include ('IPSSonos.inc.php', 'IPSLibrary::app::modules::IPSSonos'); IPSSonos_IncVolume("Küche", 5);
Nachrichten ausgeben
Mit IPSSonos können Nachrichten in Form von Sprache (Text-To-Spech) und Hinweistönen (Sound) ausgegeben werden. Für die Nachrichtenausgabe stehen drei API-Aufrufe zur Verfügung:
- IPSSonos_PlayTTSAllRoomsSimple($value)
- IPSSonos_PlayTTSByRoomSimple($roomName, $value)
- IPSSonos_PlayMessage($params)
Bei den beiden *Simple Ausgaben wird der in der Variables $value übergebene Text entweder in alle oder den spezifizierten Raum ausgegeben. Achtung: Für die Text-To-Speech-Umwandlung wird bei den *Simple-Funktionen ein Google-Service verwendet – es wird also der Text an Google gesendet, dort in Sprache gewandelt und dann als wav-Datein zurückgegeben. Alternativ kann auch der TTS-Dienst von IP-Symcon verwendet werden.
Einfache Nachricht an einzelne Räume
IPSUtils_Include ('IPSSonos.inc.php', 'IPSLibrary::app::modules::IPSSonos'); IPSSonos_PlayTTSByRoomSimple('Küche,Schlafzimmer', 'Dies ist ein Test');
Konfigurierbare Nachrichten
Mit folgender Funktion können komplexere Nachticht ausgegeben werden:
IPSUtils_Include ('IPSSonos.inc.php', 'IPSLibrary::app::modules::IPSSonos'); $params = array ( "Rooms" => 'Küche,Schlafzimmer', // List of rooms to play the messages "Volume_Ramp" => 'slow', // Type of volume ramp-up/down: slow, fast "Text" => 'Dies ist ein schöner Test', // Message "Text_Volume_Offset" => '20', // Adjust volume (for text only) "Type" => 'TTS_Simple', // Type of engine: TTS_Simple (Google), TTS (IPS instance) "TTS_Simple_Language" => 'de', // For TTS_Simple only, possible entries: de, fr, en, en-gb, ... also check google translate service for more languages "Sound" => 'ringin.wav', // Additional sound to play; *.wav/*.mp3 files must be available in the file folder specified in IPSSonos_Configuration "Sound_Repeat" => '3', // Play the sound for # times "Sound_Delay" => '500', // Delay in miliseconds; adds a pause after playing a sound "Sound_Volume_Offset" => '25', // Adjust volume (for sound files only) ); IPSSonos_PlayMessage($params);
In diesem Beispeil wird besteht die Nachricht aus Tönen (Sound), die dreimal nacheinander abgespielt werden und einer Sprachausgabe.
Ausgabe von Tönen
IPSUtils_Include ('IPSSonos.inc.php', 'IPSLibrary::app::modules::IPSSonos'); $params = array ( "Rooms" => 'Küche,Schlafzimmer', // List of rooms to play the messages "Volume_Ramp" => 'fast', // Type of volume ramp-up/down: slow, fast "Sound" => 'ringin.wav', // Additional sound to play; sounds have to be defined in IPSSonos_Configuration "Sound_Repeat" => '5', // Play the sound for # times "Sound_Delay" => '250', // Delay in miliseconds; adds a pause after playing a sound "Sound_Volume_Offset" => '25', // Adjust volume (for sound files only) ); IPSSonos_PlayMessage($params);
Hier werden lediglich fünfmal ein Sound ausgeben, mit jeweils eine Pause von 250ms.
Weitere Beispiele
Wecken am Morgen per Playlist
IPSUtils_Include ('IPSSonos.inc.php', 'IPSLibrary::app::modules::IPSSonos'); $roomname = "Schlafzimmer"; IPSSonos_SetRoomPower($roomname, true); IPSSonos_RampToVolumeMuteSlow($roomname, '20'); IPSSonos_PlayPlaylistByName($roomname, "Guten Morgen"); IPSSonos_SetShuffle($roomname, true);
Callback Funktionen
Zur Zeit stehen 2 Callback Funktionen zur Verfügung:
- function IPSSonos_Custom_SetRoomPower($room_name, $value)
- function IPSSonos_Custom_RoomPowerOn($room_name)
SetRoomPower wird jeweils beim Ein- und Ausschalten eines Raumes aufgerufen. Hierin kann z.B. ein externer Verstärker oder auch das eigentliche SONOS-Gerät geschaltet werden.
RoomPowerOn wird aufgerufen, nachdem IPSSonos ein gerade eingeschaltetes Sonos-Gerät zum ersten mal ansprechen kann. Technisch wird dazu im Hintergrund sekündlich ein Ping auf die IP-Adresse abgesetzt. Kann verwendet werden, um z.B. eine Default-Lautstärke beim Einschalten zu setzten.