IPSSonos

@Uwe
In dem Script ist der Include(PHPSonos… nicht drin. Den mache ich vor den Aufruf der Funktion.

@Wolfgang
Du generiert vor der Funktion Variablen die Du in der Funktion nutzt. Das geht so nicht.
Bei dem WAV Array nutzt Du nicht die Netzangaben der Dateiorte! Schau dir mein Wave Array an.

Hallo, ich hatte keine Tonausgabe bei Datei’n kürzer 1s.
Vielleicht liegt es bei dir daran

@Martin,
Ich auch. Habe alles drin auch den include.Die Function habe ich in der PHPSonos… eingetragen

Ps. Oder muss der generierte File in dem Sonosserver zb. Playlist vorhanden sein?

Hallo Uwe,

nein der ton muss nicht in der Playlist sein.
Ich bin beruflich in Hilden. Ich kann erst am WE was probieren. Kannst Du dein Script mal einstellen? Eventuell sehr ich ja was.

Ich meinte natürlich „sehe“ und nicht sehr. Scheiß Autokorrektur.

Ok, hier einmal die PHPSonos.inc.php da habe ich die function ab Zeile 454 eingefügt.

<?
	/**
	 * This file is part of the IPSLibrary.
	 *
	 * The IPSLibrary is free software: you can redistribute it and/or modify
	 * it under the terms of the GNU General Public License as published
	 * by the Free Software Foundation, either version 3 of the License, or
	 * (at your option) any later version.
	 *
	 * The IPSLibrary is distributed in the hope that it will be useful,
	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	 * GNU General Public License for more details.
	 *
	 * You should have received a copy of the GNU General Public License
	 * along with the IPSLibrary. If not, see http://www.gnu.org/licenses/gpl.txt.
	 */

	/**@defgroup IPSSonos_api IPSSonos API
	 * @ingroup IPSSonos
	 * @{
	 *
	 * IPSSonos Server API
	 *
	 * @file          IPSSonos.inc.php
	 * @author        joki
	 * @version
	 * Version 1.0.0, 01.09.2014<br/>
	 *
	 * This include has all functions to control the IPSSonos application. The individual functions can
	 * also be used in scripts outside the IPSLibrary allowing easy access of the SONOS devices.
	 *
	 * Please find examples in the Wiki: http://www.ip-symcon.de/wiki/IPSSonos
	 *
	 */

 	include_once 'IPSSonos_Server.class.php';


/*********************************************************************************************
 *
 *  Room Functions
 *
 **********************************************************************************************/
	/**
	 *  @brief Powers specific room on or off
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value true to switch room on, false to switch room off
	 *  @return Result as boolean
	 */
	function IPSSonos_SetRoomPower($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_ROOM, $roomName, IPSSONOS_FNC_POWER, $value);
	}

	/**
	 * @brief Returns the power status of specific room
	 *
	 * @param [in] $roomName Name of room as character
	 * @return Result as boolean
	 */
	function IPSSonos_GetRoomPower($roomName) {
		$server = IPSSonos_GetServer();
		return $server->GetData(IPSSONOS_CMD_ROOM, $roomName, IPSSONOS_FNC_POWER, null);
	}

/*********************************************************************************************
 *
 *  Player Functions
 *
 **********************************************************************************************/

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_Play($roomName) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_PLAY, null);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_Pause($roomName) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_PAUSE, null);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_Stop($roomName) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_STOP, null);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_Next($roomName) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_NEXT, null);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_Previous($roomName) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_PREVIOUS, null);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_RampToVolumeMute($roomName, $value){
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_VOLUME_RMPMUTE, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_RampToVolumeMuteSlow($roomName, $value){
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_VOLUME_RMPMUTESLOW, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_RampToVolume($roomName, $value){
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_VOLUME_RMP, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_SetShuffle($roomName, $value){
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_SHUFFLE, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_GetShuffle($roomName){
		$server = IPSSonos_GetServer();
		return $server->GetData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_SHUFFLE, null);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_SetRepeat($roomName, $value){
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_REPEAT, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_GetRepeat($roomName){
		$server = IPSSonos_GetServer();
		return $server->GetData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_REPEAT, null);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_SetVolume($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_VOLUME, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_IncVolume($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_VOLUME_INC, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
	function IPSSonos_DecVolume($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_VOLUME_DEC, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Parameter_Description
	 *  @return Result as boolean
	 */
//	function IPSSonos_GetVolume($instanceId, $roomId) {
//		$server = IPSSonos_GetServer($instanceId);
//		return $server->GetData(IPSSONOS_CMD_AUDIO, $roomId, IPSSONOS_FNC_VOLUME, null);
//	}

	/**
	 *  @brief Set status of the mute function
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value True to switch on, false to switch off
	 *  @return Result as boolean
	 */
	function IPSSonos_SetMute($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_MUTE, $value);
	}

	/**
	 *  @brief Returns the status of the mute function
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_GetMute($roomName) {
		$server = IPSSonos_GetServer($instanceId);
		return $server->GetData(IPSSONOS_CMD_AUDIO, $roomId, IPSSONOS_FNC_MUTE, null);
	}

	/**
	 *  @brief Switch between the mute status
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @return Result as boolean
	 */
	function IPSSonos_SwitchMute($roomName) {
		$server = IPSSonos_GetServer($instanceId);
		return $server->GetData(IPSSONOS_CMD_AUDIO, $roomId, IPSSONOS_FNC_MUTE, null);
	}

	/**
	 *  @brief Starts playing of a specified Sonos playlist
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value ID as integer of the playlist
	 *  @return Result as boolean
	 */
	function IPSSonos_PlayPlaylistByID($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_PLAYPLID, $value);
	}

	/**
	 *  @brief Starts playing of a specified Sonos playlist
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Name as character of the playlist as defined in the Sonos controller
	 *  @return Result as boolean
	 */
	function IPSSonos_PlayPlaylistByName($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_PLAYPLNAME, $value);
	}

	/**
	 *  @brief Starts playing of a specified radio station
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value ID as integer of the radio station
	 *  @return Result as boolean
	 */
	function IPSSonos_PlayRadiostationByID($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_PLAYRDID, $value);
	}

	/**
	 *  @brief Starts playing of a specified radio station
	 *
	 *  @param [in] $roomName Name of room as character
	 *  @param [in] $value Name as character of radio station as defined in the Sonos controller
	 *  @return Result as boolean
	 */
	function IPSSonos_PlayRadiostationByName($roomName, $value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_AUDIO, $roomName, IPSSONOS_FNC_PLAYRDNAME, $value);
	}

/*********************************************************************************************
 *
 *  Server Functions
 *
 **********************************************************************************************/
	/**
	 *  @brief Powers all rooms off
	 *
	 *  @return Result as boolean
	 */
	function IPSSonos_SwitchAllRoomsOff() {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_ALLROOMSOFF, null);
	}

	/**
	 *  @brief Get a list of all rooms
	 *
	 *  @return Array listing all defined rooms
	 */
	function IPSSonos_GetAllRooms() {
		$server = IPSSonos_GetServer();
		return $server->GetData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_ROOMS, null);
	}

	/**
	 *  @brief Get a list of rooms currently powered on
	 *
	 *  @return Array listing all rooms currently active
	 */
	function IPSSonos_GetAllActiveRooms() {
		$server = IPSSonos_GetServer();
		return $server->GetData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_ROOMSACTIVE, null);
	}

	/**
	 *  @brief Sets status of the query functionality, retrieving details from players like current song, player state, ...
	 *
	 *  @param [in] $value On/Off as boolean
	 *  @return Result as boolean
	 */
	function IPSSonos_SetQuery($value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_SETQUERY, $value);
	}

	/**
	 *  @brief Sets the period of querying the player details
	 *
	 *  @param [in] $value Period in seconds
	 *  @return Result as boolean
	 */
	function IPSSonos_SetQueryTime($value) {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_SETQUERYTIME, $value);
	}

	/**
	 *  @brief Brief
	 *
	 *  @return Synchronize of playlists stored in "Sonos Playlists" section of the Sonos system
	 */
	function IPSSonos_SyncPlaylists() {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_SYNCPL, null);
	}
	/**
	 *  @brief Synchronize of radio stations stored in "My Radio Stations" section of the Sonos system
	 *
	 *  @return Result as boolean
	 */
	function IPSSonos_SyncRadiostations() {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_SYNCRD, null);
	}

	/**
	 *  @brief Triggers a query for player details of the currently active rooms
	 *
	 *  @return Result as boolean
	 */
	function IPSSonos_QueryData() {
		$server = IPSSonos_GetServer();
		return $server->SendData(IPSSONOS_CMD_SERVER, null, IPSSONOS_FNC_QUERYDATA, null);
	}

/*********************************************************************************************
 *
 *  Additional Functions
 *
 **********************************************************************************************/

	/**
	 *  @brief Get Server ID of IPSSonos
	 *
	 *  @return IPSSonos Server Object
	 *
	 */
	function IPSSonos_GetServer() {
	   	$instanceId = IPSUtil_ObjectIDByPath('Program.IPSLibrary.data.modules.IPSSonos.IPSSonos_Server');
		return new IPSSonos_Server($instanceId);
	}

	function WriteBoolean($value) {
	   	if ($value)  {
			$result = 'an';
		}
		else {
			$result = 'aus';
		}
		return $result;
	}

  function TTS_Play_Sonos($Player_IP,$ansagetext,$ton)
			{
			/*=============================================================
			TTS_Play_Sonos - Martin Heinzel - 09.07.2013
			Version: 0.1

			Beschreibung:
			Diese Funktion ersetzt die Sprachausgabe von "Ferengie-Master"
			für die Sprachausgabe auf Soundkarten. Zur Sprachausgabe wird
			ein Sonosplayer genutzt.

			Parameter:
			$Player_IP           ->          Die IP-Adresse des Sonosplayers
			$ansagetext          ->          Der Ansagetext der ausgegeben werden soll
			$ton                 ->          Der Ton/Melodie die vor dem Ansagetext abgespielt werden soll


			Änderungen
			----------

			tt.mm.jjjj von Version x.x -> y.y

			Beschreibung:

			================================================================*/

			// Variablen Deklaration --------------------------------------

			// Variablen
			//--------------
			$wav = array
			(
			//   "hinweis"  => "x-file-cifs://WHS/media/Sound/hinweis.wav",
			//   "meldung"  => "x-file-cifs://WHS/media/Sound/meldung.wav",
			//   "abmelden" => "x-file-cifs://WHS/media/Sound/abmelden.wav",
			//   "aus"      => "x-file-cifs://WHS/media/Sound/aus.wav",
			     "chimes"   => "x-file-cifs://WHS/Windows/Media/chimes.wav",
			//   "bell"     => "x-file-cifs://WHS/media/Sound/bell.wav"
			);

			//-------------------------------------------------------------


			//--------------------------- Main ----------------------------
			// Sonos Player
			$sonos                         = new PHPSonos($Player_IP);        //Sonos ZP IPAdresse

			//Einlesen und runterrampen der Lautstärke
			$volume                         = $sonos->GetVolume();                 // gibt die Lautstärke als Integer zurück

			//Runterrampen der Lautstärke
			while ($sonos->GetVolume()>=6)
			{
			    $sonos->SetVolume($sonos->GetVolume() -5);
			    IPS_Sleep(500);
			}

			//Speichern der Aktuellen Informationen
			$oldpi = $sonos->GetPositionInfo();
			$oldmi = $sonos->GetMediaInfo();
			$radio=(strpos($oldmi['CurrentURI'],"x-sonosapi-stream:")>0)===false;
			$oldti = $sonos->GetTransportInfo();

			//Abspielen der gewählten Ton's
			$sonos->SetVolume(50);
			$sonos->SetAVTransportURI($wav[$ton]);
			$sonos->Play();

			//Abfragen ob der Player noch spielt
			IPS_Sleep(1000);
			while ($sonos->GetTransportInfo()==1)
			{
			    IPS_Sleep(200); //Alle 200ms wird abgefragt
			}

			//Generieren der Sprachausgabe
			TTS_GenerateFile(48785 /*[Tools\Sprachausgaben\Text To Speech]*/, $ansagetext,IPS_GetKernelDir()."Media/Sprache1Sonos.wav",39);
			IPS_Sleep(75);

			//Abspielen der Sprachausgabe
			$sonos->SetVolume(30);
			$sonos->SetAVTransportURI("x-file-cifs://WHS/IP-Symcon/Media/Sprache1Sonos.wav");
			$sonos->Play();

			//Abfragen ob der Player noch spielt
			IPS_Sleep(1000);
			while ($sonos->GetTransportInfo()==1)
			{
			    IPS_Sleep(200); //Alle 200ms wird abgefragt
			}

			//Player wieder Starten
			if ($radio)
			{
			    $sonos->SetRadio($oldmi['CurrentURI']);
			}
			else
			{
			    $sonos->SetAVTransportURI($oldmi['CurrentURI'],$oldmi['CurrentURIMetaData']);
			}

			try
			{
			    // Seek TRack_Nr
			   $sonos->Seek("TRACK_NR",$oldpi['Track']);
			   // Seek REl_time
			   $sonos->Seek("REL_TIME",$oldpi['RelTime']);
			}
			catch (Exception $e)
			{

			}
			if ($oldti==1) $sonos->Play();
			$sonos->SetVolume($volume);

			//------------------------- Main ENDE --------------------------
			}

   /** @}*/


?>

so und hiermit rufe ich es auf.

<?

IPSUtils_Include ("IPSSonos.inc.php", 				"IPSLibrary::app::modules::IPSSonos");

TTS_Play_Sonos("192.168.1.45","Sonos Test Durchsage ","chimes");

?>

Hallo Joki,

habe wiedereinmal ein Problem. Nach Update auf 1.0.5 bekomme ich folgenden Fehler wenn ich Periodisches Abfragen der Sonos Geräte aktiviere.

Dies aber nur wenn Radio an ist, bei Playlist kommt der Fehler nicht. Was habe ich schon wieder falsch gemacht?

War ein Bug und ist im Fix-Release 1.0.6 behoben.

BTW, es ist eher ungeschickt die Dateien der IPS-Library manuell zu ändern/erweitern - mit dem nächsten Update sind Deine Änderungen wieder überschrieben. :eek:

Ja ist klar, da habe ich vorgesorgt…

Oh Mann Uwe. Ich kann an deinem Script nichts böses finden. Du musst sich bis morgen (dann bin ich zu Hause) gedulden. Sorry!!!

Jetzt hab ich euch alle wuschig gemacht, und das Script läuft nur bei mir. Komisch. Aber nicht komisch wie lustig.

Oh und das bei einem der mit Geduld überhaupt nichts anfangen kann. :blush:

Hallo Uwe,

ich glaube es ist wichtig wie Du deine Ordner im Netzwerk freigegeben hast.
Der „media“ Ordner liegt bei mir natürlich auch unter IPS.
Ich habe den nur separat im Netzwerk freigegeben.

Darum sieht das bei mir so aus:

Der Eintrag in meinem wav-Array ist dann so:


"chimes"   => "x-file-cifs://HOMECONTROL-PC/media/Sound/chimes.wav",

Ich denke das ist es. Hoffe ich. Glaube ich. Wünsch ich mir. :wink:

PS: Wirke ich immer so ungeduldig?

Bei mir funktioniert das:


<?
//--------------------------- Main ----------------------------
//einbinden der Sonos Klasse
include("PHPSonos.inc.php");
TTS_Play_Sonos("192.168.2.33", "Sonos Test Durchsage", "chimes");

function TTS_Play_Sonos($Player_IP,$ansagetext,$ton)
{
/*=============================================================
TTS_Play_Sonos - Martin Heinzel - 09.07.2013
Version: 0.1

Beschreibung:
Diese Funktion ersetzt die Sprachausgabe von "Ferengie-Master"
für die Sprachausgabe auf Soundkarten. Zur Sprachausgabe wird
ein Sonosplayer genutzt.

Parameter:
$Player_IP           ->          Die IP-Adresse des Sonosplayers
$ansagetext          ->          Der Ansagetext der ausgegeben werden soll
$ton                 ->          Der Ton/Melodie die vor dem Ansagetext abgespielt werden soll


Änderungen
----------

tt.mm.jjjj von Version x.x -> y.y

Beschreibung:

================================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$wav = array
(
	"hinweis"  => "x-file-cifs://HOMECONTROL-PC/media/Sound/hinweis.wav",
   "meldung"  => "x-file-cifs://HOMECONTROL-PC/media/Sound/meldung.wav",
   "abmelden" => "x-file-cifs://HOMECONTROL-PC/media/Sound/abmelden.wav",
   "aus"      => "x-file-cifs://HOMECONTROL-PC/media/Sound/aus.wav",
   "chimes"   => "x-file-cifs://HOMECONTROL-PC/media/Sound/chimes.wav",
   "bell"     => "x-file-cifs://HOMECONTROL-PC/media/Sound/bell.wav"
);

//-------------------------------------------------------------


//--------------------------- Main ----------------------------
// Sonos Player
$sonos 						= new PHPSonos($Player_IP);		//Sonos ZP IPAdresse

//Einlesen und runterrampen der Lautstärke
$volume 						= $sonos->GetVolume(); 				// gibt die Lautstärke als Integer zurück

//Runterrampen der Lautstärke
while ($sonos->GetVolume()>=6)
{
	$sonos->SetVolume($sonos->GetVolume() -5);
	IPS_Sleep(500);
}

//Speichern der Aktuellen Informationen
$oldpi = $sonos->GetPositionInfo();
$oldmi = $sonos->GetMediaInfo();
$radio=(strpos($oldmi['CurrentURI'],"x-sonosapi-stream:")>0)===false;
$oldti = $sonos->GetTransportInfo();

//Abspielen der gewählten Ton's
$sonos->SetVolume(50);
$sonos->SetAVTransportURI($wav[$ton]);
$sonos->Play();

//Abfragen ob der Player noch spielt
IPS_Sleep(1000);
while ($sonos->GetTransportInfo()==1)
{
	IPS_Sleep(200); //Alle 200ms wird abgefragt
}

//Generieren der Sprachausgabe
TTS_GenerateFile(54665 /*[.Sound\Text To Speech]*/, $ansagetext,IPS_GetKernelDir()."media/Sprache1.wav",39);
IPS_Sleep(75);

//Abspielen der Sprachausgabe
$sonos->SetVolume(30);
$sonos->SetAVTransportURI("x-file-cifs://HOMECONTROL-PC/media/Sprache1.wav");
$sonos->Play();

//Abfragen ob der Player noch spielt
IPS_Sleep(1000);
while ($sonos->GetTransportInfo()==1)
{
	IPS_Sleep(200); //Alle 200ms wird abgefragt
}

//Player wieder Starten
if ($radio)
{
	$sonos->SetRadio($oldmi['CurrentURI']);
}
else
{
	$sonos->SetAVTransportURI($oldmi['CurrentURI'],$oldmi['CurrentURIMetaData']);
}

try
{
	// Seek TRack_Nr
   $sonos->Seek("TRACK_NR",$oldpi['Track']);
   // Seek REl_time
   $sonos->Seek("REL_TIME",$oldpi['RelTime']);
}
catch (Exception $e)
{

}
if ($oldti==1) $sonos->Play();
$sonos->SetVolume($volume);

//------------------------- Main ENDE --------------------------
}

?>


Hmmmmm also alle wav Dateien die ich über IPS abspielen lasse, funktionieren von da aus wo sie liegen.
Aber bei Sonos ist es wirklich so, dass sie (so in meinem Fall) nur funktionieren wenn es im WHS Freigabeordner liegt.
Abeer jetzt geht es :slight_smile:

Danke Martin.

Ps. Wie machst Du es wenn man jetzt mehrere Player hat?

Hallo Uwe,

ich mache bei mir die Ansagen immer nur über einen Player (Wohnzimmer).
Ich habe mich mit dem gruppieren von Playern noch nicht beschäftigt.

Hallo zusammen,

da ich die Sprachausgabe undbedingt haben wollte, und die vorgenannten Tipps, ausser die mit dem richtigen Pfad (hatte ich zuerst nicht geblickt), mich erst mal nicht weiter gebracht haben, also Freigabe mit Rechten jeder alles, Firewall aus … hat mich ein offenes natives SonosFenster zum Erfolg geführt. Das hat mir immer schön gesagt warum es die Datei in der Queue nicht abspielen kann. Keine Rechte, nicht gefunden …

Die Lösung bei mir war, dass das .\ips\media Verzeichnis freigegeben, jeder lesen, nicht im nativen SonosProgramm in den Musikbibliotheken eingetragen war. Danach hat alles einwandfrei funktioniert.

Hoffe es hilft dem einen oder der anderen mit dem selben Problem.

Besten Dank Wolfgang.
Ich finde es immer wichtig das man ungefragt
Feedback über eigene Erfahrungen gibt.

Von so was lebt ein Forum. :slight_smile:

Hat jemand die Lautstärkeregelung per Taster im Einsatz und eventuell einen Tipp für mich.Ich möchte das per 2x KNX-Taster machen (1x hoch, 1x runter). Realisiert habe ich das mit:

IPSSonos_IncVolume($roomName, 5);

und

IPSSonos_DecVolume($roomName, 5);

Was prinzipiell auch geht. Nur habe ich bei der Ausführung eine starke Verzögerung. Somit ist das so nicht wirklich bedienbar. Hat das eventuell jemand realisiert?

Beste Grüße
Tom