Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Dateiliste aus FTP Folder und Subfolder auslesen

    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

    Dateiliste aus FTP Folder und Subfolder auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      gcaruso last edited by

      Hallo zusammen,

      ich habe eine lokale FTP Server und dort werden die mp4 Dateien von meine IP Kamera gespeichert.
      Ich hätte gerne eine liste der Dateien in ein String Object (oder JSON liste) in ioBroker gespeichert.
      Habe in google rumgesucht und das gefunden bzw. zusammen gebastelt:

      var Client = require('ftp');
      var fs = require('fs');
      
        var c = new Client();
        c.on('ready', function() {
          c.list(function(err, list) {
            if (err) throw err;
            console.log(list);
            c.end();
          });
        });
        // connect to localhost:21
      c.connect({
        host: "192.168.***.***",
        user: "*************",
        password: "**************"
      });
      

      Das kommt raus:

      javascript.1	2020-08-09 10:10:28.895	info	(29206) script.js.FTP_Auslesen: [{'type':'d','name':'video','sticky':false,'rights':{'user':'rwx','group':'rwx','other':'rwx'},'acl':false,'owner':'*********','group':'**********','size':4096,'date'
      javascript.1	2020-08-09 10:10:28.871	info	(29206) script.js.FTP_Auslesen: registered 0 subscriptions and 0 schedules
      javascript.1	2020-08-09 10:10:28.864	info	(29206) Start javascript script.js.FTP_Auslesen
      

      Vielen dank im voraus für eure Hilfe.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @gcaruso last edited by paul53

        @gcaruso sagte:

        [{'type':'d','name':'video','sticky':false,'rights':{'user':'rwx','group':'rwx','other':'rwx'},'acl':false,'owner':'','group':'*','size':4096,'date'

        Die Variable list enthält ein Array of objects, wovon nur der Anfang zu sehen ist. Poste bitte das komplette Array (Tab "Log") und teile mit, welche Objekt-Eigenschaften Du angezeigt haben möchtest (name, size, date ?).
        Im gezeigten Log ist ein Directory "video" zu sehen. Du musst also noch einen Pfad mit übergeben, um die Dateien zu sehen. Was kommt bei ?

            c.list('video', function(err, list) {
        
        G 1 Reply Last reply Reply Quote 0
        • G
          gcaruso @paul53 last edited by gcaruso

          @paul53
          Hallo Paul, erstmal danke für die schnelle Antwort.
          Wenn ich 'video' als Directory eingebe dann kommt die nächste Subdirectory als 'name': '2020'. Ich möchte aber nicht die Directorys auflisten sondern die mp4 Dateien.

          Ich erkläre die Hintergründe:

          Ich habe ein Reolink IP Kamera die Videodatein (mp4) auf mein FTP Server (proxmox VM) sichert. Jeden tag wird von der Kamera ein neue Subdirectory erzeugt (kann nicht über Einstellungen ändern) mit dem Tagen Zahl. Also die Directory Struktur sieht so aus:
          video-> 2020-> 08-> 10 (video->Jahr->Monat->Tag). Die mp4 werden bei erkannte Bewegung generient (Aufgenommen).
          Ich habe auf dem FTP Server ein crontab erstellt der täglich eine bash Datei startet und Dateien die älter als 21 Tage sind automatisch löscht sowie leere Directorys:

          #!/bin/bash
          #
          find /var/www/********/video -mtime +21 -type f  -exec rm -rf {} \;
          find /var/www/********/video -empty -type d -delete
          
          exit 0
          
          

          Also die mp4 Dateien von 21 Tage sind in verschiedene Subdirectorys verteilt und ich würde sie gerne in ein Datenpunkt in ioBroker aufgelistet haben. Da die ältere Dateien jeden Tag um Mitternacht gelöscht werden, sollte sich auch die liste um 01:00 Uhr Aktualisieren.
          Die Dateien werden mit JahrMonatTagStundenMinutenSekunden.mp4 gespeichert (z.Bs. 20200810172600.mp4).
          Am beste wäre eine Tabelle die ich dann missbrauchen kann und in VIS durch klicken auf die Dateiname den Video öffnen kann.

          Hier das komplette Array:

          2020-08-10 17:34:49.807 - info: javascript.1 (17797) Start javascript script.js.FTP_Auslesen
          2020-08-10 17:34:49.811 - info: javascript.1 (17797) script.js.FTP_Auslesen: registered 0 subscriptions and 0 schedules
          2020-08-10 17:34:49.842 - info: javascript.1 (17797) script.js.FTP_Auslesen: [{'type':'d','name':'2020','sticky':false,'rights':{'user':'rwx','group':'rx','other':'rx'},'acl':false,'owner':'******','group':'********','size':4096,'date':'2020-07-31T20:10:00.000Z'},{'type':'-','name':'folder_listing.txt','sticky':false,'rights':{'user':'rw','group':'r','other':'r'},'acl':false,'owner':'0','group':'0','size':1117492,'date':'2020-08-09T07:26:00.000Z'}]
          
          paul53 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @gcaruso last edited by

            @gcaruso
            Was enthält die Datei video/folder_listing.txt ?

            G 1 Reply Last reply Reply Quote 0
            • G
              gcaruso @paul53 last edited by

              @paul53
              Keine Ahnung. Ich weiß nicht wo diese Datei gespeichert wird.
              Hier mein Script:

              var Client = require('ftp');
              var fs = require('fs');
               
                var c = new Client();
                c.on('ready', function() {
                  c.list(function(err, list) {
                    if (err) throw err;
                    console.log(list);
                    c.end();
                  });
                });
                // connect to localhost:21
              c.connect({
                host: "192.168.***.***",
                user: "*************",
                password: "**************"
              });
              
              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @gcaruso last edited by

                @gcaruso sagte:

                die Directory Struktur sieht so aus: video-> 2020-> 08-> 10 (video->Jahr->Monat->Tag).

                Daraus kann man doch eine Pfadangabe für die letzten 20 Tage konstruieren ? Dich interessieren nur die MP4-Dateien ?

                G 1 Reply Last reply Reply Quote 0
                • G
                  gcaruso @paul53 last edited by

                  @paul53
                  Paul du bist ein Genie. Ich habe die txt Datei gefunden. Wird in den Ordner 'video' gespeichert.

                  Hier den inhalt:
                  folder_listing.txt

                  Ja ich brauche nur die mp4 als liste die ich im VIS anzeigen kann und einzel auswehlen.

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @gcaruso last edited by

                    @gcaruso sagte:

                    Hier den inhalt:

                    Bietet der Inhalt nicht das, was Du suchst ? Muss natürlich für eine Anzeige in Vis noch aufbereitet werden.

                    G 2 Replies Last reply Reply Quote 0
                    • G
                      gcaruso @paul53 last edited by

                      @paul53
                      Ja genau. Das ist was ich brauche. Ich werde jetzt versuchen die Datei aufzubereiten. Onkel google hilft bestimmt.
                      Nochmal vielen vielen Dank für deine Hilfe Paul.

                      1 Reply Last reply Reply Quote 0
                      • G
                        gcaruso @paul53 last edited by gcaruso

                        @paul53
                        Hallo Paul, ich habe es soweit hinbekommen das ich die liste auf ein String objekt (liste als json format) in iobroker regelmäßig speichere und in VIS durch ein json table widjet zeigen lasse.
                        Ich würde jetzt gerne haben das beim klicken auf eine Zeil den "Path String" vom gedruckte Zeil in eine String Objekt geschrieben wird. Hast du eine Idee wie?
                        Danke für deine Hilfe.

                        So sieht die Liste aus:

                        [{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723053600.mp4","Daum":"23.07.2020 05:36:00"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723055209.mp4","Daum":"23.07.2020 05:52:09"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723055825.mp4","Daum":"23.07.2020 05:58:25"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723061428.mp4","Daum":"23.07.2020 06:14:28"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723062306.mp4","Daum":"23.07.2020 06:23:06"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723063638.mp4","Daum":"23.07.2020 06:36:38"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723063730.mp4","Daum":"23.07.2020 06:37:30"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723063804.mp4","Daum":"23.07.2020 06:38:04"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723064410.mp4","Daum":"23.07.2020 06:44:10"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723065834.mp4","Daum":"23.07.2020 06:58:34"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723070022.mp4","Daum":"23.07.2020 07:00:22"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723070458.mp4","Daum":"23.07.2020 07:04:58"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723071824.mp4","Daum":"23.07.2020 07:18:24"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723072833.mp4","Daum":"23.07.2020 07:28:33"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723073011.mp4","Daum":"23.07.2020 07:30:11"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723074134.mp4","Daum":"23.07.2020 07:41:34"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723074207.mp4","Daum":"23.07.2020 07:42:07"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723075437.mp4","Daum":"23.07.2020 07:54:37"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723080158.mp4","Daum":"23.07.2020 08:01:58"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723080340.mp4","Daum":"23.07.2020 08:03:40"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723080432.mp4","Daum":"23.07.2020 08:04:32"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723080626.mp4","Daum":"23.07.2020 08:06:26"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723080714.mp4","Daum":"23.07.2020 08:07:14"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723082433.mp4","Daum":"23.07.2020 08:24:33"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723082849.mp4","Daum":"23.07.2020 08:28:49"},{"Path":"var/www/*****/video/2020/07/23/#####_01_20200723084243.mp4","Daum":"23.07.2020 08:42:43"},]
                        

                        und so wird angezeigt:
                        json_table.PNG

                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @gcaruso last edited by

                          @gcaruso sagte:

                          Hast du eine Idee wie?

                          Nein, mit Vis kenne ich mich nicht aus.

                          G 1 Reply Last reply Reply Quote 0
                          • G
                            gcaruso @paul53 last edited by

                            @paul53
                            OK danke trotzdem

                            E 1 Reply Last reply Reply Quote 0
                            • E
                              Eisbaer721 @gcaruso last edited by

                              Hallo @gcaruso
                              Ich möchte das auch so ähnlich machen wie du.
                              Ich habe auch in ein FTP Verzeichnis meine .mp4 Dateien von der Kamera gespeichert.
                              Leider bin ich nicht so fit in der Programmierung. Das meiste habe ich bisher über Blockly geregelt. 🙂
                              Könntest du mal mal bitte dein Skript ganz zeigen?
                              Ist das alles?

                              var Client = require('ftp');
                              var fs = require('fs');
                               
                                var c = new Client();
                                c.on('ready', function() {
                                  c.list(function(err, list) {
                                    if (err) throw err;
                                    console.log(list);
                                    c.end();
                                  });
                                });
                                // connect to localhost:21
                              c.connect({
                                host: "192.168.***.***",
                                user: "*************",
                                password: "**************"
                              });
                              

                              z.B: Wo wird dieser Befehl eingetragen?

                              javascript.1	2020-08-09 10:10:28.895	info	(29206) script.js.FTP_Auslesen: [{'type':'d','name':'video','sticky':false,'rights':{'user':'rwx','group':'rwx','other':'rwx'},'acl':false,'owner':'*********','group':'**********','size':4096,'date'
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              987
                              Online

                              31.8k
                              Users

                              80.0k
                              Topics

                              1.3m
                              Posts

                              3
                              13
                              1167
                              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