NEWS
CSV Datei über VIS downloaden
-
Hallo liebe Community,
ich möchte per Javascript aus einer Benutzer-Auswahl von Messdaten aus meiner InfluxDB eine CSV Datei erstellen, die sich der User über die VIS-2 downloaden kann.
Leider kann ich in den Pfad /opt/iobroker/iobroker-data/files/0_userdata.0 nicht schreiben.
Ich bekomme immer:
javascript.0 09:06:18.671 error script.js.common.Export.Auswerten: Error: Permission denied javascript.0 09:06:18.671 error at create_csv (script.js.common.Export.Auswerten:58:8)Gibt es einen alternativen Pfad, der auch vom Web-Server erreichbar ist?
-
Hallo liebe Community,
ich möchte per Javascript aus einer Benutzer-Auswahl von Messdaten aus meiner InfluxDB eine CSV Datei erstellen, die sich der User über die VIS-2 downloaden kann.
Leider kann ich in den Pfad /opt/iobroker/iobroker-data/files/0_userdata.0 nicht schreiben.
Ich bekomme immer:
javascript.0 09:06:18.671 error script.js.common.Export.Auswerten: Error: Permission denied javascript.0 09:06:18.671 error at create_csv (script.js.common.Export.Auswerten:58:8)Gibt es einen alternativen Pfad, der auch vom Web-Server erreichbar ist?
Ich antworte mal selbst:
Ich lasse die CSV per Javascript im Verzeichnis /home/iobroker/export erstellen.
In dem Verzeichnis lasse ich einen Python HTTP Server laufen
python3 -m http.server 8083Das ganze kann man noch mit systemd als Service erstellen, damit der HTTP-Server auch beim Neustart läuft.
Dazu ein .sh Script z.B. im Admin Verzeichnis erstellen:
nano /home/admin/start_http_server.sh#!/bin/bash cd /home/iobroker/export python3 -m http.server 8083Skript ausführbar machen:
chmod +x /home/admin/start_http_server.shService Datei erstellen:
sudo nano /etc/systemd/system/httpserver.service[Unit] Description=Python HTTP Server After=network.target [Service] ExecStart=/home/admin/start_http_server.sh WorkingDirectory=/home/iobroker/export StandardOutput=inherit StandardError=inherit Restart=always User=admin [Install] WantedBy=multi-user.targetSystemd neu laden:
sudo systemctl daemon-reloadStatus prüfen:
sudo systemctl status httpserver.service -
Das ist doch nicht nötig.
Wenn Du ein Javascript Anhänger bist, dann bist doch sicher auch Blockly Fan und damit kannst Du doch einfach unter 0-userdata.0 die Datei schreiben und auch wieder einlesen:

Hier der Import:


Wenn ich mir den JS Code anschaue, dann schaut der auch ganz simple aus:
writeFile('0_userdata.0' /* Stammordner für Benutzerobjekte und Dateien */, String('demo.json'), 'Spalte1;Spalte2;Spalte3', (err) => { if (err) { console.error(err); } }); readFile('0_userdata.0' /* Stammordner für Benutzerobjekte und Dateien */, String('demo.json'), (err, data, mimeType) => { if (err) { console.error(err); } console.info(data); });Das ist auf jeden Fall wesentlich resourcenschonender als einen zustätzlichen Webserver zu basteln.
Im Übrigen kann man sich über die Schaltfläche den Ordner gleich raus suchen:

Siehe auch hier: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#writefile
Anscheinend kann man auch über den internen Webserver 8082 auf die Datei zugreifen und das funktioniert problemlos:

-
Wahrscheinlich war Dein Fehler nur den vollständigen Pfad - anstatt nur den relativen Pfad ab files zu nutzen.
-
Wahrscheinlich war Dein Fehler nur den vollständigen Pfad - anstatt nur den relativen Pfad ab files zu nutzen.
Ah super danke für die Info.
In der Doku steht:
The file that looks like '/subfolder/file.txt' will be stored under "/javascript/subfolder/file.txt" and can be accessed over web server with "http://ip:8082/javascript/subfolder/file.txt"
const fs = require('node:fs'); writeFile(null, '/subfolder/file.txt', data, (error) => { log('file written'); }); -
Ah super danke für die Info.
In der Doku steht:
The file that looks like '/subfolder/file.txt' will be stored under "/javascript/subfolder/file.txt" and can be accessed over web server with "http://ip:8082/javascript/subfolder/file.txt"
const fs = require('node:fs'); writeFile(null, '/subfolder/file.txt', data, (error) => { log('file written'); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden