Umgang mit asynchronen Daten

…war ja nicht meine Frage, eher das was cURL kann…:smiley:

Suche mal nach POST…

DANKE!

Joachim

Quark… Deine Frage war ja eher das:

Und das kann man, wie Chris schrieb, ohne weitere Infos nicht beantworten.
Du kannst auch eine WWWReader Instanz als IO nutzen. Also ganz ohne cURL in PHP.
Da geht aber nur HTTP GET.
Michael

Zeitverschwendung hier… Da will man helfen, kann aber nicht, weil du, warum auch immer, keine Infos rausrücken willst…
Das kann man bei Fragen machen, die man nur mit Ja oder Nein beantworten kann, aber nicht bei doch eher komplexen Dingen wie curl, wo es allein bei POST unzählige Varianten gibt (je nach „Gegenstelle“).

Wenn du noch Fragen haben solltest - poste diese nur, wenn du auch bereit bist Infos zu posten, sonst ist das hier Sinn frei und nur ein Ratespiel/Glücksspiel.

Trotzdem weiterhin viel Erfolg.

-Chris-

PS: Eins von unzähligen curl Beispielen mit POST findest du hier im Forum, wenn du nach „vistapool“ suchst.

hallo Michael,
Hallo Chris,

bin ehrlich gesagt etwas überrascht vom Verlauf dieses Threads…

Fakt ist doch: Zunächst folgte ich dem Ansatz der seriellen Steuerung des Gerätes. Die Frage ist erst einmal unabhängig vom Typ des Gerätes: Daten werden in einer Funktion angefragt, kommen aber „losgelöst“ davon in einer anderen Funktion an.
Wenn kein Bezug auf die Anfrage vorhanden ist (positives Beispiel ist hier mein Pinoeer VSX Receiver) sondern nur eine Antwort - ohne zu wissen vorauf sie sich bezieht (hier z.B. der Acer P5530i). Die Meinung hier war, entweder vor dem Senden der nächsten Anfrage die Antwort daruf abwarten oder andere Wege suchen…

Der andere Weg der sich anbot war das Auslesen der Website des Acer P5530i. Für mich das erste Mal in dieser Technik.

Ich bemühe zunächst gerne Google oder dieses Forum, in diesem Fall auch die verfügbaren Dokumente des Herstellers (Pioneer bzw. Acer).

Mit cURL war es mir überraschend schnell gelungen dann Daten zu bekommen, wobei ich über den Umstand stolperte dass der JSON-String nicht entsprechend der Norm war.

Jetzt geht es im nächsten Schritt darum, nicht nur Daten zu abzufragen, sondern auch aus IPS heraus diese zu setzen.
Mein bereits zu 70% erstelltes Acer-Modul muss also komplett umgestrickt werden…

Eure Tipps waren insofern sehr wichtig, weil sie mich in die richtige Richtung geführt haben!

Ich halte hier nichts bewußt zurück, weil ich mich in die für mich neue cURL-Technik erst einmal einarbeiten möchte und auch der Acer P5530i für mich neu ist. Ich erwarte hier keine fertigen Lösungen, möchte auch gerne verstehen was da passiert. Acer selbst hält sich da sehr bedeckt mit Informationen…

Sobald ich also auf eine Herausforderung stosse, die ich mit Google, diesem Forum oder göttlichen Eingebungen nicht lösen kann, würde ich gerne darauf zurückkommen, muss mich aber selbst erst einmal orientieren…

Bitte da um Verständnis wenn es mit der Umsetzung neuer Konzepte manchmal etwas länger bei mir dauert…:wink:

Joachim

Hi!

Es ist ja auch lobenswert, dass du selbst etwas versuchen willst - aber in diesem Bereich der Programmierung kann eine Frage nur korrekt/sinnvoll und ohne Ratespiele beantwortet werden, wenn man weiß um was es geht und der Fragensteller auch Antworten auf die Fragen der Leute gibt die helfen wollen (oder im optimalen Fall selbst alle Informationen direkt bereitstellt).

Meine Nachricht war auch nicht böse gemeint - aber es macht einfach keinen Sinn jemanden helfen zu wollen, wenn man nicht wirklich weiß worum es geht - dazu ist das alles doch etwas zu komplex.

>> Habe mir grad mal angeschaut was der Acer kann >> nur das Crestron Protokoll und diese eingebaut Webseite. Ungünstig… Bedeutet du musst wirklich über diese komische Webseite im Beamer arbeiten.
Mehr kann man dazu aus der Ferne nicht sagen, weil man sich für weiteres den Quellcode der Beamer-Webseite anschauen muss (um z.B. zu wissen wie die Anmeldung mit Passwort funktioniert oder Werte geändert/gesetzt werden können - da gibt es keine universelle Lösung, das ist für jedes Gerät/Webseite/… anders). Aber curl POST ist der richtige Weg.
…das hätte man dir alles direkt am Anfang sagen können, wenn du gesagt hättest um was es genau geht :wink: :stuck_out_tongue:

Viele Grüße,
Chris

Hallo Chris,

habe inzwischen auch mal nach Crestron gegoogelt - interessant aber tatsächlich wohl kein Ansatz, hier im Forum gibt es dazu einige Threads dazu…

Habe mich nun mit POST beschäftigt, bekomme zwar keine Fehlermeldung aber auch keine Veränderung…

Mein Testskript:

$username = "Administrator";
$password = "admin";
$url = "http://192.168.178.21/form/control_cgi";

// Get cURL resource
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl, CURLOPT_TIMEOUT, 2);
curl_setopt($curl, CURLOPT_POST, true);
// Original  {pwr:"1",hid:"0",frz:"1",eco:"0",src:"3",bri:"50",con:"50",vks:"0",hks:"0",gam:"2.0",ctp:"CT2",mod:"1",vol:"20",apr:"0",zom:"1.0",prj:"0",lgo:"0",aks:"1",dyar:"29"}
curl_setopt($curl, CURLOPT_POSTFIELDS, array('pwr' => '0'));
$resp = curl_exec($curl);
if(!curl_exec($curl)){
    die('Error: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
}
curl_close($curl);
echo $resp;

Könnte es ein Fehler sein, das ich nur einen Key/Value sende?
Könnte es sein, dass es ein Problem ist was beim Daten auslesen der JSON „kaputt“ ist?

Joachim

Wie gesagt - ohne direkt mit den Debugger Tools (da sieht man sowas recht easy) im Browser die Kommunikation und den Quellcode zu sehen von der Beamer-Webseite, kann man dir da aus der Ferne nicht helfen.

Aber mit Basic Auth bist du dir sicher? Auch das Format wie der Beamer einen Befehl erwartet, kann so sein oder total anders…
…wie gesagt - kann man nur raten.

Grüße,
Chris

Mal so ein Tipp:
Wenn du die Befehle kennst kannst du die mit Demo Crome Plugin „Postman“ testen und dir wenn es klappt den PHP-Code direkt exportieren.

…das mit dem „Postman“ werde ich mal versuchen…

Ich habe bei der Untersuchung der Website herausgefunden, dass bei jedem Button-Klick oder bei einem Change bei einem Pull-Down die Funktion „request_projector_info(this, 1)“ aufgerufen wird. Wo sollte diese zu finden sein?

Joachim

…ich glaube ich habe etwas gefunden:
control.txt|attachment (19.7 KB)

Der ganze JavaScript Kram is relativ egal. Schau dir lieber mal im Chrome die Debug Tools an und was da unter Network usw passiert.
Da kann man dir aber blind aus der Ferne, wie gesagt, nicht bei helfen…da muss man selbst dran sitzen (so ist das zumindest bei mir).

-Chris-

…habe es jetzt mal mit dem Postman Interceptor probiert, kommt aber immer nur ein POST „http://192.168.178.21/form/control_cgi“, wenn ich die Registerkarte wechsel kommt dann zur Abwechslung mal ein GET „http://192.168.178.21/control.asp“…

Ich fand in der Datei eigentlich diesen Part ganz interessant:

xmlhttp.open("POST","/form/control_cgi",true);
	  //xmlhttp.open("POST", "http://10.0.180.101", true);
	  xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	  xmlhttp.send(str);

Könnte das nicht den „Kern“ abbilden?

Joachim

Das ist nur ein ganz kleiner Teil von vielen :wink: Nochmal - schau mit den Debugger Tools im Chrome. Ist wohl die einfachste Variante und sollte dir alle Infos liefern die du brauchst. Glaube nicht, dass Acer einem was schwer macht *gg

-Chris-

…habe jetzt noch weiter im Chrome Debugger geschaut, komme aber nicht wirklich zu einem anderen Ergebnis…

Egal ob es einen zyklisches Update gibt oder ich einen Button zum Test betätige, die URL sieht immer gleich aus:

Request URL: http://192.168.178.21/form/control_cgi
Request Method: POST
Status Code: 200 OK
Remote Address: 192.168.178.21:80
Referrer Policy: no-referrer-when-downgrade

Es sieht mir so aus, dass die Daten dann in dem oben geposteten Skript an die Steuerung gesendet wird…

Auch in dem Debugger wiederholt sich der Verweis auf das oben gepostete Skript mit der Zeile 324, dort steht: xmlhttp.send(str);

Jede Aktion oder das zyklische auslesen - so scheint es zumindest - liest die Variablen aus der Website aus, stellt sie zusammen und führt in der Steuerung den Befehl aus…Klingt das sinnvoll?:confused:

Joachim

Du bist auf dem richtigen Weg - du musst nur noch auf die richtigen Stellen im Debugger klicken und dir den Inhalt vom POST anschauen und alles nachbauen :slight_smile:

…alle Information die bei „Networks“ beim Klick auf „Freeze“ (frz) abgebildet werden:

Request URL: http://192.168.178.21/form/control_cgi
Request Method: POST
Status Code: 200 OK
Remote Address: 192.168.178.21:80
Referrer Policy: no-referrer-when-downgrade
Cache-control: no-cache
Content-Type: text/html
Pragma: no-cache
Server: GoAhead-Webs
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Content-Length: 7
Content-type: application/x-www-form-urlencoded
Cookie: atop_user=1; atop_pw=1
Host: 192.168.178.21
Origin: http://192.168.178.21
Referer: http://192.168.178.21/control.asp
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Mobile Safari/537.36
frz: frz

Ich befürchte, das Gerät abeitet nicht so wie erwartet…:mad:

Joachim

Da steht garantiert noch mehr…

Es wird ein POST gemacht mit einer Content Länge von 7. Das was im Content steht und was du eben geposted hast - ergibt zusammen die Lösung :slight_smile:

-Chris-

Der Content steht da doch:

frz:frz

Michael

Hey, jeder darf mal was zuviel trinken :smiley: (auch wenn es bei mir nur Saft war) :smiley:

Aber ja - damit sind für dieses Puzzle alle notwendigen Teile vorhanden :slight_smile:

-Chris-

…in dem eben geposteten Abbild steht in der letzten Zeile „frz:frz“ - das wären sieben Zeichen, bei der zyklischen Abfrage steht dort „QueryControl“ dazu passend steht bei Content-Length: 12.
Aber wie passt das jetzt zusammen?:confused: