Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

CSV Datei über VIS downloaden

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 2 Kommentatoren 452 Aufrufe 2 Watching
  • Ä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
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              494

              Online

              32.4k

              Benutzer

              81.5k

              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