NEWS
[gelöst] http request
-
also aus dem Script heraus geht es mit:
exec('wget http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0');
hier ist aber zwischen Befehl und Ausführung ein Zeitversatz den ich nicht gut finde (knapp 5 Sekunden).
Im Prinzip will ich mit einem Xiaomi-Taster bzw. einem Bewegungsmelder Leuchten im Garten schalten, die an meinem Pool-Controller angeschlossen sind.
Und beim "Licht schalten" ist ein "Versatz" von über einer Sekunde absolut nicht schön.
Daher auch die Überlegung mit dem request. Das muss doch damit auch gehen? Hat noch wer Ideen? `
hier hast du aber auch keine Authentisierung und es klappt
-
also aus dem Script heraus geht es mit:
exec('wget http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0');
hier ist aber zwischen Befehl und Ausführung ein Zeitversatz den ich nicht gut finde (knapp 5 Sekunden).
Im Prinzip will ich mit einem Xiaomi-Taster bzw. einem Bewegungsmelder Leuchten im Garten schalten, die an meinem Pool-Controller angeschlossen sind.
Und beim "Licht schalten" ist ein "Versatz" von über einer Sekunde absolut nicht schön.
Daher auch die Überlegung mit dem request. Das muss doch damit auch gehen? Hat noch wer Ideen? `
hier hast du aber auch keine Authentisierung und es klappt `
jupp da hast du recht, dennoch ist mir unklar warum es mit request nicht klappt. -
probiers mal ganz erinfach:
var request = require('request'); request("http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0").on('error', function (e) { log(e, 'error');});
-
probiers mal ganz erinfach:
var request = require('request'); request("http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0").on('error', function (e) { log(e, 'error');}); ```` ` gemacht, passiert nichts, kein Schalten, kein Log…
-
den javaScript adpater hast du mal auf debug gestellt?
siehst du eigentlich irgendwo einen log, dass er versucht diesen request abzuschicken?
-
den javaScript adpater hast du mal auf debug gestellt? ` jupp
@homecineplexx:siehst du eigentlich irgendwo einen log, dass er versucht diesen request abzuschicken? ` nein
ich fasse mal zusammen:
deine Code-Zeile erzeugt keine Befehle und auch keine Logeinträge
var request = require('request'); request("http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0").on('error', function (e) { log(e, 'error');});
Ich hatte dann mal aus dem https://www.npmjs.com/package/request was probiert:
var request = require('request'); request("http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0", function (error, response, body) { log('error: ' + error); log('response: ' + JSON.stringify(response)); log('body: ' + body); });
erzeugt dann dieses Log:````
12:58:34.714 [info] javascript.0 script.js.Testscripte.Skript1: error: null
12:58:34.715 [info] javascript.0 script.js.Testscripte.Skript1: response: {"statusCode":401,"body":"","headers":{"server":"PoolController","www-authenticate":"Poolauth realm="NeedPassword"","content-type":"text/html"},"request":{"uri":{"protocol":"http:","slashes":true,"auth":null,"host":"192.168.2.37:8091","port":"8091","hostname":"192.168.2.37","hash":null,"search":"?R16=1&RT16=0","query":"R16=1&RT16=0","pathname":"/SetState.pl","path":"/SetState.pl?R16=1&RT16=0","href":"http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0"},"method":"GET","headers":{}}}
12:58:34.716 [info] javascript.0 script.js.Testscripte.Skript1: body:da steht was von "****Poolauth realm=\"NeedPassword\****". Also erweitert mit den Zeilen die ich bei request-npm gefunden habe (ob das richtig ist, sein mal dahin gestellt):```` request({ method: 'POST', uri: 'http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0', auth: [{ 'user': 'admin', 'pass': 'admin', 'sendImmediately': false }] }, function (error, response, body) { log('error: ' + error); log('response: ' + response); //log('response: ' + JSON.stringify(response)); log('body: ' + body); }); */
erzeug dieses Log:````
13:04:02.185 [info] javascript.0 script.js.Testscripte.Skript1: error: Error: no auth mechanism defined
13:04:02.185 [info] javascript.0 script.js.Testscripte.Skript1: response: undefined
13:04:02.185 [info] javascript.0 script.js.Testscripte.Skript1: body: undefinedHmmm, nun gehts nicht weiter…
-
und so?
var requestTest = require('request'), var options = { url: 'http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0', method: 'POST', formData: { 'username':'admin', 'password':'admin' } } requestTest(options, function (error, response, body) { log('error: ' + error); log('response: ' + JSON.stringify(response)); log('body: ' + body); });
-
und so?
var requestTest = require('request'), var options = { url: 'http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0', method: 'POST', formData: { 'username':'admin', 'password':'admin' } } requestTest(options, function (error, response, body) { log('error: ' + error); log('response: ' + JSON.stringify(response)); log('body: ' + body); }); ```` `
ergibt das: ` > 14:45:24.506 [info] javascript.0 script.js.Testscripte.Skript1: error: Error: read ECONNRESET
14:45:24.523 [info] javascript.0 script.js.Testscripte.Skript1: response: undefined
14:45:24.523 [info] javascript.0 script.js.Testscripte.Skript1: body: undefined `
habe in der ersten Zeile mal das "Komma" mit einem "Semikolon" getauscht?
-
Sorry war ein Schreibfehler.
Natürlich so.
Aber du bekommst keine Authfehler mehr?
var requestTest = require('request'); var options = { url: 'http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0', method: 'POST', formData: { 'username':'admin', 'password':'admin' } }; requestTest(options, function (error, response, body) { log('error: ' + error); log('response: ' + JSON.stringify(response)); log('body: ' + body); });
-
Sorry war ein Schreibfehler.
Natürlich so.
Aber du bekommst keine Authfehler mehr?
var requestTest = require('request'); var options = { url: 'http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0', method: 'POST', formData: { 'username':'admin', 'password':'admin' } }; requestTest(options, function (error, response, body) { log('error: ' + error); log('response: ' + JSON.stringify(response)); log('body: ' + body); }); ```` ` Nein.
-
Schaltet dein Teil jetzt mal?
-
Schaltet dein Teil jetzt mal? ` Ne tuts leider nicht…
-
mal was anderes. siehst du auf dem 192.168.2.37:8091, den du steuern möchtest, irgendwelche logs?
-
mal was anderes. siehst du auf dem 192.168.2.37:8091, den du steuern möchtest, irgendwelche logs? ` Logs in dem Sinne sind da nicht zu holen.
ABER, ich habe jetzt was gefunden was auch klappt.
var request = require('request'), username = "admin", password = "admin", url = 'http://192.168.2.37:8091/SetState.pl?R16=0&RT16=0', auth = "Basic " + new Buffer(username + ":" + password).toString("base64"); request({ url : url, headers : {'Authorization' : auth} }, function (error, response, body) { log('error: ' + error); log('response: ' + JSON.stringify(response)); log('body: ' + body); } );
erzeugt dann dieses LOG und schaltet auch das Relais im Controler:
08:23:02.308 [info] javascript.0 script.js.Testscripte.Skript1: error: null 08:23:02.310 [info] javascript.0 script.js.Testscripte.Skript1: response: {"statusCode":200,"body":"0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0\n","headers":{"server":"PoolController V.1.6.8","connection":"close","content-type":"text/plain; charset=ISO-8859-1"},"request":{"uri":{"protocol":"http:","slashes":true,"auth":null,"host":"192.168.2.37:8091","port":"8091","hostname":"192.168.2.37","hash":null,"search":"?R16=0&RT16=0","query":"R16=0&RT16=0","pathname":"/SetState.pl","path":"/SetState.pl?R16=0&RT16=0","href":"http://192.168.2.37:8091/SetState.pl?R16=0&RT16=0"},"method":"GET","headers":{"Authorization":"Basic YWxxxx46xxxxaWxxxx=="}}} 08:23:02.310 [info] javascript.0 script.js.Testscripte.Skript1: body: 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
nochmal danke an alle die so geduldig waren.