Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Gelöst: Neuste Datei (mp4) finden

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    224

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Gelöst: Neuste Datei (mp4) finden

Gelöst: Neuste Datei (mp4) finden

Scheduled Pinned Locked Moved JavaScript
javascript
17 Posts 4 Posters 484 Views 6 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M michihorn

    @oliverio Hallo Danke für die Antwort. Die neuste Datei findet mein Script schon, nur meinem Script ist es egal welches Datei-Format die neuste Datei hat. Ich möchte aber nur die neuste "mp4" finden, leider werden ich dem Verzeichnis in dem die "mp4" erwartet werden, auch "jpg" Dateien sein. Der gesendete Link sucht auch nur die neuste Datei, egal welches Format.
    Gruß
    Michael

    OliverIOO Offline
    OliverIOO Offline
    OliverIO
    wrote on last edited by
    #5

    @michihorn
    In der variable filepath steht doch der Dateiname mit Pfad und Erweiterung drin.
    Da kannst du doch testen ob der String mit .mp4 endet?

    Meine Adapter und Widgets
    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
    Links im Profil

    M 1 Reply Last reply
    0
    • OliverIOO OliverIO

      @michihorn
      In der variable filepath steht doch der Dateiname mit Pfad und Erweiterung drin.
      Da kannst du doch testen ob der String mit .mp4 endet?

      M Offline
      M Offline
      michihorn
      wrote on last edited by
      #6

      @oliverio Hallöchen leider sehe ich den Wald vor Bäumen nicht, wo steht die variable filepath?

      const fs = require("fs");
      const path = require("path");
      
      const getMostRecentFile = (dir) => {
        const files = orderReccentFiles(dir);
        return files.length ? files[0] : undefined;
      };
      
      const orderReccentFiles = (dir) => {
        return fs.readdirSync(dir)
          .filter((file) => fs.lstatSync(path.join(dir, file)).isFile())
          .map((file) => ({ file, mtime: fs.lstatSync(path.join(dir, file)).mtime }))
          .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
      };
      
      console.log(getMostRecentFile('/api/database/schemas/'));
      

      Mich würde auch die Zeile 16 interessieren,. [/api/database/schemas/] Wo kommt das her?
      Gruß
      Michael

      1 Reply Last reply
      0
      • M michihorn

        Hallo ich habe mir aus Code-Schnipsel folgenden Code zusammengesetzt, der mir die Neuste Datei in einem Verzeichnis ermittelt.
        Kann mir jemand sagen wie ich nur die neuste mp4 Datei ermittelt bekomme?

        /*****Letztes Kamerabild Giethoorn Boot**************************************
        **    Juli 2021
        **    RING, Kamera
        **    
        **    Ermittelt das letzte gespeicherte Datei von RING-FlootCam
        **    geändert:26.07.21
        *******************************************************************************/
        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(" * * * * * *", function () {
            old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
            old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
            create = getState('ring.0.doorbell_21502358.created_at').val;
            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_21502358/', function (err, recent) {
                if (err) console.error(err);
                console.log(recent);
                setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                writeFile("vis.0", "/NL/01Boot.mp4", boot);
            });
        });
        
        

        Gruß Michael

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        wrote on last edited by
        #7

        @michihorn sagte in Neuste Datei (mp4) finden:

        Hallo ich habe mir aus Code-Schnipsel folgenden Code zusammengesetzt, der mir die Neuste Datei in einem Verzeichnis ermittelt.
        Kann mir jemand sagen wie ich nur die neuste mp4 Datei ermittelt bekomme?

        /*****Letztes Kamerabild Giethoorn Boot**************************************
        **    Juli 2021
        **    RING, Kamera
        **    
        **    Ermittelt das letzte gespeicherte Datei von RING-FlootCam
        **    geändert:26.07.21
        *******************************************************************************/
        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(" * * * * * *", function () {
            old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
            old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
            create = getState('ring.0.doorbell_21502358.created_at').val;
            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_21502358/', function (err, recent) {
                if (err) console.error(err);
                console.log(recent);
                setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                writeFile("vis.0", "/NL/01Boot.mp4", boot);
            });
        });
        
        

        Gruß Michael

        In Zeile 24
        Bitte nicht zwischendurch das Skript wechseln. Das verwirrt

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        M 1 Reply Last reply
        0
        • M michihorn

          Hallo ich habe mir aus Code-Schnipsel folgenden Code zusammengesetzt, der mir die Neuste Datei in einem Verzeichnis ermittelt.
          Kann mir jemand sagen wie ich nur die neuste mp4 Datei ermittelt bekomme?

          /*****Letztes Kamerabild Giethoorn Boot**************************************
          **    Juli 2021
          **    RING, Kamera
          **    
          **    Ermittelt das letzte gespeicherte Datei von RING-FlootCam
          **    geändert:26.07.21
          *******************************************************************************/
          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(" * * * * * *", function () {
              old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
              old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
              create = getState('ring.0.doorbell_21502358.created_at').val;
              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_21502358/', function (err, recent) {
                  if (err) console.error(err);
                  console.log(recent);
                  setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                  setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                  const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                  writeFile("vis.0", "/NL/01Boot.mp4", boot);
              });
          });
          
          

          Gruß Michael

          mickymM Offline
          mickymM Offline
          mickym
          Most Active
          wrote on last edited by mickym
          #8

          gelöscht

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          1 Reply Last reply
          0
          • OliverIOO OliverIO

            @michihorn sagte in Neuste Datei (mp4) finden:

            Hallo ich habe mir aus Code-Schnipsel folgenden Code zusammengesetzt, der mir die Neuste Datei in einem Verzeichnis ermittelt.
            Kann mir jemand sagen wie ich nur die neuste mp4 Datei ermittelt bekomme?

            /*****Letztes Kamerabild Giethoorn Boot**************************************
            **    Juli 2021
            **    RING, Kamera
            **    
            **    Ermittelt das letzte gespeicherte Datei von RING-FlootCam
            **    geändert:26.07.21
            *******************************************************************************/
            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(" * * * * * *", function () {
                old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                create = getState('ring.0.doorbell_21502358.created_at').val;
                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_21502358/', function (err, recent) {
                    if (err) console.error(err);
                    console.log(recent);
                    setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                    setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                    const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                    writeFile("vis.0", "/NL/01Boot.mp4", boot);
                });
            });
            
            

            Gruß Michael

            In Zeile 24
            Bitte nicht zwischendurch das Skript wechseln. Das verwirrt

            M Offline
            M Offline
            michihorn
            wrote on last edited by
            #9

            @oliverio
            Hallo Oliver, du hattest ja den Link "https://brianchildress.co/find-latest-file-in-directory-in-nodejs/". gesendet.
            Ich dachte Dein Hinweis bezog sich auf das dort abgebildete Script.

            Ich weiß das ich noch viel Lernen muss, aber wer nicht fragt bleibt dumm.

            In meinem Script Zeile 24 sehe ich nicht das nur MP4 gesucht werden.
            var filepath = path.resolve(dir, v);
            Michael

            mickymM 1 Reply Last reply
            0
            • M michihorn

              @oliverio
              Hallo Oliver, du hattest ja den Link "https://brianchildress.co/find-latest-file-in-directory-in-nodejs/". gesendet.
              Ich dachte Dein Hinweis bezog sich auf das dort abgebildete Script.

              Ich weiß das ich noch viel Lernen muss, aber wer nicht fragt bleibt dumm.

              In meinem Script Zeile 24 sehe ich nicht das nur MP4 gesucht werden.
              var filepath = path.resolve(dir, v);
              Michael

              mickymM Offline
              mickymM Offline
              mickym
              Most Active
              wrote on last edited by mickym
              #10

              @michihorn @OliverIO hat ja nur gemeint, dass Du dort prüfen kannst,

              Du könntest beispielsweise Zeile 25 entsprechend anpassen:

              if ( filepath.slice(-4) === '.mp4')  return {
              

              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

              M 1 Reply Last reply
              0
              • mickymM mickym

                @michihorn @OliverIO hat ja nur gemeint, dass Du dort prüfen kannst,

                Du könntest beispielsweise Zeile 25 entsprechend anpassen:

                if ( filepath.slice(-4) === '.mp4')  return {
                
                M Offline
                M Offline
                michihorn
                wrote on last edited by
                #11

                @mickym
                Ich habe das Script etwas umgebaut, sieht jetzt so aus:

                /*****Letztes Kamerabild Giethoorn Boot**************************************
                **    Juli 2021
                **    RING, Kamera
                **    
                **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                **    geändert:26.07.21, 16.8.21
                *******************************************************************************/
                var zähler = 0;
                var old_recent;
                var old_create;
                var create;
                var path = require('path');
                var fs = require('fs');
                var request = require('request');
                
                on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                await wait(100);
                    old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                    old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                    create = getState('ring.0.doorbell_21502358.created_at').val;
                    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);
                                if ( filepath.slice(-4) === '.mp4') 
                                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_21502358/', function (err, recent) {
                        if (err) console.error(err);
                        console.log(recent);
                        setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                        setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                        const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                        writeFile("vis.0", "/NL/01Boot.mp4", boot);
                    });
                });
                
                

                Deinen Rat habe ich eingebaut, ist nun in Zeile 29.
                Ich bekomme folgenden Fehler:

                22:11:36.183	error	javascript.3 (14660) script.js.Giethoorn.Lastfile_Boot: TypeError: Cannot read property 'name' of undefined
                22:11:36.183	error	javascript.3 (14660) at script.js.Giethoorn.Lastfile_Boot:36:46
                22:11:36.184	error	javascript.3 (14660) at script.js.Giethoorn.Lastfile_Boot:36:18
                22:11:36.299	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:114:46
                22:11:36.299	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:114:18
                

                Michael

                mickymM 1 Reply Last reply
                0
                • M michihorn

                  @mickym
                  Ich habe das Script etwas umgebaut, sieht jetzt so aus:

                  /*****Letztes Kamerabild Giethoorn Boot**************************************
                  **    Juli 2021
                  **    RING, Kamera
                  **    
                  **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                  **    geändert:26.07.21, 16.8.21
                  *******************************************************************************/
                  var zähler = 0;
                  var old_recent;
                  var old_create;
                  var create;
                  var path = require('path');
                  var fs = require('fs');
                  var request = require('request');
                  
                  on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  await wait(100);
                      old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                      old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                      create = getState('ring.0.doorbell_21502358.created_at').val;
                      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);
                                  if ( filepath.slice(-4) === '.mp4') 
                                  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_21502358/', function (err, recent) {
                          if (err) console.error(err);
                          console.log(recent);
                          setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                          setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                          const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                          writeFile("vis.0", "/NL/01Boot.mp4", boot);
                      });
                  });
                  
                  

                  Deinen Rat habe ich eingebaut, ist nun in Zeile 29.
                  Ich bekomme folgenden Fehler:

                  22:11:36.183	error	javascript.3 (14660) script.js.Giethoorn.Lastfile_Boot: TypeError: Cannot read property 'name' of undefined
                  22:11:36.183	error	javascript.3 (14660) at script.js.Giethoorn.Lastfile_Boot:36:46
                  22:11:36.184	error	javascript.3 (14660) at script.js.Giethoorn.Lastfile_Boot:36:18
                  22:11:36.299	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:114:46
                  22:11:36.299	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:114:18
                  

                  Michael

                  mickymM Offline
                  mickymM Offline
                  mickym
                  Most Active
                  wrote on last edited by mickym
                  #12

                  Wie ich befürchtet hatte musst alles in {} setzen

                   
                  /*****Letztes Kamerabild Giethoorn Boot**************************************
                  **    Juli 2021
                  **    RING, Kamera
                  **    
                  **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                  **    geändert:26.07.21, 16.8.21
                  *******************************************************************************/
                  var zähler = 0;
                  var old_recent;
                  var old_create;
                  var create;
                  var path = require('path');
                  var fs = require('fs');
                  var request = require('request');
                   
                  on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  await wait(100);
                      old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                      old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                      create = getState('ring.0.doorbell_21502358.created_at').val;
                      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);
                                  if ( filepath.slice(-4) === '.mp4') {
                                       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_21502358/', function (err, recent) {
                          if (err) console.error(err);
                          console.log(recent);
                          setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                          setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                          const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                          writeFile("vis.0", "/NL/01Boot.mp4", boot);
                      });
                  });
                   
                  

                  Ich hab nun aber nicht das ganze Skript nachvollzogen, sondern es wird halt lediglich was zurückgegeben, wenn eine mp4 gefunden wurde. Ursprünglich hatte ich ja auch einen anderen Thread gepostet, mit ähnlichen Anforderungen. Aber den Verweis habe ich wieder gelöscht, da es Dir ja eher um Dein Skript und nicht um die Lösung insgesamt geht. Wollte mich da im Detail auch nicht einmischen.

                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                  M 1 Reply Last reply
                  0
                  • mickymM mickym

                    Wie ich befürchtet hatte musst alles in {} setzen

                     
                    /*****Letztes Kamerabild Giethoorn Boot**************************************
                    **    Juli 2021
                    **    RING, Kamera
                    **    
                    **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                    **    geändert:26.07.21, 16.8.21
                    *******************************************************************************/
                    var zähler = 0;
                    var old_recent;
                    var old_create;
                    var create;
                    var path = require('path');
                    var fs = require('fs');
                    var request = require('request');
                     
                    on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    await wait(100);
                        old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                        old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                        create = getState('ring.0.doorbell_21502358.created_at').val;
                        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);
                                    if ( filepath.slice(-4) === '.mp4') {
                                         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_21502358/', function (err, recent) {
                            if (err) console.error(err);
                            console.log(recent);
                            setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                            setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                            const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                            writeFile("vis.0", "/NL/01Boot.mp4", boot);
                        });
                    });
                     
                    

                    Ich hab nun aber nicht das ganze Skript nachvollzogen, sondern es wird halt lediglich was zurückgegeben, wenn eine mp4 gefunden wurde. Ursprünglich hatte ich ja auch einen anderen Thread gepostet, mit ähnlichen Anforderungen. Aber den Verweis habe ich wieder gelöscht, da es Dir ja eher um Dein Skript und nicht um die Lösung insgesamt geht. Wollte mich da im Detail auch nicht einmischen.

                    M Offline
                    M Offline
                    michihorn
                    wrote on last edited by
                    #13

                    @mickym
                    Leider nein....

                    22:39:23.565	error	javascript.3 (11972) script.js.Giethoorn.Lastfile_Boot: TypeError: Cannot read property 'name' of undefined
                    22:39:23.565	error	javascript.3 (11972) at script.js.Giethoorn.Lastfile_Boot:37:46
                    22:39:23.565	error	javascript.3 (11972) at script.js.Giethoorn.Lastfile_Boot:37:18
                    22:39:23.680	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:115:46
                    22:39:23.680	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:115:18
                    
                    mickymM 1 Reply Last reply
                    0
                    • M michihorn

                      @mickym
                      Leider nein....

                      22:39:23.565	error	javascript.3 (11972) script.js.Giethoorn.Lastfile_Boot: TypeError: Cannot read property 'name' of undefined
                      22:39:23.565	error	javascript.3 (11972) at script.js.Giethoorn.Lastfile_Boot:37:46
                      22:39:23.565	error	javascript.3 (11972) at script.js.Giethoorn.Lastfile_Boot:37:18
                      22:39:23.680	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:115:46
                      22:39:23.680	error	host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:115:18
                      
                      mickymM Offline
                      mickymM Offline
                      mickym
                      Most Active
                      wrote on last edited by
                      #14

                      @michihorn Probier mal statt dem mapping ein filtering.

                      also in Zeile 28 statt map filter

                                  var sorted = files.map(function (v) {
                      

                      in

                                  var sorted = files.filter(function (v) {
                      

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      M 1 Reply Last reply
                      0
                      • mickymM mickym

                        @michihorn Probier mal statt dem mapping ein filtering.

                        also in Zeile 28 statt map filter

                                    var sorted = files.map(function (v) {
                        

                        in

                                    var sorted = files.filter(function (v) {
                        
                        M Offline
                        M Offline
                        michihorn
                        wrote on last edited by
                        #15

                        @mickym sagte in Neuste Datei (mp4) finden:

                        var sorted = files.filter(function (v) {

                        Das Script sieht nun so aus:

                        /*****Letztes Kamerabild Giethoorn Boot**************************************
                        **    Juli 2021
                        **    RING, Kamera
                        **    
                        **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                        **    geändert:26.07.21, 16.8.21
                        *******************************************************************************/
                        var zähler = 0;
                        var old_recent;
                        var old_create;
                        var create;
                        var path = require('path');
                        var fs = require('fs');
                        var request = require('request');
                        
                        on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                        var value = obj.state.val;
                        var oldValue = obj.oldState.val;
                        await wait(100);
                            old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                            old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                            create = getState('ring.0.doorbell_21502358.created_at').val;
                            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 sorted = files.filter(function (v) {
                                        var filepath = path.resolve(dir, v);
                                        if ( filepath.slice(-4) === '.mp4') {
                                        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_21502358/', function (err, recent) {
                                if (err) console.error(err);
                                console.log(recent);
                                setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                                setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                                const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                                writeFile("vis.0", "/NL/01Boot.mp4", boot);
                            });
                        });
                        Die Fehlermeldung:
                        

                        23:01:30.974 info javascript.1 (16180) Stop script script.js.Giethoorn.Lastfile_Boot
                        23:01:30.970 info javascript.3 (13032) Stop script script.js.Giethoorn.Lastfile_Boot
                        23:01:30.989 info javascript.3 (13032) Start javascript script.js.Giethoorn.Lastfile_Boot
                        23:01:30.996 info javascript.3 (13032) script.js.Giethoorn.Lastfile_Boot: registered 1 subscription and 0 schedules
                        23:01:38.008 error host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:130:25
                        23:01:38.008 error host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:119:17

                        mickymM 1 Reply Last reply
                        0
                        • M michihorn

                          @mickym sagte in Neuste Datei (mp4) finden:

                          var sorted = files.filter(function (v) {

                          Das Script sieht nun so aus:

                          /*****Letztes Kamerabild Giethoorn Boot**************************************
                          **    Juli 2021
                          **    RING, Kamera
                          **    
                          **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                          **    geändert:26.07.21, 16.8.21
                          *******************************************************************************/
                          var zähler = 0;
                          var old_recent;
                          var old_create;
                          var create;
                          var path = require('path');
                          var fs = require('fs');
                          var request = require('request');
                          
                          on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          await wait(100);
                              old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                              old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                              create = getState('ring.0.doorbell_21502358.created_at').val;
                              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 sorted = files.filter(function (v) {
                                          var filepath = path.resolve(dir, v);
                                          if ( filepath.slice(-4) === '.mp4') {
                                          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_21502358/', function (err, recent) {
                                  if (err) console.error(err);
                                  console.log(recent);
                                  setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                                  setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                                  const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                                  writeFile("vis.0", "/NL/01Boot.mp4", boot);
                              });
                          });
                          Die Fehlermeldung:
                          

                          23:01:30.974 info javascript.1 (16180) Stop script script.js.Giethoorn.Lastfile_Boot
                          23:01:30.970 info javascript.3 (13032) Stop script script.js.Giethoorn.Lastfile_Boot
                          23:01:30.989 info javascript.3 (13032) Start javascript script.js.Giethoorn.Lastfile_Boot
                          23:01:30.996 info javascript.3 (13032) script.js.Giethoorn.Lastfile_Boot: registered 1 subscription and 0 schedules
                          23:01:38.008 error host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:130:25
                          23:01:38.008 error host.DESKTOP-RQ1PD76(SmartHome) Caught by controller[0]: at script.js.Giethoorn.Lastfile_Boot:119:17

                          mickymM Offline
                          mickymM Offline
                          mickym
                          Most Active
                          wrote on last edited by mickym
                          #16

                          @michihorn

                          OK - bei dem Filter wird nicht mehr gemappt - wahrscheinlich braucht man den Filter und das Mapping.

                          
                          /*****Letztes Kamerabild Giethoorn Boot**************************************
                          **    Juli 2021
                          **    RING, Kamera
                          **    
                          **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                          **    geändert:26.07.21, 16.8.21
                          *******************************************************************************/
                          var zähler = 0;
                          var old_recent;
                          var old_create;
                          var create;
                          var path = require('path');
                          var fs = require('fs');
                          var request = require('request');
                           
                          on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          await wait(100);
                              old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                              old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                              create = getState('ring.0.doorbell_21502358.created_at').val;
                              var getMostRecent = function (dir, cb) {
                                  var dir = path.resolve(dir);
                           
                                  var files = fs.readdir(dir, function (err, files) {
                                  var filesFiltered = files.filter(function (v) {
                                          var filepath = path.resolve(dir, v);
                                          if ( filepath.slice(-4) === '.mp4') return true;
                                      })
                                      var sorted = filesFiltered.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_21502358/', function (err, recent) {
                                  if (err) console.error(err);
                                  console.log(recent);
                                  setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                                  setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                                  const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                                  writeFile("vis.0", "/NL/01Boot.mp4", boot);
                              });
                          });
                           
                          
                          

                          Ich hab jetzt einfach noch ein gefiltertes Array erzeugt, dass dann mit den Objekten gemappt wird - und ins sorted Array geschrieben wird.

                          EDIT 23:28 - war noch ein Klammerfehler drin im Skript - so müsste es aber gehen.

                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                          M 1 Reply Last reply
                          0
                          • mickymM mickym

                            @michihorn

                            OK - bei dem Filter wird nicht mehr gemappt - wahrscheinlich braucht man den Filter und das Mapping.

                            
                            /*****Letztes Kamerabild Giethoorn Boot**************************************
                            **    Juli 2021
                            **    RING, Kamera
                            **    
                            **    Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam
                            **    geändert:26.07.21, 16.8.21
                            *******************************************************************************/
                            var zähler = 0;
                            var old_recent;
                            var old_create;
                            var create;
                            var path = require('path');
                            var fs = require('fs');
                            var request = require('request');
                             
                            on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            await wait(100);
                                old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val;
                                old_create = getState('ring.0.doorbell_21502358.History.created_at').val;
                                create = getState('ring.0.doorbell_21502358.created_at').val;
                                var getMostRecent = function (dir, cb) {
                                    var dir = path.resolve(dir);
                             
                                    var files = fs.readdir(dir, function (err, files) {
                                    var filesFiltered = files.filter(function (v) {
                                            var filepath = path.resolve(dir, v);
                                            if ( filepath.slice(-4) === '.mp4') return true;
                                        })
                                        var sorted = filesFiltered.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_21502358/', function (err, recent) {
                                    if (err) console.error(err);
                                    console.log(recent);
                                    setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent);
                                    setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm"));
                                    const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent);
                                    writeFile("vis.0", "/NL/01Boot.mp4", boot);
                                });
                            });
                             
                            
                            

                            Ich hab jetzt einfach noch ein gefiltertes Array erzeugt, dass dann mit den Objekten gemappt wird - und ins sorted Array geschrieben wird.

                            EDIT 23:28 - war noch ein Klammerfehler drin im Skript - so müsste es aber gehen.

                            M Offline
                            M Offline
                            michihorn
                            wrote on last edited by
                            #17

                            @mickym sagte in Neuste Datei (mp4) finden:

                            /Letztes Kamerabild Giethoorn Boot********************************* ** Juli 2021 ** RING, Kamera ** ** Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam ** geändert:26.07.21, 16.8.21 *******************************************************************************/ var zähler = 0; var old_recent; var old_create; var create; var path = require('path'); var fs = require('fs'); var request = require('request'); on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; await wait(100); old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val; old_create = getState('ring.0.doorbell_21502358.History.created_at').val; create = getState('ring.0.doorbell_21502358.created_at').val; var getMostRecent = function (dir, cb) { var dir = path.resolve(dir); var files = fs.readdir(dir, function (err, files) { var filesFiltered = files.filter(function (v) { var filepath = path.resolve(dir, v); if ( filepath.slice(-4) === '.mp4') return true; }) var sorted = filesFiltered.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_21502358/', function (err, recent) { if (err) console.error(err); console.log(recent); setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent); setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm")); const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent); writeFile("vis.0", "/NL/01Boot.mp4", boot); }); });

                            Herzlichen Dank, das klappt 🙂

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            54

                            Online

                            32.4k

                            Users

                            81.3k

                            Topics

                            1.3m

                            Posts
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            ioBroker Community 2014-2025
                            logo
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Recent
                            • Tags
                            • Unread 0
                            • Categories
                            • Unreplied
                            • Popular
                            • GitHub
                            • Docu
                            • Hilfe