Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Inhalt Liste als Datei speichern und wieder laden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Inhalt Liste als Datei speichern und wieder laden

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Manfred-Outlaw last edited by Manfred-Outlaw

      Hallo,
      ich habe mich erst seit ein par Tagen mit den Listen beschäftigt. Meine Idee ist es einige Datenpunkte als Text-Datei zu speichern und bei Notwendigkeit diese wieder zu laden und in die Datenpunkte zurückzuschreiben.
      Das Abspeichern hab ich hinbekommen aber beim Laden und zurückschreiben komm ich nicht weiter.
      So sieht das Abspeichern aus:
      cfb41489-f323-4866-9d17-ad428a3d68d6-grafik.png
      Datei_W-W-A sieht so aus:

      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';
      }
      

      Bis hierher ist alles ok. Sieht zumindest so aus.
      Nur das Laden und zurückschreiben in die Datenpunkte geht nicht. Hier erstmal den Test den ich versucht habe.
      fd2c854e-2fc3-4a23-aa97-df90daf51cb4-grafik.png

      Hat jemand dazu eine Idee. Wo ist hier mein Fehler?
      Danke

      Asgothian liv-in-sky 2 Replies Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @Manfred-Outlaw last edited by

        @manfred-outlaw Screenshot 2022-03-10 at 09.00.02.png

        Mit diesem Baustein aktualisierst du den Datenpunkt i mit dem Wert vom Datenpunkt i, also mit genau dem was sich darin schon befindet.

        Zeig doch mal wie deine gespeicherte Datei aussieht, dann lässt sich vielleicht ein Vorschlag machen wie es gehen kann.

        A.

        M 1 Reply Last reply Reply Quote 0
        • liv-in-sky
          liv-in-sky @Manfred-Outlaw last edited by

          @manfred-outlaw warum schreibst du die liste nicht direkt in einen datenpunkt und pflegst sie dort? für was ist die datei gut bzw. wird die weiterverarbeitet?

          M 1 Reply Last reply Reply Quote 0
          • M
            Manfred-Outlaw @Asgothian last edited by

            @asgothian Danke für die Antwort.
            Hier ein Ausschnitt aus der Datei.
            Beispiel.txt

            Danke
            Manfred

            1 Reply Last reply Reply Quote 0
            • M
              Manfred-Outlaw @liv-in-sky last edited by

              @liv-in-sky : Aktuel ist es nur mal ein Versuch die Datenpunkte zu exportieren, weiterzuverarbeiten und die Änderungen wieder zu Importieren. Aktuell speicher ich soweit möglich alles in den Datenpunkten ab. Aber es gab mal ein Fehler und Tage später hab ich festgestellt, dass da was nicht stimmt und hab eine Sicherung zurückgespielt. War ok aber auch da musste ich dann einiges nacharbeiten, da auch die Änderungen an div. anderen Punkten gefehlt hat. Daher einfach mal eine Idee entwickelt, wie ich diesem Problem entgegen wirken kann, sollte sowas wieder auftreten. Ok, nun kommt die Frage was ist da geschehen? Ja das wüsste ich auch gerne. Leider fehlt mir zu JS bzw. Blockly die Erfahrung. Daher mach ich sicherlich auch Fehler. Aber etwas zu lernen macht auch Spaß😊

              Danke
              Manfred

              liv-in-sky Asgothian 2 Replies Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @Manfred-Outlaw last edited by

                @manfred-outlaw

                ja - zum üben ist es gut - du musst dir einfach mehrere backitup instanzen einrichten - ich habe 4 davon - die 3 mal am tag meine scripte backupen und einmal ein iobroker backup

                deine dateien , die du ja im linux system speicherst, sind ja auch weg oder veraltetet, wenn du einen plattencrash hast und alles neu machen musst - du musst die dateien ja auch irgendwie backupen

                mit mehreren instanzen des backitups adapter sind die dp dann gesichert - oder hast du auch ein tägliches backup deiner nicht-iobroker-daten - also vom linux system

                daher habe ich nachgefragt !

                was nicht heißt, nicht doch ein wenig mit deinem script zu arbeiten, um zu üben

                M 1 Reply Last reply Reply Quote 0
                • Asgothian
                  Asgothian Developer @Manfred-Outlaw last edited by Asgothian

                  @manfred-outlaw Du machst 2 Fehler:

                  1. Du trennst in der Datei sowohl den "key" (den Datenpunkt) als auch den "value" mit nur einem Trennzeichen.
                  2. Du speicherst das ganze unformatiert weg.

                  Ich würde Dir eine von 2 Optionen empfehlen:

                  Option 1: Du änderst das Trennzeichen zwischen den "key" und "value" auf etwas anderes als das , (: bietet sich an). In diesem Fall müsstest Du in deiner Schleife (dem für jeden Wert i mache) noch den Block hinzufügen:
                  setze KVP auf Erzeuge liste aus Text mit Trennzeichen ":"
                  Dann kannst du im "schreibe" block als Objekt ID mit dem Block aus der Liste KVP nimm das erste Element und als Wert aus der Liste KVP nimm das letzte Element
                  arbeiten. KVP ist dabei eine neu zu definierende Variable.
                  Dazu musst du natürlich das Schreiben der Datei entsprechend anpassen.
                  Dazu baust du hier Screenshot 2022-03-10 at 13.01.57.png statt des erzeuge Liste mit. Baustein einen erzeuge Text aus Baustein mit 3 Andockmöglichkeiten. An die erste kommt dann i, an die 2. ":", an die 3. Wert vom Objekt ID i

                  Option 2: Du schreibst die Datei als JSON raus.

                  Das ist insgesamt komplexer aber deutlich sicherer - allerdings kann ich das im Blockly heute nicht erklären. Das geht erst morgen. Wenn du diesen Weg gehst wirst Du unabhängig von den meisten Formatproblemen.

                  In allen anderen Fällen wirst Du auf Dauer Probleme bekommen, insbesondere wenn du mal einen Datenpunkt hast in dem ein Text mit einen , drin vorkommt.

                  M 2 Replies Last reply Reply Quote 0
                  • M
                    Manfred-Outlaw @Asgothian last edited by

                    @asgothian : Danke für Antwort. Ja du hast recht, es gibt sogar Datenpunkte mit einem "," im Text. Das Thema hätte ich danach angegangen. Aber gut, wenn es gleich beachtet wird. Das Abspeichern hab ich nun umgesetzt. Nun muss ich noch das Einlesen und das zurückschreiben umsetzen. Das wird aber heute nichts mehr. Mach ich gleich morgen.
                    Beim Schreiben von i und Wert von i nutze ich nun den ":". Wenn ich aber die Daten in die Datei schreibe, nutze ich ja "Text aus Liste" und benötige da ja auch ein Trennzeichen. Das wäre dann "*". Oder hab ich da noch ein Denkfehler?
                    Dann die zweite Lösung von der du geschrieben hast. Alles in JSON zu schreiben. Ja JSON kenn ich vom Anschauen. Hab mir einige Formate schon angesehen. Aber mehr kann ich dazu nicht sagen. Wenn du dafür mal ein Beispiel hättest, würde ich mir das auch mal anschauen.
                    Danke
                    Manfred

                    1 Reply Last reply Reply Quote 0
                    • M
                      Manfred-Outlaw @liv-in-sky last edited by

                      @liv-in-sky : Ich sichere die Daten einmal am Tag per backitup auf einem Netzwerkspeicher und ich erstelle auch noch ein Linux Backup, welches die komplette SanDisk (32GB) auch noch mal einmal die Woche sichert. Auch auf dem Netzwerkspeicher. Ja man kann sichern ohne Ende aber etwas übesieht man immer.
                      Danke für die Hilfe.
                      Manfred

                      1 Reply Last reply Reply Quote 0
                      • M
                        Manfred-Outlaw @Asgothian last edited by

                        @asgothian Ich habe soeben den Import hinbekommen. Nun funktioniert es erstmal. Danke. Als Trennzeichen zwischen den einzelnen Datenpunkte hab ich "Neue Zeile \n" genommen und damit geht es echt gut.
                        Beim zurückschreiben hab ich noch einen Schönheitsfehler. Ich müsste eigentlich zwischen "Logikwert", "Zeichenkette"; "Zahl" und soweiter unterscheiden. Das muss ich mir noch mal genauer anschauen. Aber es geht erstmal.
                        Manfred

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        729
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        517
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo