+ Antworten
Seite 1 von 15 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 148
  1. #1
    Registriert seit
    Apr 2010
    Beiträge
    341

    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";
    }

    ?>
    Angehängte Grafiken Angehängte Grafiken  
    Geändert von mäc (24.07.10 um 18:05 Uhr) Grund: Update

  2. #2
    Registriert seit
    Apr 2010
    Beiträge
    341

    Ist sicher noch nicht perfekt. Feedback erwünscht.

  3. #3
    Registriert seit
    Jan 2010
    Beiträge
    223

    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

  4. #4
    Registriert seit
    Apr 2010
    Beiträge
    341

    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

  5. #5
    Registriert seit
    Jan 2010
    Beiträge
    223

    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

  6. #6
    Registriert seit
    Apr 2010
    Beiträge
    341

    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.

  7. #7
    Registriert seit
    Nov 2009
    Beiträge
    118

    @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

  8. #8
    Registriert seit
    Apr 2010
    Beiträge
    341

    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.

  9. #9
    Registriert seit
    Aug 2008
    Beiträge
    337

    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

  10. #10
    Registriert seit
    Apr 2010
    Beiträge
    341

    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.

Ähnliche Themen

  1. Audio / Video nativ per LAN (Cat5e)
    Von roadsterhh im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 17
    Letzter Beitrag: 21.04.14, 12:45
  2. Verstärker über LAN steuern
    Von josp666 im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 111
    Letzter Beitrag: 09.11.10, 10:17
  3. Anfängerfrage: DS2408 per PHP steuern
    Von JPaeper im Forum 1-Wire, M-BUS
    Antworten: 6
    Letzter Beitrag: 24.12.09, 00:24
  4. Antworten: 10
    Letzter Beitrag: 28.02.09, 17:18