Hallo,
endlich hatte ich Zeit um das Denon Thema anzugehen
Um die Infos über die Statis des AVR 3808 (und wohl auch 4308 und andere mit RS232 oder Ethernetschnittstelle von Denon) habe ich ein Script geschrieben. Dieses setzt die unterstützten Statis in Variablen in IPS um.
Dazu wird eine Kategorie DENON angelegt, und darunter die entsprechenden Variablen. Momentan wird ein Großteil der Statis für die MainZone unterstützt. Die Zonen 2 und 3 werden folgen.
Falls jemand „dringend“ Statis benötigt, die bisher nicht unterstütz werden, bitte eine PM senden, ich werde diese dann schnellst möglich integrieren.
Zum senden müssen momentan noch die Befehle aus der Doku verwedet werden. Ich werde aber auch noch ein Script erstellen, welches Functions für die Steuerbefehle des AVRs enthält. Somit kann man Befehle dann über DENON_xxxxx(xxx) absetzen.
Hier nun kurz eine Anleitung wie man den AVR 3808 per Ethernet an IPS bindet:
-
Einen Clientsocket erstellen und als Host die IP des Receivers angeben. Port ist 23.
-
Einen Cutter erstellen, diesen mit dem Denon Clientsocket verbinden und als rechtes Trennzeichen unter Benutze Zeichen für Schnitte „0D“ eintragen. HEX muss aktiviert sein.
-
Eine Registervariable erstellen und mit dem Cutter verbinden. Dann als Script in der REgistervariable das folgende Script angeben.
Das wars
Sobald dies alles installiert ist werden die Kategorie DENON und die Variablen automatisch angelegt, sobald entsprechende Meldungen kommen.
Script zur Statusverarbeitung:
<?
//Denon Lesescript
$data=$IPS_VALUE;
$maincat= substr($data,0,2); //Eventidentifikation
$zonecat= substr($data,2); //Zoneneventidentifikation
switch($maincat)
{
case "PW": //MainPower
$item = "Power";
$vtype = 0;
if ($data == "PWON")
{
$value = true;
}
if ($data == "PWSTANDBY")
{
$value = false;
}
DenonSetValue($item, $value, $vtype);
break;
case "MV": //Mastervolume
if (substr($data,2,3) =="MAX")
{
}
else
{
$item = "MasterVolume";
$vtype = 2;
$itemdata=substr($data,2);
if ( $itemdata == "99")
{
$value = "";
}
else
{
$itemdata=str_pad ( $itemdata, 3, "0" );
$value = (intval($itemdata)/10) -80;
}
DenonSetValue($item, $value, $vtype);
}
break;
case "MU": //MainMute
$item = "MainMute";
$vtype = 0;
if ($data == "MUON")
{
$value = true;
}
if ($data == "MUOFF")
{
$value = false;
}
DenonSetValue($item, $value, $vtype);
break;
case "ZM": //MainZone
$item = "MainZone";
$vtype = 0;
if ($data == "ZMON")
{
$value = true;
}
if ($data == "ZMOFF")
{
$value = false;
}
DenonSetValue($item, $value, $vtype);
break;
case "SI": //Source Input
$item = "MainInput";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "SV": //Video Select
$item = "Video Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "MS":
if (substr($data,0,7) == "MSQUICK")
{
//Quickselect
$item = "QuickSelect";
$vtype = 1;
if (substr($data,0,7) == "MSQUICK")
{
$value = intval(substr($data,7,1));
}
DenonSetValue($item, $value, $vtype);
}
else{
//Surroound
$item = "Surround Mode";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
}
break;
case "DC": //Digital Input Mode
$item = "Digital Input Mode";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "SD": //Input Mode
$item = "Input Mode";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "SR": //Record Selection
$item = "Record Selection";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "VS": //Videosignal
$vssub=substr($data,2,2);
switch($vssub)
{
case "MO": //HDMI Monitor
$item = "HDMI Monitor";
$vtype = 3;
$itemdata=substr($data,5);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "AS": //Aspect
$item = "Aspect";
$vtype = 3;
$itemdata=substr($data,5);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "SC": //Scaler
$item = "Scaler";
$vtype = 3;
$itemdata=substr($data,4);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
}
break;
case "PS": //Sound
$pssub=substr($data,2,2);
switch($pssub)
{
case "TO": //Tone Defeat
$item = "ToneDefeat";
$vtype = 0;
if ($data == "PSTONE DEFEAT ON")
{
$value = true;
}
if ($data == "PSTONE DEFEAT OFF")
{
$value = false;
}
DenonSetValue($item, $value, $vtype);
break;
case "CI": //Cinema EQ
$item = "Cinema EQ";
$vtype = 0;
if ($data == "PSCINEMA EQ.ON")
{
$value = true;
}
if ($data == "PSCINEMA EQ.OFF")
{
$value = false;
}
DenonSetValue($item, $value, $vtype);
break;
case "SB": //Suround Back Mode
$item = "Suround Back Mode";
$vtype = 3;
$itemdata=substr($data,5);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "RO": //Room EQ Mode
$item = "Room EQ Mode";
$vtype = 3;
$itemdata=substr($data,10);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
}
break;
//Zone 2 Integration
case "Z2": //Source Input
switch ($zonecat)
{
case "PHONO": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "CD": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "TUNER": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "DVD": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "HDP": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "TV/CBL": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "SAT": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "VCR": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "DVR": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "V.AUX": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "NET/USB": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "USB": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "IPOD": //Source Input Z2
$item = "Zone2Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "ON": //Zone 2 ON
$item = "Zone2";
$vtype = 0;
$value = true;
DenonSetValue($item, $value, $vtype);
break;
case "OFF": //Zone 2 OFF
$item = "Zone2";
$vtype = 0;
$value = False;
DenonSetValue($item, $value, $vtype);
break;
case "MUON": //Zone 2 Mute ON
$item = "Zone2 Mute";
$vtype = 0;
$value = true;
DenonSetValue($item, $value, $vtype);
break;
case "MUOFF": //Zone 2 Mute OFF
$item = "Zone2 Mute";
$vtype = 0;
$value = False;
DenonSetValue($item, $value, $vtype);
break;
}
if (intval($zonecat) <100 and intval($zonecat) >9){
$item = "Zone2Volume";
$vtype = 2;
$itemdata=substr($data,2);
if ( $itemdata == "99")
{
$value = "";
}
else
{
$itemdata=str_pad ( $itemdata, 3, "0" );
$value = (intval($itemdata)/10) -80;
}
DenonSetValue($item, $value, $vtype);
}
break;
//Zone 3 Integration
case "Z3": //Source Input
switch ($zonecat)
{
case "PHONO": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "CD": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "TUNER": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "DVD": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "HDP": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "TV/CBL": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "SAT": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "VCR": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "DVR": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "V.AUX": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "NET/USB": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "USB": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "IPOD": //Source Input Z2
$item = "Zone3Input";
$vtype = 3;
$itemdata=substr($data,2);
$value = $itemdata;
DenonSetValue($item, $value, $vtype);
break;
case "ON": //Zone 2 ON
$item = "Zone3";
$vtype = 0;
$value = true;
DenonSetValue($item, $value, $vtype);
break;
case "OFF": //Zone 2 OFF
$item = "Zone3";
$vtype = 0;
$value = False;
DenonSetValue($item, $value, $vtype);
break;
case "MUON": //Zone 2 Mute ON
$item = "Zone3 Mute";
$vtype = 0;
$value = true;
DenonSetValue($item, $value, $vtype);
break;
case "MUOFF": //Zone 2 Mute OFF
$item = "Zone3 Mute";
$vtype = 0;
$value = False;
DenonSetValue($item, $value, $vtype);
break;
}
if (intval($zonecat) <100 and intval($zonecat) >9){
$item = "Zone3Volume";
$vtype = 2;
$itemdata=substr($data,2);
if ( $itemdata == "99")
{
$value = "";
}
else
{
$itemdata=str_pad ( $itemdata, 3, "0" );
$value = (intval($itemdata)/10) -80;
}
DenonSetValue($item, $value, $vtype);
}
break;
}
function DenonSetValue($item, $value, $vtype) { //Function welche Variablen anlegt und updated
$DenonID = IPS_GetCategoryIDByName("Denon", 0); //Prüft ob Hauptkategorie angelegt ist
if ($DenonID == 0)
{
$DenonID = IPS_CreateCategory();
IPS_SetName($DenonID, "Denon");
}
$itemID = IPS_GetVariableIDByName($item, $DenonID); //Prüft ob Variable vorhanden ist
if ($itemID ==0)
{
$itemID= IPS_CreateVariable($vtype); //Variable neu anlegen
IPS_SetName($itemID, $item);
IPS_SetParent($itemID, $DenonID);
}
switch($vtype) //Variable updaten
{
case 0: //Boolean
SetValueBoolean($itemID, $value);
break;
case 1: //Integer
SetValueInteger($itemID, $value);
break;
case 2: //Float
SetValueFloat($itemID, $value);
break;
case 3: //String
SetValueString($itemID, $value);
break;
}
}
?>
<?
//Dieses Script per include Befehl in ein Script zum steuern des Denon integrieren,
//danach stehen die Denon_Functions in dem Script zur Verfügung
//Die Befehle sind CaseSensitive!!!!
//Dieses Script per include Befehl in jedem Script wo die Functions benutzt werden zu beginn einbinden
//DENON_Volume(32144 /*[Denon]*/, UP);
//Main
function DENON_Power($id, $value) // STANDBY oder ON
{
CSCK_SendText($id, "PW".$value.chr(13));
}
function DENON_Volume($id, $value) // "UP" or "DOWN"
{
CSCK_SendText($id, "MV".$value.chr(13));
}
function DENON_VolumeFix($id, $value) // 18(db) bis -80(db)
{
$value= intval($value) +80;
CSCK_SendText($id, "MV".$value.chr(13));
}
function DENON_Mute($id, $value) // "ON" or "OFF"
{
CSCK_SendText($id, "MU".$value.chr(13));
}
function DENON_Input($id, $value) // PHONO ; DVD ; HDP ; "TV/CBL" ; SAT ; "NET/USB" ; DVR
{
CSCK_SendText($id, "SI".$value.chr(13));
}
function DENON_Quick($id, $value) // 1-5
{
CSCK_SendText($id, "MSQUICK".$value.chr(13));
}
//Zone2
function DENON_Z2_Volume($id, $value) // "UP" or "DOWN"
{
CSCK_SendText($id, "Z2".$value.chr(13));
}
function DENON_Z2_VolumeFix($id, $value) // 18(db) bis -80(db)
{
$value= intval($value) +80;
CSCK_SendText($id, "Z2".$value.chr(13));
}
function DENON_Z2($id, $value) // "ON" or "OFF"
{
CSCK_SendText($id, "Z2".$value.chr(13));
}
function DENON_Z2_Mute($id, $value) // "ON" or "OFF"
{
CSCK_SendText($id, "Z2MU".$value.chr(13));
}
function DENON_Z2_Input($id, $value) // PHONO ; DVD ; HDP ; "TV/CBL" ; SAT ; "NET/USB" ; DVR ; TUNER
{
CSCK_SendText($id, "Z2".$value.chr(13));
}
//Zone3
function DENON_Z3_Volume($id, $value) // "UP" or "DOWN"
{
CSCK_SendText($id, "Z3".$value.chr(13));
}
function DENON_Z3_VolumeFix($id, $value) // 18(db) bis -80(db)
{
$value= intval($value) +80;
CSCK_SendText($id, "Z3".$value.chr(13));
}
function DENON_Z3($id, $value) // "ON" or "OFF"
{
CSCK_SendText($id, "Z3".$value.chr(13));
}
function DENON_Z3_Mute($id, $value) // "ON" or "OFF"
{
CSCK_SendText($id, "Z3MU".$value.chr(13));
}
function DENON_Z3_Input($id, $value) // PHONO ; DVD ; HDP ; "TV/CBL" ; SAT ; "NET/USB" ; DVR
{
CSCK_SendText($id, "Z3".$value.chr(13));
}
?>
05.09.2009: Scriptupdate für Zone2 und 3 und einbindung DENON_FUNCTIONS
02.01.2011: Scriptupdate für Quickselect Integration
Falls Fehler auftreten bitte um Info.
Die Nutzung des Scriptes geschieht auf eigene Gefahr!
Gruß Philipp