NEWS
Skript läuft seit heute nicht mehr
-
-
@arteck Vielen Dank für den Link.
Ich habe jetzt die mir offensichtlichen Zeilen 63/64, 79/80 und 90/91 entsprechend dem Link umgeändert. Aber trotzdem meckert er noch, dass ich auf httpGet umstellen soll. Wo habe ich da noch etwas übersehen?// JavaScript zur Verwendung in ioBroker // // Das Script speichert bei Auslösung (z.B. durch einen Bewegungsmelder) drei Bilder einer Überwachungskamera in frei definierbaren Zeitabständen und versendet das erste Bild per telegram. // Über telegram können dann bei Bedarf auch die weiteren zwei Bilder abgefragt werden. Natürlich ist auch eine manuelle Auslösung (ohne Bewegungsmelder) per telegram möglich. // Der Automatische Versand der Bilder kann über telegram auch aktiviert/ deaktiviert werden. // // Mehr Infos zum Script und dessen Einrichtung hier: // Hier können Einstellungen vorgenommen werden: // Variablen var cam_img = 'http://xxxxxxxx/snap.jpg'; // Pfad zum Kamerabild (Im Beispiel eine Foscam) var trigger_auto = 'hm-rpc.1.MEQ1797611.1.MOTION'; // Datenpunkt zur autmatischen Auslösung (Status des Bewegungsmelders, Fenster-/ Türkontakt oder der Türklingel) var trigger_manu = '0_userdata.0.notify.telegram.cam.trigger_manu'; // Datenpunkt zur manuellen Auslösung (wird bei Bedarf automatisch angelegt) var trigger_more_img = '0_userdata.0.notify.telegram.cam.trigger_more_img'; // Datenpunkt zur Abfrage weiterer Bilder (wird bei Bedarf automatisch angelegt) var disable = '0_userdata.0.notify.telegram.cam.disable'; // Aktivierung/Deaktivierung des Versands per telegram (wird bei Bedarf automatisch angelegt) var interval = '3000'; // Verzögerung der weiteren Aufnahmen in Millisekunden var img_path = '/opt/iobroker/temp/cam/'; // Pfad zum lokalen Speicherort der aufgenommenen Bilder. Bilder werden bei jeder Auslösung überschrieben. Pfad muss schon vorhanden sein! // ------------------------------------------- // Ab hier braucht in der Regel nichts mehr geändert zu werden. Also Finger weg wenn du nicht weißt was du tust. :) // ------------------------------------------- // Datenpunkte anlegen (Kann unter Umständen auskommentiert werden, wenn die Datenpunkte manuell angelegt wurden.) //createState( trigger_auto, false, {name: 'Datenpunkt zur autmatischen Auslösung'}); //createState( trigger_manu, false, {name: 'Datenpunkt zur manuellen Auslösung'}); //createState( trigger_more_img, false, {name: 'Datenpunkt zur Abfrage weiterer Bilder'}); //createState( disable, false, {name: 'Aktivierung/Deaktivierung des Versands per telegram'}); // Variablendeklaration und Initialisierung bei Scriptstart var stateTrigger_auto = getState(trigger_auto).val; var stateTrigger_manu = getState(trigger_manu).val; var stateTrigger_more_img = getState(trigger_more_img).val; var stateDisable = getState(disable).val; var request = require('request'); var fs = require('fs'); var timer; // Funktionen // ------------------------------------------- // Funktion Bilder versenden function sendImage (pfad) { setTimeout(function() { sendTo('telegram.1', { text: pfad, reply_markup: { keyboard: [ ['Mehr Bilder', 'Danke'] ], resize_keyboard: true, one_time_keyboard: true } }); log('Webcam Bild per telegram verschickt.'); }, 2000); } // Funktion Bilder speichern function saveImage() { httpGet({url: cam_img, encoding: 'binary'}, function (err, response) { fs.writeFile(img_path + 'cam1_1.jpg', response.data, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 1: ' + err, 'warn'); } else { log('Bild 1 gespeichert.'); sendImage(img_path + 'cam1_1.jpg'); } }); }); if (timer) { clearTimeout(timer); timer = null; } timer = setTimeout(function () { httpGet({url: cam_img, encoding: 'binary'}, function (err, response) { fs.writeFile(img_path + 'cam1_2.jpg', response.data, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 2: ' + err, 'warn'); } else { log('Bild 2 gespeichert.'); } }); }); }, interval); timer = setTimeout(function () { httpGet({url: cam_img, encoding: 'binary'}, function (err, response) { fs.writeFile(img_path + 'cam1_3.jpg', response.data, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 3: ' + err, 'warn'); } else { log('Bild 3 gespeichert.'); } }); }); }, 2 * interval); } // Trigger für die verschiedenen Aktionen // ------------------------------------------- // trigger_auto on(trigger_auto, function(dp) { stateTrigger_auto = dp.newState.val; stateDisable = getState(disable).val; if (stateTrigger_auto === true && stateDisable === false) { saveImage(); // setState(trigger_auto, false); // Option zum Zurücksetzen des Triggers. Standardmäßig auskommentiert, da sich der Bewegungsmelder automatisch zurück setzt. Bei Bedarf "//" am Zeilenafang entfernen. } }); // trigger_more_img on(trigger_more_img, function(dp) { stateTrigger_more_img = dp.newState.val; if (stateTrigger_more_img === true) { sendImage(img_path + 'cam1_2.jpg'); sendImage(img_path + 'cam1_3.jpg'); setState(trigger_more_img, false); } }); // trigger_manu on(trigger_manu, function(dp) { stateTrigger_manu = dp.newState.val; if (stateTrigger_manu === true) { saveImage(); setState(trigger_manu, false); } });
-
@gezi70 sagte in Skript läuft seit heute nicht mehr:
var request = require('request');
Die Zeile löst das aus.
-
-
@haus-automatisierung kannst du mir bitte einen Tip geben wie ich das noch ändern muss? Ich sitze hier tatsächlich wie der Ochse vorm neuen Tor...
Wenn ich mir dieses (schon geänderte Skript aus dem oben erwähnten Beitrag ansehe, kommt in Zeile 27 / 28 auch dieses var request vor... -
@gezi70 Die Zeile einfach komplett entfernen
-
@haus-automatisierung ich habe diese Zeile jetzt auskommentiert und die Meldung taucht zumindest nicht mehr auf.
Aber jetzt löst gar nichts mehr aus. Bei der jetzt fehlerhaften Version des Ursprungs Skriptes bekam ich zumindest noch ein Bild bei der Auslösung durch den BWM (Homematic Aktor). Allerdings konnte ich keine mehr anfordern. Jetzt wird nichts mehr ausgelöst.javascript.0 11:35:06.090 error at saveImage (script.js.common.Kamera.Kameraskript_httpGet:64:5) javascript.0 11:35:06.090 error at Object.<anonymous> (script.js.common.Kamera.Kameraskript_httpGet:111:9) javascript.0 11:35:30.461 error at saveImage (script.js.common.Kamera.Kameraskript_httpGet:64:5) javascript.0 11:35:30.461 error at Object.<anonymous> (script.js.common.Kamera.Kameraskript_httpGet:111:9)
Das umgeänderte Skript sieht jetzt folgendermaßen aus:
// JavaScript zur Verwendung in ioBroker // // Das Script speichert bei Auslösung (z.B. durch einen Bewegungsmelder) drei Bilder einer Überwachungskamera in frei definierbaren Zeitabständen und versendet das erste Bild per telegram. // Über telegram können dann bei Bedarf auch die weiteren zwei Bilder abgefragt werden. Natürlich ist auch eine manuelle Auslösung (ohne Bewegungsmelder) per telegram möglich. // Der Automatische Versand der Bilder kann über telegram auch aktiviert/ deaktiviert werden. // // Mehr Infos zum Script und dessen Einrichtung hier: // Hier können Einstellungen vorgenommen werden: // Variablen var cam_img = 'http://xxxxxxxxxxx/snap.jpg'; // Pfad zum Kamerabild (Im Beispiel eine Foscam) var trigger_auto = 'hm-rpc.1.MEQ1797611.1.MOTION'; // Datenpunkt zur autmatischen Auslösung (Status des Bewegungsmelders, Fenster-/ Türkontakt oder der Türklingel) var trigger_manu = '0_userdata.0.notify.telegram.cam.trigger_manu'; // Datenpunkt zur manuellen Auslösung (wird bei Bedarf automatisch angelegt) var trigger_more_img = '0_userdata.0.notify.telegram.cam.trigger_more_img'; // Datenpunkt zur Abfrage weiterer Bilder (wird bei Bedarf automatisch angelegt) var disable = '0_userdata.0.notify.telegram.cam.disable'; // Aktivierung/Deaktivierung des Versands per telegram (wird bei Bedarf automatisch angelegt) var interval = '3000'; // Verzögerung der weiteren Aufnahmen in Millisekunden var img_path = '/opt/iobroker/temp/cam/'; // Pfad zum lokalen Speicherort der aufgenommenen Bilder. Bilder werden bei jeder Auslösung überschrieben. Pfad muss schon vorhanden sein! // ------------------------------------------- // Ab hier braucht in der Regel nichts mehr geändert zu werden. Also Finger weg wenn du nicht weißt was du tust. :) // ------------------------------------------- // Datenpunkte anlegen (Kann unter Umständen auskommentiert werden, wenn die Datenpunkte manuell angelegt wurden.) //createState( trigger_auto, false, {name: 'Datenpunkt zur autmatischen Auslösung'}); //createState( trigger_manu, false, {name: 'Datenpunkt zur manuellen Auslösung'}); //createState( trigger_more_img, false, {name: 'Datenpunkt zur Abfrage weiterer Bilder'}); //createState( disable, false, {name: 'Aktivierung/Deaktivierung des Versands per telegram'}); // Variablendeklaration und Initialisierung bei Scriptstart var stateTrigger_auto = getState(trigger_auto).val; var stateTrigger_manu = getState(trigger_manu).val; var stateTrigger_more_img = getState(trigger_more_img).val; var stateDisable = getState(disable).val; //var request = require('request'); var fs = require('fs'); var timer; // Funktionen // ------------------------------------------- // Funktion Bilder versenden function sendImage (pfad) { setTimeout(function() { sendTo('telegram.1', { text: pfad, reply_markup: { keyboard: [ ['Mehr Bilder', 'Danke'] ], resize_keyboard: true, one_time_keyboard: true } }); log('Webcam Bild per telegram verschickt.'); }, 2000); } // Funktion Bilder speichern function saveImage() { httpGet({url: cam_img, encoding: 'binary'}, function (err, response) { fs.writeFile(img_path + 'cam1_1.jpg', response.data, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 1: ' + err, 'warn'); } else { log('Bild 1 gespeichert.'); sendImage(img_path + 'cam1_1.jpg'); } }); }); if (timer) { clearTimeout(timer); timer = null; } timer = setTimeout(function () { httpGet({url: cam_img, encoding: 'binary'}, function (err, response) { fs.writeFile(img_path + 'cam1_2.jpg', response.data, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 2: ' + err, 'warn'); } else { log('Bild 2 gespeichert.'); } }); }); }, interval); timer = setTimeout(function () { httpGet({url: cam_img, encoding: 'binary'}, function (err, response) { fs.writeFile(img_path + 'cam1_3.jpg', response.data, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 3: ' + err, 'warn'); } else { log('Bild 3 gespeichert.'); } }); }); }, 2 * interval); } // Trigger für die verschiedenen Aktionen // ------------------------------------------- // trigger_auto on(trigger_auto, function(dp) { stateTrigger_auto = dp.newState.val; stateDisable = getState(disable).val; if (stateTrigger_auto === true && stateDisable === false) { saveImage(); // setState(trigger_auto, false); // Option zum Zurücksetzen des Triggers. Standardmäßig auskommentiert, da sich der Bewegungsmelder automatisch zurück setzt. Bei Bedarf "//" am Zeilenafang entfernen. } }); // trigger_more_img on(trigger_more_img, function(dp) { stateTrigger_more_img = dp.newState.val; if (stateTrigger_more_img === true) { sendImage(img_path + 'cam1_2.jpg'); sendImage(img_path + 'cam1_3.jpg'); setState(trigger_more_img, false); } }); // trigger_manu on(trigger_manu, function(dp) { stateTrigger_manu = dp.newState.val; if (stateTrigger_manu === true) { saveImage(); setState(trigger_manu, false); } });
-
@gezi70 sagte in Skript läuft seit heute nicht mehr:
httpGet({url: cam_img, encoding: 'binary'}, function (err, response) {
Ich hatte das restliche Script gar nicht angeschaut. Der Aufruf von httpGet ist falsch. Siehe Doku.
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httpget
httpGet(cam_img, { responseType: 'arraybuffer' }, async (err, response) => {
-
@haus-automatisierung ich habe das jetzt entsprechend geändert und es wird das erste Bild geschickt und wohl die beiden anderen auch gespeichert.
javascript.0 12:25:50.097 info script.js.common.Kamera.Kameraskript_httpGet: Bild 1 gespeichert. javascript.0 12:25:52.099 info script.js.common.Kamera.Kameraskript_httpGet: Webcam Bild per telegram verschickt. javascript.0 12:25:53.073 info script.js.common.Kamera.Kameraskript_httpGet: Bild 2 gespeichert. javascript.0 12:25:56.323 info script.js.common.Kamera.Kameraskript_httpGet: Bild 3 gespeichert.
Aber bei der Eingabe der Kommandos in Telegram werden diese nicht abgerufen und an mich geschickt. Muss ich da noch etwas umstellen?
-
@gezi70 Du rufst
sendImage
ja auch nur beim ersten Bild auf.Warum nutzt Du überhaupt JavaScript? Das geht doch mitterweile alles in Blockly...
-
@gezi70 sagte in Skript läuft seit heute nicht mehr:
Aber bei der Eingabe der Kommandos in Telegram werden diese nicht abgerufen und an mich geschickt.
Achso Du meinst die Tastatur die da angeboten wird? Die weiteren Bilder werden nach Script ja nur verschickt, wenn
0_userdata.0.notify.telegram.cam.trigger_more_img
auftrue
gesetzt wird.Wie auch immer das passieren soll mit der Tastatur. Da würde ich in Blockly mit dem "Frage-Block" arbeiten. Habe ich extra für solche Themen programmiert
-
@haus-automatisierung weil ich das Skript irgendwo hier gefunden habe und es funktionierte. Leider hab ich keine Ahnung wie ich das in Blockly umsetzen kann...
Die Bilder sind ja schon abgespeichert. Matthias, kannst du mir bitte einen Tipp geben, wie ich mittels Blockly diese aus dem Pfad abrufen kann? Ich meine nur den Befehl zum abrufen des Bildes. Mal sehen ob ich das in ein Blockly basteln kann... -
@gezi70 Sorry, bin gerade unterwegs und kann das nicht mal eben zeigen. Im ioBroker-Master-Kurs habe ich dazu viele Beispiele gezeigt.
Guck mal das an:
https://forum.iobroker.net/topic/74606/javascript-8-3-0-log-trigger-file-events-und-warnungen
https://forum.iobroker.net/topic/75178/test-adapter-telegram-3-4-1-blockly-bausteine-für-fragen
-
@haus-automatisierung das Skript läuft wieder. Irgendwie waren die dafür angelegten Datenpunkte auf true, hätten aber false sein müssen.