NEWS

Gelöst: Verwendung Dynamischer Namen im Basic Image


  • Hallo ich habe folgende Herausforderung: Die RING an meinem Ferienhaus liefert mir Snapshots, die sehen vom Namen her etwa so aus: "snapshot53727335_1604943864756.jpg". Ich möchte diese Bilder gerne automatisch sobald ein neues Bild gesendet wird in einem Widget Basic Image darstellen. Das einzige beständige an dem Dateinamen ist das "snapshot" am Anfang.
    Der Speicherort sieht so aus: C:\iobroker\SmartHome\iobroker-data\files\ring.0\doorbell_53727335
    Wie kann ich das lösen?
    Michael

    EDIT: Nach langen suchen habe ich hier im Forum einen Ansatz gefunden. Ich habe zwei kleine Scripte, das erste schaut sich einen Vorgegebenen Ordner an und sucht die zuletzt gespeicherte Datei.
    Der Dateiname wird dann in einen Datenpunkt geschrieben, den sich das zweite Script abholt und diese Datei dann in einen VIS Ordner schreibt, damit ich das Bild dann auch in der View sehen kann.
    Script 1:

    /*****Letztes Kamerabild Giethoorn**************************************
    **    November 2020
    **    Outlook, Kamera
    **    
    **    Ermittelt das letzte gespeicherte Bild
    **    geändert:11.11.20
    ************************************************************/
    
    var path = require('path');
    var fs = require('fs');
    var request = require('request');
    
    createState('Giethoorn.CAM.Steg.LetztesBild');
     schedule("*/1 * * * *", function () {
    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('/Ferienhaus/Steg', function (err, recent) {
    	if (err) console.error(err);
    	console.log(recent);
        setState('Giethoorn.CAM.Steg.LetztesBild', recent);
    });
    });
    

    Script 2:

    /*****Kamera Giethoorn**************************************
    **    Oktober 2020
    **    Outlook, Kamera
    **    
    **    Stellt die Snaps der NL Kameras für VIS zur Verfügung
    **    geändert:23.10.20
    ************************************************************/
    var request = require('request');
    var fs = require('fs');
    schedule("*/1 * * * *", function () {
        var dummy =getState('javascript.3.Giethoorn.CAM.Steg.LetztesBild').val;
        console.log (dummy);
    //const body = fs.readFileSync('/Ferienhaus/Eingang/01Eingang.jpg');
    //writeFile("vis.0", "/NL/01Eingang.jpg", body);
    const body1 = fs.readFileSync('/Ferienhaus/Steg/'+dummy);
    writeFile("vis.0", "/NL/01Steg.jpg", body1);
    });
    

    Sorry die Scripte sind noch in der Erprobung, daher nicht komplett zu Ende gedacht. Aber klappt soweit.
    Michael


  • @michihorn Sobald ein neues Bild generiert wird, kannst du das neue Bild kopieren auf den Namen snapshot.jpg.
    Prüfen auf Änderung vom Bildnamen und dann KOPIE ausführen.

    /vis.0/HOME/BILD_TUER.jpg (Wichtig Muss im vis.0-Verzeichnis sein!!!)

    e6fabca6-779b-442a-9514-660eb2222968-image.png


  • @MCU Guten Morgen, die Umbenennung des Bildes oder kopieren und speichern soll automatisch passieren, also per Script

Suggested Topics

1.8k
Online

36.9k
Users

42.6k
Topics

590.2k
Posts