Hallo Gemeinde,
da meine Squeezeboxen sich stetig vermehren, und ich Werners Scripte doch recht „wartungsintensiv“ finde, habe ich mir mal die Mühe gemacht und die Steuer- und Auswertescripte auf Idents umgestellt.
Damit brauche ich keine IDs mehr eingeben und der Code reduziert sich auch sehr stark, wenn mann so wie ich mehr als 3 Boxen im Einsatz hat.
Es gibt auch eine Installationsroutine, die eine Dummy-Instanz mit allen möglichen/nötigen Variablen erzeugt.
Wer also ein neues Gerät anschafft, braucht nur ein neues Steuer-Script anlegen, in dieses Script die MAC-Adresse eintragen und den Ausführen-Knopf drücken.
<?php
/******************************************************************************
* Script-Name: Squeezebox AZ Steuerung.php *
* Version: 2.0 *
* Autor: wgreipl & McKevin *
* Erstellt am: 2011-11-02 *
* Letzte Änderung am: 2012-09-23 *
* Beschreibung: Bei manueller Ausführung wird überprüft, ob Script versteckt *
* ist, wenn nein, dann wird ein neues Dummy-Modul erstellt mit *
* allen benötigten Variablen. Bei Steuerung über Webfront werden*
* die Befehle ausgeführt und an die Squeezebox mit der gegebenen*
* MAC-Adresse gesendet. *
* Changelog: V1.0 (2011-11-02) Initial Release *
* V2.0 (2012-09-23) Erweiterung um Installer und Umstellung auf *
* Idents zur einfacheren Ersteinrichtung *
******************************************************************************/
//***** Definitionsbereich ****************************************************
include_once "Squeezebox.inc.php"; // Squeezefunktions-Sammlung
//***** Konfigurationsbereich *************************************************
$boxmac = SQArbeitszimmer; // Hier die Squeezebox-MAC-Adresse eintragen
//***** Scriptbereich *********************************************************
//INSTALLER
// Bei manueller Ausführung wird ein Dummy-Modul erstellt, welches mit den für
// die Benutzung wichtigen Variablen ausgestattet wird. Dieses Script verschiebt
// sich dann automatisch in dieses Objekt und wird unsichtbar im WebFront.
// Als Variablen (Idents) werden erstellt: Power, Volume, Modus, Repeat, Shuffle,
// Position, Cover, Interpret, Title, Album, Duration
if ($_IPS['SENDER'] == "Execute")
{
$object = IPS_GetObject($_IPS['SELF']); // Hole alle Scripteigenschaften
$ishidden = $object['ObjectIsHidden']; // Script versteckt?
if (!$ishidden) // wenn Script nicht versteckt, dann los
{
$device = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}"); // erstellt Dummy-Modul
if (IPS_ApplyChanges($device)) // prüft, ob device erstellt werden konnte
{
$parent = IPS_GetParent($_IPS['SELF']); // merke den Ort des Scriptes
IPS_SetName($device, "Squeezebox");
IPS_SetParent($device, $parent); // verschiebe Dummy-Modul zum Scriptort
IPS_SetParent($_IPS['SELF'], $device); // verschiebe Script in Dummy-Modul
IPS_SetHidden($_IPS['SELF'], true); // mache Script unsichtbar im Webfront
$power = IPS_CreateVariable(0); // erstelle Boolean-Variable
IPS_SetParent($power, $device); // verschiebe Variable in Dummy-Modul
IPS_SetIdent($power, "Power"); // setze Ident Power
IPS_SetName($power, "Power"); // bennene Variable in Power
IPS_SetPosition($power, 1); // setze Position 1 für Visu
IPS_SetVariableCustomProfile($power, "PowerSwitch"); // setze Schalterprofil
IPS_SetVariableCustomAction($power, $_IPS['SELF']); // setze Aktion auf dieses Script
$modus = IPS_CreateVariable(1); // Integervariable
IPS_SetParent($modus, $device);
IPS_SetIdent($modus, "Modus");
IPS_SetName($modus, "Modus");
IPS_SetPosition($modus, 2);
IPS_SetVariableCustomProfile($modus, "Squeezebox_Status");
IPS_SetVariableCustomAction($modus, $_IPS['SELF']); // setze Aktion auf dieses Script
$volume = IPS_CreateVariable(1); // Integervariable
IPS_SetParent($volume, $device);
IPS_SetIdent($volume, "Volume");
IPS_SetName($volume, "Lautstärke");
IPS_SetPosition($volume, 3);
IPS_SetVariableCustomProfile($volume, "Squeezebox_Volume");
IPS_SetVariableCustomAction($volume, $_IPS['SELF']); // setze Aktion auf dieses Script
$repeat = IPS_CreateVariable(1); // Integervariable
IPS_SetParent($repeat, $device);
IPS_SetIdent($repeat, "Repeat");
IPS_SetName($repeat, "Repeat");
IPS_SetPosition($repeat, 4);
IPS_SetVariableCustomProfile($repeat, "Squeezebox_Repeat");
IPS_SetVariableCustomAction($repeat, $_IPS['SELF']); // setze Aktion auf dieses Script
IPS_SetIcon($repeat, "Gnome-Media-Playlist-Repeat-32"); // setze Icon
$shuffle = IPS_CreateVariable(1); // Integervariable
IPS_SetParent($shuffle, $device);
IPS_SetIdent($shuffle, "Shuffle");
IPS_SetName($shuffle, "Zufall");
IPS_SetPosition($shuffle, 5);
IPS_SetVariableCustomProfile($shuffle, "Squeezebox_function");
IPS_SetVariableCustomAction($shuffle, $_IPS['SELF']); // setze Aktion auf dieses Script
IPS_SetIcon($shuffle, "Gnome-Media-Playlist-Shuffle-32"); // setze Icon
$interpret = IPS_CreateVariable(3); // Stringvariable
IPS_SetParent($interpret, $device);
IPS_SetIdent($interpret, "Interpret");
IPS_SetName($interpret, "Interpret");
IPS_SetPosition($interpret, 6);
$title = IPS_CreateVariable(3); // Stringvariable
IPS_SetParent($title, $device);
IPS_SetIdent($title, "Title");
IPS_SetName($title, "Titel");
IPS_SetPosition($title, 7);
$album = IPS_CreateVariable(3); // Stringvariable
IPS_SetParent($album, $device);
IPS_SetIdent($album, "Album");
IPS_SetName($album, "Album");
IPS_SetPosition($album, 8);
$cover = IPS_CreateVariable(3); // Stringvariable
IPS_SetParent($cover, $device);
IPS_SetIdent($cover, "Cover");
IPS_SetName($cover, "Cover");
IPS_SetPosition($cover, 9);
$position = IPS_CreateVariable(3); // Stringvariable
IPS_SetParent($position, $device);
IPS_SetIdent($position, "Position");
IPS_SetName($position, "Position");
IPS_SetPosition($position, 10);
$duration = IPS_CreateVariable(3); // Stringvariable
IPS_SetParent($duration, $device);
IPS_SetIdent($duration, "Duration");
IPS_SetName($duration, "Dauer");
IPS_SetPosition($duration, 11);
}; // if (IPS_ApplyChanges($device)) // Objekt angelegt?
}; // if (!$ishidden) // wenn Script nicht versteckt, dann los
}; //if ($_IPS['SENDER'] == "Execute")
//=============================================================================
if ($_IPS['SENDER'] == "WebFront")
{
SqueezeInit($boxmac);
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
};
//=============================================================================
$deviceid = IPS_GetParent($_IPS['SELF']);
$powerID = IPS_GetObjectIDByIdent("Power", $deviceid);
$volumeID = IPS_GetObjectIDByIdent("Volume", $deviceid);
$modusID = IPS_GetObjectIDByIdent("Modus", $deviceid);
$repeatID = IPS_GetObjectIDByIdent("Repeat", $deviceid);
$shuffleID = IPS_GetObjectIDByIdent("Shuffle", $deviceid);
$coverID = IPS_GetObjectIDByIdent("Cover", $deviceid);
$albumID = IPS_GetObjectIDByIdent("Album", $deviceid);
$interpretID = IPS_GetObjectIDByIdent("Interpret", $deviceid);
$durationID = IPS_GetObjectIDByIdent("Duration", $deviceid);
$positionID = IPS_GetObjectIDByIdent("Position", $deviceid);
$titleID = IPS_GetObjectIDByIdent("Title", $deviceid);
if ($_IPS['VARIABLE'] == $powerID)
{
SqueezePower($boxmac, $_IPS['VALUE']);
};
if ($_IPS['VARIABLE'] == $volumeID)
{
SqueezeSetVolume($boxmac, $_IPS['VALUE']);
};
if ($_IPS['VARIABLE'] == $modusID)
{
switch($_IPS['VALUE'])
{
case 0:
SqueezeButton($boxmac, 'stop');
break;
case 1:
SqueezeButton($boxmac, 'pause');
break;
case 2:
SqueezeButton($boxmac, 'play');
break;
case 3:
SqueezeButton($boxmac, 'jump_fwd');
break;
case 4:
SqueezeButton($boxmac, 'jump_rew');
break;
};
};
if ($_IPS['VARIABLE'] == $repeatID)
{
SqueezeSend($boxmac, "playlist repeat ".$_IPS['VALUE']);
};
if ($_IPS['VARIABLE'] == $shuffleID)
{
SqueezeSend($boxmac, "playlist shuffle ".$_IPS['VALUE']);
};
?>
So nun weiter zum Auswerte-Script: Hier muss nun noch die Switch-Anweisung um die neue MAC-Adresse erweitert werden. Das war’s!
<?php
/******************************************************************************
* Script-Name: Squeezebox Auswertescript.php *
* Version: 2.0 *
* Autor: McKevin *
* Erstellt am: 2011-11-02 *
* Letzte Änderung am: 2012-09-23 *
* Beschreibung: Ändert die IPS-Variablen in Abhängigkeit der Rückmeldung vom *
* Logitech Media Server je nach Gerät. *
* Changelog: V1.0 (2011-11-02) Initial Release *
* V2.0 (2012-09-23) Umstellung auf Idents, Code-Reduzierung *
******************************************************************************/
//******** Definitionsbereich *************************************************
include_once "Squeezebox.inc.php";
//***** Scriptbereich *********************************************************
if ($_IPS['SENDER'] == "RegisterVariable") // wenn Daten von Registervariable kommen, dann
{
$antwort = $_IPS['VALUE'];
$array = explode(' ', $antwort); // Antwortstring in Array umwandeln
$array[0] = urldecode($array[0]); // MAC in lesbares Format umwandeln
// Ermittlung DeviceID aus MAC-Adresse
// Bei Neugeräten hier die MAC-Adressen und IPS-DeviceIDs nachtragen
switch ($array[0])
{
case SQBadezimmer: //MAC-Adresse
$boxID = SQBadezimmerID; // ObjektID des Dummy-Moduls
break;
case SQWohnzimmer:
$boxID = SQWohnzimmerID;
break;
case SQSchlafzimmer:
$boxID = SQSchlafzimmerID;
break;
case SQController:
$boxID = SQControllerID;
break;
case SQKinderzimmer:
$boxID = SQKinderzimmerID;
break;
case SQGaestezimmer:
$boxID = SQGaestezimmerID;
break;
case SQArbeitszimmer:
$boxID = SQArbeitszimmerID;
break;
}; // switch
$powerID = IPS_GetObjectIDByIdent("Power", $boxID);
$volumeID = IPS_GetObjectIDByIdent("Volume", $boxID);
$modusID = IPS_GetObjectIDByIdent("Modus", $boxID);
$repeatID = IPS_GetObjectIDByIdent("Repeat", $boxID);
$shuffleID = IPS_GetObjectIDByIdent("Shuffle", $boxID);
$coverID = IPS_GetObjectIDByIdent("Cover", $boxID);
$albumID = IPS_GetObjectIDByIdent("Album", $boxID);
$interpretID = IPS_GetObjectIDByIdent("Interpret", $boxID);
$durationID = IPS_GetObjectIDByIdent("Duration", $boxID);
$positionID = IPS_GetObjectIDByIdent("Position", $boxID);
$titleID = IPS_GetObjectIDByIdent("Title", $boxID);
// Werte aus der RegVar in die entsprechenden Variablen von IPS eintragen
// Powertaste bei Änderung aktualisieren
if ($array[1] == 'power')
{
if ($array[2] == '1')
{
SetValueBoolean($powerID, true);
}
else
{
SetValueBoolean($powerID, false);
};
};
//Lautstärke bei Änderung aktualisieren
if (($array[1] == 'prefset') and ($array[3] == 'volume'))
{
SetValue($volumeID, urldecode($array[4]));
};
// Repeat bei Änderung aktualisieren
if (($array[1] == 'prefset') and ($array[3] == 'repeat'))
{
SetValue($repeatID, $array[4]);
};
// Shuffle bei Änderung aktualisieren
if (($array[1] == 'prefset') and ($array[3] == 'shuffle'))
SetValue($shuffleID, $array[4]);
//Titel-Tag aktualisieren
if (($array[1] == 'playlist') and ($array[2] == 'newsong'))
{
SetValue($titleID, utf8_decode(urldecode($array[3])));
SetValue($modusID, 2); // Button auf play
// Subscripe auf entsprechende Box für Anzeige der Laufzeit
CSCK_SendText(SqueezeServer, $array[0]." status - 1 subscribe:2".chr(13));
SqueezeSend($array[0], "artist ?");
SqueezeSend($array[0], "album ?");
// IPS_Sleep(10);
cover($array[0], $coverID); // Cover anzeigen
};
// Album aktualisieren
if ($array[1] == 'album')
{
SetValue($albumID, utf8_decode(urldecode($array[2])));
};
// Artist aktualisieren
if ($array[1] == 'artist')
{
SetValue($interpretID, utf8_decode(urldecode($array[2])));
};
// Steuerungstasten im Webfront aktualisieren
if ($array[1] == 'play')
{
SetValue($modusID, 2);
};
if ($array[1] == 'stop')
{
SetValue($modusID, 0);
};
if (($array[1] == 'pause') and ($array[2] == 1))
{
SetValue($modusID, 1);
};
if (($array[1] == 'pause') and ($array[2] == 0))
{
SetValue($modusID, 2);
};
if (($array[1] == 'button') and ($array[2] == 'jump_rew'))
{
SetValue($modusID, 4);
};
if (($array[1] == 'button') and ($array[2] == 'jump_fwd'))
{
SetValue($powerID, 3);
};
if (($array[1] == 'status') and ($array[4] == 'subscribe%3A2'))
{
foreach ($array as $item)
{
$item = utf8_decode(urldecode($item));
$chunks = explode(":", $item);
if ($chunks[0] == "time")
{
SetValue($positionID, date('i:s', $chunks[1]));
};
if ($chunks[0] == "duration")
{
SetValue($durationID, date('i:s', $chunks[1]));
};
};
};
};
?>
So, viel Spaß damit, und weniger Arbeit.
Grüße
McKevin
Edit: Hier noch ein Screenshot, wie es dann aussehen sollte. Icons sind die von Gnome. Gnome Icons.zip (64.1 KB)
Edit: Da immer wieder Probleme auftreten, wegen Funktionsaufrufen zu fehlenden Funktionen hier noch meine Squeezebox.inc.php
<?php
/******************************************************************************
* Script-Name: Squeezebox.inc.php *
* Version: 2.1 *
* Autor: McKevin *
* Erstellt am: 2011-10-24 *
* Letzte Änderung am: 2012-10-02 *
* Beschreibung: Squeezeserver Funktionen zum Inkludieren in anderen Scripten. *
* Dependencies: Logitech Media Server *
* Changelog: V1.0 (2011-10-24) Initial Release *
* V2.0 (2012-09-23) Umstellung auf Idents, Code-Reduzierung *
* V2.1 (2012-10-02) Bugfix SqueezePlayMessageFile() Resume *
* V2.2 (2012-10-11) neu: SqueezeSync() und SqueezeUnsync() *
******************************************************************************/
//******** Konfigurationsbereich **********************************************
define('SqueezeServer', 50629); //ClientSocketID
define('SQserverIP', '192.168.1.1:9000'); //IP-Adresse und Port des Servers
// MAC-Adresse(n) auf verständliche Konstante(n) definieren
define('SQKinderzimmer', '00:04:20:xx:xx:xx');
define('SQArbeitszimmer', '00:04:20:xx:xx:xx');
define('SQSchlafzimmer', '00:04:20:xx:xx:xx');
define('SQWohnzimmer', '00:04:20:xx:xx:xx');
define('SQController', '00:04:20:xx:xx:xx');
define('SQBadezimmer', '00:04:20:xx:xx:xx');
define('SQGaestezimmer', '00:04:20:xx:xx:xx');
$allPlayers = array(SQArbeitszimmer, SQGaestezimmer, SQSchlafzimmer, SQWohnzimmer,
SQController, SQBadezimmer, SQKinderzimmer);
// Definiere Lautstärken für Meldungen/Alarme (wichtig für SQB Radio)
define('SQWarnung', GetValue(51287 ));
define('SQNotificationHi', GetValue(23140 ));
define('SQBAlarm', GetValue(57369 ));
define('SQNotificationLo', GetValue(59840));
// definiere DeviceIDs auf verständliche Namen
define('SQSchlafzimmerID', 53258);
define('SQWohnzimmerID', 30996 );
define('SQControllerID', 53127);
define('SQBadezimmerID', 53951 );
define('SQKinderzimmerID', 25212);
define('SQGaestezimmerID', 10834);
define('SQArbeitszimmerID', 28760);
$allPlayerIDs = array(SQSchlafzimmerID, SQWohnzimmerID, SQControllerID, SQGaestezimmer,
SQBadezimmerID, SQKinderzimmerID, SQArbeitszimmer);
// definiere MediaIDs für unterscheidbare Info-Töne vor Durchsagen
define('SQNotificationLoSound', 48707);
define('SQAlarmSound', 10190);
define('SQWarnungSound', 41201 );
define('SQNotificationHiSound', 23539 );
//********* ab hier nichts mehr ändern ****************************************
function SqueezeSend($box, $cmd)
// Allg. Funktion zum Befehle senden
// Wenn keine MAC-Adresse angegeben, dann sende an alle oben definierten Player
{
if ($box == "")
{
foreach ($GLOBALS["allPlayers"] AS $box)
{
CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
};
}
else
{
CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
};
};
//=============================================================================
function SqueezeInit($box)
// Schaltet den Listenmodus der Box(en) an
{
return SqueezeSend($box, 'listen 1');
};
//=============================================================================
function SqueezePowerOn($box)
// Schaltet die Squeezebox(en) an
{
return SqueezeSend($box, 'power 1');
};
//=============================================================================
function SqueezePowerOff($box)
// Schaltet die Squeezebox(en) aus
{
return SqueezeSend($box, 'power 0');
};
//=============================================================================
function SqueezePower($box , $on)
// Schaltet die Squeezebox(en) an oder aus
{
$cmd = "power ";
$cmd .= $on ? "1":"0";
return SqueezeSend($box, $cmd);
};
//=============================================================================
function SqueezeUnSync($box)
// Nimmt den Player mit $box aus der Syncgruppe
{
return SqueezeSend($box, 'sync -');
};
//=============================================================================
function SqueezeSync($box1mac, $box2mac)
// versucht box2 mit box1 zu syncronisieren
{
return SqueezeSend($box1mac, 'sync '.$box2mac);
};
//=============================================================================
function SqueezeSetVolume($box, $value)
// Setzt Lautstärke 0...100
{
return SqueezeSend($box, 'mixer volume '.$value);
};
//=============================================================================
function cover($player_id, $var_id)
// setzt die $var_id mit dem Coverbild von $player_id
{
$time = time();
$str = "<table width='100%' cellspacing='0'><tr><td align=right>";
$str = $str."<img src='http://".SQserverIP."/music/current/cover_150x150_$time.jpg?player=$player_id'></img>";
$str = $str."</td></tr></table>";
SetValue($var_id, $str);
};
//=============================================================================
function SqueezeButton($box , $bt)
// Sendet einen Tastendruck
{
return SqueezeSend($box, "button ".$bt);
};
//=============================================================================
// _Under Development
function SqueezeShowMessage($box, $value1, $value2)
{
return SqueezeSend($box, 'show '.$value1);
};
//=============================================================================
function SqueezePlayMessageFile($box, $DeviceID, $MedienID, $mType)
// Spielt eine IPS-Mediendatei ab
// $box = MAC-Adresse der Squeezebox
// $DeviceID = ObjektID der Dummy-Instanz passend zur MAC-Adresse
// $MedienID = ID des Soundfiles (MP3 oder WAV)
// $mType = Messagetyp (SQNotificationHi/Lo, SQWarnung, SQAlarm = Lautstärke in %);
{
$wait = 15; // Wartezeit in sec bis alte Playlist wiederhergestellt wird
switch ($mType) // Spiele verschiedene Klänge als Aufmerksamkeitssteigerung je nach Lautstärke (SQNotification..)
{
case SQNotificationLo:
$mediaarray1 = IPS_GetMedia(SQNotificationLoSound); // hole Medieninformationen
break;
case SQNotificationHi:
$mediaarray1 = IPS_GetMedia(SQNotificationHiSound); // hole Medieninformationen
break;
case SQWarnung:
$mediaarray1 = IPS_GetMedia(SQWarnungSound); // hole Medieninformationen
break;
case SQBAlarm:
$mediaarray1 = IPS_GetMedia(SQAlarmSound); // hole Medieninformationen
break;
default:
// kein Klang zur Unterscheidung
};
$mediapath1 = rawurlencode(IPS_GetKernelDir().$mediaarray1['MediaFile']); // hole Medienpfad
if (!(array_search($box, $GLOBALS["allPlayers"]) !== false)) // Prüfe, ob MAC-Adrese definiert, sonst Abbruch
{
IPS_LogMessage($_IPS['SELF'], "SqueezePlayMessageFile:Device mit MAC".$box." existiert nicht");
return false;
};
if (!IPS_InstanceExists($DeviceID)) // Prüfe, ob Device mit $DeviceID existiert, sonst Abbruch
{
IPS_LogMessage($_IPS['SELF'], "SqueezePlayMessageFile:Device mit ".$DeviceID." existiert nicht");
return false;
};
if (IPS_MediaExists($MedienID)) // Prüfe, ob MedienObjekt mit der $MedienID existiert, sonst Abbruch
{
$mediaarray2 = IPS_GetMedia($MedienID); // hole Medieninformationen
// Prüfe, ob Medien-Datei vorhanden und Sound-File
if (($mediaarray2['IsAvailable'] == true) && ($mediaarray2['MediaType'] == 2))
{
$mediapath2 = rawurlencode(IPS_GetKernelDir().$mediaarray2['MediaFile']); // hole Medienpfad
// IPS_LogMessage($_IPS['SELF'], "SqueezePlayMessageFile:MediaPath: ".$mediapath);
}
else // Datei nicht vorhanden oder kein Soundfile--> Logeintrag in IPS-Meldungen
{
IPS_LogMessage($_IPS['SELF'], "SqueezePlayMessageFile:MedienID $MedienID ist nicht vorhanden oder keine WAV/MP3-Datei");
return false; // Abbruch der Funktion mit false-Rückgabe
};
// Speichere Status (Power, Modus, Lautstärke, Playlist, Zeitposition)
$status_old = GetValue(IPS_GetObjectIDByIdent("Power", $DeviceID)); // Status Box An oder Aus
$modus_old = GetValue(IPS_GetObjectIDByIdent("Modus", $DeviceID)); // Modus merken (Play Pause Stop)
$volume_old = GetValue(IPS_GetObjectIDByIdent("Volume", $DeviceID)); // aktuelle Lautstärke der Box zwischenspeichern
$time_old = GetValue(IPS_GetObjectIDByIdent("Position", $DeviceID)); // Position des aktuellen Titels merken (float Sekunden)
$repeat = GetValue(IPS_GetObjectIDByIdent("Repeat", $DeviceID)); // War Repeat aktiviert?
SqueezeSend($box, "playlist repeat 0"); // Repeat deaktivieren
SqueezeSend($box, "playlist save TEMP0 silent 1"); // aktuelle Playlist speichern
SqueezeSend($box, "playlist clear"); // Aktuelle Wiedergabeliste löschen
SqueezeSend($box, "playlist add ".$mediapath1);// neue Wiedergabeliste schreiben mit abzuspielende Datei (1. Datei)
SqueezeSend($box, "playlist insert ".$mediapath2); // Wiedergabeliste ergänzen mit abzuspielende Datei (2. Datei)
SqueezeSetVolume($box, $mType); // Definierte Message-Lautstärke setzen
SqueezeSend($box, "play"); // Abspielen
// Warten bis Audiodatei(en) abgespielt wurden (Script anhalten)
IPS_Sleep($wait*1000); // x sec Script anhalten für Durchsage
// SqueezeSend($box, "playlist clear"); // Temporäre Wiedergabeliste wieder löschen
SqueezeSetVolume($box, $volume_old); // alte Lautstärke setzen
SqueezeSend($box, "playlist resume TEMP0 noplay"); // Alte Wiedergabeliste wieder herstellen
SqueezeSend($box, "playlist repeat ".$repeat); // Repeat wieder herstellen
SqueezeSend($box, "time ".$time_old); // an die alte Stelle springen
switch ($modus_old)
{
case 0: // Stop
$cmd = "stop";
break;
case 1: // Pause
$cmd = "pause 1";
break;
case 2: // Play
$cmd = "play";
break;
};
SqueezeSend($box, $cmd); // alten Modus wieder einstellen
if ($cmd == "play" or $cmd == "pause 1") SqueezeSend($box, "time ".$time_old);
if (!$status_old) SqueezePowerOff($box); // War die Box zuvor aus wieder ausschalten
};
return true;
};
//=============================================================================
function SqueezePlayMessageText($box, $DeviceID, $text, $mType)
// Spielt ein Text via TTS auf der Squeezebox ab
// $box = MAC-Adresse der Squeezebox
// $DeviceID = ObjektID der Dummy-Instanz passend zur MAC-Adresse
// $text = String der ausgegeben werden soll
// $mType = Messagetyp (SQNotificationHi/Lo, SQWarnung, SQAlarm = Lautstärke in %);
{
$wait = 15; // Wartezeit in sec bis alte Playlist wiederhergestellt wird
$wait_generate = 5; // Wartezeit in sec zur vollständigen Dateigenerierung
TTS_GenerateFile(31964, $text, "C:\IP-Symcon\TTS.wav", 23); // Generiere WAV-Datei aus Text
IPS_Sleep($wait_generate*1000); // Warte x sec für die Generierung der Datei
switch ($mType) // Spiele verschiedene Klänge als Aufmerksamkeitssteigerung je nach Lautstärke (SQNotification..)
{
case SQNotificationLo:
$mediaarray1 = IPS_GetMedia(SQNotificationLoSound); // hole Medieninformationen
break;
case SQNotificationHi:
$mediaarray1 = IPS_GetMedia(SQNotificationHiSound); // hole Medieninformationen
break;
case SQWarnung:
$mediaarray1 = IPS_GetMedia(SQWarnungSound); // hole Medieninformationen
break;
case SQBAlarm:
$mediaarray1 = IPS_GetMedia(SQAlarmSound); // hole Medieninformationen
break;
default:
// kein Klang zur Unterscheidung
};
$mediapath1 = rawurlencode(IPS_GetKernelDir().$mediaarray1['MediaFile']); // hole Medienpfad
if (!(array_search($box, $GLOBALS["allPlayers"]) !== false)) // Prüfe, ob MAC-Adrese definiert, sonst Abbruch
{
IPS_LogMessage($_IPS['SELF'], "SqueezePlayMessageText:Device mit MAC".$box." existiert nicht");
return false;
};
if (!IPS_InstanceExists($DeviceID)) // Prüfe, ob Device mit $DeviceID existiert, sonst Abbruch
{
IPS_LogMessage($_IPS['SELF'], "SqueezePlayMessageText:Device mit ".$DeviceID." existiert nicht");
return false;
};
if (is_file('C:/IP-Symcon/TTS.wav')) // Prüfe, ob MedienObjekt mit der $MedienID existiert, sonst Abbruch
{
$mediapath2 = rawurlencode(IPS_GetKernelDir().'TTS.wav'); // hole Medienpfad
}
else // Datei nicht vorhanden--> Logeintrag in IPS-Meldungen
{
IPS_LogMessage($_IPS['SELF'], "SqueezePlayMessageText: TTS.wav ist nicht vorhanden.");
return false; // Abbruch der Funktion mit false-Rückgabe
};
// Speichere Status (Power, Modus, Lautstärke, Playlist, Zeitposition)
$status_old = GetValue(IPS_GetObjectIDByIdent("Power", $DeviceID)); // Status Box An oder Aus
$modus_old = GetValue(IPS_GetObjectIDByIdent("Modus", $DeviceID)); // Modus merken (Play Pause Stop)
$volume_old = GetValue(IPS_GetObjectIDByIdent("Volume", $DeviceID)); // aktuelle Lautstärke der Box zwischenspeichern
$time_old = GetValue(IPS_GetObjectIDByIdent("Position", $DeviceID)); // Position des aktuellen Titels merken (float Sekunden)
$repeat = GetValue(IPS_GetObjectIDByIdent("Repeat", $DeviceID)); // War Repeat aktiviert?
SqueezeSend($box, "playlist repeat 0"); // Repeat deaktivieren
SqueezeSend($box, "playlist save TEMP0 silent 1"); // aktuelle Playlist speichern
SqueezeSend($box, "playlist clear"); // Aktuelle Wiedergabeliste löschen
SqueezeSend($box, "playlist add ".$mediapath1);// neue Wiedergabeliste schreiben mit abzuspielende Datei (1. Datei)
SqueezeSend($box, "playlist insert ".$mediapath2); // Wiedergabeliste ergänzen mit abzuspielende Datei (2. Datei)
SqueezeSetVolume($box, $mType); // Definierte Message-Lautstärke setzen
SqueezeSend($box, "play"); // Abspielen
// Warten bis Audiodatei(en) abgespielt wurden (Script anhalten)
IPS_Sleep($wait*1000); // x sec Script anhalten für Durchsage
// SqueezeSend($box, "playlist clear"); // Temporäre Wiedergabeliste wieder löschen
SqueezeSetVolume($box, $volume_old); // alte Lautstärke setzen
SqueezeSend($box, "playlist resume TEMP0 noplay"); // Alte Wiedergabeliste wieder herstellen
SqueezeSend($box, "playlist repeat ".$repeat); // Repeat wieder herstellen
SqueezeSend($box, "time ".$time_old); // an die alte Stelle springen
switch ($modus_old)
{
case 0: // Stop
$cmd = "stop";
break;
case 1: // Pause
$cmd = "pause 1";
break;
case 2: // Play
$cmd = "play";
break;
};
SqueezeSend($box, $cmd); // alten Modus wieder einstellen
if ($cmd == "play" or $cmd == "pause 1") SqueezeSend($box, "time ".$time_old);
if (!$status_old) SqueezePowerOff($box); // War die Box zuvor aus wieder ausschalten
return true;
};
?>