NEWS
Befehl and Kamera absenden
-
Kann mir jemand sagen wie basierend auf einem Status eines I/Os einen Befehl wie diesen
http://<user>:<pwd>@192.168.1.23/cgi-bin/configManager.cgi?action=setConfig&MotionDetect[0].Enable=true</pwd></user>
absenden kann?
Ich benutzte die Vis-App - evtl hat das Bedeutung (man hat mir gesagt, dass dies ein Cross Site Scripting wäre und einige Browser dieses blockieren).
Hintergrund ist, dass ich, basierend auf meinem Alarmanlagenstatus (Scharf/Unscharf), an meiner Überwachungskamera die Bewegungserkennung einschalten möchte.
Vielen Dank
/RaBu
-
Hallo, versuche es so:
function setMotionDetection(status) { var url_pass = 'user:password', // Bitte anpassen (ohne Häkchen) url_ip = '192.168.1.23', // IP der Webcam url_cmd = '/cgi-bin/configManager.cgi?action=setConfig&MotionDetect[0].Enable=', url = 'http://' + url_pass + '@' + url_ip + url_cmd, request = require('request'); request(url+status, function (err, state, body){ if (body) log('Bewegungserkennung auf <'+ status + '> geschaltet'); else log('Fehler bei Steuerung der Bewegungserkennung', 'warn'); }); } var idAlarmanlage = "javascript.0......" // ID des Datenpuktes Alarmanlage eintragen (sollte boolean typ sein) on(idAlarmanlage, function (data) { var status = (data.state.val || data.state.val === 'scharf' || data.state.val == 1 || data.state.val === '1') ? true : false; log('Alarmanlage sendet Befehl <' + status + '> zur Steuerung der Bewegungserkennung der Kamera'); setMotionDetection(status); });
Kann sein, dass man den String url_cmd wegen der eckigen Klammer http://meyerweb.com/eric/tools/dencoder/ muss.
Dann Zeile fünf so:
url_cmd = '%2Fcgi-bin%2FconfigManager.cgi%3Faction%3DsetConfig%26MotionDetect%5B0%5D.Enable%3D',
Gruß
Pix
-
Hallo Pix,
super, vielen Dank.
Noch bin ich nicht ganz am Ziel - es sieht so aus, als ob der Status nun richtig in Abhängigkeit vom Datenpunkt "hm-rega.0.1802.Active" gesendet wird, allerdings wird im Log nicht der Status nicht richtig gezeigt,.. was ist hier falsch?
Die Variante mit
//var idAlarmanlage = "javascript.0.hm-rega.0.1802.Active" // ID des Datenpuktes Alarmanlage eintragen (sollte boolean typ sein)
funktioniert leider nicht.
function setMotionDetection(status) { var url_pass = 'user:pwd', // Bitte anpassen url_ip = '192.168.1.23', // IP der Webcam url_cmd = '/cgi-bin/configManager.cgi?action=setConfig&MotionDetect[0].Enable=', url = 'http://' + url_pass + '@' + url_ip + url_cmd, request = require('request'); request(url+status, function (err, state, body){ if (body) log('Bewegungserkennung auf <'+ status + '> geschaltet'); else log('Fehler bei Steuerung der Bewegungserkennung', 'warn'); }); } var idAlarmanlage = "hm-rega.0.1802.Active" // ID des Datenpuktes Alarmanlage eintragen (sollte boolean typ sein) on(idAlarmanlage, function (data) { var status = (data.state.val || data.state.val === 'scharf' || data.state.val == 1 || data.state.val === '1') ? true : false; log('Alarmanlage sendet Befehl <' + status + '> zur Steuerung der Bewegungserkennung der Kamera'); setMotionDetection(status); });
Nochmals herzlichen Dank!
Gruß
RaBu
-
Hallo Pix,
hier noch das Log dazu:
16:43:43.101 [info] javascript.0 Stop script script.js.SetMotionDetect 16:43:44.846 [info] javascript.0 Start javascript script.js.SetMotionDetect 16:43:44.848 [info] javascript.0 script.js.SetMotionDetect: subscribe: {"pattern":{"id":"hm-rega.0.1802.Active","change":"ne"},"name":"script.js.SetMotionDetect"} 16:43:44.848 [info] javascript.0 script.js.SetMotionDetect: registered 1 subscription and 0 schedules 16:44:29.068 [info] javascript.0 script.js.SetMotionDetect: Alarmanlage sendet Befehl zur Steuerung der Bewegungserkennung der Kamera 16:44:29.351 [info] javascript.0 script.js.SetMotionDetect: Bewegungserkennung auf geschaltet 16:44:38.487 [info] javascript.0 script.js.SetMotionDetect: Alarmanlage sendet Befehl zur Steuerung der Bewegungserkennung der Kamera 16:44:39.073 [info] javascript.0 script.js.SetMotionDetect: Bewegungserkennung auf geschaltet
Wie DU siehst wird der Status nicht angezeigt.
Gruß
/RaBu
-
Hallo Pix,
super, vielen Dank.
Noch bin ich nicht ganz am Ziel - es sieht so aus, als ob der Status nun richtig in Abhängigkeit vom Datenpunkt "hm-rega.0.1802.Active" gesendet wird, allerdings wird im Log nicht der Status nicht richtig gezeigt,.. was ist hier falsch?
Die Variante mit
//var idAlarmanlage = "javascript.0.hm-rega.0.1802.Active" // ID des Datenpuktes Alarmanlage eintragen (sollte boolean typ sein)
funktioniert leider nicht. `
Das wär auch doppelt. Ich wusste nicht, dass die Alarmanlage in HM liegt. ist das eine Homematic Boolean Variable? Oder Werteliste?So wie du es weiter unten im Code benutzt hast ist es richtig. Allerdings fehl da noch das Semikolon am Ende der Zeile:
var idAlarmanlage = "hm-rega.0.1802.Active";
Ändere mal die Subscription am Ende um noch eine weitere Information zu erhalten:````
on(idAlarmanlage, function (data) {
var status = (data.state.val || data.state.val === 'scharf' || data.state.val == 1 || data.state.val === '1') ? true : false;
log('Alarmanlage sendet Befehl <' + status + '> vom Typ ' + typeof data.state.val + ' zur Steuerung der Bewegungserkennung der Kamera');
setMotionDetection(status);
});Gruß Pix
-
Es werden auch die kleiner / grösser Zeichen um den Status nicht angezeigt.
-
Pix,
es handelt sich bei dem Datenpunkt (hm-rega.0.1802.Active) der ein Script in der CCU2 aktiviert/deaktiviert. Ich habe in vis einen Button mit dem ich dann das Script "Anwesenheitssimulation" aktiviere oder deaktiviere. Im Endausbau hängt dieses dann auch am Alarmanlagenstatus.
Ich habe jetzt das ";" ergänzt und die Subscription geändert, wie Du gesagt hast, allerdings ändert das nichts an der Ausgabe.
Der Hinweis von ykundig hat dann geholfen…
Die Zeile 7 hat jetzt nach dem "<" und vor dem ">" ein Leerzeichen.
if (body) log('Bewegungserkennung auf < ' + status + ' > geschaltet');
Damit wird im log der Status richtig angezeigt:
17:59:51.366 [info] javascript.0 script.js.SetMotionDetect: Bewegungserkennung auf < true > geschaltet 17:59:53.093 [info] javascript.0 script.js.SetMotionDetect: Alarmanlage sendet Befehl vom Typ boolean zur Steuerung der Bewegungserkennung der Kamera 17:59:53.390 [info] javascript.0 script.js.SetMotionDetect: Bewegungserkennung auf < false > geschaltet
Ich weiss nicht weshalb, aber so funktioniert es, evtl. ein Problem mit dem Parser?
Vielen Dank an Euch Beide!
Schönen Gruß
/RaBu