Hallo,
ich hoffe ich werde erhört und ihr könnt mir helfen, auch wenn das Thema Squeezeboxen anscheinend nicht mehr so verbreitet ist.
Ich habe mehre Boxen und möchte die in die IP-Symcon einbinden, jedoch gelingt es mir nicht. Ich habe die Verknüpfungen nach Werners Anleitung angelegt, erst habe ich seine Scripte probiert. Diese sind aber doch recht auffwendig und besitzen einige Fehlerquellen. Jetzt probiere ich es mit dem „vereinfachten“ skript und scheitere wieder kläglich,
Ich habe das selbe Problem wie bereits mehrere Vorredner in diesem Thread. Nach dem Ausführen des Steuerungsscriptes werden zwar Variablen angelegt aber ich bekomme folgende Fehlermeldung (gekürzt):
Notice: Undefined index: VARIABLE Error in Script C:\IP-Symcon\scripts\54770.ips.php on Line 132
Notice: Undefined index: VARIABLE in C:\IP-Symcon\scripts\54770.ips.php on line 132
Notice: Undefined index: VARIABLE Error in Script C:\IP-Symcon\scripts\54770.ips.php on Line 137
Notice: Undefined index: VARIABLE in C:\IP-Symcon\scripts\54770.ips.php on line 137
Notice: Undefined index: VARIABLE Error in Script C:\IP-Symcon\scripts\54770.ips.php on Line 142
Notice: Undefined index: VARIABLE in C:\IP-Symcon\scripts\54770.ips.php on line 142
Notice: Undefined index: VARIABLE Error in Script C:\IP-Symcon\scripts\54770.ips.php on Line 164 133 in IPSLibrary\app
Notice: Undefined index: VARIABLE in C:\IP-Symcon\scripts\54770.ips.php on line 164
Notice: Undefined index: VARIABLE Error in Script C:\IP-Symcon\scripts\54770.ips.php on Line 169
Notice: Undefined index: VARIABLE in C:\IP-Symcon\scripts\54770.ips.php on line 169
Führe ich manuell die „Squeezebox.inc“ oder die Auswertung aus bekomme ich keine Fehlermeldung, es werden aber auch keine Daten in die Variablen geschrieben. Außerdem weiß ich nicht genau was mit DeviceID gemeint ist, muss ich die angeben oder holt sich das Script die selber?
Ich hänge unten meine Scripte mit an oder gibt es einen anderen Weg um die Squeezeboxen einzubinden?
Ich hoffe auf eure Hilfe.
Gruß
Fabian
Squeezebox.inc.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', 41843 /*[SqueezeServer]*/ ); //ClientSocketID
define('SQserverIP', '192.100.42.3:9000'); //IP-Adresse und Port des Servers
// MAC-Adresse(n) auf verständliche Konstante(n) definieren
define('SQArbeitszimmer', '90:e6:xx:xx:xx:e0');
//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);
// Definiere Lautstärken für Meldungen/Alarme (wichtig für SQB Radio)
define('SQWarnung', GetValue(33980 /*[Multimedia\Squeezeboxen\Allgemein\Variablen\Lautstärke\SQWarnung]*/ ));
define('SQNotificationHi', GetValue(14111 /*[Multimedia\Squeezeboxen\Allgemein\Variablen\Lautstärke\SQNotificationHi]*/ ));
define('SQBAlarm', GetValue(39043 /*[Multimedia\Squeezeboxen\Allgemein\Variablen\Lautstärke\SQBAlarm]*/ ));
define('SQNotificationLo', GetValue(12468 /*[Multimedia\Squeezeboxen\Allgemein\Variablen\Lautstärke\SQNotificationLo]*/));
// definiere DeviceIDs auf verständliche Namen
define('SQArbeitszimmerID', 26539);
//define('SQWohnzimmerID', 30996 /*[Objekt #30996 existiert nicht]*/ );
//define('SQControllerID', 53127 /*[Objekt #53127 existiert nicht]*/);
//define('SQBadezimmerID', 53951 /*[Objekt #53951 existiert nicht]*/ );
//define('SQKinderzimmerID', 25212 /*[Objekt #25212 existiert nicht]*/);
//define('SQGaestezimmerID', 10834 /*[Objekt #10834 existiert nicht]*/);
//define('SQArbeitszimmerID', 28760 /*[Objekt #28760 existiert nicht]*/);
$allPlayerIDs = array(SQArbeitszimmerID);
// definiere MediaIDs für unterscheidbare Info-Töne vor Durchsagen
define('SQNotificationLoSound', 33768 /*[Multimedia\Squeezeboxen\Allgemein\Sounds\SQNotificationLoSound]*/);
define('SQAlarmSound', 45261 /*[Multimedia\Squeezeboxen\Allgemein\Sounds\SQAlarmSound]*/);
define('SQWarnungSound', 32021 /*[Multimedia\Squeezeboxen\Allgemein\Sounds\SQWarnungSound]*/ );
define('SQNotificationHiSound', 55112 /*[Multimedia\Squeezeboxen\Allgemein\Sounds\SQNotificationHiSound]*/ );
//********* 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 /*[Objekt #31964 existiert nicht]*/, $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;
};
?>
Steuerungsscript
<?php
/******************************************************************************
* 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 "32229.ips.php"; // Squeezefunktions-Sammlung
//***** Konfigurationsbereich *************************************************
$boxmac = '90:e6:xx:xx:xx:e0'; // 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']);
};
?>
Auswertung:
<?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 "32229.ips.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 SQArbeitszimmer: //MAC-Adresse
$boxID = SQArbeitszimmerID; // 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]));
};
};
};
};
?>]