NEWS
Snapshot der Kamera wenn es klingelt?
-
Hey,
ich habe mehrere IP-Kameras im Einsatz, an der Haustür ist eine Ctronics Security PoE-Sicherheits-Dome-IP-Kamera 2 installiert. Alle Kameras sind in der Surveillance Station der Synology eingebunden. In der Surveillance Station kann ich über ein Foto-Button ein Snapshot erstellen. Dieser Snapshot landet dann im Surveillance Verzeichnis der Synology. An der Hausklingel habe ich ein HM-Sen-DB-PCB Klingelsensor angeschlossen. Push-Nachrichten über Pushover bekomme ich schon wenn es klingelt, jetzt möchte ich noch ein Foto der Kamera bekommen, wenn jemand geklingelt hat. Kann mir vielleicht jemand Tipps zur Umsetzung geben?Vielen Dank
-
Ich speichere einen snapshot direkt mit dem exec block ab und verschicke danach das Bild per telegram.
Ist eigentlich recht simple. So lautet der wget Befehl bei mir.
wget --no-check-certificate --output-document /tmp/dafangEingang.jpg https://root:passwort@192.168.178.62/cgi-bin/currentpic.cgi
-
const fs = require('fs'); let lastMessage= Date.now(); const URL_vorne = 'http://192.168.178.22/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=kiqjhwoq&user=xxxxx&password=xxxxxx'; createState('Sonderfunktionen.KlingelBild1', "", { read: true, type: 'string', write: true, name: "Klingelbild1", role: "value" }); createState('Sonderfunktionen.KlingelBild2', "", { read: true, type: 'string', write: true, name: "Klingelbild3", role: "value" }); createState('Sonderfunktionen.KlingelBild3', "", { read: true, type: 'string', write: true, name: "Klingelbild3", role: "value" }); createState('Sonderfunktionen.Klingeldialog', false, { read: true, type: 'boolean', write: true, name: "Klingeldialog", role: "switch" }); saveImage() var KlingelBilder = ["","",""]; function saveImage() { var time = new Date(); // Bildnamen erzeugen var Name = 'Eing_'+time.getFullYear()+time.getMonth()+time.getDate()+'_'+time.getHours()+time.getMinutes()+time.getSeconds()+'.jpg'; request.get({url: URL_vorne, encoding: 'binary'}, function (err, response, body) { if(err) { log('Beim holen des Bildes ist ein Fehler aufgetreten!'); } else { fs.writeFile('/tmp/tmp.jpg', body, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild /tmp/tmp.jpg Fehler:' + err, 'warn'); } else { var data = fs.readFileSync('/tmp/tmp.jpg'); writeFile('vis.0', 'KameraBilder/' + Name, data, function (error) { if(error) { log('Fehler beim Speichern von Bild KameraBilder/' + Name +' Fehler:' + err, 'warn'); } else { // Bilder durchrotieren. An position 0 steht immer das letzte Bild log('Bild wurde als KameraBilder/' + Name +' gespeichert'); KlingelBilder[2] = KlingelBilder[1]; KlingelBilder[1] = KlingelBilder[0]; KlingelBilder[0] = '/vis.0/KameraBilder/' + Name; setState('javascript.0.Sonderfunktionen.KlingelBild1', KlingelBilder[0]); setState('javascript.0.Sonderfunktionen.KlingelBild2', KlingelBilder[1]); setState('javascript.0.Sonderfunktionen.KlingelBild3', KlingelBilder[2]); openDialog() //send Bild to Telegramm sendTo('telegram.0', {text: 'opt/iobroker/iobroker-data/files/vis.0/KameraBilder/' + Name, caption: 'Es hat Geklingelt'}); } }); } }); } }); } function ring(){ if((Date.now() - lastMessage) >= 10000 ) saveImage(); lastMessage= Date.now(); } //Klingel subscribe({ id: 'hm-rpc.2.001FDA499xxxxx.1.PRESS_LONG' }, function (obj) { if(obj.newState.val) ring(); }); subscribe({ id: 'hm-rpc.2.001FDA499xxxx.1.PRESS_SHORT' }, function (obj) { if(obj.newState.val)ring(); });
so sieht meine Lösung aus, vorteil: die Bilder kann man dann auch in vis darstellen
-
Geht auch kürzer mit Bild auf Telegram
Kamera ist mit Motion Eye eingebunden. http.... ist der Snapshot Pfad.var timeout, timeout1, timeout2; var fs = require('fs'); on({id: 'hm-rpc.1.XXXXX.1.PRESS_SHORT', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; timeout = setTimeout(function () { exec('wget --output-document /opt/iobroker/iobroker-data/tmp/alarm.jpg \'http://192.XXX.XXX.XXX:XXXX/picture/1/current/\''); }, 800); timeout1 = setTimeout(function () { const bild = fs.readFileSync('/opt/iobroker/iobroker-data/tmp/alarm.jpg'); writeFile('vis.0','alarm.jpg', bild); }, 2000); timeout2 = setTimeout(function () { sendTo("telegram.1", "send", { text: '/opt/iobroker/iobroker-data/files/vis.0/alarm.jpg' }); }, 5000); // ab hier so oft wiederholen wie man es möchte });