NEWS
Verzeichnis überwachen und Datei in Datenpunkt schreiben
-
Hallo zusammen,
ist es möglich mit Blockly ein Dateiverzeichnis auf neue Dateien zu überwachen. Wenn eine neue Datei im Verzeichnis erkannt wird, soll der Text in der Datei in einen Datenpunkt geschrieben werden.
Geht sowas?
Ursprünglicher Post:
Hallo zusammen,
ich arbeite gerade an einem Projekt mit dem ich folgendes Realisieren möchte:
Meine Rechnungen und Belege archiviere ich über paperless ngx. Gleichzeitig importiere ich die Umsatzdaten meines Girokontos (im camt Format) in einen Datenpunkt in iobroker.
Über die Rest Api von paperless lasse ich nun die Dokumente in Paperless nach den Beträgen aus meiner Kontoumsatzliste abgleichen und sofern übereinstimmungen da sind, lasse ich den Dokumentennamen in paperless in Buchungsdatum_Empfänger_Betrag umbennen. Das alles klappt schon sehr gut über verschiedene Blocklys.
Leider muss ich die Kontoumsatzdaten bisher immer manuell in den Datenpunkt eintragen. Diese werden bei mir aber immer täglich in einem Verzeichnis gespeichert auf das auch iobroker Zugriff hat.
Nun zu meiner Frage: Ist es möglich dieses Verzeichnis (/media/konto/camt) zu überwachen und sobald eine neue Datei in dem Verzeichnis abgelegt wird die Inhalte (Text) dieser Datei in meinem dafür vorgesehen Datenpunkt in iobroker abzulegen?
Dass das rein mit Blockly schwierig wird ist mir klar, aber vielleicht gibt es ja ein skript, dass ich über den js Baustein einbinden kann, oder zur Not auch ein reines js Script, wobei meine Kenntnisse hier sehr überschaubar sind.
Vieleicht hat hier jemand eine Idee wie das umsetzten könnte. Vielen Dank schon im Voraus auch für weitere Anregungen.
-
Ich hab jetzt mal den Eingangspost zusammengefasst, vielelicht macht es das einfacher eine Lösungen zu finden
-
Ich hab jeztz mal mit chat GPT mein Glück versucht. Dabei hab ich folgendes Skript bekommen:
const fs = require('fs'); const path = require('path'); const chokidar = require('chokidar'); const directoryPath = '/media/1/test'; function handleFileChange(filePath) { try { const data = fs.readFileSync(filePath, 'utf8'); console.log(`Inhalt der Datei ${filePath}: ${data}`); } catch (err) { console.error(`Fehler beim Lesen der Datei ${filePath}: ${err}`); } } const watcher = chokidar.watch(directoryPath, { ignored: /[\/\]\./, // ignore dotfiles persistent: true }); let timeout; watcher.on('add', (filePath) => { clearTimeout(timeout); timeout = setTimeout(() => { handleFileChange(filePath); }, 1000); // Warte 1 Sekunde, bevor die Aktion ausgeführt wird });
Damit wird mir der Inhalt der Datei zumindest im Log ausgegeben. Leider schaffe ich ( bzw chatgpt) es nicht den inhalt in einen Datenpunkt zu schreiben. Könnt ihr mir hier behilflich sein?
-
@banis Wenn du nach weiteren Ideen fragst, nutze NodeRed.
Da ist sowas schon in der Grundausstattung enthalten.
Wenn man lieber Blockly und JS nutzt dann kannst ja mal schauen, ob es eine Bibliothek gibt.
In der Filesystem Bibliothek scheint es doch auch so eine Funktion zu geben: https://nodejs.org/docs/latest/api/fs.html#fswatchfilename-options-listener
Ach so ich sehe gerade,das nutzt Du ja schon in Deinem Skriptausschnitt.
OK für den Rest muss Dir wohl ein Puzzlefreund helfen -