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. Einsteigerfragen
  4. Automatisierung
  5. Schreiben und Lesen von Dateien

NEWS

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

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Schreiben und Lesen von Dateien

Geplant Angeheftet Gesperrt Verschoben Automatisierung
26 Beiträge 6 Kommentatoren 138 Aufrufe 5 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.
  • A A250-Fan

    @homoran
    Skript wurde nicht angehalten. Bearbeitung der Datei direkt auf dem Raspi.

    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von Homoran
    #14

    @A250-Fan sagte:

    Skript wurde nicht angehalten

    Dann kannst du in die Asynchronfalle geraten, dass das Skript die Änderung überschreibt, aber...

    @A250-Fan sagte:

    Bearbeitung der Datei direkt auf dem Raspi.

    Das "geht nicht".
    Das wird nicht als geänderte Datei markiert.
    Dazu muss sie neu mittels writeFile geschrieben, oder manuell über die GUI hochgeladen werden.

    kein Support per PN! - Fragen im Forum stellen -
    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    1 Antwort Letzte Antwort
    0
    • A Offline
      A Offline
      A250-Fan
      schrieb am zuletzt editiert von
      #15

      Also so wie MartinP geschrieben hat: weg kopieren, ändern, zurück kopieren?

      A250: meine Leblings-SPS aus den späten 80ern

      HomoranH Thomas BraunT 2 Antworten Letzte Antwort
      0
      • A A250-Fan

        Also so wie MartinP geschrieben hat: weg kopieren, ändern, zurück kopieren?

        HomoranH Nicht stören
        HomoranH Nicht stören
        Homoran
        Global Moderator Administrators
        schrieb am zuletzt editiert von
        #16

        @A250-Fan ja

        kein Support per PN! - Fragen im Forum stellen -
        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        1 Antwort Letzte Antwort
        0
        • A A250-Fan

          Also so wie MartinP geschrieben hat: weg kopieren, ändern, zurück kopieren?

          Thomas BraunT Online
          Thomas BraunT Online
          Thomas Braun
          Most Active
          schrieb am zuletzt editiert von
          #17

          @A250-Fan

          Ich würde das ja versuchen anders aufzuziehen.
          Schreib doch von vorneherein nur plausible Werte in die Datei. Dann musste dich auch nicht so umständlich wieder herausklamüsern.

          Linux-Werkzeugkasten:
          https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
          NodeJS Fixer Skript:
          https://forum.iobroker.net/topic/68035/iob-node-fix-skript
          iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

          1 Antwort Letzte Antwort
          0
          • A Offline
            A Offline
            A250-Fan
            schrieb am zuletzt editiert von
            #18

            Das Löschen von Zeilen dient der Verkleinerung der Datei .

            A250: meine Leblings-SPS aus den späten 80ern

            Thomas BraunT JoJo58J 2 Antworten Letzte Antwort
            0
            • A A250-Fan

              Das Löschen von Zeilen dient der Verkleinerung der Datei .

              Thomas BraunT Online
              Thomas BraunT Online
              Thomas Braun
              Most Active
              schrieb am zuletzt editiert von
              #19

              @A250-Fan

              Vielleicht solltest du zunächst mal genauer definieren, was du als Ziel hast.
              Du willst nur die letzten x Messwerte haben?
              Oder willst du händisch Einträge löschen? Nach welchen Kriterien?

              Linux-Werkzeugkasten:
              https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
              NodeJS Fixer Skript:
              https://forum.iobroker.net/topic/68035/iob-node-fix-skript
              iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

              1 Antwort Letzte Antwort
              0
              • A A250-Fan

                Das Löschen von Zeilen dient der Verkleinerung der Datei .

                JoJo58J Offline
                JoJo58J Offline
                JoJo58
                schrieb am zuletzt editiert von
                #20

                @A250-Fan

                Wenn du die Datei doch eh auf ein Netzlaufwerk haben willst, dann kannst du sie auch direkt dorthin schreiben. So mache ich das z.B. mit diversen Listen. Da wird der neue Text immer nur als Zeile darunter gesetzt.

                Ich habe das folgende Blockly damals hier im Forum gefunden, weiß nur nicht mehr wo.

                c28d86e6-c536-4dbd-b193-bfa202672300-image.jpeg

                Die JS-Funktion enthält:

                const fs = require('fs');
                switch(mode) {
                    case 'r': return fs.readFileSync(Dateiname, 'utf8');
                    case 'w': return fs.writeFileSync(Dateiname, Daten);
                    case 'a': return fs.appendFileSync(Dateiname, Daten);
                    default: return 'Parameter mode muss "r", "w" oder "a" sein';
                }
                

                Oder hier das Blockly als Export:

                <xml xmlns="https://developers.google.com/blockly/xml">
                  <variables>
                    <variable id="[-H^4u[bLNKmNjJW5uP2">Dateiname</variable>
                    <variable id="B@!nDrO;Ag4]/Ns]5`VT">Daten</variable>
                    <variable id="Nw,T]ZGil{Kmm.Tfd=8`">mode</variable>
                    <variable id="@`{2Tshq:9^uF$%i]pMW">Ergebnis</variable>
                  </variables>
                  <block type="schedule" id=",/z9[bkm:Mx.Xz)_WV}C" x="63" y="-12">
                    <field name="SCHEDULE">0 12 * * *</field>
                    <statement name="STATEMENT">
                      <block type="variables_set" id="toixTd-7I(w?Pn.u`a?n">
                        <field name="VAR" id="[-H^4u[bLNKmNjJW5uP2">Dateiname</field>
                        <value name="VALUE">
                          <block type="text" id="?(6$X5B~AZEV{a([vl[@">
                            <field name="TEXT">/opt/iobroker/Test.txt</field>
                          </block>
                        </value>
                        <next>
                          <block type="comment" id="E=!qQw-l-tNwXd3eE2{K">
                            <field name="COMMENT">schreibe Daten</field>
                            <next>
                              <block type="variables_set" id="OOlava!O!gwl*p7jMH{$">
                                <field name="VAR" id="@`{2Tshq:9^uF$%i]pMW">Ergebnis</field>
                                <value name="VALUE">
                                  <block type="procedures_callcustomreturn" id="#C-F-T.#.ZD80^Pn[:f}" inline="false">
                                    <mutation name="Datei">
                                      <arg name="Dateiname"></arg>
                                      <arg name="Daten"></arg>
                                      <arg name="mode"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="variables_get" id="#%2(}]P4^Jg4JwKdoO0^">
                                        <field name="VAR" id="[-H^4u[bLNKmNjJW5uP2">Dateiname</field>
                                      </block>
                                    </value>
                                    <value name="ARG1">
                                      <block type="text_join" id="$s-gtsey+o{l3}RQF^uK">
                                        <mutation items="6"></mutation>
                                        <value name="ADD0">
                                          <block type="text_newline" id="cDYlllvQ1RZl;+$EdmU1">
                                            <field name="Type">\n</field>
                                          </block>
                                        </value>
                                        <value name="ADD1">
                                          <block type="time_get" id="|^_IZ6r;?Uk`wi{`![?8">
                                            <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                            <field name="OPTION">YYYY.MM.DD</field>
                                          </block>
                                        </value>
                                        <value name="ADD2">
                                          <block type="text" id="/yr|qtO+29$HOSt`J$5t">
                                            <field name="TEXT">;</field>
                                          </block>
                                        </value>
                                        <value name="ADD3">
                                          <block type="time_get" id="leJ5uWCm;,j-I2A]Bi`V">
                                            <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                            <field name="OPTION">hh:mm:ss</field>
                                          </block>
                                        </value>
                                        <value name="ADD4">
                                          <block type="text" id="=J#lQk)K7uCMaJghmU^;">
                                            <field name="TEXT">;</field>
                                          </block>
                                        </value>
                                        <value name="ADD5">
                                          <block type="get_value" id="f!OZs64Riw}U2PQFJ^Q8">
                                            <field name="ATTR">val</field>
                                            <field name="OID">ID auswählen</field>
                                          </block>
                                        </value>
                                      </block>
                                    </value>
                                    <value name="ARG2">
                                      <block type="text" id="3up}TP81c9Wp-96*F,5@">
                                        <field name="TEXT">a</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </statement>
                  </block>
                  <block type="procedures_defcustomreturn" id="y8r,:{{HHSZ8(K/J*Z%." x="588" y="13">
                    <mutation statements="false">
                      <arg name="Dateiname" varid="[-H^4u[bLNKmNjJW5uP2"></arg>
                      <arg name="Daten" varid="B@!nDrO;Ag4]/Ns]5`VT"></arg>
                      <arg name="mode" varid="Nw,T]ZGil{Kmm.Tfd=8`"></arg>
                    </mutation>
                    <field name="NAME">Datei</field>
                    <field name="SCRIPT">Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpOw0Kc3dpdGNoKG1vZGUpIHsNCiAgICBjYXNlICdyJzogcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhEYXRlaW5hbWUsICd1dGY4Jyk7DQogICAgY2FzZSAndyc6IHJldHVybiBmcy53cml0ZUZpbGVTeW5jKERhdGVpbmFtZSwgRGF0ZW4pOw0KICAgIGNhc2UgJ2EnOiByZXR1cm4gZnMuYXBwZW5kRmlsZVN5bmMoRGF0ZWluYW1lLCBEYXRlbik7DQogICAgZGVmYXVsdDogcmV0dXJuICdQYXJhbWV0ZXIgbW9kZSBtdXNzICJyIiwgInciIG9kZXIgImEiIHNlaW4nOw0KfQ==</field>
                    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                  </block>
                </xml>
                

                Gruß, Johannes

                Intel NUC i7 64GB 1TB SSD - Proxmox - Raspi 4 8GB 500 GB SSD - Raspi 4 4GB 500GB SSD - Qnap 16TB - CCU3 - Fritz 6591 Cable - Green Cell USV 1500VA
                Sonoff CC2652P - HUE Bridge - Broadlink RM4 pro u. RM3 mini - 5 x Echo - 1 x Samsung STab 8 - 54 x HM und HMIP - 32 x Zigbee - 2 x Shelly 3EM.
                Einfach ein tolles Hobby :-)

                1 Antwort Letzte Antwort
                2
                • A Offline
                  A Offline
                  A250-Fan
                  schrieb am zuletzt editiert von
                  #21

                  @homoran
                  Habe heute weiter getestet.
                  Test 1: Skript angehalten, Datei geändert, Skript wieder gestartet. Ergebnis: Die gelöschten Zeilen erscheinen nach dem nächsten Schreibzugriff von Blockly wieder.
                  Test 2: Skript angehalten, Datei in anderes Verzeichnis verschoben, geändert und wieder im ursprünglichen Verzeichnis gespeichert. Ergebnis: Die gelöschten Zeilen erscheinen nach dem nächsten Schreibzugriff von Blockly wieder.

                  A250: meine Leblings-SPS aus den späten 80ern

                  1 Antwort Letzte Antwort
                  0
                  • A Offline
                    A Offline
                    A250-Fan
                    schrieb am zuletzt editiert von A250-Fan
                    #22

                    @jojo58
                    Hallo jojo58, auch deinen Vorschlag habe ich getestet. Das funktioniert auch wie ich mir das vorgestellt habe. Das ursprünglich ausgessuchte Verzeichnis für die Datei mochte dein Skript allerdings nicht (da gibt es wohl nicht die passenden Rechte). Das macht aber nichts, letztendlich ist es mir nicht wichtig in welchem Verzeichnis die Datei liegt. Mein Problem ist damit gelöst. Herzlichen Dank!

                    A250: meine Leblings-SPS aus den späten 80ern

                    JoJo58J 1 Antwort Letzte Antwort
                    0
                    • A Offline
                      A Offline
                      A250-Fan
                      schrieb am zuletzt editiert von
                      #23

                      Da mein Problem nun gelöst ist, bedanke ich mir bei allen Beitragenden recht herzlich.

                      A250: meine Leblings-SPS aus den späten 80ern

                      1 Antwort Letzte Antwort
                      0
                      • A A250-Fan

                        @jojo58
                        Hallo jojo58, auch deinen Vorschlag habe ich getestet. Das funktioniert auch wie ich mir das vorgestellt habe. Das ursprünglich ausgessuchte Verzeichnis für die Datei mochte dein Skript allerdings nicht (da gibt es wohl nicht die passenden Rechte). Das macht aber nichts, letztendlich ist es mir nicht wichtig in welchem Verzeichnis die Datei liegt. Mein Problem ist damit gelöst. Herzlichen Dank!

                        JoJo58J Offline
                        JoJo58J Offline
                        JoJo58
                        schrieb am zuletzt editiert von
                        #24

                        @A250-Fan

                        Das kann sein, bei der Version ins Dateisystem schreiben, muss der Ordner und die Datei schon vorhanden sein und die Gruppe iobroker muss darauf Schreibrechte haben.

                        Wenn du es noch einfacher haben willst und anstatt manuell Zeilen zu löschen, kannst du den folgenden Code in der Funktion nutzen. Darin die let maxLines = 100 an deine Bedürfnisse anpassen und dann wird die Liste immer nur so lang, wie du gesetzt hast. Die ältesten Zeilen werden dann gelöscht.
                        Den folgenden Code in der Funktion setzen und bei "mode" nicht a sondern "aL" (append Limit) eintragen.

                        const fs = require('fs');
                        
                        switch (mode) {
                           case 'r':
                               return fs.readFileSync(Dateiname, 'utf8');
                        
                           case 'w':
                               return fs.writeFileSync(Dateiname, Daten);
                        
                           case 'a':
                               return fs.appendFileSync(Dateiname, Daten);
                        
                           case 'aL':
                               let maxLines = 100;
                               let content = '';
                        
                               if (fs.existsSync(Dateiname)) {
                                   content = fs.readFileSync(Dateiname, 'utf8');
                               }
                        
                               let lines = content === '' ? [] : content.split(/\r?\n/);
                        
                               // Technischen leeren letzten Eintrag entfernen,
                               // wenn die Datei mit Zeilenumbruch endet
                               if (lines.length > 0 && lines[lines.length - 1] === '') {
                                   lines.pop();
                               }
                        
                               // Führende Zeilenumbrüche aus neuen Daten entfernen,
                               // damit keine Leerzeilen zwischen den Einträgen entstehen
                               let neuerEintrag = String(Daten).replace(/^\r?\n+/, '');
                        
                               // Neuen Eintrag unten anhängen
                               lines.push(neuerEintrag);
                        
                               // Maximal 100 Zeilen behalten
                               if (lines.length > maxLines) {
                                   lines = lines.slice(-maxLines);
                               }
                        
                               fs.writeFileSync(Dateiname, lines.join('\n') + '\n');
                               return `OK (${lines.length}/${maxLines})`;
                        
                           default:
                               return 'Parameter mode muss "r", "w", "a" oder "aL" sein';
                        }
                        

                        Die Änderungen habe ich mit Hilfe von KI gemacht.

                        Gruß, Johannes

                        Intel NUC i7 64GB 1TB SSD - Proxmox - Raspi 4 8GB 500 GB SSD - Raspi 4 4GB 500GB SSD - Qnap 16TB - CCU3 - Fritz 6591 Cable - Green Cell USV 1500VA
                        Sonoff CC2652P - HUE Bridge - Broadlink RM4 pro u. RM3 mini - 5 x Echo - 1 x Samsung STab 8 - 54 x HM und HMIP - 32 x Zigbee - 2 x Shelly 3EM.
                        Einfach ein tolles Hobby :-)

                        1 Antwort Letzte Antwort
                        1
                        • A Offline
                          A Offline
                          A250-Fan
                          schrieb am zuletzt editiert von A250-Fan
                          #25

                          @jojo58
                          Interessante Idee. Die KI zu befragen ist mir bisher noch nicht in den Sinn gekommen, obwohl ich schon mal davon gehört habe, daß KI auch Quellcode generieren kann. In meiner Datei ist allerdings in den ersten beiden Zeilen eine Beschreibung die ich natürlich nicht löschen möchte. Ich werde mal versuchen, ob ich der KI meine Wünsche verständlich machen kann.
                          Nochmals herzlichen Dank, schöne Feiertage und Grüße aus Ratingen

                          A250: meine Leblings-SPS aus den späten 80ern

                          JoJo58J 1 Antwort Letzte Antwort
                          0
                          • A A250-Fan

                            @jojo58
                            Interessante Idee. Die KI zu befragen ist mir bisher noch nicht in den Sinn gekommen, obwohl ich schon mal davon gehört habe, daß KI auch Quellcode generieren kann. In meiner Datei ist allerdings in den ersten beiden Zeilen eine Beschreibung die ich natürlich nicht löschen möchte. Ich werde mal versuchen, ob ich der KI meine Wünsche verständlich machen kann.
                            Nochmals herzlichen Dank, schöne Feiertage und Grüße aus Ratingen

                            JoJo58J Offline
                            JoJo58J Offline
                            JoJo58
                            schrieb am zuletzt editiert von
                            #26

                            @A250-Fan

                            Falls du es deiner KI nicht beibringen kannst 😆 , hier die Version mit den Headerzeilen. Kannst dann einstellen wieviel Zeilen immer stehen bleiben sollen:

                            const fs = require('fs');
                            
                            switch (mode) {
                                case 'r':
                                    return fs.readFileSync(Dateiname, 'utf8');
                            
                                case 'w':
                                    return fs.writeFileSync(Dateiname, Daten);
                            
                                case 'a':
                                    return fs.appendFileSync(Dateiname, Daten);
                            
                                case 'aL':
                                    let maxLines = 100;      // Anzahl Datenzeilen (ohne Header)
                                    let headerLines = 2;     // Anzahl geschützter Zeilen oben
                                    let content = '';
                            
                                    if (fs.existsSync(Dateiname)) {
                                        content = fs.readFileSync(Dateiname, 'utf8');
                                    }
                            
                                    let lines = content === '' ? [] : content.split(/\r?\n/);
                            
                                    // technischen letzten Leer-Eintrag entfernen
                                    if (lines.length > 0 && lines[lines.length - 1] === '') {
                                        lines.pop();
                                    }
                            
                                    // Header und Daten trennen
                                    let header = lines.slice(0, headerLines);
                                    let data   = lines.slice(headerLines);
                            
                                    // führende \n aus neuen Daten entfernen
                                    let neuerEintrag = String(Daten).replace(/^\r?\n+/, '');
                            
                                    // neuen Eintrag anhängen (nur Datenbereich!)
                                    data.push(neuerEintrag);
                            
                                    // Datenbereich begrenzen
                                    if (data.length > maxLines) {
                                        data = data.slice(-maxLines);
                                    }
                            
                                    // wieder zusammensetzen
                                    let result = header.concat(data);
                            
                                    fs.writeFileSync(Dateiname, result.join('\n') + '\n');
                            
                                    return `OK (Header: ${header.length}, Daten: ${data.length}/${maxLines})`;
                            
                                default:
                                    return 'Parameter mode muss "r", "w", "a" oder "aL" sein';
                            }
                            

                            Schöne Ostertage.

                            Gruß, Johannes

                            Intel NUC i7 64GB 1TB SSD - Proxmox - Raspi 4 8GB 500 GB SSD - Raspi 4 4GB 500GB SSD - Qnap 16TB - CCU3 - Fritz 6591 Cable - Green Cell USV 1500VA
                            Sonoff CC2652P - HUE Bridge - Broadlink RM4 pro u. RM3 mini - 5 x Echo - 1 x Samsung STab 8 - 54 x HM und HMIP - 32 x Zigbee - 2 x Shelly 3EM.
                            Einfach ein tolles Hobby :-)

                            1 Antwort Letzte Antwort
                            1

                            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

                            611

                            Online

                            32.7k

                            Benutzer

                            82.6k

                            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