NEWS
admin Files/Dateien Dateibrowser zeigt nicht alle Dateien
-
Hallo zusammen,
leider hat sich da in einiger Zeit nichts getan und meine Suchbegriffe haben keinen hilfreichen Post hervorbringen...
Mit einem JS-Skript speichere ich JPG Dateien in den Ordner "0_userdata.0/VTO/VTO_${i}.jpg"
In Der Benutzeroberfläche wird mir aber nur eine Datei in diesem Ordner angezeigt, obwohl in SSH mehr vorhanden sind. Einen Unterschied in den Dateien, oder Berechtigungen kann ich nicht feststellen...Kann das jemand nachvollziehen, bzw. ist das Verhalten "normal"?
-
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
leider hat sich da in einiger Zeit nichts getan
wie meinen?
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
und meine Suchbegriffe haben keinen hilfreichen Post hervorbringen...
welche?
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
den Ordner "0_userdata.0/VTO/VTO_${i}.jpg"
laut Screenshot heisst der anders.
Außerdem wären das Datenpunkte, das ist kein ^Ordner" sondern ein Objekt.
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
Mit einem JS-Skript speichere i
wie??
Das Skript zu zeigen wäre hilfreichhttps://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1
-
Du siehst die Berechtigungen doch gar nicht.
Stichwort ACLs. Aber einem root muss ich das ja nicht erklären. -
@homoran
Lange nichts getan heißt ich hatte das Problem schon im April, habe es aber als Nebensache abgetan und auf Updates gehofft.Die Suchbegriffe die mir dazu einfielen:
"Dateien" da der Menüpunkt so heißt
"Files" weil da die Dateien abgelegt wurden
"Dateibrowser" weil das die Funktion ist
"nicht alle" weil das mein Problem istErgab in Summe nichts Hilfreiches
Dass der Ordner im Dateibrowser anders heißt ist schon irgendwie einsichtig, aber es gibt auch keinen "Benutzerdateien" und er zeigt ja eine Datei an.
Ich habe die Datei testweise per SSH gelöscht, dann war sie auch weg!
Also -> Guter TippDas Skript sieht so aus:
const __dirname = '/opt/iobroker/iobroker-data/files/'; for (let i = 1; i < 4; i++) { let destination = path.join(__dirname, `0_userdata.0/VTO/VTO_${i}.jpg`); this.digestClient .fetch(`http://${this.dahua_host}/cgi-bin/snapshot.cgi`) .then((r) => { return r.buffer(); }) .then((buf) => { fs.writeFile(destination, buf, 'binary', function (err) { if (err) { console.error(err); console.error('Error saving snapshot to disk', err); } else { if (LOG_INFO) console.log('Snapshot saved: ' + destination); /* sendTo("telegram", "send", { text: destination }); */ } }); }); await new Promise(resolve => setTimeout(resolve, 2000)); }
Die Abfall.ics wird so gespeichert (damit bin ich auf den Pfad gekommen):
writeFile("0_userdata.0", "/Abfall.ics", body);
@Thomas-Braun
Die Berechtigungen im Screenshot zeigen mir, dass es wie erwartet vom User iobroker erstellt und "geownt" wird. Alle haben das Recht zu lesen.
Lesezugriff auf die eine angezeigte Datei hat funktioniert. Das Löschen auch.Ich weiß nicht welche Ordner man in dem Dateibrowser erwarten kann/soll, aber die Ordner shelly.0, vis, vis.0 und web habe ich alle auch nicht angelegt und werden angezeigt. Die ganzen anderen Ordner der anderen Adapter sieht man aber nicht.
Da ich die einzige, sichtbare Datei gelöscht habe, wird mir auch der Ordner "VTO" nicht mehr angezeigt und ich kann nicht mal testweise eine Datei dahin aus dem Dateibrowser hochladen. -
Einen Unterschied in den Dateien, oder Berechtigungen kann ich nicht feststellen...
wird per .. ins Verzeichniss geschrieben
iobroker file write
-
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
Dass der Ordner im Dateibrowser anders heißt ist schon irgendwie einsichtig,
welcher Dateibrowser?
stammt dein Screenshot nicht aus den Objects? -
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
Kann das jemand nachvollziehen, bzw. ist das Verhalten "normal"?
du sicherst dateien in den systemordner userdata ? dafür ist der nicht gedacht. systemordner sind tabu für solche speicherungen (/opt/iobroker/iobroker-data/files/0_userdata.0/VTO....)
du kannst das alles in einen eigenen ordner auf linux ebene speichern - außerhalb des iobroker ordners - oder du speicherst (nicht mit fs.write ! sondern mit writeFile() ) unter dem vis.0 adapter-dateipfad - dort werden files gespeichert, die in der vis gebraucht werden
daher kommt auch das verwirrende bild von deinem dateibrowser, dass ja eigentlich der objectbrowser ist und nicht dafür da ist, bilder anzuzeigen - zuminderst sollte man dann einen der entwickler fragen, ob das so in ordnung ist
bei einem update könnte es auch passieren, das in den systemordner alle dateien gelöscht werden
-
@homoran nö. Dateibrowser.
@liv-in-sky
Habe das Skript vom Systemordner "Benutzerdateien" (so ein bescheuerter Name für einen Systemordner) auf vis.0 angepasst..
Den Ordner VTO hab ich aus dem Webinterface erstellt, welcher im FS aber erst erstellt wird, wenn ich eine Datei darin platziere (deswegen die PDF darin).
Die danach mittels Skript erstellten Dateien werden nicht angezeigt.Das Skript habe ich noch nach dem Post von @Glasfaser um ein "fs.readFileSync" erweitert. Ich kann auch gerne das komplette Skript reinstellen, aber das ist ziemlich groß...
Und für alle: Das ist ein Objektbrowser - kein Dateibrowser
-
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
Habe das Skript vom Systemordner "Benutzerdateien"
Man beachte den unterschiedlichen Namen:
-
@fredf ok und warum funktioniert es dann auch nicht mit dem Pfad vis.0?
Meinst du ich müsste dann unter "/opt/iobroker/iobroker-data/files/Benutzerdaten/VTO/telegram.gif" speichern bzw. "writeFile('Benutzerdaten', destination, buf, function (err) {" aufrufen?
Hab es vorerst gelöst bekommen und es würde bestimmt auch im Ordner Benutzerdaten bzw. 0_userdata.0 funktionieren:
async saveSnapshots() { for (let i = 1; i < 4; i++) { let destination = `/VTO/VTO_${i}.jpg` // etwas angepasste Variable für writeFile statt fs.writeFile //let destination = path.join(__dirname, `vis.0/VTO/VTO_${i}.jpg`); this.digestClient .fetch(`http://${this.dahua_host}/cgi-bin/snapshot.cgi`) .then((r) => { return r.buffer(); }) .then((buf) => { writeFile('vis.0', destination, buf, function (err) { // so hat es nicht funktioniert: //fs.writeFile(destination, buf, 'binary', function (err) { if (err) { console.error(err); console.error('Error saving snapshot to disk', err); } else { if (LOG_INFO) console.debug('Snapshot saved: ' + destination); //war nicht notwendig, wurde ja schon von writeFile geschrieben //fs.readFileSync(destination); } }); }); await new Promise(resolve => setTimeout(resolve, 2000)); } // Fotos wurden erstellt // GIF erstellen if (LOG_DEBUG) console.debug('telegram.gif erstellen...'); exec("ffmpeg -framerate 2 -pattern_type glob -i '/opt/iobroker/iobroker-data/files/vis.0/VTO/VTO_*.jpg' -y '/opt/iobroker/iobroker-data/files/vis.0/VTO/telegram.gif'", async function (error, result, stderr) { //nach Erstellung per Telegram versenden // die Datei telegram.gif ist nicht im Dateibrowser sichtbar if (LOG_DEBUG) console.debug(stderr); if (LOG_INFO) console.log('GIF erstellt. Telegram Nachricht versenden.'); sendTo("telegram", "send", { text: '/opt/iobroker/iobroker-data/files/vis.0/VTO/telegram.gif', caption: 'Haustür:' }); }); }
voila, die Dateien tauchen auf:
Ne Idee was an den zwei Zeilen der Unterschied ist? Beide haben eine Datei erzeugt und man konnte weiter damit arbeiten, nur tauchten diese nicht im Dateibrowser auf.Jetzt hänge ich noch an der von ffmpeg erstellten gif Datei... gibt's einen besseren Weg als diese irgendwo anders zu speichern und dann über readFile und writeFile in den Pfad schreiben zu lassen?
-
@h07d0q sagte in admin Files/Dateien Dateibrowser zeigt nicht alle Dateien:
Jetzt hänge ich noch an der von ffmpeg erstellten gif Datei... gibt's einen besseren Weg als diese irgendwo anders zu speichern und dann über readFile und writeFile in den Pfad schreiben zu lassen?
entweder du machst es über ein javascript - so wie du es beschrieben hast - oder du machst dir ein bash script welches den befehl von @Glasfaser nutzt https://forum.iobroker.net/post/871839
https://www.iobroker.net/docu/index-98.htm?page_id=3971&lang=de#iobroker_file_writeje nachdem, wie es für dich besser paßt