Dieses Skript basiert auf der Arbeit von „mäc“ und dem Thread:
https://www.symcon.de/forum/threads/10828-Verst%C3%A4rker-Pioneer-VSX-920-per-Lan-steuern
Die Ansteuerung wurde an den Pioneer VSX-923 angepasst, sollte wohl auch für diese Geräte (SC-LX87, SC-LX77, SC-LX57, SC-2023, SC-1223, VSX-1123, VSX-923) funktionieren, da diese im gleichen Handbuch beschrieben sind.
Feedback ist gerne erwünscht

Installationshinweise:
0.) Skript wurde in IPS 4.3 erstellt
1.) Leeres Skript erzeugen (Name z.B. „PioneerVSX-923_Install“)
2.) Skript an den Ort (Kategorie,…) verschieben, in dem die Objekte eingebaut werden sollen
3.) Inhalt für INSTALL-Skript einfügen und CONFIG-Werte im Skript an anpassen
4.) Install-Skript ausführen
5.) Haupt-Skript mit Code auffüllen (Achtung: nicht include-Zeilen überschreiben)
6.) Konstanten-Skript mit Code auffüllen
7.) Auf der Statusseite des Receivers (http://IP-Adresse) überprüfen/aktivieren, dass der AVR im Standby erreichbar bleibt (Network Standby ON)
-> Fertig
Install-Skript:
<?
################### CONFIG-START ###################
define ('ID_WebFront', ""); // WebFront-ID
define ('NAME_DEVICE',"Pioneer VSX-923"); // Gerätebenennung
define ('IP_DEVICE',""); // AVR IP-Adresse
define ('PORT_DEVICE',"8102"); // Kommunikationsport
// Zum Testen: direkte Kommunikation per telnet (Windows-Taste -> Eingabeaufforderung (CMD) -> telnet 10.0.0.42 8102
################### CONFIG-ENDE ###################
if (ID_WebFront=="" or NAME_DEVICE=="" or IP_DEVICE=="" or PORT_DEVICE=="") {echo("CONFIG-Daten unvollständig!"); return;}
$ParentID=IPS_GetParent($_IPS['SELF']);
// dummy instanz erstellen
$ID_INSTANZ= IPS_CREATEINSTANCE("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetParent($ID_INSTANZ, $ParentID);
IPS_SETName($ID_INSTANZ, NAME_DEVICE);
// cutter instanz erstellen
$ID_INSTANZ_CUTTER= IPS_CREATEINSTANCE("{AC6C6E74-C797-40B3-BA82-F135D941D1A2}");
IPS_SETName($ID_INSTANZ_CUTTER, NAME_DEVICE."_CUTTER");
// registervariable instanz erstellen
$ID_INSTANZ_REGISTER= IPS_CREATEINSTANCE("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}");
IPS_SetParent($ID_INSTANZ_REGISTER, $ID_INSTANZ_CUTTER);
IPS_SETName($ID_INSTANZ_REGISTER, NAME_DEVICE."_REGISTER");
// client socket instanz erstellen
$ID_INSTANZ_SOCKET= IPS_CREATEINSTANCE("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}");
IPS_SETName($ID_INSTANZ_SOCKET, NAME_DEVICE."_SOCKET");
CSCK_SetHost($ID_INSTANZ_SOCKET,IP_DEVICE);
CSCK_SetPort($ID_INSTANZ_SOCKET,PORT_DEVICE);
IPS_SetProperty($ID_INSTANZ_SOCKET, "Open", true);
//dummy pioneer script für konstanten anlegen in das dann der inhalt einkopiert werden muss
$ID_PIONEER_SCRIPT_CONF= CreateScriptByName(NAME_DEVICE."_Const", $ID_INSTANZ, "<?\r\r?>");
//dummy pioneer script anlegen in das dann der inhalt einkopiert werden muss
$ID_PIONEER_SCRIPT= CreateScriptByName(NAME_DEVICE, $ID_INSTANZ, "<?\r\r?>");
// timer der das script zykisch aufruft für power in abfrage
$ID_EVENT = IPS_CreateEvent (1);
IPS_SetEventCyclic($ID_EVENT, 2, 1, 0, 0, 2, 5); //Jeden Tag jede 5 Minuten
IPS_SetParent($ID_EVENT, $ID_PIONEER_SCRIPT);
IPS_SetEventActive($ID_EVENT, true); // Aktivert Ereignis
// cutter,socket und register einrichten
IPS_ConnectInstance($ID_INSTANZ_REGISTER, $ID_INSTANZ_CUTTER);
RegVar_SetRXObjectID($ID_INSTANZ_REGISTER, $ID_PIONEER_SCRIPT);
Cutter_SetParseType($ID_INSTANZ_CUTTER, 0);
Cutter_SetRightCutChar($ID_INSTANZ_CUTTER, "
");
IPS_ConnectInstance($ID_INSTANZ_CUTTER, $ID_INSTANZ_SOCKET);
IPS_ApplyChanges($ID_INSTANZ_SOCKET);
IPS_ApplyChanges($ID_INSTANZ_CUTTER);
IPS_ApplyChanges($ID_INSTANZ_REGISTER);
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_VOLUME"))
IPS_DeleteVariableProfile("AVR_VOLUME");
IPS_CreateVariableProfile ("AVR_VOLUME", 1 );
IPS_SetVariableProfileText ("AVR_VOLUME", "", "%" );
IPS_SetVariableProfileValues ("AVR_VOLUME", 40, 161 , 1 );
IPS_SetVariableProfileIcon("AVR_VOLUME", "Speaker");
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_LISTENINGMODE"))
IPS_DeleteVariableProfile("AVR_LISTENINGMODE");
IPS_CreateVariableProfile ("AVR_LISTENINGMODE", 1 );
IPS_SetVariableProfileIcon("AVR_LISTENINGMODE", "Music");
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE", 1, "Auto.SURR/ALC/Direct", "", -1);
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE", 2, "Std.SURR", "", -1);
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE", 3, "Adv.SURR", "", -1);
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_LISTENINGMODE_EXT"))
IPS_DeleteVariableProfile("AVR_LISTENINGMODE_EXT");
IPS_CreateVariableProfile ("AVR_LISTENINGMODE_EXT", 1 );
IPS_SetVariableProfileIcon("AVR_LISTENINGMODE_EXT", "Music");
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE_EXT", 1, "STEREO", "", -1);
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE_EXT", 2, "EXTENDED STEREO", "", -1);
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE_EXT", 3, "DOLBY PROLOGIC", "", -1);
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE_EXT", 4, "DOLBY PLII MUSIC", "", -1);
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE_EXT", 5, "Auto Level Control (A.L.C.)", "", -1);
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_KEYLOCK"))
IPS_DeleteVariableProfile("AVR_KEYLOCK");
IPS_CreateVariableProfile ("AVR_KEYLOCK", 1 );
IPS_SetVariableProfileIcon("AVR_KEYLOCK", "Lock");
IPS_SetVariableProfileAssociation("AVR_KEYLOCK", 0, "Aus", "", -1);
IPS_SetVariableProfileAssociation("AVR_KEYLOCK", 1, "Ein", "", -1);
IPS_SetVariableProfileAssociation("AVR_KEYLOCK", 2, "Ein + Vol Lock", "", -1);
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_INTERNETRADIOBUTTONS"))
IPS_DeleteVariableProfile("AVR_INTERNETRADIOBUTTONS");
IPS_CreateVariableProfile ("AVR_INTERNETRADIOBUTTONS", 1 );
IPS_SetVariableProfileIcon("AVR_INTERNETRADIOBUTTONS", "Shutter");
IPS_SetVariableProfileAssociation("AVR_INTERNETRADIOBUTTONS", 0, "Stop", "", -1);
IPS_SetVariableProfileAssociation("AVR_INTERNETRADIOBUTTONS", 1, "Play", "", -1);
IPS_SetVariableProfileAssociation("AVR_INTERNETRADIOBUTTONS", 2, "Ch -", "", -1);
IPS_SetVariableProfileAssociation("AVR_INTERNETRADIOBUTTONS", 3, "Ch +", "", -1);
IPS_SetVariableProfileAssociation("AVR_INTERNETRADIOBUTTONS", 4, "Display", "", -1);
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_FUNCTION"))
IPS_DeleteVariableProfile("AVR_FUNCTION");
IPS_CreateVariableProfile ("AVR_FUNCTION", 1 );
IPS_SetVariableProfileIcon("AVR_FUNCTION", "Shutter");
IPS_SetVariableProfileAssociation("AVR_FUNCTION", 0, "Diveres", "", -1);
IPS_SetVariableProfileAssociation("AVR_FUNCTION", 2, "Tuner", "", -1);
IPS_SetVariableProfileAssociation("AVR_FUNCTION", 4, "XBox", "", -1);
IPS_SetVariableProfileAssociation("AVR_FUNCTION", 17, "USB", "", -1);
IPS_SetVariableProfileAssociation("AVR_FUNCTION", 25, "BD", "", -1);
IPS_SetVariableProfileAssociation("AVR_FUNCTION", 26, "NET", "", -1);
IPS_SetVariableProfileAssociation("AVR_FUNCTION", 38, "Webradio", "", -1);
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_DISPLAY"))
IPS_DeleteVariableProfile("AVR_DISPLAY");
IPS_CreateVariableProfile ("AVR_DISPLAY", 1 );
IPS_SetVariableProfileIcon("AVR_DISPLAY", "Information");
IPS_SetVariableProfileAssociation("AVR_DISPLAY", 0, "Change", "", -1);
// Variablen anlegen
$VarID_Power= CreateVarByName(2, "Power", "0", null, $ID_INSTANZ, "~Switch", $ID_PIONEER_SCRIPT, false);
$VarID_KeyLock= CreateVarByName(4, "KeyLock", "1", null, $ID_INSTANZ, "AVR_KEYLOCK", $ID_PIONEER_SCRIPT, false);
$VarID_Display= CreateVarByName(6, "Display", "3", "Information", $ID_INSTANZ, "~String", null, false);
$VarID_DisplCh= CreateVarByName(8, "Display Change", "1", "Information", $ID_INSTANZ, "AVR_DISPLAY", $ID_PIONEER_SCRIPT, false);
$VarID_dB= CreateVarByName(10, "dB", "3", "Speaker", $ID_INSTANZ, "~String", null, false);
$VarID_Vol= CreateVarByName(12, "Volume", "1", null, $ID_INSTANZ, "AVR_VOLUME", $ID_PIONEER_SCRIPT, false);
$VarID_Mute= CreateVarByName(14, "Mute", "0", "Sleep", $ID_INSTANZ, "~Switch", $ID_PIONEER_SCRIPT, false);
$VarID_Fkt= CreateVarByName(16, "Function", "1", null, $ID_INSTANZ, "AVR_FUNCTION", $ID_PIONEER_SCRIPT, false);
$VarID_ALM= CreateVarByName(18, "Active Listening Mode", "3", "Music", $ID_INSTANZ, "~String", null, false);
$VarID_LM= CreateVarByName(20, "Listening Mode", "1", null, $ID_INSTANZ, "AVR_LISTENINGMODE", $ID_PIONEER_SCRIPT, false);
$VarID_LM_Ext= CreateVarByName(22, "Listening Mode, extended", "1", null, $ID_INSTANZ, "AVR_LISTENINGMODE_EXT", $ID_PIONEER_SCRIPT, false);
$VarID_WebRStn= CreateVarByName(24, "WebRadio Station", "3", null, $ID_INSTANZ, "~HTMLBox", null, true);
$VarID_WebRadio=CreateVarByName(26, "WebRadio", "1", null, $ID_INSTANZ, "AVR_INTERNETRADIOBUTTONS",$ID_PIONEER_SCRIPT, false);
$VarID_WebRBtn= CreateVarByName(28, "WebRadio Button", "1", null, $ID_INSTANZ, null, $ID_PIONEER_SCRIPT, true);
// Script mit Variablen-Definitionen für das Haupt-Skript anlegen
$SText="<?\r";
$SText.="// Erzeugt von INSTALL_SCRIPT\r";
$SText.="// Variablen-Definitionen für das Haupt-Skript\r";
$SText.="\r";
$SText.="define ('NAME_DEVICE','".NAME_DEVICE."');\r";
$SText.="define ('ID_WEBFRONT', ".ID_WebFront.");\r";
$SText.="define ('ID_SOCKET', ".$ID_INSTANZ_SOCKET.");\r";
$SText.="define ('IP_DEVICE','".IP_DEVICE."'); //AVR IP-Adresse;\r";
$SText.="define ('PORT_DEVICE','".PORT_DEVICE."'); // Kommunikationsport \r";
$SText.="\r";
$SText.="define ('ID_POWER', ".$VarID_Power.");\r";
$SText.="define ('ID_KEYLOCK', ".$VarID_KeyLock.");\r";
$SText.="define ('ID_DISPLAY', ".$VarID_Display.");\r";
$SText.="define ('ID_DISPLAY_CHANGE', ".$VarID_DisplCh.");\r";
$SText.="define ('ID_VOL_DB', ".$VarID_dB.");\r";
$SText.="define ('ID_VOL', ".$VarID_Vol.");\r";
$SText.="define ('ID_MUTE', ".$VarID_Mute.");\r";
$SText.="define ('ID_FUNCTION', ".$VarID_Fkt.");\r";
$SText.="define ('ID_LISTENING_MODE', ".$VarID_ALM.");\r";
$SText.="define ('ID_CHANGE_LISTENING_MODE', ".$VarID_LM.");\r";
$SText.="define ('ID_CHANGE_LISTENING_MODE_EXT', ".$VarID_LM_Ext.");\r";
$SText.="define ('ID_INET_RADIO', ".$VarID_WebRadio.");\r";
$SText.="define ('ID_INET_RADIO_BUTTONS', ".$VarID_WebRStn.");\r";
$SText.="define ('ID_INET_STATION', ".$VarID_WebRBtn.");\r";
$SText.="?>\r";
$ID_PIONEER_SCRIPT_VARS= CreateScriptByName(NAME_DEVICE."_Vars", $ID_INSTANZ, $SText);
// INCLUDE-Daten in Hauptskript eintragen
$SText="<?\r";
$SText.="// Erzeugt von INSTALL_SCRIPT\r";
$SText.="// ########### INCLUDE-START ###########\r";
$SText.="include(IPS_GetScriptFile(".$ID_PIONEER_SCRIPT_CONF."));\r";
$SText.="include(IPS_GetScriptFile(".$ID_PIONEER_SCRIPT_VARS."));\r";
$SText.="// ########### INCLUDE-ENDE ###########\r\r";
$SText.="// ########### AB HIER HAUPT-SKRIPT EINFÜGEN ###########\r";
$SText.="?>\r";
IPS_SetScriptContent($ID_PIONEER_SCRIPT, $SText);
// Funktion zum erstellen eines Variablen
//
// Parameter:
// VarNAME = Name wie die Variable im Objektbaum heissen soll
// VarTyp = Typ der Variablen (0=Boolean, 1=Integer, 2=Float, 3=String)
// Icon = Icon für Variable, wenn nicht aus Profil
// ParentID = Objekt ID unter der das Script untergehangen wird
// Profil = Name des Profils
// ScriptID = Aktionsskript ID
// Position = Reihenfolge im Objektbaum
// Hidden = Variable unsichtbar (true|false)
function CreateVarByName($Position, $VarNAME, $VarTyp, $Icon, $ParentID, $Profil, $ScriptID, $Hidden)
{
global $IPS_SELF;
$VarID = @IPS_GetVariableIDByName($VarNAME, $ParentID);
if ($VarID == 0){
$VarID = IPS_CreateVariable($VarTyp);
IPS_SetName($VarID, $VarNAME);
IPS_SetParent($VarID, $ParentID);
IPS_SetVariableCustomProfile($VarID, $Profil);
IPS_SetVariableCustomAction($VarID, $ScriptID);
IPS_SetPosition($VarID, $Position);
IPS_SetIcon($VarID, $Icon);
IPS_SetHidden($VarID, $Hidden);
}
return $VarID;
}
// Funktion zum erstellen eines Scripts
//
// Parameter:
// ScriptNAME = Name wie das Script im Objektbaum heissen soll
// ParentID = Objekt ID unter der das Script untergehangen wird
// ScriptTEXT = Inhalt der Scriptdatei
function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
{
global $IPS_SELF;
$ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
if ($ScriptID == 0){
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $ScriptNAME);
IPS_SetParent($ScriptID, $ParentID);
IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
IPS_SetScriptContent($ScriptID, $ScriptTEXT);
IPS_SetHidden($ScriptID, true);
IPS_SetPosition($ScriptID, 98);
}
return $ScriptID;
}
Haupt-Skript:
$INET_RADIO_HIDDEN=true;
// aufruf per register variable, script oder webfront?
if($IPS_SENDER == "RegisterVariable") {
// daten aus dem cutter aufruf registervariable
$data=$IPS_VALUE;
// echo $data ;
// lange zeile? dann war es die display anzeige
if (strlen($data) ==32 )
{
// display
$display = hex2str($data);
//echo $display;
// display variable updaten
SetValueString(ID_DISPLAY, $display);
// solange daten kommen ist das gerät an. aber dann jedesmal die power variable updaten und prüfen ist zu langsam
}
else
{
// befehl bzw. antwort parsen
// funktionen gibt es mit drei und zwei zeichen
$lv_fkt1 = substr($data,0,1); // funktion ersten 1 zeichen
$lv_val1 = substr($data,1,3); // value die letzten zeichen
$lv_fkt2 = substr($data,0,2); // funktion ersten 2 zeichen
$lv_val2 = substr($data,2,4); // value die letzten zeichen
$lv_fkt3 = substr($data,0,3); // funktion ersten 3 zeichen
$lv_val3 = substr($data,3,3); // value die letzten zeichen
// Fehlermeldungen
/*
E02<CR+LF> NOT AVAILABLE NOW
E03<CR+LF> INVALID COMMAND
E04<CR+LF> COMMAND ERROR
E06<CR+LF> PARAMETER ERROR
B00<CR+LF> BUSY
*/
if ($lv_fkt1=="E" or $lv_fkt1=="B")
{
if ($lv_val1=="00") {SetValue(ID_DISPLAY, "BUSY");}
if ($lv_val1=="02") {SetValue(ID_DISPLAY, "NOT AVAILABLE NOW");}
if ($lv_val1=="03") {SetValue(ID_DISPLAY, "INVALID COMMAND");}
if ($lv_val1=="04") {SetValue(ID_DISPLAY, "COMMAND ERROR");}
if ($lv_val1=="06") {SetValue(ID_DISPLAY, "PARAMETER ERROR");}
}
// Status AVR EIN-Standby-AUS
if ($lv_fkt3=="PWR")
{
if ($lv_val3==0)
{
echo $NAME_DEVICE." ist EIN";
// gerät eingeschaltet, aber variable nicht erneut setzen wenn schon on
if (GetValue(ID_POWER)==false)
{
echo "Now ON";
SetValue(ID_POWER,true);
// prüfkommando nur beim einschalten absenden
// regelmäßige prüfung nicht notwendig da bei fernbedienungsaktionen die anworten empfangen werden
$ret = sendCommand("?V"); // welche lautstärke
$ret = sendCommand("?M"); // mute
$ret = sendCommand("?F"); // funktion
$ret = sendCommand("?L"); // listening mode
$ret = sendCommand("?PKL"); // keylock
avOn(); // variablen, schalter einblenden
}
}
if ($lv_val3==1)
{
echo $NAME_DEVICE." ist Standby";
// gerät ausgeschaltet, aber variable nicht erneut setzen wenn schon off
if (GetValue(ID_POWER)==true)
{
SetValue(ID_POWER,false);
avOff(); // variablen, schalter ausblenden
}
}
}
// lautstärke
if ($lv_fkt3=="VOL")
{
// umrechnung des wertes in dB quelle: pioneer javascript
// echo (($lv_val3-161)*0.5)."dB";
// verstärker anzeige in dB. Rückgabe aber als Integer einfach als Prozent übernehmen
// nur bei veränderung aktualisieren
SetValue(ID_VOL_DB,(($lv_val3-161)*0.5)."dB"); //dB-Wert anzeigen
if (GetValue(ID_VOL) != $lv_val3)
{
SetValue(ID_VOL,$lv_val3);
}
}
// mute
if ($lv_fkt3=="MUT")
{
// mute ändern nur wenn die variable nicht aktuell ist
if($lv_val3=="1" && GetValue(ID_MUTE)==true)
{
SetValue(ID_MUTE,false); // mute off
}
if($lv_val3=="0" && GetValue(ID_MUTE)==false)
{
SetValue(ID_MUTE,true); // mute on
}
}
// funktion (eingänge)
if ($lv_fkt2=="FN")
#var_dump($lv_fkt2);
{
// funktion ändern nur wenn die variable nicht aktuell ist
if (GetValue(ID_FUNCTION) != $lv_val2)
{
// liste der gültigen funktionen
if ($lv_val2==38 || $lv_val2==26 || $lv_val2==19 || $lv_val2==17 || $lv_val2==20 || $lv_val2==4 || $lv_val2==2)
{
SetValue(ID_FUNCTION,$lv_val2); // funktion setzen
}
else
{
echo "integer".(integer)$lv_val2;
SetValue(ID_FUNCTION,0); // funktion =0 also diverses für die keine schaltfläche hinterlegt sind. bzw nicht gebraucht werden.
}
}
// wenn internet radio und die optionen noch nicht eingeblendet dann einblenden.
if (($lv_val2==26 || $lv_val2==38)&& $INET_RADIO_HIDDEN==true)
{
// inet radion steuerung einblenden. methode führt refresh automstisch aus
InetRadioOn();
}
else
{
// inet radion steuerung einblenden. methode führt refresh automstisch aus
InetRadioOff();
}
}
// listening mode
if ($lv_fkt2=="LM")
{
echo "Listening Mode".$lv_val2;
SetValue(ID_LISTENING_MODE,$listening[$lv_val2]); //
}
// key lock
if ($lv_fkt3=="PKL")
{
//echo "Key Lock".$lv_val3;
SetValue(ID_KEYLOCK,$lv_val3); //
}
// request input name
if ($lv_fkt3=="RGB")
{
echo "request input name".$lv_val3;
//SetValue(ID_KEYLOCK,$lv_val3); //
}
}
}
if($IPS_SENDER == "WebFront") {
// aktion per webfront
// TODO: anpassen auf das installscript
// internetradio buttons
if ($IPS_VARIABLE==ID_INET_RADIO)
{
//echo "test ".$IPS_VALUE;
SetValue(ID_INET_RADIO,$IPS_VALUE); //
// letzten Status merken ob play oder stop
if ($IPS_VALUE<=1)
SetValue(ID_INET_RADIO_BUTTONS,$IPS_VALUE); //
if ($IPS_VALUE == 0)
{
$ret = sendCommand("20NW");
}
if ($IPS_VALUE == 1)
$ret = sendCommand("10NW");
if ($IPS_VALUE == 2)
$ret = sendCommand("12NW");
if ($IPS_VALUE == 3)
$ret = sendCommand("13NW");
if ($IPS_VALUE == 4)
$ret = sendCommand("18NW");
// da die buttons nicht dauerhaft aktiv sein können, wird einfach der wert -1 gesetzt, so
// ist keiner aktiv, aber nur bei aktionen >1
if ($IPS_VALUE>1)
SetValue(ID_INET_RADIO, GetValue(ID_INET_RADIO_BUTTONS)); //
}
/* MR
// power schalter
if ($IPS_VARIABLE==ID_POWER)
{
// je nach zustand ausschalten. einschalten geht nicht über lan!
if ($IPS_VALUE == true)
{
// wenn der pioneer eingeschaltet ist und dann vom netz getrennt wird und danach wieder strom bekommt
// behält er den letzten zustand. fazit: schaltbare steckdose
// nachteil: dann ggf. einschalten über die fernbedienung nicht mehr möglich
//
// wenn auf true gewechelt, dann kein wechsel vornehmen da einschalten nicht möglich
//SetValue($ID_POWER, false);
//socket aktualisieren da unter umständen keine verbinung zustande kommt
IPS_ApplyChanges(ID_SOCKET);
}
else
{
$ret = sendCommand("PF"); /// ausschaltbefehl
SetValue(ID_POWER, $IPS_VALUE); // varaible für power off setzen
avOff(); // variablen + schalter ausblenden
}
}
MR */
if ($IPS_VARIABLE==ID_POWER)
{
// je nach zustand ausschalten. einschalten geht - wenn vom receiver erlaubt - auch über lan!
if ($IPS_VALUE == true)
{
$ret = sendCommand("PO"); // einschaltbefehl
SetValue(ID_POWER, $IPS_VALUE); // varaible für power on setzen
avOn(); // variablen + schalter einblenden
}
else
{
$ret = sendCommand("PF"); // ausschaltbefehl
SetValue(ID_POWER, $IPS_VALUE); // varaible für power off setzen
SetValue(ID_DISPLAY, ""); // bei aus das diplay löschen
avOff(); // variablen + schalter ausblenden
}
}
// display schalter zur statusabfrage
if ($IPS_VARIABLE==ID_DISPLAY)
{
$ret = sendCommand("STS"); // Display Status abfrage, ergebnis wird nach und nach angezeigt
}
// display change zur Umschaltung statusanzeige
if ($IPS_VARIABLE==ID_DISPLAY_CHANGE)
{
$ret = sendCommand("18NW"); // Display Anzeige umschalten
}
// mute schalter
if ($IPS_VARIABLE==ID_MUTE)
{
// je nach zustand ausschalten. einschalten geht nicht über lan!
if ($IPS_VALUE == true)
{
$ret = sendCommand("MO"); // mute on
SetValue(ID_MUTE, $IPS_VALUE);
}
else
{
$ret = sendCommand("MF"); // mute off
SetValue(ID_MUTE, $IPS_VALUE);
}
}
// lautstärke schalter
if ($IPS_VARIABLE==ID_VOL)
{
//echo $IPS_VALUE."VL";
if (GetValue(ID_VOL) != $IPS_VALUE )
{
// Werte von 0 bis 161(voll aufgedreht)
// so muss auch das profil der volumen variablen angelegt sein.
#MR $ret = sendCommand($IPS_VALUE."VL"); // vol direkt setzen
#MR SetValue(ID_VOL, $IPS_VALUE);
$ret = sendCommand(str_pad($IPS_VALUE, 3, "0", STR_PAD_LEFT)."VL"); // vol direkt setzen
SetValue(ID_VOL, $IPS_VALUE);
}
}
// funktions schalter
if ($IPS_VARIABLE==ID_FUNCTION)
{
//echo $IPS_VALUE."FN";
if (GetValue(ID_FUNCTION) != $IPS_VALUE )
{
// einstelige zahlen mit 0 voranstellen
$tmp_val = substr("0".$IPS_VALUE,-2);
$ret = sendCommand($tmp_val."FN"); // Funktion direkt setzen
// bei internetradio ein und ausblenden
if ($IPS_VALUE==26 || $IPS_VALUE==38)
{
InetRadioOn();
}
if (GetValue(ID_FUNCTION)==26|| $IPS_VALUE==38)
{
InetRadioOff();
}
SetValue(ID_FUNCTION, $tmp_val);
}
}
// listening mode schalter
if ($IPS_VARIABLE==ID_CHANGE_LISTENING_MODE)
{
if ($IPS_VALUE=="1") {$ret = sendCommand("0005SR");} // AUTO SURR/STREAM DIRECT (cyclic)
else if ($IPS_VALUE=="2") {$ret = sendCommand("0010SR");} // STANDARD (cyclic)
else if ($IPS_VALUE=="3") {$ret = sendCommand("0100SR");} // ADVANCED SURROUND (cyclic)
// einstelige zahlen mit 0 voranstellen
//$tmp_val = substr("0".$IPS_VALUE,-2);
//$ret = sendCommand($tmp_val."FN"); // Funktion direkt setzen
SetValue(ID_CHANGE_LISTENING_MODE, $IPS_VALUE);
SetValue(ID_CHANGE_LISTENING_MODE_EXT, 0);
}
// extendet listening mode schalter
if ($IPS_VARIABLE==ID_CHANGE_LISTENING_MODE_EXT)
{
if ($IPS_VALUE=="1") {$ret = sendCommand("0009SR");} // STEREO (direct set)
else if ($IPS_VALUE=="2") {$ret = sendCommand("0112SR");} // EXTENDED STEREO
else if ($IPS_VALUE=="3") {$ret = sendCommand("0012SR");} // DOLBY PROLOGIC
else if ($IPS_VALUE=="4") {$ret = sendCommand("0014SR");} // DOLBY PLII MUSIC
else if ($IPS_VALUE=="5") {$ret = sendCommand("0151SR");} // Auto Level Control (A.L.C.)
// einstelige zahlen mit 0 voranstellen
//$tmp_val = substr("0".$IPS_VALUE,-2);
//$ret = sendCommand($tmp_val."FN"); // Funktion direkt setzen
SetValue(ID_CHANGE_LISTENING_MODE_EXT, $IPS_VALUE);
SetValue(ID_CHANGE_LISTENING_MODE, 0);
}
// key lock schalter
if ($IPS_VARIABLE==ID_KEYLOCK)
{
setValue(ID_KEYLOCK,$IPS_VALUE);
$ret = sendCommand($IPS_VALUE."PKL"); // key lock setzen
}
}
// zeitliche events abfragen
if($IPS_SENDER == "TimerEvent") {
// aktion per timer (hearth beat script)
// Socket prüfung funktioniert nicht. daher die ping variante
// hearthbeat für power on
$ret = sendCommand("?P"); // Prüfung ob AVR EIN/AUS/Standby
#MR if (Sys_Ping($IP_DEVICE, 1000) )
/*
{
#echo "PWR0 (EIN)";
// gerät eingeschaltet, aber variable nicht erneut setzen wenn schon on
if (GetValue(ID_POWER)==false)
{
echo "Now ON";
SetValue(ID_POWER,true);
// prüfkommando nur beim einschalten absenden
// regelmäßige prüfung nicht notwendig da bei fernbedienungsaktionen die anworten empfangen werden
$ret = sendCommand("?V"); // welche lautstärke
$ret = sendCommand("?M"); // mute
$ret = sendCommand("?F"); // funktion
$ret = sendCommand("?L"); // listening mode
$ret = sendCommand("?PKL"); // keylock
avOn(); // variablen, schalter einblenden
}
}
if ($ret=="PWR1") //PWR0=EIN, PRW1=Standby
{
// gerät ausgeschaltet, aber variable nicht erneut setzen wenn schon off
if (GetValue(ID_POWER)==true)
{
SetValue(ID_POWER,false);
avOff(); // variablen, schalter ausblenden
}
}
*/
}
// funktion um die hexzeile vom reciever in ascii zu decodieren
function hex2str($hex)
{
// die ersten zeichen gehören zur funktionsart
$hex = substr($hex,4,strlen($hex) - 4);
//echo $hex;
// TODO: for schleife ist eigentlich zu langsam, gibt es was besseres?
$str="";
for($i=0;$i<strlen($hex);$i+=2)
{
$str.=chr(hexdec(substr($hex,$i,2)));
}
return $str;
}
function sendCommand($com)
{
$feedback= CSCK_SendText(ID_SOCKET, $com.chr(13));
return $feedback;
}
// av reciver on - also bedienelemente sichtbar machen
function avOn()
{
// power wurde nicht ausgeblendet
IPS_SetHidden(ID_MUTE, false);
IPS_SetHidden(ID_VOL, false);
IPS_SetHidden(ID_FUNCTION, false);
IPS_SetHidden(ID_LISTENING_MODE, false);
IPS_SetHidden(ID_CHANGE_LISTENING_MODE_EXT, false);
IPS_SetHidden(ID_DISPLAY, false);
IPS_SetHidden(ID_CHANGE_LISTENING_MODE, false);
IPS_SetHidden(ID_KEYLOCK, false);
IPS_SetHidden(ID_DISPLAY_CHANGE, false);
IPS_SetHidden(ID_VOL_DB, false);
// beim einschalten ist ggf. noch der modus internetradio aktiv gewesen. dann aktivieren damit danach das ausblenden funktioniert
if (GetValue(ID_FUNCTION) == 26 || GetValue(ID_FUNCTION) == 38)
{
// inet radion steuerung einblenden. methode führt refresh automstisch aus
InetRadioOn();
}
}
// av reciver off - also bedienelemente ausblenden, dadurch kein exception handling im script
function avOff()
{
// power bleibt immer sichtbar damit bleibt es beim zusammenklappen im webfront (oder falls mal einschalten geht)
// das diplay löschen damit im ausgeschalteten zustand nicht ein alter text stehen bleibt.
SetValue(ID_DISPLAY, " "); // bei aus das diplay löschen
// andere elemente ausblenden
IPS_SetHidden(ID_MUTE, true);
IPS_SetHidden(ID_VOL, true);
IPS_SetHidden(ID_FUNCTION, true);
IPS_SetHidden(ID_LISTENING_MODE, true);
IPS_SetHidden(ID_DISPLAY, true);
IPS_SetHidden(ID_LISTENING_MODE, true);
IPS_SetHidden(ID_CHANGE_LISTENING_MODE_EXT, true);
IPS_SetHidden(ID_CHANGE_LISTENING_MODE, true);
IPS_SetHidden(ID_KEYLOCK, true);
IPS_SetHidden(ID_DISPLAY_CHANGE, true);
IPS_SetHidden(ID_VOL_DB, true);
InetRadioOff();
}
// TODO: ins installscript übernehmen
function InetRadioOn()
{
$INET_RADIO_HIDDEN= false;
IPS_SetHidden(ID_INET_RADIO, false);
#MR IPS_SetHidden(ID_INET_STATION, false);
#MR $html = ReadStationList();
#MR setValue(ID_INET_STATION,$html);
}
function InetRadioOff()
{
$INET_RADIO_HIDDEN=true;
IPS_SetHidden(ID_INET_RADIO, true);
#MR IPS_SetHidden(ID_INET_STATION, true);
}
Konstanten-Skript:
// function_list (VSX-923)
// funktionen ggf umbenenen falls diese auch im gerät umbenannt wurden
$function_list = array(
# "00" => "PHONO", //nicht im 923
"01" => "CD",
"02" => "TUNER",
"04" => "DVD",
"05" => "TV",
"06" => "SAT/CBL",
"10" => "VIDEO 1(VIDEO)",
"12" => "MULTI CH IN",
"13" => "USB-DAC",
"15" => "DVR/BDR",
"17" => "iPod/USB",
"19" => "HDMI 1",
"20" => "HDMI 2",
"21" => "HDMI 3",
"22" => "HDMI 4",
"23" => "HDMI 5",
"24" => "HDMI 6",
"25" => "BD",
"26" => "NETWORK (cyclic)",
"31" => "HDMI (cyclic)",
"33" => "ADAPTER PORT",
"34" => "HDMI 7",
"35" => "HDMI 8",
"38" => "INTERNET RADIO",
"41" => "PANDORA",
"44" => "MEDIA SERVER",
"45" => "FAVORITES",
"48" => "MHL"
);
// listening modes for Display(VSX-923)
$listening = array(
"0101" => "DOLBY PLIIx MOVIE",
"0102" => "DOLBY PLII MOVIE",
"0103" => "DOLBY PLIIx MUSIC",
"0104" => "DOLBY PLII MUSIC",
"0105" => "DOLBY PLIIx GAME",
"0106" => "DOLBY PLII GAME",
"0107" => "DOLBY PROLOGIC",
"0108" => "Neo:6 CINEMA",
"0109" => "Neo:6 MUSIC",
"010c" => "2ch Straight Decode",
"010d" => "DOLBY PLIIz HEIGHT",
"010e" => "WIDE SURR MOVIE",
"010f" => "WIDE SURR MUSIC",
"0110" => "STEREO",
"0111" => "Neo:X CINEMA",
"0112" => "Neo:X MUSIC",
"0113" => "Neo:X GAME",
"0201" => "ACTION",
"0202" => "DRAMA",
"0208" => "ADVANCEDGAME",
"0209" => "SPORTS",
"020a" => "CLASSICAL ",
"020b" => "ROCK/POP ",
"020d" => "EXT.STEREO ",
"020e" => "PHONES SURR.",
"020f" => "FRONT STAGE SURROUND ADVANCE",
"0211" => "SOUND RETRIEVER AIR",
"0212" => "ECO MODE 1",
"0213" => "ECO MODE 2",
"0301" => "DOLBY PLIIx MOVIE +THX",
"0302" => "DOLBY PLII MOVIE +THX",
"0303" => "DOLBY PL +THX CINEMA",
"0305" => "THX CINEMA",
"0306" => "DOLBY PLIIx MUSIC +THX",
"0307" => "DOLBY PLII MUSIC +THX",
"0308" => "DOLBY PL +THX MUSIC",
"030a" => "THX MUSIC",
"030b" => "DOLBY PLIIx GAME +THX",
"030c" => "DOLBY PLII GAME +THX",
"030d" => "DOLBY PL +THX GAMES",
"0310" => "THX GAMES",
"0311" => "DOLBY PLIIz +THX CINEMA",
"0312" => "DOLBY PLIIz +THX MUSIC",
"0313" => "DOLBY PLIIz +THX GAMES",
"0314" => "Neo:X CINEMA + THX CINEMA",
"0315" => "Neo:X MUSIC + THX MUSIC",
"0316" => "Neo:X GAMES + THX GAMES",
// "0401" => "STEREO",
"0401" => "AUTO SURROUND",
"0402" => "DOLBY PLII MOVIE",
"0403" => "DOLBY PLIIx MOVIE",
"0405" => "AUTO SURROUND Straight Decode",
"0406" => "DOLBY DIGITAL EX",
"0407" => "DOLBY PLIIx MOVIE",
"0408" => "DTS +Neo:6",
"0409" => "ES MATRIX",
"040a" => "ES DISCRETE",
"040b" => "DTS-ES 8ch",
"040e" => "RETRIEVER AIR",
"040f" => "Neo:X CINEMA",
// "0501" => "STEREO",
"0501" => "ALC",
"0502" => "DOLBY PLII MOVIE",
"0503" => "DOLBY PLIIx MOVIE",
"0504" => "DTS/DTS-HD",
"0505" => "ALC Straight Decode",
"0506" => "DOLBY DIGITAL EX",
"0507" => "DOLBY PLIIx MOVIE",
"0508" => "DTS +Neo:6",
"0509" => "ES MATRIX",
"050a" => "ES DISCRETE",
"050b" => "DTS-ES 8ch",
"050e" => "RETRIEVER AIR",
"050f" => "Neo:X CINEMA",
// "0601" => "STEREO",
"0601" => "DIRECT",
"0602" => "DOLBY PLII MOVIE",
"0603" => "DOLBY PLIIx MOVIE",
"0605" => "STREAM DIRECT NORMAL Straight Decode",
"0606" => "DOLBY DIGITAL EX",
"0607" => "DOLBY PLIIx MOVIE",
"0609" => "ES MATRIX",
"060a" => "ES DISCRETE",
"060b" => "DTS-ES 8ch",
"060c" => "Neo:X CINEMA",
"0701" => "STREAM DIRECT PURE 2ch",
"0702" => "DOLBY PLII MOVIE",
"0703" => "DOLBY PLIIx MOVIE",
"0704" => "Neo:6 CINEMA",
"0705" => "PURE DIRECT",
"0706" => "DOLBY DIGITAL EX",
"0707" => "DOLBY PLIIx MOVIE",
"0708" => "(nothing)",
"0709" => "ES MATRIX",
"070a" => "ES DISCRETE",
"070b" => "DTS-ES 8ch",
"070c" => "Neo:X CINEMA",
"0881" => "OPTIMUM",
"0e01" => "HDMI THROUGH",
"0f01" => "MULTI CH IN",
"1101" => "DOLBY PLIIx MOVIE",
"1102" => "DOLBY PLIIx MUSIC",
"1103" => "DOLBY DIGITAL EX",
"1104" => "DTS Neo:6",
"1105" => "ES MATRIX",
"1106" => "ES DISCRETE",
"1107" => "DTS-ES 8ch",
"1108" => "multi ch Straight Decode",
"1109" => "DOLBY PLIIz HEIGHT",
"110a" => "WIDE SURR MOVIE",
"110b" => "WIDE SURR MUSIC",
"110c" => "Neo:X CINEMA",
"110d" => "Neo:X MUSIC",
"110e" => "Neo:X GAME",
"1301" => "THX Surr EX",
"1303" => "ES MTRX +THX CINEMA",
"1304" => "ES DISC +THX CINEMA",
"1305" => "ES 8ch +THX CINEMA",
"1306" => "DOLBY PLIIx MOVIE +THX",
"1309" => "THX CINEMA",
"130b" => "ES MTRX +THX MUSIC",
"130c" => "ES DISC +THX MUSIC",
"130d" => "ES 8ch +THX MUSIC",
"130e" => "DOLBY PLIIx MUSIC +THX",
"1311" => "THX MUSIC",
"1313" => "ES MTRX +THX GAMES",
"1314" => "ES DISC +THX GAMES",
"1315" => "ES 8ch +THX GAMES",
"1319" => "THX GAMES",
"131a" => "DOLBY PLIIz +THX CINEMA",
"131b" => "DOLBY PLIIz +THX MUSIC",
"131c" => "DOLBY PLIIz +THX GAMES",
"131d" => "Neo:X CINEMA + THX CINEMA",
"131e" => "Neo:X MUSIC + THX MUSIC",
"131f" => "Neo:X GAME + THX GAMES"
);
// listening modes for SET (VSX-923)
$listeningSET = array(
"0001" => "STEREO (cyclic)",
"0003" => "Front Stage Surround Advance",
"0005" => "AUTO SURR/STREAM DIRECT (cyclic)",
"0006" => "AUTO SURROUND",
"0007" => "DIRECT",
"0008" => "PURE DIRECT",
"0009" => "STEREO (direct set)",
"0010" => "STANDARD (cyclic)",
"0011" => "(2ch source)",
"0012" => "PRO LOGIC",
"0013" => "PRO LOGIC2 MOVIE",
"0014" => "PRO LOGIC2 MUSIC",
"0015" => "PRO LOGIC2 GAME",
"0016" => "Neo:6 CINEMA",
"0017" => "Neo:6 MUSIC",
"0018" => "PRO LOGIC2x MOVIE",
"0019" => "PRO LOGIC2x MUSIC",
"0020" => "PRO LOGIC2x GAME",
"0021" => "(Multi ch source)",
"0022" => "(Multi ch source)+DOLBY EX",
"0023" => "(Multi ch source)+PRO LOGIC2x MOVIE",
"0024" => "(Multi ch source)+PRO LOGIC2x MUSIC",
"0025" => "(Multi ch source)DTS-ES Neo:6",
"0026" => "(Multi ch source)DTS-ES matrix",
"0027" => "(Multi ch source)DTS-ES discrete",
"0030" => "(Multi ch source)DTS-ES 8ch discrete",
"0031" => "PRO LOGIC2z HEIGHT",
"0032" => "WIDE SURROUND MOVIE",
"0033" => "WIDE SURROUND MUSIC",
"0034" => "(Multi-ch Source)+PRO LOGIC2z HEIGHT",
"0035" => "(Multi-ch Source)+WIDE SURROUND MOVIE",
"0036" => "(Multi-ch Source)+WIDE SURROUND MUSIC",
"0037" => "Neo:X CINEMA",
"0038" => "Neo:X MUSIC",
"0039" => "Neo:X GAME",
"0043" => "(Multi ch source)+Neo:X CINEMA ",
"0044" => "(Multi ch source)+Neo:X MUSIC",
"0045" => "(Multi ch source)+Neo:X GAME",
"0050" => "THX (cyclic)",
"0051" => "PROLOGIC + THX CINEMA",
"0052" => "PL2 MOVIE + THX CINEMA",
"0053" => "Neo:6 CINEMA + THX CINEMA",
"0054" => "PL2x MOVIE + THX CINEMA",
"0055" => "THX SELECT2 GAMES",
"0056" => "THX CINEMA (for multi ch)",
"0057" => "THX SURROUND EX (for multi ch)",
"0058" => "PL2x MOVIE + THX CINEMA (for multi ch)",
"0059" => "ES Neo:6 + THX CINEMA (for multi ch)",
"0060" => "ES MATRIX + THX CINEMA (for multi ch)",
"0061" => "ES DISCRETE + THX CINEMA (for multi ch)",
"0067" => "ES 8ch DISCRETE + THX CINEMA (for multi ch)",
"0068" => "THX CINEMA (for 2ch)",
"0069" => "THX MUSIC (for 2ch)",
"0070" => "THX GAMES (for 2ch)",
"0071" => "PL2 MUSIC + THX MUSIC",
"0072" => "PL2x MUSIC + THX MUSIC",
"0073" => "Neo:6 MUSIC + THX MUSIC",
"0074" => "PL2 GAME + THX GAMES",
"0075" => "PL2x GAME + THX GAMES",
"0076" => "THX ULTRA2 GAMES",
"0077" => "PROLOGIC + THX MUSIC",
"0078" => "PROLOGIC + THX GAMES",
"0080" => "THX MUSIC (for multi ch)",
"0081" => "THX GAMES (for multi ch)",
"0082" => "PL2x MUSIC + THX MUSIC (for multi ch)",
"0083" => "EX + THX GAMES (for multi ch)",
"0084" => "Neo:6 + THX MUSIC (for multi ch)",
"0085" => "Neo:6 + THX GAMES (for multi ch)",
"0086" => "ES MATRIX + THX MUSIC (for multi ch)",
"0087" => "ES MATRIX + THX GAMES (for multi ch)",
"0088" => "ES DISCRETE + THX MUSIC (for multi ch)",
"0089" => "ES DISCRETE + THX GAMES (for multi ch)",
"0090" => "ES 8CH DISCRETE + THX MUSIC (for multi ch)",
"0091" => "ES 8CH DISCRETE + THX GAMES (for multi ch)",
"0092" => "PL2z HEIGHT + THX CINEMA",
"0093" => "PL2z HEIGHT + THX MUSIC",
"0094" => "PL2z HEIGHT + THX GAMES",
"0095" => "PL2z HEIGHT + THX CINEMA (for multi ch)",
"0096" => "PL2z HEIGHT + THX MUSIC (for multi ch)",
"0097" => "PL2z HEIGHT + THX GAMES (for multi ch)",
"0100" => "ADVANCED SURROUND (cyclic)",
"0101" => "ACTION",
"0103" => "DRAMA",
"0107" => "CLASSICAL",
"0110" => "ROCK/POP",
"0112" => "EXTENDED STEREO",
"0113" => "PHONES SURROUND",
"0117" => "SPORTS",
"0118" => "ADVANCED GAME",
"0151" => "Auto Level Control (A.L.C.)",
"0152" => "OPTIMUM SURROUND",
"0153" => "RETRIEVER AIR",
"0200" => "ECO MODE (cyclic)",
"0201" => "Neo:X CINEMA + THX CINEMA",
"0202" => "Neo:X MUSIC + THX MUSIC",
"0203" => "Neo:X GAME + THX GAMES",
"0204" => "Neo:X CINEMA + THX CINEMA (for multi ch)",
"0205" => "Neo:X MUSIC + THX MUSIC (for multi ch)",
"0206" => "Neo:X GAME + THX GAMES (for multi ch)",
"0212" => "ECO MODE 1",
"0213" => "ECO MODE 2"
);