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
-
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
-
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 });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden