NEWS
Dateiliste aus FTP Folder und Subfolder auslesen
-
@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) {
-
@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'}]
-
@gcaruso
Was enthält die Datei video/folder_listing.txt ? -
@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: "**************" });
-
@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 ?
-
@paul53
Paul du bist ein Genie. Ich habe die txt Datei gefunden. Wird in den Ordner 'video' gespeichert.Hier den inhalt:
folder_listing.txtJa ich brauche nur die mp4 als liste die ich im VIS anzeigen kann und einzel auswehlen.
-
@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.
-
@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. -
@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:
-
-
@paul53
OK danke trotzdem -
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'