[Gelöst] SensorAndSwitch: Pseudoscript für schaltbare Steckdosenleiste: Kookaam Netio 230B

ich glaub ich hab da was gefunden, wenn ich dieses test script laufen lasse

PHP:
 $urlstatus='http://ip:port/cgi/control.cgi?login=p:benutzer:pass&p=l';
hab ich folgendes error.log :


[21-Feb-2015 16:08:21] PHP Warning: file_get_contents h..p://ip:port/cgi/control.cgi?login=p:benutzer:pass& amp; p=l [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! in D:\Win7\server2go\htdocs\sensorandswitch\test1.php on line 11

wo kommt dieses amp; her, des hat da doch nix verloren !!

hab dann auch als antwort im browswerfenster : 551 INVALID PARAMETR
 
Zuletzt bearbeitet:
Schlicht und ergreifend sind da wohl die Anmeldedaten, die du dort eingetragen hast, falsch oder so kompliziert, dass sie falsch umgewandelt werden. "http error 551 invalid login parameter"
Ok, schau dir das genau an und korrigiere es. Eventuell vergib ein primitives Zahlenkennwort, weil es mit Sonderzeichen eventuell nicht aufgelöst werden kann.
Also der Steckdose als kennwort 1234 und falls Benutzer änderbar ist den auf abcde an der Dose einstellen, dann nochmal versuchen. Übergebene Parameter werden nicht immer korrekt umgewandelt. Deshalb Kennwörter im eigenen Netz während der Testphase und wenn sie als Parameter übergeben werden müssen, erst einmal so primitiv wie möglich halten. Damit stellt man sich sonst gerne selbst schnell ein Bein.
 
Zuletzt bearbeitet:
hab in der dose neuen user: test passwort: 1234 angelegt.

in die test1.php zeile 11 deine neue zeile eingefügt

error.log:

Code:
[21-Feb-2015 21:43:00] PHP Warning:  file_get_contents(http%3A%2F%2F192.168.0.3%3A8083%2Fcgi%2Fcontrol.cgi%3Flogin%3Dp%3Atest%3A1234%26p%3Dl) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: No such file or directory in D:\Win7\server2go\htdocs\sensorandswitch\test1.php on line 11

und im browser kommt: bool(false)

mir kommts so vor als ob da nicht korrekt genau diese zeichenfolge an die dose geschickt wird :
Code:
http://192.168.0.3:8083/cgi/control.cgi?login=p:test:1234&p=l

mit dem http:// link kommt auch der status der dosen korrekt im browser !!

und wenn ich die ip-adresse vom heimnetz in meine dyndns ändere funktioniert der status auch, will sagen mein user und passwort
sowie meine adressen stimmen !!
 
Zuletzt bearbeitet:
OK, JL3 wollte mal sehen obs mit urlencoded klappt.
Jetzt probier mal mit dem am Anfang (Post #81) bemängelten ENTITY: &amp;
...also so...
Code:
http://192.168.0.3:8083/cgi/control.cgi?login=p:test:1234[COLOR=red]&amp;[/COLOR]p=l

Mit etwas Glück geht das.
Bei mir wird sowas von...
/cgi-bin/env?hello=yes&amp;hi=yes
...richtig zu...
REQUEST_URI: /cgi-bin/env?hello=yes&hi=yes
...übersetzt.
 
Zuletzt bearbeitet:
na genau so gehts nicht :

Code:
http://192.168.0.3:8083/cgi/control.cgi?login=p:test:1234&amp;p=l

das bewirkt diese ausgabe am browser:

Code:
551 INVALID PARAMETR

mir kommts so vor das sas dieses amp; zuviel mitschickt an die dose und deshalb die dose mit 551 antwortet !
 
Zuletzt bearbeitet:
Ändere nochmal rawurlencode in urlencode was nach dem älteren Standard encodiert. Ansonsten kommt mir keine Idee mehr, außer dass ich mir so eine Steckdosenleiste kaufe und damit rumexperimentiere, bis ich weiß, was das cgi der Dose da haben will...


oder drehe die Parameter mal um..... erst p..... dann login

oder nach dem alten Schema %26 statt &

also:
Code:
http://192.168.0.3:8083/cgi/control.cgi?login=p:test:1234[B][COLOR="#008000"]%26[/COLOR][/B]p=l

http://de.wikipedia.org/wiki/URL-Encoding#.25-Darstellung
 
Zuletzt bearbeitet:
das ist so crazy, bei %26 kommt invalid login, schätze da wird des 1234 um %26 erweitert also aus 1234 -> 1234%26

die dose schluckt dev. nur des einzelne & zeichen und sonst nix anderes !!
 
Das php-Modul wandelt um und die Dose versteht es nicht. Jetzt kommt die Frage, wie man das am besten austrickst. :gruebel:
 
die frage die sich mir jetzt stellt, warum wandelt das php-modul das überhaupt um !? :confused:

könnte man das in php nich so lösen das man dieses & nicht braucht, will sagen der erste befehl geht nur ums anmelden login=p:user:pass, der zweite
nur ums auslesen p:l , is jetz nur sone idee, ob man sowas umsetzen kann weiß ich aufgrund fehlenden wissens nicht !

kommando zurück, erst login und dann erst leiste auslesen geht nur in einem befehl( eine komplette zeile), zumindest übern browser
einzeln nacheinander gehts ned !
 
Zuletzt bearbeitet:
Seltsamerweise funktioniert es mit anderen "Empfangsquellen".

Naja, das ist wohl teils daraus gewachsen, dass bestimmte Zeichen schlichtweg nicht in urls verwendet werden können.

Was mir kopfzerbrechen bereitet ist, dass der Browser ja ebenfalls die url wegschickt und diese richtig ankommt. web() nutzt curl und dieses simuliert einen Browser. Doch auch da funktioniert es falsch. Warum das so ist....... was da unterschiedlich ist..... das ist die Frage.
 
Ich muss mit dem curl php etwas ausprobieren. eventuell habe ich eine Lösung, da man mit dem curl im php explizit $_GET-Requests rausschicken kann, die Parameter trennen, sodass es richtig ankommen muss. Doch dafür muss ich den web() neu codieren und testen, ob es funktioniert. Bitte etwas Geduld, da ich es heute nicht mehr machen kann. Aber ich denke, das könnte helfen.
 
immer locker, nur kein stress, rom wurde auch nicht an einem tag erbaut !! ;-)
 
Schlechte Nachrichten. GET-Requests werden genau so übergeben, wie es im Script schon vorgesehen ist. PHP bereitet in seinen Funktionen dann die übergebenen Parameter exakt so auf, dass es normalerweise funktionieren müsste. Im Wetterscript wird diese Aufbereitung ebenfalls so vorgenommen und es läuft. Warum deine Steckdosenleiste es nicht erkennt, ist mir ein Rätsel. Der Miniwebserver in der Steckdosenleiste setzt &amp; nicht wieder mit & und %26 ebenfalls nicht mit & gleich, obwohl dies so "vorgeschrieben" ist und was dein Browser irgendwie hinbekommt. Genau das irritiert mich so, da es demnach einen Weg geben muss.

Mal ein Aufruf an alle, die hier eventuell mitlesen:

Wer kennt sich mit der Parameterübergabe des curl in php gut aus und hätte noch eine Idee, woran es liegen könnte?
 
ich hab noch ein wenig gesucht und ev was gefunden, ich selbst kann
leider damit nix anfangen :
 

Anhänge

  • libphpnetio_v05.zip
    12.3 KB · Aufrufe: 4
Kopiere beide Scripte phpnetio_client_example.php und phpnetio_client.inc.php in ein Verzeichnis deines Webservers und rufe phpnetio_client_example.php auf. Versuche damit zu schalten. Wenn es funktioniert, dann baue ich es in ein Pseudoscript ein. Seltsamerweise wird hier auch curl verwendet aber nicht cgi sondern tgi:

PHP:
			$this->debugMsg("fetch URL result: 'http://" . $this->hostname . "/tgi/control.tgi?" . $command . "'");
			$crl = curl_init();
			$timeout = 5;
			$url = "http://".$this->hostname."/tgi/control.tgi?".$command;
			curl_setopt ($crl, CURLOPT_URL,$url);
			curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
			$ret = curl_exec($crl);
			curl_close($crl);
			$ret = str_replace("<html>", "", $ret);
			$ret = str_replace("</html>", "", $ret);
			$this->debugMsg("Got answer: '$ret'");
			//return result if not forbidden
			if(strpos($ret, "555 FORBIDDEN") === false) { return $ret; } else { return "FAIL"; }

Da bin ich mal gespannt, ob das läuft.

Die Browserausgabe müsste so aussehen:
netio.jpg
 
Zuletzt bearbeitet:
jepp des passt so und funktioniert, die dosen lassen sich schalten !

im browser bei direkteingabe ohne php funktioniert auch beides, cgi und tgi ! echt seltsam
 
Wenn das da oben läuft, dann bastle ich das in das PseudoScript. Das dauert jetzt etwas, weil ich gerade an einem xml-File für meinen HT-PC bin, um Kodi darauf laufen zu lassen. Aber die Woche werde ich schon dazu kommen. :)
 
oki doki, nur kein stresssss !! ;-)
 
Jep, wird Wochenende werden. Aber ist nicht vergessen. :)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.