NEWS
[gelöst] http / require request / set Befehle? Wer kanns mir erklären? Thema BWM / Kamera
-
Hallo zusammen,
ich weiß, dass es von der Zielsetzung her ähnliche Themen gibt, die haben mir jedoch nicht weitergeholfen.
Hintergrund meiner Frage:
ich habe eine Instar 6001 HD Cam. Bislang habe ich diese als BWM genutzt. Nun ist es leider so, dass die Cam auch auslöst, wenn im Dunkeln ein Auto mit eingeschaltetem Licht vorbeifährt und sich entsprechend kurz die Lichtverhältnisse im Zimmer ändern. Ich bekomme also ständig Fehlalarme.
Ich wollte ohnehin einen Homematic Präsenzmelder nutzen.
Also soll dieser nun als Auslöser dienen. Ich habe, die Doku ist da ja sehr gut, auf der Instar Page einiges an Befehlen gefunden. Unter anderem auch, dass man wohl, obwohl sie kienen physischebn i/o hat, diesen mit geänderten Werten ansprechen kann und künstlich einen Alarm auslösen kann. Also genau das, was ich brauche –> BWM merkt Bewegung und triggert die Kamera, die dann eben tut, was sie so tut.
Leider verstehe ich nicht, wie ich der Kamera nun die http Befehle übergebe (bin absolut kein ITler).
Ich habe auch versucht zu verstehen, was "request" und "request.get" tun - ich checks aber nicht.
Ich habe mal was zusammengetippert. Da ich aber request und get eben nicht verstehe, wäre es reines Raten - ich hasse Raten ohne Verständnis.
// Trigger on({id:motion, val: true}, camAlarm); // Function function camAlarm(){ request.get('http://xyz:abc@192.168.xxx.yy/cgi-bin/hi3510/param.cgi?cmd=setioattr&-io_enable=1&-io_flag=0'); <--- das soll den i/o Alarm auslösen }
Funktioniert das so? Was muss ich ändern bzw was muss ich erstmal grundsätzlich verstehen?
-
Könnte so funktionieren, sehe auf den ersten Blick keinen Fehler. Tut die Cam denn was sie soll oder hast du es noch nicht getestet?
Alternativ könntest du den Aufruf folgendermaßen schreiben (der https://github.com/request/request entnommen):
request('http://xyz:abc@192.168.xxx.yy/cgi-bin/hi3510/param.cgi?cmd=setioattr&-io_enable=1&-io_flag=0', function (error, response, body) { console.log('error:', error); // Print the error if one occurred console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received console.log('body:', body); // Print the HTML for the Google homepage. });
Dann erhältst du zumindest mal eine Rückmeldung, wie die Anfrage von der Kamera angenommen wurde (oder eben nicht).
Was sagt denn deine Doku über die Befehlsübergabe? Muss es HTTP-GET sein, oder möglicherweise doch POST/PUT? Ist ein vorheriger Login/Cookies nötig?
> Ich habe auch versucht zu verstehen, was "request" und "request.get" tun - ich checks aber nicht.
Kurz: "request" setzt einen HTTP-Request zur angegebenen URL ab und gibt die Antwort zurück (quasi wie im Browser, nur nicht grafisch aufbereitet). Den Request kannst du weiter konfigurieren, um Formulardaten zu übergeben, etc… -
Hi Calzone,
danke für deine Rückmeldung.
Die Instar Doku gibt mir nach meiner Sichtung nur die generellen CGI Befehle.
Ob nun get, post oder put kann ich nicht entnehmen.
Also verstehe ich es richtig (auch wenn es mir anti-intuitiv erscheint): mit "get" kann man nicht nur holen sondern eben auch "setzen"?
Dann werde ich es dahiem mal ausprobieren. Danke
Nachtrag:
mal schnell via iobroker.pro getestet mit nem testtrigger. Funktioniert so. Topic gelöst, danke
-
mit "get" kann man nicht nur holen sondern eben auch "setzen"? `
Vorweg: in HTTP gibts verschiedene Request-Modi und es ist abhängig von der Server-Implementierung, wie die unterstützt werden.GET ist der Standard-Modus für HTTP-Requests und heißt erst mal nur: "Ich will diese Webseite sehen". Parameter, die zur Abarbeitung auf dem Server ausgewertet werden können, werden hier im Querystring (hinter dem ? in der Adresse) übergeben. Was der Server zur Bearbeitung der Anfrage macht, ist erst mal offen und vom HTTP-Modus unabhängig. In deinem Fall stellt er Einstellungen auf der Kamera um, in Abhängigkeit vom Querystring.
Ist üblicherweise für alle beteiligten die einfachste Methode.
POST wird üblicherweise zur Übermittlung von Formularen verwendet. Hierbei werden die zu übermittelnden Daten an die Anfrage angehängt.
PUT gibts auch noch (wird aber eher selten verwendet) und hat in der Regel zum Ziel, eine Ressource auf dem Server zu überschreiben.