Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. CSV Datei über VIS downloaden

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.8k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    747

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

CSV Datei über VIS downloaden

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 2 Kommentatoren 559 Aufrufe 2 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • V Offline
    V Offline
    Vippis
    schrieb am zuletzt editiert von
    #1

    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?

    V 1 Antwort Letzte Antwort
    0
    • V Vippis

      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?

      V Offline
      V Offline
      Vippis
      schrieb am zuletzt editiert von Vippis
      #2

      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 8083
      

      Das 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 8083
      

      Skript ausführbar machen:

      chmod +x /home/admin/start_http_server.sh
      

      Service 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.target
      

      Systemd neu laden:

      sudo systemctl daemon-reload
      

      Status prüfen:

      sudo systemctl status httpserver.service
      
      1 Antwort Letzte Antwort
      0
      • mickymM Online
        mickymM Online
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #3

        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:

        28c0fd5b-75bc-4085-9934-797d9b2737d3-image.png

        Hier der Import:

        <xml xmlns="https://developers.google.com/blockly/xml">
         <block type="file_write" id="gNzu_(ze/H~)K3?=vJ78" x="-963" y="-487">
           <value name="OID">
             <shadow type="field_oid_meta" id="*0Jfj[A/:|]?4(Uqt~$e">
               <field name="oid">0_userdata.0</field>
             </shadow>
           </value>
           <value name="FILE">
             <shadow type="text" id=".*U/X{)P;y(F378$#[}W">
               <field name="TEXT">demo.json</field>
             </shadow>
           </value>
           <value name="DATA">
             <block type="text" id="ai0q5E:~/?tyex4Ij`|#">
               <field name="TEXT">Spalte1;Spalte2;Spalte3</field>
             </block>
           </value>
           <next>
             <block type="file_read" id="XJ5lWSnU.|7bE4ukOep~">
               <value name="OID">
                 <shadow type="field_oid_meta" id="FXhojWLZ*fbZ741*vVG;">
                   <field name="oid">0_userdata.0</field>
                 </shadow>
               </value>
               <value name="FILE">
                 <shadow type="text" id="*98Soid#CV,`24/gp9{a">
                   <field name="TEXT">demo.json</field>
                 </shadow>
               </value>
               <statement name="STATEMENT">
                 <block type="debug" id="R4iB/k3pl(66:Bl*^6;3">
                   <field name="Severity">info</field>
                   <value name="TEXT">
                     <shadow type="text" id="kkH$]yRfI2:pe-RIEVjb">
                       <field name="TEXT">test</field>
                     </shadow>
                     <block type="file_data" id="7EEYc5zto,iijgLdlmj/">
                       <field name="ATTR">data</field>
                     </block>
                   </value>
                 </block>
               </statement>
             </block>
           </next>
         </block>
        </xml>
        

        2df1a426-f105-4e71-88aa-ae96d69ee3f8-image.png

        f750cb2b-c625-4473-b00d-e5dac17a94b9-image.png

        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:
        57a38d1b-5ad1-47f7-8589-28c20955baa8-image.png

        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:

        a158768c-b953-4e1b-9117-9a5e06609f92-image.png

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        1 Antwort Letzte Antwort
        0
        • mickymM Online
          mickymM Online
          mickym
          Most Active
          schrieb am zuletzt editiert von
          #4

          Wahrscheinlich war Dein Fehler nur den vollständigen Pfad - anstatt nur den relativen Pfad ab files zu nutzen.

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          V 1 Antwort Letzte Antwort
          0
          • mickymM mickym

            Wahrscheinlich war Dein Fehler nur den vollständigen Pfad - anstatt nur den relativen Pfad ab files zu nutzen.

            V Offline
            V Offline
            Vippis
            schrieb am zuletzt editiert von
            #5

            @mickym

            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');
            });
            
            
            V 1 Antwort Letzte Antwort
            0
            • V Vippis

              @mickym

              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');
              });
              
              
              V Offline
              V Offline
              Vippis
              schrieb am zuletzt editiert von
              #6

              @vippis

              Man muss halt das Node FS Modul nehmen :)

              1 Antwort Letzte Antwort
              0

              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
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              415

              Online

              32.9k

              Benutzer

              83.0k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe