Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Gelöst: Neuste Datei (mp4) finden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Gelöst: Neuste Datei (mp4) finden

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      michihorn last edited by 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

      OliverIO mickym 3 Replies Last reply Reply Quote 0
      • OliverIO
        OliverIO @michihorn last edited by

        @michihorn
        https://brianchildress.co/find-latest-file-in-directory-in-nodejs/

        M 1 Reply Last reply Reply Quote 0
        • M
          michihorn @OliverIO last edited by

          @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

          Agria4800 OliverIO 2 Replies Last reply Reply Quote 0
          • Agria4800
            Agria4800 @michihorn last edited by

            @michihorn sagte in Neuste Datei (mp4) finden:

            @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

            Servus Michael,
            ich benutze dafür 2 Scripte, einmal eins in Blockly zur Namensfindung und einmal eins für das Anlegen des letzten Bild/Video!
            Ich denke mal, das könnte dir helfen, schaue es dir mal an!

            Blockly

            <xml xmlns="https://developers.google.com/blockly/xml">
             <variables>
               <variable id="0iXk0G^mPW(Ge`C3Bn~5">Quelle Pic</variable>
               <variable id="T*FIUM{~xbt05}L}O*5J">PicName</variable>
               <variable id="E][YL|8Q)A/~rwq}TJ5i">Quelle Clip</variable>
               <variable id="UfkDZiMzbP`V|TQJn}UE">ClipName</variable>
             </variables>
             <block type="comment" id="S,o(nT~|A0@md(~Jg*yU" x="-138" y="-638">
               <field name="COMMENT">Einmal ausführen für DP anlegen!</field>
               <next>
                 <block type="create" id="+Mnrtzh0Ur=]eFm?1KK#" disabled="true">
                   <field name="NAME">0_userdata.0.RINGCAM.VIS.PicID</field>
                   <value name="VALUE">
                     <block type="text" id="SI~88vL[OA:GpT~*X`sh">
                       <field name="TEXT">Pic ID</field>
                     </block>
                   </value>
                   <value name="COMMON">
                     <block type="text_join" id="0Rq6Mw`_6LP)vB9qM)!n">
                       <mutation items="7"></mutation>
                       <value name="ADD0">
                         <block type="text" id="v/.vhwI5qM|3j-?^`ufB">
                           <field name="TEXT">{</field>
                         </block>
                       </value>
                       <value name="ADD1">
                         <block type="text" id="XyYw/26P;4ivrJ{Q:l}n">
                           <field name="TEXT">"name":"PIC ID",</field>
                         </block>
                       </value>
                       <value name="ADD2">
                         <block type="text" id="S1eEK{]_!B@U2$2J`0QR">
                           <field name="TEXT">"type":"string",</field>
                         </block>
                       </value>
                       <value name="ADD3">
                         <block type="text" id="(+Kk6RCU+icer(Z~Kv1%">
                           <field name="TEXT">"read":true,</field>
                         </block>
                       </value>
                       <value name="ADD4">
                         <block type="text" id="a=RttiDHfJeF-~riB79W">
                           <field name="TEXT">"write":true,</field>
                         </block>
                       </value>
                       <value name="ADD5">
                         <block type="text" id="YY%@%Z=R/!E|u~61f_,l">
                           <field name="TEXT">"role":"state"</field>
                         </block>
                       </value>
                       <value name="ADD6">
                         <block type="text" id="6fRb{?Xz~N%zWuysBT~n">
                           <field name="TEXT">}</field>
                         </block>
                       </value>
                     </block>
                   </value>
                   <statement name="STATEMENT">
                     <block type="debug" id="nmJ[P$O;Hd{LY^x65l.K">
                       <field name="Severity">log</field>
                       <value name="TEXT">
                         <shadow type="text" id="nTn5-LYEY-H1HTK3$J7Y">
                           <field name="TEXT">Der DP wurde angelegt</field>
                         </shadow>
                       </value>
                     </block>
                   </statement>
                   <next>
                     <block type="create" id="GJxU]RTgRyGS;KWI#T$2" disabled="true">
                       <field name="NAME">0_userdata.0.RINGCAM.VIS.ClipID</field>
                       <value name="VALUE">
                         <block type="text" id="aAvrh0ynr(Gxln251yk-">
                           <field name="TEXT">Clip ID</field>
                         </block>
                       </value>
                       <value name="COMMON">
                         <block type="text_join" id="FAHbSVToA$RQMU?rXD^^">
                           <mutation items="7"></mutation>
                           <value name="ADD0">
                             <block type="text" id="`i]n6NeDtO^ofxT3Rtt?">
                               <field name="TEXT">{</field>
                             </block>
                           </value>
                           <value name="ADD1">
                             <block type="text" id="g-A@hy5CxRV~J`_Dd[^5">
                               <field name="TEXT">"name":"Clip ID",</field>
                             </block>
                           </value>
                           <value name="ADD2">
                             <block type="text" id="o9[v2FS`W1`6Jc.`rW3k">
                               <field name="TEXT">"type":"string",</field>
                             </block>
                           </value>
                           <value name="ADD3">
                             <block type="text" id="/PW6Nq/7-V_5yL2[tNg^">
                               <field name="TEXT">"read":true,</field>
                             </block>
                           </value>
                           <value name="ADD4">
                             <block type="text" id="F=(l}ui/+p|+4l8;*Ma7">
                               <field name="TEXT">"write":true,</field>
                             </block>
                           </value>
                           <value name="ADD5">
                             <block type="text" id="zQi}AD(w0.p2LuyS$#Z}">
                               <field name="TEXT">"role":"state"</field>
                             </block>
                           </value>
                           <value name="ADD6">
                             <block type="text" id="{VW-.yE[)(%CT)^e[:em">
                               <field name="TEXT">}</field>
                             </block>
                           </value>
                         </block>
                       </value>
                       <statement name="STATEMENT">
                         <block type="debug" id="Cj%v_o`muvlAj(LSpEf]">
                           <field name="Severity">log</field>
                           <value name="TEXT">
                             <shadow type="text" id="-^LmFO1+4%AA4A@CqPEH">
                               <field name="TEXT">Der DP wurde angelegt</field>
                             </shadow>
                           </value>
                         </block>
                       </statement>
                       <next>
                         <block type="on_ext" id="r|GuWbpkE/B#4Wz8(9Nz">
                           <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                           <field name="CONDITION">ne</field>
                           <field name="ACK_CONDITION"></field>
                           <value name="OID0">
                             <shadow type="field_oid" id="n/^-}ZE/caG^T%,qC2t=">
                               <field name="oid">ring.0.doorbell_54698816.snapshot_url</field>
                             </shadow>
                           </value>
                           <statement name="STATEMENT">
                             <block type="timeouts_wait" id="!bq]]G4g!0i:Gzx@|uQG">
                               <field name="DELAY">1</field>
                               <field name="UNIT">sec</field>
                               <next>
                                 <block type="variables_set" id="+(92|lTRhRo5Ef7z(iZ(">
                                   <field name="VAR" id="0iXk0G^mPW(Ge`C3Bn~5">Quelle Pic</field>
                                   <value name="VALUE">
                                     <block type="get_value" id="_(cfQVt);u$Xfo#zE4U,">
                                       <field name="ATTR">val</field>
                                       <field name="OID">ring.0.doorbell_54698816.snapshot_url</field>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="variables_set" id=")q6s39_P0HIzv)i]#.FD">
                                       <field name="VAR" id="T*FIUM{~xbt05}L}O*5J">PicName</field>
                                       <value name="VALUE">
                                         <block type="text_getSubstring" id=":+mtb@G~3+2d)vMZ]Z~}">
                                           <mutation at1="true" at2="false"></mutation>
                                           <field name="WHERE1">FROM_START</field>
                                           <field name="WHERE2">LAST</field>
                                           <value name="STRING">
                                             <block type="variables_get" id="xt[:_3j:7%X*Y}!d{CH-">
                                               <field name="VAR" id="0iXk0G^mPW(Ge`C3Bn~5">Quelle Pic</field>
                                             </block>
                                           </value>
                                           <value name="AT1">
                                             <block type="math_number" id="=.W-R{wU!3Q)`Xv=4Bx;">
                                               <field name="NUM">43</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                       <next>
                                         <block type="update" id="4,X%g+w7v`5ahquvAcm3">
                                           <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                           <field name="OID">0_userdata.0.RINGCAM.VIS.PicID</field>
                                           <field name="WITH_DELAY">FALSE</field>
                                           <value name="VALUE">
                                             <block type="variables_get" id="xolFo@vfO@zW^KTC{YG~">
                                               <field name="VAR" id="T*FIUM{~xbt05}L}O*5J">PicName</field>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="debug" id="w%G##xsGR*_6G-yh7x-1">
                                               <field name="Severity">log</field>
                                               <value name="TEXT">
                                                 <shadow type="text" id="t,(j%X[k]mwzA^Oh{9pw">
                                                   <field name="TEXT">ID</field>
                                                 </shadow>
                                                 <block type="text_join" id="Q~gAa|}mY~-7eXdaV|Cn">
                                                   <mutation items="2"></mutation>
                                                   <value name="ADD0">
                                                     <block type="text" id="LX`M}wdnJ)jKB![[cnzC">
                                                       <field name="TEXT">PIC ID erzeugt:</field>
                                                     </block>
                                                   </value>
                                                   <value name="ADD1">
                                                     <block type="variables_get" id="Nd6^}:XMBJFWFHd))I!j">
                                                       <field name="VAR" id="T*FIUM{~xbt05}L}O*5J">PicName</field>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </value>
                                             </block>
                                           </next>
                                         </block>
                                       </next>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                           </statement>
                           <next>
                             <block type="on_ext" id=",u40z=7x)dS.l*f#!?pM">
                               <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                               <field name="CONDITION">ne</field>
                               <field name="ACK_CONDITION"></field>
                               <value name="OID0">
                                 <shadow type="field_oid" id=":Z2Uc{,D2q9p6|{3f$;;">
                                   <field name="oid">ring.0.doorbell_54698816.livestream_url</field>
                                 </shadow>
                               </value>
                               <statement name="STATEMENT">
                                 <block type="timeouts_wait" id="Pv)rE2bF07M)yi}=1JZR">
                                   <field name="DELAY">1</field>
                                   <field name="UNIT">sec</field>
                                   <next>
                                     <block type="variables_set" id="/1Q=Q;@=_*ruu./cU]vE">
                                       <field name="VAR" id="E][YL|8Q)A/~rwq}TJ5i">Quelle Clip</field>
                                       <value name="VALUE">
                                         <block type="get_value" id="vqA@4WT;MX:^=obS|A$+">
                                           <field name="ATTR">val</field>
                                           <field name="OID">ring.0.doorbell_54698816.livestream_url</field>
                                         </block>
                                       </value>
                                       <next>
                                         <block type="variables_set" id="p2,CG)o$bpv~~w-$#*_a">
                                           <field name="VAR" id="UfkDZiMzbP`V|TQJn}UE">ClipName</field>
                                           <value name="VALUE">
                                             <block type="text_getSubstring" id="!RJGPJW}1%vNeHtb3:f.">
                                               <mutation at1="true" at2="false"></mutation>
                                               <field name="WHERE1">FROM_START</field>
                                               <field name="WHERE2">LAST</field>
                                               <value name="STRING">
                                                 <block type="variables_get" id=",t0%KMm9vT@9XNT-2+|j">
                                                   <field name="VAR" id="E][YL|8Q)A/~rwq}TJ5i">Quelle Clip</field>
                                                 </block>
                                               </value>
                                               <value name="AT1">
                                                 <block type="math_number" id="l]7!PSt5?T?-C|h|+blY">
                                                   <field name="NUM">43</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="update" id="[DTnPH/A7mGFkFgXvFCW">
                                               <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                               <field name="OID">0_userdata.0.RINGCAM.VIS.ClipID</field>
                                               <field name="WITH_DELAY">FALSE</field>
                                               <value name="VALUE">
                                                 <block type="variables_get" id="s22_mg3t!9hcn|!7GFww">
                                                   <field name="VAR" id="UfkDZiMzbP`V|TQJn}UE">ClipName</field>
                                                 </block>
                                               </value>
                                               <next>
                                                 <block type="debug" id="9]*v8uuPb8.DWD{o2CR:">
                                                   <field name="Severity">log</field>
                                                   <value name="TEXT">
                                                     <shadow type="text" id=":fbrS?l_rHVY,Q+{z1/E">
                                                       <field name="TEXT">ID</field>
                                                     </shadow>
                                                     <block type="text_join" id="-G!eM=poyG$HW@y3+0Bn">
                                                       <mutation items="2"></mutation>
                                                       <value name="ADD0">
                                                         <block type="text" id="EPquB.kk0QUL?0ppr},7">
                                                           <field name="TEXT">Clip ID erzeugt:</field>
                                                         </block>
                                                       </value>
                                                       <value name="ADD1">
                                                         <block type="variables_get" id="KY+lQ`txs)`P+l#0d2Ar">
                                                           <field name="VAR" id="UfkDZiMzbP`V|TQJn}UE">ClipName</field>
                                                         </block>
                                                       </value>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </next>
                                             </block>
                                           </next>
                                         </block>
                                       </next>
                                     </block>
                                   </next>
                                 </block>
                               </statement>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
            </xml>
            

            Javascript

            
            //+++++++++++  Script Snapshot ++++++++++++++
            
            on({id: '0_userdata.0.RINGCAM.VIS.PicID', change: "ne"}, async function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            
            await wait(100); 
            
            var request = require('request');
            var fs = require('fs');
            
            var ring = getState('0_userdata.0.RINGCAM.VIS.PicID').val;
            console.log("RING-Bild erzeugt:ID1 " + ring); 
            
            const body = fs.readFileSync('/opt/iobroker/node_modules/iobroker.ring/snapshot/' + getState('0_userdata.0.RINGCAM.VIS.PicID').val);
            // const body = fs.readFileSync('/opt/iobroker/node_modules/iobroker.ring/snapshot/' + ring);
            
            writeFile("vis.0", "/RING/LAST_PIC.jpg", body);
            
            });
            
            
            //+++++++++++  Script Livestream ++++++++++++++
            
            on({id: '0_userdata.0.RINGCAM.VIS.ClipID', change: "ne"}, async function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            
            await wait(100); 
            
            var request = require('request');
            var fs = require('fs');
            
            var ring1 = getState('0_userdata.0.RINGCAM.VIS.ClipID').val;
            console.log("RING-Video erzeugt: " + ring1); 
            
            const body1 = fs.readFileSync('/opt/iobroker/node_modules/iobroker.ring/snapshot/' + getState('0_userdata.0.RINGCAM.VIS.ClipID').val);
            // const body1 = fs.readFileSync('/opt/iobroker/node_modules/iobroker.ring/snapshot/' + ring1);
            
            writeFile("vis.0", "/RING/LAST_CLIP.mp4", body1);
            
            });
            
            

            1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @michihorn last edited by

              @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 1 Reply Last reply Reply Quote 0
              • M
                michihorn @OliverIO last edited by

                @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 Reply Quote 0
                • OliverIO
                  OliverIO @michihorn last edited by

                  @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 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @michihorn last edited by mickym

                    gelöscht

                    1 Reply Last reply Reply Quote 0
                    • M
                      michihorn @OliverIO last edited by

                      @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

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @michihorn last edited by 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 1 Reply Last reply Reply Quote 0
                        • M
                          michihorn @mickym last edited by

                          @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

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @michihorn last edited by 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 1 Reply Last reply Reply Quote 0
                            • M
                              michihorn @mickym last edited by

                              @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
                              
                              mickym 1 Reply Last reply Reply Quote 0
                              • mickym
                                mickym Most Active @michihorn last edited by

                                @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 1 Reply Last reply Reply Quote 0
                                • M
                                  michihorn @mickym last edited by

                                  @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

                                  mickym 1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @michihorn last edited by 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 1 Reply Last reply Reply Quote 0
                                    • M
                                      michihorn @mickym last edited by

                                      @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 Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      401
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      javascript
                                      4
                                      17
                                      414
                                      Loading More Posts
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      The ioBroker Community 2014-2023
                                      logo