Zurück   IP-Symcon Community Forum > IP-Symcon 2.x > Scripte, PHP, SQL

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
  #1 (permalink)  
Alt 12.07.10, 22:50
Senior Member
 
Registriert seit: Apr 2010
Beiträge: 225
Standard Verstärker Pioneer VSX-920 per Lan steuern

Achtung Update:

Hier die Möglichkeit den Pioneer VSX-920 (vermutlich auch die höheren Modelle) per LAN Zugriff zu steuern.

Da ich schon mal gemeckert habe, das mich das zusammen suchen von Code Schnipsel gestört hat, wollte ich versuchen es geringfügig besser zu machen. Hoffe es ist mir gelungen.

An dieser Stelle @IPS Team:
Dingender Feature Request: Export und Import von Objekten. Sicher als Code Generator wegen der ID Generierung aber das würde hier sicher noch mehr PHP Module ergeben.


Es gibt 3 Scripte:

1. Script in IPS anlegen und den Inhalt von "PioneerAVR_Install.isp.php" einfügen .
2. Im Script die Zeile mit $IP_HOST="192.168.0.48" anpassen und die IP Adresse des Pioneer eingeben. Anschließend das Script ausführen.
3. Es wird "hoffentlich" alles angelegt. Dabei auch zwei Scripte unter der angelegten Instanz
4. Die Inhalte der Scripte "PioneerAVR_Const.ips.php" und "PioneerAVR.ips.php" in die vorab angelegten Hüllen einfügen, also Copy und Paste.
5. Instanz dahin verschieben wo man sie haben will und dann den angelegten Socket starten.

FERTIG.

PioneerAVR_Install.isp.php
PHP-Code:
<?
<?

$IP_HOST="192.168.0.48";
/* //was für Module gibt es?
foreach(IPS_GetModuleList() as $guid)
{
    $module = IPS_GetModule($guid);
    echo $module['ModuleName']." = ".$guid."\n";
}
     */

    
$object IPS_GetObject($IPS_SELF);
    
$parentID $object['ParentID'];

    
// dummy instanz erstellen
    
$ID_INSTANZIPS_CREATEINSTANCE("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
    
IPS_SetParent($ID_INSTANZ$parentID);
    
IPS_SETName($ID_INSTANZ,"AV Reciever");

    
// cutter instanz erstellen
    
$ID_INSTANZ_CUTTERIPS_CREATEINSTANCE("{AC6C6E74-C797-40B3-BA82-F135D941D1A2}");
    
IPS_SETName($ID_INSTANZ_CUTTER,"AV_CUTTER");

    
// registervariable instanz erstellen
    
$ID_INSTANZ_REGISTERIPS_CREATEINSTANCE("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}");
    
IPS_SetParent($ID_INSTANZ_REGISTER$ID_INSTANZ);
    
IPS_SETName($ID_INSTANZ_REGISTER,"AV_REGISTER");

    
// client socket instanz erstellen
    
$ID_INSTANZ_SOCKETIPS_CREATEINSTANCE("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}");
    
IPS_SETName($ID_INSTANZ_SOCKET,"AV_SOCKET");
    
CSCK_SetHost($ID_INSTANZ_SOCKET,$IP_HOST);
   
CSCK_SetPort($ID_INSTANZ_SOCKET,8102);

     
//dummy pioneer script anlegen in das dann der inhalt einkopiert werden muss
    
$ID_PIONEER_SCRIPTCreateScriptByName("PioneerAVR"$ID_INSTANZ"<?\r\r?>"false);
     
//dummy pioneer script für konstanten anlegen in das dann der inhalt einkopiert werden muss
    
$ID_PIONEER_SCRIPT_CONFCreateScriptByName("PioneerAVR_Const"$ID_INSTANZ"<?\r\r?>"true);

    
// timer der das script zykisch aufruft für power in abfrage
    
$ID_EVENT IPS_CreateEvent (1);
    
IPS_SetEventCyclic($ID_EVENT210021);   //Jeden Tag jede Minute
    
IPS_SetParent($ID_EVENT$ID_PIONEER_SCRIPT);
    
IPS_SetEventActive($ID_EVENTtrue);  // 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_CUTTER0);
    
Cutter_SetRightCutChar($ID_INSTANZ_CUTTER"\r\n");
    
IPS_ConnectInstance($ID_INSTANZ_CUTTER$ID_INSTANZ_SOCKET);
    
    
IPS_ApplyChanges($ID_INSTANZ_SOCKET);
    
IPS_ApplyChanges($ID_INSTANZ_CUTTER);
    
IPS_ApplyChanges($ID_INSTANZ_REGISTER);


    
// eigene profile anlegen, dafür das vorhandene löschen
    
IPS_DeleteVariableProfile("AVR_VOLUME");
    
IPS_CreateVariableProfile ("AVR_VOLUME");
    
IPS_SetVariableProfileText ("AVR_VOLUME""""%" );
    
IPS_SetVariableProfileValues ("AVR_VOLUME"0161 );
    
IPS_SetVariableProfileIcon("AVR_VOLUME""Speaker");

    
// eigene profile anlegen, dafür das vorhandene löschen
    
IPS_DeleteVariableProfile("AVR_LISTENINGMODE");
    
IPS_CreateVariableProfile ("AVR_LISTENINGMODE");
   
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE"0"Auto/ALC/Direct""");
     
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE"1"Stereo""");
     
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE"2"Standard""");
     
IPS_SetVariableProfileAssociation("AVR_LISTENINGMODE"3"Adv. Surround""");

    
// eigene profile anlegen, dafür das vorhandene löschen
    // TODO: anpassen falls mehr funktionen gewünscht sind.
    
IPS_DeleteVariableProfile("AVR_FUNCTION");
    
IPS_CreateVariableProfile ("AVR_FUNCTION");
   
IPS_SetVariableProfileAssociation("AVR_FUNCTION"0"DIVERES""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"2"Tuner""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"10"Video 1""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"17"iPod""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"19"HDMI 1""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"26"Internetradio""");
     
IPS_SetVariableProfileIcon("AVR_FUNCTION""Shutter");
     
    
// power
    
$VarID_PowerIPS_CreateVariable(0);
    
// instanz zufügen
    
IPS_SetParent($VarID_Power$ID_INSTANZ);
    
// Namen setzen
    
IPS_SetName($VarID_Power"Power");
    
// profil nutzen
    
IPS_SetVariableCustomProfile($VarID_Power"~Switch");
    
// aktion, script zuweisen
    
IPS_SetVariableCustomAction($VarID_Power$ID_PIONEER_SCRIPT);
    
// reihenfolge setzen
    
IPS_SetPosition($VarID_Power1);

    
// display string
    
$VarID_DisplayIPS_CreateVariable(3);
    
// instanz zufügen
    
IPS_SetParent($VarID_Display$ID_INSTANZ);
    
// Namen setzen
    
IPS_SetName($VarID_Display"Display");
    
// profil nutzen
    
IPS_SetVariableCustomProfile($VarID_Display"~String");
    
// kein aktion, script zuweisen
    // reihenfolge setzen
    
IPS_SetPosition($VarID_Display2);
    
// icon zuweisen
     
IPS_SetIcon($VarID_Display"Information");
    
    
// lautstärke
    
$VarID_VolIPS_CreateVariable(1);
    
// instanz zufügen
    
IPS_SetParent($VarID_Vol$ID_INSTANZ);
    
// Namen setzen
    
IPS_SetName($VarID_Vol"Lautstärke");
    
// eigenes profil nutzen
    
IPS_SetVariableCustomProfile($VarID_Vol"AVR_VOLUME");
    
// aktion, script zuweisen
    
IPS_SetVariableCustomAction($VarID_Vol$ID_PIONEER_SCRIPT);
    
// reihenfolge setzen
    
IPS_SetPosition($VarID_Vol3);

    
// mute
    
$VarID_MuteIPS_CreateVariable(0);
    
// instanz zufügen
    
IPS_SetParent($VarID_Mute$ID_INSTANZ);
    
// Namen setzen
    
IPS_SetName($VarID_Mute"Mute");
    
// profil nutzen
    
IPS_SetVariableCustomProfile($VarID_Mute"~Switch");
    
// aktion, script zuweisen
    
IPS_SetVariableCustomAction($VarID_Mute$ID_PIONEER_SCRIPT);
    
// reihenfolge setzen
    
IPS_SetPosition($VarID_Mute4);

    
// funktion
    
$VarID_FktIPS_CreateVariable(1);
    
// instanz zufügen
    
IPS_SetParent($VarID_Fkt$ID_INSTANZ);
    
// Namen setzen
    
IPS_SetName($VarID_Fkt"Funktion");
    
// eigenes profil nutzen
    
IPS_SetVariableCustomProfile($VarID_Fkt"AVR_FUNCTION");
    
// aktion, script zuweisen
    
IPS_SetVariableCustomAction($VarID_Fkt$ID_PIONEER_SCRIPT);
    
// reihenfolge setzen
    
IPS_SetPosition($VarID_Fkt5);

    
// active listening mode
    
$VarID_ALMIPS_CreateVariable(3);
    
// instanz zufügen
    
IPS_SetParent($VarID_ALM$ID_INSTANZ);
    
// Namen setzen
    
IPS_SetName($VarID_ALM"Active Listening Mode");
    
// profil nutzen
    
IPS_SetVariableCustomProfile($VarID_ALM"~String");
    
// kein aktion, script zuweisen
    // reihenfolge setzen
    
IPS_SetPosition($VarID_ALM6);
    
// icon zuweisen
     
IPS_SetIcon($VarID_ALM"Distance");

    
// listening mode
    
$VarID_LMIPS_CreateVariable(1);
    
// instanz zufügen
    
IPS_SetParent($VarID_LM$ID_INSTANZ);
    
// Namen setzen
    
IPS_SetName($VarID_LM"Listening Mode");
    
// eigenes profil nutzen
    
IPS_SetVariableCustomProfile($VarID_LM"AVR_LISTENINGMODE");
    
// aktion, script zuweisen
    
IPS_SetVariableCustomAction($VarID_LM$ID_PIONEER_SCRIPT);
    
// reihenfolge setzen
    
IPS_SetPosition($VarID_LM7);

     
//ID des Webfront ermitteln
    
$ID_WebFront = @IPS_GetObjectIDByName("WebFront Configurator"0);

     
// pioneer script für variablen anlegen in das dann der inhalt einkopiert werden muss
    
$SText="<?\r";
    
$SText.="// statusvariablen des verstärkers\r";
    
$SText.="define (\"ID_POWER\", ".$VarID_Power.");\r";
    
$SText.="define (\"ID_DISPLAY\", ".$VarID_Display.");\r";
    
$SText.="define (\"ID_MUTE\", ".$VarID_Mute.");\r";
    
$SText.="define (\"ID_VOL\", ".$VarID_Vol.");\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.="// IP des Verstärkers\r";
    
$SText.="\$IP_DEVICE=\"".$IP_HOST."\";\r";
    
$SText.="// statusvariablen webfront und socket\r";
    
$SText.="define (\"ID_SOCKET\", ".$ID_INSTANZ_SOCKET.");\r";
    
$SText.="define (\"ID_WEBFRONT\", ".$ID_WebFront.");\r";
    
$SText.="?>\r";

    
$ID_PIONEER_SCRIPT_VARSCreateScriptByName("PioneerAVR_Vars"$ID_INSTANZ$STexttrue);




    
// 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
    // FileFlag    = Kennzeichnung 0=Der Dateiname im script Ordner entspricht der generierten ObjektID
    //               1=Als Dateiname wird ScriptNAME genutzt. Damit sind definierte includes möglich
    
function CreateScriptByName($ScriptNAME$ParentID$ScriptTEXT$FileFlag)

     {
     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#");
        if (
$FileFlag==false)
        {
              
$filename=$ScriptID;
          }
          else
       {
          
$filename=$ScriptNAME;
        }
      
$fh fopen(IPS_GetKernelDir()."scripts\\".$filename.".ips.php"'w') or die("can't open file");
      
fwrite($fh$ScriptTEXT);
      
fclose($fh);
      
$ScriptPath $filename.".ips.php";     //Skriptdatei

      
IPS_SetScriptFile($ScriptID$ScriptPath);
      
IPS_SetHidden($ScriptIDtrue);
      
IPS_SetPosition($ScriptID98);
     }
    return 
$ScriptID;
    }

?>
?>
PioneerAVR_Const.ips.php

PHP-Code:
<?

// funktionen ggf umbenenen falls diese auch im gerät umbenannt wurden
$function_list = array(
=> "DIVERSE",
=> "DVD",
25 => "BD",
=> "TV/SAT",
15 => "DVR/BDR",
10 => "XBOX",
94 => "VIDEO 2",
19 => "PS3",
95 => "HDMI 2",
96 => "HDMI 3",
17 => "iPod/USB",
=> "CD",
97 => "CD-R/TAPE",
=> "TUNER",
26 => "INTERNET RADIO",
33 => "ADAPTER PORT"
);

// listening modes
$listening = array(
"0001" => "STEREO",
"0002" => "F.S.SURR FOCUS",
"0003" => "F.S.SURR WIDE",
"0004" => "RETRIEVER AIR",
"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 PRO LOGIC",
"0108" => "Neo:6 CINEMA",
"0109" => "Neo:6 MUSIC",
"010a" => "XM HD Surround",
"010b" => "NEURAL SURR",
"010c" => "",
"010d" => "DOLBY PLIIz HEIGHT",
"010e" => "WIDE SURR MOV",
"010f" => "WIDE SURR MUS",
"0201" => "ACTION",
"0202" => "DRAMA",
"0203" => "SCI-FI",
"0204" => "MONO FILM",
"0205" => "ENT.SHOW",
"0206" => "EXPANDED",
"0207" => "TV SURROUND",
"0208" => "ADVANCED GAME",
"0209" => "SPORTS",
"020a" => "CLASSICAL",
"020b" => "ROCK/POP",
"020c" => "UNPLUGGED",
"020d" => "EXT.STEREO",
"020e" => "PHONES SURR",
"0301" => "DOLBY PLIIx MV +THX",
"0302" => "DOLBY PLII MV +THX",
"0303" => "DOLBY PL +THX CIN",
"0304" => "Neo:6 CIN +THX",
"0305" => "THX CINEMA",
"0306" => "DOLBY PLIIx MS +THX",
"0307" => "DOLBY PLII MS +THX",
"0308" => "DOLBY PL +THX MS",
"0309" => "Neo:6 MUS +THX",
"030a" => "THX MUSIC",
"030b" => "DOLBY PLIIx GM +THX",
"030c" => "DOLBY PLII GM +THX",
"030d" => "DOLBY PL +THX GM",
"030e" => "THX ULTRA2 GM",
"030f" => "THX SELCT2 GM",
"0310" => "THX GAMES",
"0311" => "DOLBY PLIIz +THX MV",
"0312" => "DOLBY PLIIz +THX MU",
"0313" => "DOLBY PLIIz +THX GM",
"0401" => "STEREO",
"0402" => "DOLBY PLII MOVIE",
"0403" => "DOLBY PLIIx MOVIE",
"0404" => "Neo:6 CINEMA",
"0405" => "",
"0406" => "DOLBY DIGITAL EX",
"0407" => "DOLBY PLIIx MOVIE",
"0408" => "DTS+Neo:6",
"0409" => "ES MATRIX",
"040a" => "ES DISCRETE",
"040b" => "DTS-ES 7.1",
"040c" => "XM HD Surround",
"040d" => "NEURAL SURR",
"040e" => "RETRIEVER AIR",
"0501" => "STEREO",
"0502" => "DOLBY PLII MOVIE",
"0503" => "DOLBY PLIIx MOVIE",
"0504" => "Neo:6 CINEMA",
"0505" => "",
"0506" => "DOLBY DIGITAL EX",
"0507" => "DOLBY PLIIx MOVIE",
"0508" => "DTS+Neo:6",
"0509" => "ES MATRIX",
"050a" => "ES DISCRETE",
"050b" => "DTS-ES 7.1",
"050c" => "XM HD Surround",
"050d" => "NEURAL SURR",
"050e" => "RETRIEVER AIR",
"0601" => "STEREO",
"0602" => "DOLBY PLII MOVIE",
"0603" => "DOLBY PLIIx MOVIE",
"0604" => "Neo:6 CINEMA",
"0605" => "",
"0606" => "DOLBY DIGITAL EX",
"0607" => "DOLBY PLIIx MOVIE",
"0608" => "",
"0609" => "ES MATRIX",
"060a" => "ES DISCRETE",
"060b" => "DTS-ES 7.1",
"0701" => "",
"0702" => "DOLBY PLII MOVIE",
"0703" => "DOLBY PLIIx MOVIE",
"0704" => "Neo:6 CINEMA",
"0705" => "",
"0706" => "DOLBY DIGITAL EX",
"0707" => "DOLBY PLIIx MOVIE",
"0708" => "",
"0709" => "ES MATRIX",
"070a" => "ES DISCRETE",
"070b" => "DTS-ES 7.1",
"0881" => "OPTIMUM",
"0e01" => "HDMI THROUGH",
"0f01" => "MULTI CH IN",
"1101" => "DOLBY PLIIx MOVIE",
"1102" => "DOLBY PLIIx MUSIC",
"1103" => "DOLBY DIGITAL EX",
"1104" => "",
"1105" => "ES MATRIX",
"1106" => "ES DISCRETE",
"1107" => "DTS-ES 7.1",
"1108" => "",
"1109" => "DOLBY PLIIz HEIGHT",
"110a" => "WIDE SURR MOV",
"110b" => "WIDE SURR MUS",
"1301" => "THX Surr EX",
"1302" => "Neo:6 +THX CIN",
"1303" => "ES MTRX+THX CN",
"1304" => "ES DISC+THX CN",
"1305" => "ES 7.1+THX CIN",
"1306" => "DOLBY PLIIx MV +THX",
"1307" => "THX ULTRA2 CIN",
"1308" => "THX SELCT2 CIN",
"1309" => "THX CINEMA",
"130a" => "Neo:6 +THX MS",
"130b" => "ES MTRX+THX MS",
"130c" => "ES DISC+THX MS",
"130d" => "ES 7.1 +THX MS",
"130e" => "DOLBY PLIIx MS +THX",
"130f" => "THX ULTRA2 MS",
"1310" => "THX SELCT2 MS",
"1311" => "THX MUSIC",
"1312" => "Neo:6 +THX GM",
"1313" => "ES MTRX+THX GM",
"1314" => "ES DISC+THX GM",
"1315" => "ES 7.1 +THX GM",
"1316" => "DOLBY EX +THX GM",
"1317" => "THX ULTRA2 GM",
"1318" => "THX SELCT2 GM",
"1319" => "THX GAMES",
"131a" => "DOLBY PLIIz +THX MV",
"131b" => "DOLBY PLIIz +THX MU",
"131c" => "DOLBY PLIIz +THX GM",
)
?>
PioneerAVR.ips.php
PHP-Code:
<?
include "PioneerAVR_Const.ips.php";
include 
"PioneerAVR_Vars.ips.php";

// Name des variablenprofils für den funtionsschalter
$VAR_PROFILE_FUNCTION="AV_Function";

// ab hier braucht nichts geändert zu werden

// 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
      
echo $data ;
      
// funktionen gibt es mit drei und zwei 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

        // 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
            
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")
          {
             
// funktion ändern nur wenn die variable nicht aktuell ist
            
if (GetValue(ID_FUNCTION) != $lv_val2)
            {
                
// liste der gültigen funktionen
                
if ($lv_val2==26 || $lv_val2==19 || $lv_val2==17 || $lv_val2==10 || $lv_val2==2)
                {
                   
SetValue(ID_FUNCTION,$lv_val2);    // funktion setzen
                   
echo"set ".$lv_fkt2." to ".$lv_val2.$function_list[0];
                   
// beschriftung des feldes ändern iweder auf default
                   
IPS_SetVariableProfileAssociation($VAR_PROFILE_FUNCTION,0,$function_list[0],"");
                    
// TODO: bei änderung webfront refreshen
                    // TODO: bei betätigen im webfront wird nicht der default aktualisiert
               
WFC_Reload(ID_WEBFRONT);
                }
                 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.
                    // beschriftung des feldes ändern
                    
IPS_SetVariableProfileAssociation($VAR_PROFILE_FUNCTION,0,$function_list[(integer)$lv_val2],"");
               
// TODO: bei änderung webfront refreshen
                    
WFC_Reload(ID_WEBFRONT);
                 }

             }
        }
        
// listening mode
        
if ($lv_fkt2=="LM")
        {
            echo 
"Listening Mode".$lv_val2;
           
SetValue(ID_LISTENING_MODE,$listening[$lv_val2]);    //
         
}
    }
}
if(
$IPS_SENDER == "WebFront") {

    
// aktion per webfront
    // 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);
       
}
       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
       
}

    }

    
// TODO: display schalter zur statusabfrage
    
if ($IPS_VARIABLE==ID_DISPLAY)
    {
        
$ret sendCommand("STS");     // Display Status abfrage, ergebnis wird nach und nach angezeigt
     
}

    
// 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.
            
$ret sendCommand($IPS_VALUE."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
           
SetValue(ID_FUNCTION$tmp_val);
       }
    }

    
// listening mode schalter
    
if ($IPS_VARIABLE==ID_CHANGE_LISTENING_MODE)
    {
           
//echo "Value ".$IPS_VALUE;
            
if ($IPS_VALUE=="0")
          {
             
$ret sendCommand("0005SR");     // auto cycle
          
}
           else if (
$IPS_VALUE=="1")
          {
             
$ret sendCommand("0001SR");     // STEREO cycle
          
}
          else if (
$IPS_VALUE=="2")
          {
             
$ret sendCommand("0010SR");     // Standard cycle
          
}
          else if (
$IPS_VALUE=="3")
          {
             
$ret sendCommand("0100SR");     // Adv. Surround cycle
          
}
          
// 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);


    }

}

// 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
    
if (Sys_Ping($IP_DEVICE1000) )
   {
       
// gerät eingeschaltet, aber variable nicht erneut setzen wenn schon on
       
if (GetValue(ID_POWER)==false)
          {
           
SetValue(ID_POWER,true);
            
avOn();        // variablen, schalter ausblenden

            // 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
        
}
   }
      else
     {
       
// gerät ausgeschaltet, aber variable nicht erneut setzen wenn schon off
       
if (GetValue(ID_POWER)==true)
          {
             
// beschriftung der funktion wieder auf default ändern
             
IPS_SetVariableProfileAssociation($VAR_PROFILE_FUNCTION,0,$function_list[0],"");

           
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)
{
    
$feedbackCSCK_SendText(ID_SOCKET /*[Client Socket]*/$com.chr(13));

    return 
$feedback;
}

// av reciver on - also bedienelemente sichtbar machen
function avOn()
{
    
// power wurde nicht ausgeblendet
    
IPS_SetHidden(ID_MUTEfalse);
    
IPS_SetHidden(ID_VOLfalse);
    
IPS_SetHidden(ID_FUNCTIONfalse);
    
IPS_SetHidden(ID_LISTENING_MODEfalse);
    
IPS_SetHidden(ID_DISPLAYfalse);
    
IPS_SetHidden(ID_CHANGE_LISTENING_MODEfalse);
    
// webfront aktualisieren
    
WFC_Reload(ID_WEBFRONT);
    
//echo "refresh on";
}

// 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)
   
IPS_SetHidden(ID_MUTEtrue);
    
IPS_SetHidden(ID_VOLtrue);
    
IPS_SetHidden(ID_FUNCTIONtrue);
    
IPS_SetHidden(ID_LISTENING_MODEtrue);
    
IPS_SetHidden(ID_DISPLAYtrue);
    
IPS_SetHidden(ID_LISTENING_MODEtrue);
    
IPS_SetHidden(ID_CHANGE_LISTENING_MODEtrue);
    
// webfront aktualisieren
    
WFC_Reload(ID_WEBFRONT);
    
//echo "refresh off";
}

?>
Miniaturansicht angehängter Grafiken
bildschirmfoto-2010-07-24-um-17.56.57.png  

Geändert von mäc (24.07.10 um 18:05 Uhr) Grund: Update
Mit Zitat antworten
  #2 (permalink)  
Alt 24.07.10, 18:07
Senior Member
 
Registriert seit: Apr 2010
Beiträge: 225
Standard

Ist sicher noch nicht perfekt. Feedback erwünscht.
Mit Zitat antworten
  #3 (permalink)  
Alt 25.07.10, 14:00
Member
 
Registriert seit: Jan 2010
Beiträge: 64
Standard

Hi,
habs mit meinem Pioneer 1020K probiert,
Volume Regler, on-off, Display funktionert perfekt super skript.
Könntest du noch ein paar nähere Erklärungen für die Funktionen angeben
wie ich welche Quellen(TV / HDMI 3 usw.) im Webfont sichbar machen kann.
Hast du auch was finden können um mit definitiven Werten die Webradiosender umzuschalten ?
Aber jetzt schon mal ein super script.
Danke Vielmals
Matthias
Mit Zitat antworten
  #4 (permalink)  
Alt 25.07.10, 21:28
Senior Member
 
Registriert seit: Apr 2010
Beiträge: 225
Standard

Um mehr Funktionen zu erhalten müssen die Zusätzlichen Werte in das Install Script aufgenommern werden. Da steht schon ein TODO drin

PHP-Code:
..
    
// eigene profile anlegen, dafür das vorhandene löschen
    // TODO: anpassen falls mehr funktionen gewünscht sind.
    
IPS_DeleteVariableProfile("AVR_FUNCTION");
    
IPS_CreateVariableProfile ("AVR_FUNCTION");
    
IPS_SetVariableProfileAssociation("AVR_FUNCTION"0"DIVERES""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"2"Tuner""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"10"Video 1""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"17"iPod""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"19"HDMI 1""");
     
IPS_SetVariableProfileAssociation("AVR_FUNCTION"26"Internetradio""");
     
IPS_SetVariableProfileIcon("AVR_FUNCTION""Shutter");
     
.. 
Die passenden Werte sind in der Config Datei.

PHP-Code:
..
=> "DIVERSE",
=> "DVD",
25 => "BD",
=> "TV/SAT",
15 => "DVR/BDR",
10 => "XBOX",
94 => "VIDEO 2",
19 => "PS3",
95 => "HDMI 2",
96 => "HDMI 3",
17 => "iPod/USB",
=> "CD",
97 => "CD-R/TAPE",
=> "TUNER",
26 => "INTERNET RADIO",
33 => "ADAPTER PORT"
.. 
Also für HDMI2 einfach eine Zeile
PHP-Code:
IPS_SetVariableProfileAssociation("AVR_FUNCTION"95"HDMI 2"""); 
zufügen.

BTW: hab ich jetzt nicht ausprobiert ;-)

Weitere Funktionen werden folgen. Also Tuner Sender schalten und Internet Radio Streams umschalten. Für letzteres gibt es leider noch keine Doku.

Noch ein Hinweise zum Script:
- zu den Funktionen. Wird eine Funktion per Fernbedienung geschaltet die nicht aufgelistet ist. Wird der Wert= DEFAULT mit der Funktion überschrieben. Beim Ausschalten solle dann wieder ein DEFAUT drin stehen.

Problem: Ich habe mal beobachtet, dass die Reihenfolge durcheinander gewürfelt wurde. Woran es lag weiss ich nicht

- Power Off
Beim Ausschalten werden die Bedienelemente auch ausgeblendet. Die kann natürlich aufgrund der verzögerten Erkennung ein wenig dauern.

vg
mäc
Mit Zitat antworten
  #5 (permalink)  
Alt 26.07.10, 09:15
Member
 
Registriert seit: Jan 2010
Beiträge: 64
Standard

wo hast du eigentlich herausgefunden das der 1020 920 per Lan gesteuert werden kann ? bzw wie kann man sehen welche Befehle per Lan gesendet werden können ? Ist das was offizielles von Pioneer ?
Danke für die Info werds später mal mit dem Install.php ausprobieren.
mfg
Matthias
Mit Zitat antworten
  #6 (permalink)  
Alt 26.07.10, 11:13
Senior Member
 
Registriert seit: Apr 2010
Beiträge: 225
Standard

Hatt ich schon mal im Thead für Verstärker per Lan steuern geschrieben. Über die IPhone Anwendung, sowie Dokumenten im Internet sowie der Integrierten Webseite für die Radiostreams bin ich zum Port gekommen. In den PDF Dokus von Pioneer (alle leider älter) konnte ich dementsprechend das ganz nachbilden.

Die Steuerung mit dem Internetradio wird daher schwerer, weil ich noch nicht die Befehle kenne. Es gibt noch keine Doku im Netz dazu. Die Befehle sind aber mit sicherheit enthalten.

Also wenn da jemand schon was findet bin ich daran sehr interessiert.
Mit Zitat antworten
  #7 (permalink)  
Alt 28.07.10, 11:13
Member
 
Registriert seit: Nov 2009
Beiträge: 41
Standard

@Mäc: Wow, du scheinst hier gerade Pionierarbeit mit dem Pionier zu betreiben

Mal ne kurze Frage, kann man die ganzen Steuerbefehle auch irgendwie in eine einfache Homepage einbauen, so dass ich mittels jeden Browsers das Gerät steuern kann, ohne das der WinRechner mit IP Symcom hochgefahren ist?

Grüße Thomas
Mit Zitat antworten
  #8 (permalink)  
Alt 28.07.10, 11:26
Senior Member
 
Registriert seit: Apr 2010
Beiträge: 225
Standard

Zitat:
Mal ne kurze Frage, kann man die ganzen Steuerbefehle auch irgendwie in eine einfache Homepage einbauen, so dass ich mittels jeden Browsers das Gerät steuern kann, ohne das der WinRechner mit IP Symcom hochgefahren ist?
Also generell wäre es möglich. Ich habe es allerdings noch nicht geschafft.

Problem ist das der integrierte Server den Post des Client prüft ob. Folglich ein aufruf vom eigenen Host. Dieses konnte ich mit Firefox noch nicht umbiegen.
Also ich wollte dem Pioneer vorgaukeln das er meinen Webserver als seinen eigenen betrachtet.

Das im Pioneer enthaltene JavaScript kann man einbinden. Damit wäre nur möglich die Internetstreams zu pflegen. Das Script kann aber eigentlich mehr.

Der Support von Pioneer war nicht wirklich eine Hilfe. Ich denke generell wäre es möglich mit dem integrierte JavaScript alles zu steuern.
Mit Zitat antworten
  #9 (permalink)  
Alt 05.08.10, 12:19
Senior Member
 
Registriert seit: Aug 2008
Beiträge: 162
Standard

Hallo,
super tool für die Kommunikation mit dem VSX-920.
Ich stehe vor dem Problem der Lautsprecherumschaltung von A nach B. Im Display erscheint ordnungsgemäß SPK 0 bis 3, aber wie kann ich aus IPS heraus die Umschaltung realisieren?
mfg.
Rayk
Mit Zitat antworten
  #10 (permalink)  
Alt 05.08.10, 12:59
Senior Member
 
Registriert seit: Apr 2010
Beiträge: 225
Standard

von einem anderen VSX gibt es ein paar Commands: http://www.pioneerelectronics.com/pi..._Protocols.pdf

Hab ich Dich richtig verstanden es geht um die Zonen umschaltung?

Dann musst Du das so erweitern das ein Befehl: APO geschickt wird. Das wäre nach der Liste PowerOn für Zone 2.

Ich habe leider keine zweite Zone im Einsatz daher ist mein Testbedarf gering.
Neben Zone muss noch eine Laustärkeregelung dazu: Für Vol+ wäre ein ZU zu senden.
Mit Zitat antworten
Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verstärker über LAN steuern josp666 Audio & Video, TK-Anlagen, ISDN 111 09.11.10 09:17
Anfängerfrage: DS2408 per PHP steuern JPaeper 1-Wire, M-BUS 6 23.12.09 23:24
wieviel sinn hat es ein Hutschienensystem per Funk zu steuern? Pollibus HomeMatic 10 28.02.09 16:18
Audio / Video nativ per LAN (Cat5e) roadsterhh Audio & Video, TK-Anlagen, ISDN 12 17.07.08 14:33


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0