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