Verstärker Pioneer VSX-920 per Lan steuern

Wenn es denn auch konfigurierbar sein soll nach Modell und automatisch in IP-Symcon eingerichtet werden soll ist eine Alternative zu einem Skript daraus eine Klasse zu bauen und dann ein PHP Modul zu nutzten.
Beispiele dafür sind z.B. Denon Modul, Onkyo Modul, Yamaha Modul.

Gibt es dafür irgendwo etwas Doku oder eine Anleitung, um sich einzuarbeiten? - Mir ist z.B. noch nicht klar wie „GitHub“ dahin spielt usw.

Ich weis ja nicht welchen Wissenstand Du hast aber Objektorientierte Programmierung in PHP wäre vielleicht ein Einstieg.

Ansonsten wurde und werden unter Grundsätzliche Fragen zur Modulerstellung viele Fragen gestellt.
Dokumention zu PHP Modulen findest Du hier, ansonsten musst Du halt in einem separaten Thread möglichst konkrete Fragen stellen.

Am besten ist es sicher sich die existenten Module zu AVR Recieveren mal näher anzuschauen, auf deren Grundlage könnte dann auch eine Pioneer Modul erstellt werden.

Da die Daten im Fall von Pioneer über einen Client Socket geschickt werden kannst Du Dir das Denon oder Onkyo Modul anschauen da wird dies auch gemacht.

Antworte waren da. Einfach ein Modul bauen. Ich hatte da bisher noch keine Lust zu.
Natürlich kann das Script genutzt und verändert werden. Dazu ist die Community da.

Ich bin mit meiner Anpassung der Skripte von mäc sehr weit gekommen. Ich möchte das (wie schon angefragt) noch gerne etwas aufarbeiten, sodass es gut in IPS installiert und angepasst werden kann.

Mit ist aktuell noch nicht klar, wo die og. Wege Unterschiede haben, deshalb ein paar Fragen:

[ol]
[li]Das Gerät ist über die LAN-Schnittstelle offenbar umfassend steuerbar. Allein die Klangeinstellungen bieten soviele Varianten, dass der Nutzer für sich ein paar Favoriten auswählen wollen wird. Aktuell wird dies über Einträge in einem Variablenprofil gelöst, für die es passende Steuersequenzen im Hauptskript gibt. Trägte der Anwender weitere oder andere Werte in das Profil, muss er dafür auch die Steuersequenz im Hauptskript anpassen/erweitern. - Jetzt die Frage: Kann man dies mit den og. Wegen so beibehalten oder schließt sich das gegenseitig aus?
[/li][li]Davon ausgehend das es zwischen dem VSX-923 und seinen „Verwandten“ kleine Unterschiede gibt: was ist dann die bessere Wahl für die og. Wege?
[/li][li]Sind Module überhaupt von Anwendern anpassbar?
[/li][/ol]

Module sollten so gestaltet sein das der Benutzer die Einstellungen im Konfiguartionsformular vornehmen kann. Es könnten z.B. abhänig vom AVR Typ passende Variablenprofile erstellt werden. Das Modul selber ist bedingt anpassbar, der Nutzer kann zwar im Quellcode editieren aber dadurch ist dann kein Update über die Instanz Modules mehr möglich. Der passende Weg wäre daher wenn umfassende Änderungen vorgenommen werden sollen einen Fork von so einem Modul zu erstellen, die Änderungen einzuarbeiten, und wenn diese Änderung grundsätzlich relevant ist, dann einen Pull Request zu stellen. Dann können die Änderungen in das Original Modul gemerged werden.

Beim Denon Modul gibt es z.B. pro Gerät eine eigene Klasse die sich von einer Übergeordneten Klasse ableitet siehe hier dadurch kann jedes Gerät mit seinen individuellen Befehlen und verfügbaren Commands abgebildet werden und dann die passenden Variablen mit dem zugehörigen Variablenprofil angelegt werden.

Es reicht ja wenn das vom Prinzip her erst mal steht, die Unterscheide der einzelnen Modelle kann man dann immer noch später nachpflegen das ist dann reine Fleisarbeit und auch nur dann notwendig wenn es überhaupt einen Nutzer gibt der das Modell nutzt.

Im Übrigen kannte ich auch nicht, aber schau mal unter IPS2PioneerBDP450, da findest Du ein Pioneer Modul. Das muss nur um weitere Modelle erweitert werden, aber ein Grundlage ist schon da.

Im Übrigen kannte ich auch nicht, aber schau mal unter IPS2PioneerBDP450 , da findest Du ein Pioneer Modul. Das muss nur um weitere Modelle erweitert werden, aber ein Grundlage ist schon da.

Ich habe schon Unterschiede in den Geräte von 2011 (z.B. VSX-920) und meinem Geräte von 2013 (VSX-923) gefunden. Die Befehlsreferenz ist teilweise anders.

Ich habe meine Skripte bereits hier gepostet:

https://www.symcon.de/forum/threads/35512-Receiver-Pioneer-VSX-923-per-Lan-steuern

Hallo,
zuerst einmal ich bin absoluter neuling was symcon angeht.
Hatte vor ein paar tagen eine kleine einführung in die Materie von Fonzo bekommen. vielen Dank nochmals dafür.
Er hatte mir auch gezeigt wie man den VSX 922 einbindet. Da ich es selber machen und können wollte habe ich also das nochmal gelöscht und es selber probiert. Hat soweit auch alles funktioniert, nur das ich immer eine Fehlermeldung bekomme :frowning:

Parse error:  syntax error, unexpected ')' in C:\IP-Symcon\scripts\PioneerAVR_Vars.ips.php on line 13

Der Quellcode sieht bei mir an dieser Stelle wie folgt aus:


10. // aufruf per register variable, script oder webfront?
11. if($IPS_SENDER == "RegisterVariable") {
12.    // daten aus dem cutter aufruf registervariable
13.   $data=$IPS_VALUE; 14.   //echo $data ;

Hat jmd eine Idee wodran das liegen könnte?
Gruß
Nils
Ps. hier schwirren ja noch 2 erweiterungen rum einige Seiten zuvor gibt es dazu eine Anleitung wie ich diese einbinde?

Hi Nils!

Alt = $IPS_VALUE
Neu = $_IPS[„VALUE“]

…gilt auch für SENDER, VARIABLE, …
Systemvariablen — IP-Symcon :: Automatisierungssoftware

Bzgl. dem Fehler mit der „(“…da musst du mal mehr Code posten und nicht nur die paar Zeilen.

Grüße,
Chris

Eine Fehlerquelle kann Microsoft Edge sein, wenn Du mit Egde benutzt um z.B. Skripte aus dem Forum in IPS zu kopieren fügt Edge hier . statt Leerzeichen hinzu. Hier hilft es einen anderen Browser zu benutzten, dann sollte das mit dem Kopieren auch funktionieren.

Ansonsten musst Du mal das gesamte Skript das Dir bei Dir eine Fehlermeldung erzeugt hier reinkopieren, dann kann man eher sehen woran es liegt bei ein paar Zeilen Code ist das manchmal schwer, auch wenn der Fehler auf eine spezielle Zeile verweist.

Ich werde es nochmal komplett neu probieren wie unter diesem link.
Receiver Pioneer VSX-923 per Lan steuern
mit dem Firefox browser.
Evtll. lag es daran, dass der AVR die bekannte Pioneer Krankheit dieser Modelle hat und sich nicht mit dem Lan verbindet teilweise.
Sollte das nicht klappen poste ich mal den Code.
Vielen Dank für eure Hilfe.
Gruß
Nils

Hallo Nils,
Du bist ja schon auf mein Skript für den VSX 923 aufmerksam geworden, dass als Basis das Skript aus diesem Thread des Forums hat. Mir ist da bei aufgefallen, dass der VSX 920 und der 923 teilweise sehr unterschiedlich sind. Hier gilt es tatsächlich erst einmal die Handbücher (API-Befehle) anzusehen/ zu vergleichen. Die Handbücher findest du auch hier im Forum https://www.symcon.de/forum/threads/20921-Datenbl%C3%A4tter-Ethernet-Protokoll-AV-Receiver. Wenn das Ergebnis ist, dass der 920 identisch oder näher dran ist noch ein Tipp: MÄC hatte seinen letzten Skript-Stand nicht zu Beginn veröffentlicht ( siehe #139)

Im Handbuch von VSX 923 taucht die Bezeichnung von Deinem Receiver nicht auf. Ich vermute Du brauchst das Handbuch Version 13.
MR_20171127_134801.jpg

so alles nochmal neu aber kein erfolg.
dies ist die Fehlermeldung.
Parse error: syntax error, unexpected ‚=‘ in C:\IP-Symcon\scripts\37803.ips.php on line 9

Hier der Code eingefügt mir firefox

<?
// Erzeugt von INSTALL_SCRIPT
// ########### INCLUDE-START ###########
include(IPS_GetScriptFile(22100 /*[Geräte\pioneer vsx922\Pioneer VSX-922\Pioneer VSX-922_Const]*/));
include(IPS_GetScriptFile(27451 /*[Geräte\pioneer vsx922\Pioneer VSX-922\Pioneer VSX-922_Vars]*/));
// ########### INCLUDE-ENDE  ###########

// ########### AB HIER HAUPT-SKRIPT EINFÜGEN  ###########
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);

}  
?>

Wäre schön wenn mir jmd helfen könnte.
Gruß
nils

der fehler liegt bei mir ja schon im installationsscript.
sollte ich es lieber mit dem code des 920ers probieren?
im prinzip ist es ja alles die gleiche reihe nur immer die nachfolger.
auf der von dir beschriebenen seite war ich schon konnte ich aber nichts mit anfangen.

Die Handbücher findest du auch hier im Forum 403 Forbidden.

bin halt erst seit ein zwei wochen bei IPS dabei und immer mal abends ne stunde, gut 3 stunden macht irgendwie süchtig:-)
da ich keine programmiererfahrung hab ist das alles sehr viel am anfang

MÄC hatte seinen letzten Skript-Stand nicht zu Beginn veröffentlicht ( siehe #139)

was bedeutet siehe 139 finde ich da den letzten stand? wie komme ich dahin?

Im Handbuch von VSX 923 taucht die Bezeichnung von Deinem Receiver nicht auf. Ich vermute Du brauchst das Handbuch Version 13.

sicherlich weil meiner das vorgängermodell ist, was kann ich mit dem handbuch anfangen?

Lg Nils

Das hat sich erledigt habs geschnallt die id des Post welche fortlaufend sind.

Heisst das die Fehlermeldung ist jetzt auch weg oder ist die immer noch da?

Fonzo

Zitat Zitat von schmidty Beitrag anzeigen

Das hat sich erledigt habs geschnallt die id des Post welche fortlaufend sind.
Heisst das die Fehlermeldung ist jetzt auch weg oder ist die immer noch da?

Ne nur die Frage mit der ID hat sich erledigt.

Der Fehler besteht weiterhin.
Gruß
Nils

Der Fehler liegt darin das das keine Kontante ist sondern eine Variable.

Mach mal folgendes:

[ul]
[li]CTRL+3 Skript hinzufügen[/li][li]Inhalt aus #139 vom Skript PioneerAVR_Inet.php in das neue Skript kopieren[/li][li]Skript mit CTRL+R umbenennen in PioneerAVR_Inet.php[/li][li]Den Inhalt der Skripte aus #139 der Skripte PioneerAVR.php, PioneerAVR_Vars.php und PioneerAVR_Const.php in die jeweiligen Skripte kopieren[/li][li]PioneerAVR_Inet.php ist die IP Adresse anzupassen (Zeile 5)[/li][li]PioneerAVR_Vars.php die Variablen anpassen CTRL+O[/li][li]PioneerAVR.php prüfen ob diese funktioniert, wie Du siehst steht hier $INET_RADIO_HIDDEN=true; das ist der Unterschied zu dem Skript was Du oben reinkopiert hast das erzeugt bei Dir einen Fehler. Ansich sollte dann kein Fehler mehr auftauchen.[/li][/ul]

Einfacher ist es irgendwann mal alle Skripte in ein PHP Modul zu kippen dann kann man sich das ganze kopieren sparen und kann auch keine Fehler machen. Vielleicht hat da ja einer von den Pioneer Nutzern Lust drauf.

Ansonsten sind im PioneerAVR.php folgende Dinge anzupassen

im gesamten Skript $IPS_VALUE (alt) gegen $_IPS[‚VALUE‘] austauchen. Und alle Einträge mit $IPS_SENDER (alt) gegen $_IPS[‚SENDER‘] austauschen.

PioneerAVR.php


<?
include "PioneerAVR_Const.ips.php"; 
include "PioneerAVR_Vars.ips.php"; 
include "PioneerAVR_Inet.ips.php";     // Internetradio Funktionen 

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

// ab hier braucht nichts geändert zu werden 

$INET_RADIO_HIDDEN=true; 
$TUNER_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 
      //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==25 || $lv_val2==21 || $lv_val2==20 || $lv_val2==17 || $lv_val2==2) 
                { 
                   SetValue(ID_FUNCTION,$lv_val2);    // funktion setzen 
                   echo"set ".$lv_fkt2." to ".$lv_val2.$function_list[0]; 
                   // beschriftung des feldes ändern wieder auf default 
                   IPS_SetVariableProfileAssociation($VAR_PROFILE_FUNCTION,0,$function_list[0],"",-1); 
                } 
                 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],"",-1); 
                 } 
             } 

            // wenn internet radio und die optionen noch nicht eingeblendet dann einblenden. 
            if ($lv_val2==26 && $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(); 
            } 

            // wenn tuner  radio und die optionen noch nicht eingeblendet dann einblenden. 
            if ($lv_val2==02 && $TUNER_RADIO_HIDDEN==true) 
            { 
               // tuner radion steuerung einblenden. methode führt refresh automstisch aus 
               TunerRadioOn(); 
            } 
            else 
            { 
               // tuner radion steuerung einblenden. methode führt refresh automstisch aus 
               TunerRadioOff(); 
            } 
             
        } 
        // 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));    // 
    } 
     
    // 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 
       } 
    } 

    // 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 

            // bei internetradio ein und ausblenden 
           if ($_IPS['VALUE']==26) 
           { 
              InetRadioOn(); 
         } 
         if (GetValue(ID_FUNCTION)==26) 
           { 
              InetRadioOff(); 
         } 
          
         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']); 
    } 
    // 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 
    if (Sys_Ping($IP_DEVICE, 1000) ) 
   { 
       // 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 
        } 
   } 
      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) 
{ 
    $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_DISPLAY, false); 
    IPS_SetHidden(ID_CHANGE_LISTENING_MODE, false); 
    IPS_SetHidden(ID_KEYLOCK, false); 
    // beim einschalten ist ggf. noch der modus internetradio aktiv gewesen. dann aktivieren damit danach das ausblenden funktioniert 
    if (GetValue(ID_FUNCTION) == 26) 
    { 
       // inet radion steuerung einblenden. methode führt refresh automstisch aus 
       InetRadioOn(); 
    } 

    IPS_SetHidden(ID_TUNER_CONTROL, false); 

} 

// 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, true); 
    IPS_SetHidden(ID_KEYLOCK, true); 
    IPS_SetHidden(ID_TUNER_CONTROL, true); 
     
    InetRadioOff(); 
} 

// TODO: ins installscript übernehmen 
function InetRadioOn() 
{ 
    $INET_RADIO_HIDDEN= false; 
    IPS_SetHidden(ID_INET_RADIO, false); 
    IPS_SetHidden(ID_INET_RADIO_BUTTONS, false); 
    IPS_SetHidden(ID_INET_STATION, false); 
     
    $html = ReadStationList(); 
    setValue(ID_INET_STATION,$html); 

} 

function InetRadioOff() 
{ 
   $INET_RADIO_HIDDEN=true; 
    IPS_SetHidden(ID_INET_RADIO, true); 
    IPS_SetHidden(ID_INET_RADIO_BUTTONS, true); 
    IPS_SetHidden(ID_INET_STATION, true); 
     

} 

// TODO: ins installscript übernehmen 
function TunerRadioOn() 
{ 
    $TUNER_RADIO_HIDDEN= false; 
    //IPS_SetHidden(ID_INET_RADIO, false); 
    //IPS_SetHidden(ID_INET_STATION, false); 
    IPS_SetHidden(ID_TUNER_CONTROL, false); 
    //$html = ReadStationList(); 
    //setValue(ID_INET_STATION,$html); 

} 

function TunerRadioOff() 
{ 
   $TUNER_RADIO_HIDDEN=true; 
    //IPS_SetHidden(ID_INET_RADIO, true); 
    IPS_SetHidden(ID_TUNER_CONTROL, true); 
    //IPS_SetHidden(ID_INET_STATION, true); 

} 
?>

Hallo Nils,

du bist im Thread vom VSX-920… und hast mein Skript von VSX-923 verwendet. - Wie ich schon schrieb sind die beiden Receiver vom Befehlssatz stark unterschiedlich. - Ich würde auch empfehlen die Themen sauber getrennt zu halten.

Zu Deiner Fehlermeldung: ich denke du hast möglicherweise die INCLUDE-Skripte vermischt oder den Inhalt nicht richtig eingetragen.