// 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://x.x.10.99:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxx&pwd=xxx'; // Pfad zum Kamerabild (Im Beispiel eine Foscam)
var trigger_auto = 'Datenpunkte.0.QigaQuad.Klingel'/*Klingel*/; // Datenpunkt zur autmatischen Auslösung (Status des Bewegungsmelders, Fenster-/ Türkontakt oder der Türklingel)
var trigger_manu = 'javascript.0.notify.telegram.cam.trigger_manu'; // Datenpunkt zur manuellen Auslösung (wird bei Bedarf automatisch angelegt)
var trigger_more_img = 'javascript.0.notify.telegram.cam.trigger_more_img'; // Datenpunkt zur Abfrage weiterer Bilder (wird bei Bedarf automatisch angelegt)
var disable = 'javascript.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 = '0_userdata.0'; // 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 fs = require('fs');
var timer;
// Funktionen
// -------------------------------------------
// Funktion Bilder versenden
function sendImage (pfad) {
setTimeout(function() {
sendTo('telegram.0', {
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(cam_img, { responseType: 'arraybuffer' }, async (error, response) => {
fs.writeFile(img_path + 'cam1_1.jpg', response.data, function(err) {
if (error) {
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(cam_img, { responseType: 'arraybuffer' }, async (error, response) => {
fs.writeFile(img_path + 'cam1_1.jpg', response.data, function(err) {
if (error) {
log('Fehler beim Speichern von Bild 2: ' + err, 'warn');
} else {
log('Bild 2 gespeichert.');
}
});
});
}, interval);
timer = setTimeout(function () {
httpGet(cam_img, { responseType: 'arraybuffer' }, async (error, response) => {
fs.writeFile(img_path + 'cam1_1.jpg', response.data, function(err) {
if (error) {
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);
}
});