NEWS
JPG anzeigen, Dateiname als Quelle dynamisch aus Adpater/ Objekte
-
Hallo zusammen,
ich habe hier schon gesucht, bin aber nicht fündig geworden. Ich benutze den Motion Adapter, um aus dem Stream einer IP Kamera bei Bewegung JPGs zu speichern. Der Name des zuletzt gespeicherten Bildes steht im Adapter unter Objekte:
motion.0.thread0.events.lastpicture "dateiname.jpg"
Um das jeweils letzte Bild per Telegram zu verschicken benutze ich folgendes Skript:
on("motion.0.thread0.events.lastpicture", function(obj) { sendTo('telegram.0', "/mnt/hgfs/nuc_HDD/ipcam/" + getState("motion.0.thread0.events.lastpicture").val); });
Jetzt würde ich gerne dieses Bild, das verschickt wird, auch parallel als letztes gemachtes Bild in vis anzeigen, mir fehlt jedoch die Fantasie, welches Widget da gehen würde, in dem man die Bildquelle dynamisch eintragen kann.
Kann mir jemand einen Tip geben?
Danke vorab!
-
speicher das Bild doch immer gleich ab, dann brauchst du nichts dynamisches
var request = require('request'); var fs = require('fs'); function sendImage() { request.get({url: 'http://192.168.xx.xx/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=Passwort,', encoding: 'binary'}, function (err, response, body) { fs.writeFile("/tmp/snap.jpg", body, 'binary', function(err) { if (err) { console.error(err); } else { console.log('Snapshot sent'); //sendTo('telegram.0', '/tmp/snap.jpg'); sendTo('telegram.0', {text: '/tmp/snap.jpg', caption: 'Detection'}); } }); }); }
-
Das Bild ist schon lokal abgespeichert, das macht der Motion-Adapter ja, in meinem Fall unter
/mnt/hgfs/nuc_HDD/ipcam/
der Bild-Name wird von Motion zeitabhängig erzeugt, so dass kein Bild überschrieben wird, z.B.
220-07_2018-01-26_08-13-06.jpg
also ist der Pfad zu diesem Bild /mnt/hgfs/nuc_HDD/ipcam/220-07_2018-01-26_08-13-06.jpg
In den Objekten vom Motion Adapter steht der Name des letzten erzeugten Bildes:
motion.0.thread0.events.lastpicture 220-07_2018-01-26_08-13-06.jpg
Jetzt geht es im Prinzip darum, dieses Bild in vis anzuzeigen, wobei die Quelle zwar einen festen Pfad, aber einen dynamischen Dateiname hat. Quelle ist also wie bei Telegram "/mnt/hgfs/nuc_HDD/ipcam/" + getState("motion.0.thread0.events.lastpicture").val
Das Anzeigen des jeweils letzten gespeicherten Bildes in vis ist also mein Problem, weil sich hier der Dateiname von Bild zu Bild ändert. Workaround könnte sein, das jeweils letzte Bild in ein Bild mit festem Dateiname umzukopieren, das ja überschrieben werden darf. Kannst du da vielleicht helfen?
-
ich glaube ungefähr so:
var fs = require('fs'); var FileIn = fs.createReadStream('/pfad/zum/file'); var FileOut = fs.createWriteStream('/pfad/zum/ziel'); FileIn.pipe(FileOut);
Oder
var fs = require('fs'); fs.copyFile('FileIn.jpg', 'FileOut.jpg', (err) => { if (err) throw err; console.log('FileIn.jpg kopiert nach FileOut.jpg'); });
Aber wie im obigen Post beschrieben, du kannst doch auch aktuell zum Alarm ein Bild von der Kamera (wie ich siehe oben) abrufen. Es mus ja nicht das sein, das die Motion Detection auswirft?
Bei Motion Detection –---> Bild holen