Module – IPSSonos

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.