@stimpy23 HAllo Zusammen
ich habe mich mal mit dem Thema beschäftigt und eine Lösung gefunden mit der ich das letzte Snapshot anzeigen kann. Sollte Snapshot und Video im gleichen Ordner abgelegt sein, kann es vorkommen, dass das letzte gespeicherte File ein Video ist und dann nicht dargestellt wird. Mir war es eh nur wichtig das letzte Bild zu sehen.
Im RING Objekt Ordner stehen alle Snapshots. Der erste Script sucht die letzte angelegte Datei, dass zweite Script speichert diese Datei in einen separaten Ordner unter dem Namen 01Ring.jpg. Diese Datei kannst Du mit einem iFrame verknüpfen.
Anbei habe ich meine Script angehangen.
/*****Letztes Kamerabild Giethoorn RING**************************************
** November 2020
** RING, Kamera
**
** Ermittelt das letzte gespeicherte Bild von RING
** geändert:11.11.20
************************************************************/
var zähler = 0;
var old_recent;
var old_create;
var create;
var path = require('path');
var fs = require('fs');
var request = require('request');
schedule("*/1 * * * * *", function () {
old_recent = getState('Giethoorn.CAM.RING.LetztesBild').val;
old_create = getState('ring.0.doorbell_53727335.History.created_at').val;
create = getState('ring.0.doorbell_53727335.created_at').val;
log(old_create);
var getMostRecent = function (dir, cb) {
var dir = path.resolve(dir);
var files = fs.readdir(dir, function (err, files) {
var sorted = files.map(function (v) {
var filepath = path.resolve(dir, v);
return {
name: v,
time: fs.statSync(filepath).mtime.getTime()
};
})
.sort(function (a, b) { return b.time - a.time; })
.map(function (v) { return v.name; });
if (sorted.length > 0) {
cb(null, sorted[0]);
} else {
cb('Y U NO have files in this dir?');
}
})
}
getMostRecent('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_53727335/', function (err, recent) {
if (err) console.error(err);
console.log(recent);
setState('javascript.3.Giethoorn.CAM.RING.LetztesBild', recent);
setState('javascript.3.Giethoorn.CAM.RING.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
});
on({ time: { hour: 23, minute: 59 } }, function () {
log("*****Bewegungen gelöscht***** ");
setState('Giethoorn.CAM.RING.zähler', 0);
});
});
In diesem Script wird die letzte Datei unbenannt. Ich habe hier im Script noch zwei Kameras die aber beim nachbauen weg gelassen werden können.
/*****Kameras Giethoorn in VIS ablegen************************
** Oktober 2020
** Outlook, Kamera Reolink Argus2, Ring
**
** Stellt die Snaps der NL Kameras für VIS zur Verfügung
** geändert:23.10.20, 21.12.20
************************************************************/
var request = require('request');
var fs = require('fs');
schedule("* * * * * *", function () {
var steg = getState('javascript.3.Giethoorn.CAM.Steg.LetztesBild').val;
console.log("Steg: " + steg);
var eingang = getState('javascript.3.Giethoorn.CAM.Eingang.LetztesBild').val;
console.log("Eingang: " + eingang);
var ring = getState('javascript.3.Giethoorn.CAM.RING.LetztesBild').val;
console.log("RING: " + ring);
var waterkant = getState('javascript.3.Giethoorn.CAM.Waterkant.LetztesBild').val;
console.log("Waterkant: " + waterkant);
const body = fs.readFileSync('/Ferienhaus/Eingang/' + eingang);
writeFile("vis.0", "/NL/01Eingang.jpg", body);
const body1 = fs.readFileSync('/Ferienhaus/Steg/' + steg);
writeFile("vis.0", "/NL/01Steg.jpg", body1);
**const body2 = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_53727335/' + ring);
writeFile("vis.0", "/NL/01RING.jpg", body2);**
const body3 = fs.readFileSync('/Ferienhaus/Waterkant/' + waterkant);
writeFile("vis.0", "/NL/01Waterkant.jpg", body3);
});
Viel Erfolg beim Anpassen.
Michael