Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Datenpunkt in LOG oder CSV File schreiben

    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

    Datenpunkt in LOG oder CSV File schreiben

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @ManfredHi last edited by mickym

      @manfredh-1

      So ich habe nun mal ein Flow geschrieben mit dem man aus den Datenpunkten eine CSV Datei schreiben kann die entsprechend den Datenpunkten - einen Datensatz schreiben.

      Sofern ein Satz immer zu einem Zeitpunkt geschrieben werden, kann man die JOIN Node entsprechend konfigurieren, dass immer erst der Satz geschrieben wird, sobald alle Datenpunkte aktualisiert sind. Ist das nicht möglich und soll ein Satz geschrieben werden, sobald ein Datenpunkt aktualisiert wurde muss man eben die Option, dass nach einer bestimmten Anzahl an Aktualisierungen ein Objekt verschickt wird.

      Das wichtigste ist, dass hier die CSV Node zum Einsatz kommt, die einem Einiges an Arbeit abnimmt. Die File Node zum Schreiben einer Datei ist aus dem Standardset.

      Diese hat eine Eigenart - die man auf jeden Fall beachten muss - insbesondere wenn man auf gemountete Verzeichnisse schreibt (am besten unter /home/iobroker - einhängen und in der fstab definieren). Ich halte es jedoch für besser lokal zu schreiben und nur bei Bedarf zu kopieren, da man sonst halt den Flow wesentlich komplexer zu machen, falls entfernte Ressourcen nicht mehr zur Verfügung stehen. Die Eigenart ist, dass wenn man den Pfad der Datei in die file Node selbst schreibt - bleibt die Datei immer offen. Wenn die Datei nach dem Schreiben einer payload immer geschlossen werden soll, dann muss man die Datei in msg.filename speichern und keine Datei in der file Node definieren.

      462239f8-e677-4ffd-9bca-bdb7b9ac340e-image.png

      Um zu Überprüfen, ob die Datei neu erstellt wird oder bereits existiert nutze ich die Nodes - die einige Funktionen zur Dateibehandlung im Allgemeinen zur Verfügung stellt - also auch später zum Kopieren von Dateien:
      https://flows.nodered.org/node/node-red-contrib-fs-ops

      d72ea7bd-b796-431a-8979-5dfd8be630f1-image.png

      Mit der CSV Node hat man nun die Möglichkeit über das Eigenschaften der Objekte und der Spaltendefinition sowohl die Reihenfolge, als auch Subset definieren, die geschrieben werden können.

      [
         {
             "id": "cd391a0c.856018",
             "type": "file",
             "z": "40d29c16.113a14",
             "name": "",
             "filename": "",
             "appendNewline": false,
             "createDir": false,
             "overwriteFile": "false",
             "encoding": "cp1252",
             "x": 2090,
             "y": 1320,
             "wires": [
                 []
             ]
         },
         {
             "id": "792b60ad.f1578",
             "type": "csv",
             "z": "40d29c16.113a14",
             "name": "",
             "sep": "\\t",
             "hdrin": "",
             "hdrout": "once",
             "multi": "one",
             "ret": "\\r\\n",
             "temp": "",
             "skip": "0",
             "strings": true,
             "include_empty_strings": "",
             "include_null_values": "",
             "x": 1530,
             "y": 1320,
             "wires": [
                 [
                     "df1d94b.c458e68"
                 ]
             ]
         },
         {
             "id": "8f1ae972.d5f228",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "",
             "rules": [
                 {
                     "t": "set",
                     "p": "reset",
                     "pt": "msg",
                     "to": "true",
                     "tot": "bool"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1360,
             "y": 1260,
             "wires": [
                 [
                     "792b60ad.f1578"
                 ]
             ]
         },
         {
             "id": "fbd8dc3f.4df7c",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "",
             "rules": [
                 {
                     "t": "set",
                     "p": "columns",
                     "pt": "msg",
                     "to": "Datum & Uhrzeit,Stundenverbrauch,Tagesverbrauch,Wochenverbrauch,Monatsverbrauch,Jahresverbrauch,Gesamtverbrauch",
                     "tot": "str"
                 },
                 {
                     "t": "set",
                     "p": "payload[\"Datum & Uhrzeit\"]",
                     "pt": "msg",
                     "to": "",
                     "tot": "date"
                 },
                 {
                     "t": "set",
                     "p": "payload[\"Datum & Uhrzeit\"]",
                     "pt": "msg",
                     "to": "$moment().locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 970,
             "y": 1300,
             "wires": [
                 [
                     "31ffef83.0a28a"
                 ]
             ]
         },
         {
             "id": "31ffef83.0a28a",
             "type": "switch",
             "z": "40d29c16.113a14",
             "name": "NewFile?",
             "property": "fNewFile",
             "propertyType": "flow",
             "rules": [
                 {
                     "t": "true"
                 },
                 {
                     "t": "false"
                 }
             ],
             "checkall": "true",
             "repair": false,
             "outputs": 2,
             "x": 1160,
             "y": 1300,
             "wires": [
                 [
                     "8f1ae972.d5f228"
                 ],
                 [
                     "792b60ad.f1578"
                 ]
             ]
         },
         {
             "id": "ff441e41.86da6",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "Stundenverbrauch",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "Stundenverbrauch",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 290,
             "y": 1160,
             "wires": [
                 [
                     "579569f5.ebb9c8"
                 ]
             ]
         },
         {
             "id": "1a89abe3.1d8234",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "Tagesverbrauch",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "Tagesverbrauch",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 300,
             "y": 1220,
             "wires": [
                 [
                     "579569f5.ebb9c8"
                 ]
             ]
         },
         {
             "id": "186dfd70.fd7603",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "Wochenverbrauch",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "Wochenverbrauch",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 290,
             "y": 1280,
             "wires": [
                 [
                     "579569f5.ebb9c8"
                 ]
             ]
         },
         {
             "id": "1cb4263d.842f8a",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "Monatsverbrauch",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "Monatsverbrauch",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 290,
             "y": 1340,
             "wires": [
                 [
                     "579569f5.ebb9c8"
                 ]
             ]
         },
         {
             "id": "f4d997e0.0bc3e8",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "Jahresverbrauch",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "Jahresverbrauch",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 290,
             "y": 1400,
             "wires": [
                 [
                     "579569f5.ebb9c8"
                 ]
             ]
         },
         {
             "id": "1dad7dec.63c2f2",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "Gesamtverbrauch",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "Gesamtverbrauch",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 290,
             "y": 1460,
             "wires": [
                 [
                     "579569f5.ebb9c8"
                 ]
             ]
         },
         {
             "id": "df1d94b.c458e68",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "fNewFile = false",
             "rules": [
                 {
                     "t": "set",
                     "p": "fNewFile",
                     "pt": "flow",
                     "to": "false",
                     "tot": "bool"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1700,
             "y": 1320,
             "wires": [
                 [
                     "7f14f556.0e8bcc"
                 ]
             ]
         },
         {
             "id": "7f14f556.0e8bcc",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "",
             "rules": [
                 {
                     "t": "set",
                     "p": "filename",
                     "pt": "msg",
                     "to": "/home/iobroker/Werte.csv",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1910,
             "y": 1320,
             "wires": [
                 [
                     "cd391a0c.856018"
                 ]
             ]
         },
         {
             "id": "579569f5.ebb9c8",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "Zahlen  Komma",
             "rules": [
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "$formatNumber(payload, \"#,####\", {'decimal-separator':',', 'grouping-separator':'.'} )\t",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 600,
             "y": 1300,
             "wires": [
                 [
                     "8f46052e.5418c8",
                     "3c6c5d15.ba7f42"
                 ]
             ]
         },
         {
             "id": "8f46052e.5418c8",
             "type": "join",
             "z": "40d29c16.113a14",
             "name": "",
             "mode": "custom",
             "build": "object",
             "property": "payload",
             "propertyType": "msg",
             "key": "topic",
             "joiner": "\\n",
             "joinerType": "str",
             "accumulate": false,
             "timeout": "",
             "count": "6",
             "reduceRight": false,
             "reduceExp": "",
             "reduceInit": "",
             "reduceInitType": "",
             "reduceFixup": "",
             "x": 790,
             "y": 1300,
             "wires": [
                 [
                     "fbd8dc3f.4df7c"
                 ]
             ]
         },
         {
             "id": "3c6c5d15.ba7f42",
             "type": "fs-ops-access",
             "z": "40d29c16.113a14",
             "name": "",
             "path": "/home/iobroker",
             "pathType": "str",
             "filename": "Werte.csv",
             "filenameType": "str",
             "read": true,
             "write": true,
             "throwerror": false,
             "x": 830,
             "y": 1440,
             "wires": [
                 [
                     "8d3670b.8ae109"
                 ],
                 [
                     "ea9cb3bc.5c8b4"
                 ]
             ]
         },
         {
             "id": "8d3670b.8ae109",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "fNewFile = false",
             "rules": [
                 {
                     "t": "set",
                     "p": "fNewFile",
                     "pt": "flow",
                     "to": "false",
                     "tot": "bool"
                 },
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "File found - fNewFile=false",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1020,
             "y": 1400,
             "wires": [
                 [
                     "992590f7.3b452"
                 ]
             ]
         },
         {
             "id": "ea9cb3bc.5c8b4",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "fNewFile = true",
             "rules": [
                 {
                     "t": "set",
                     "p": "fNewFile",
                     "pt": "flow",
                     "to": "true",
                     "tot": "bool"
                 },
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "File not found - fNewFile=true",
                     "tot": "str"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1020,
             "y": 1480,
             "wires": [
                 [
                     "992590f7.3b452"
                 ]
             ]
         },
         {
             "id": "992590f7.3b452",
             "type": "debug",
             "z": "40d29c16.113a14",
             "name": "",
             "active": true,
             "tosidebar": false,
             "console": false,
             "tostatus": true,
             "complete": "payload", 
             "targetType": "msg",
             "statusVal": "payload",
             "statusType": "msg",
             "x": 1210,
             "y": 1440,
             "wires": []
         }
      ]
      

      Ich überlege mir - eventuell einen eigenen Thread noch zu eröffnen, um ggf. den Flow noch detailierter zu erläutern. Aber klar beantworte ich gerne auch hier weitere Fragen.

      Zu guter Letzt auch die CSV Datei - um selbst den Import sowie die Datenaktualisierung im Excel zu testen:

      Werte.csv

      mickym G 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @mickym last edited by

        So das ganze funktioniert zuverlässig - ich habe es nun mal einen halben Tag laufen lassen:

        eebcf494-39fa-4373-a2f7-06af4f14f81c-image.png

        Werte.csv

        Wie gesagt - um Fehler beim Schreiben auf andere Devices zu vermeiden würde ich es nicht direkt machen, sondern das kopieren. Wenn man unter dem iobroker Homeverzeichnis mounted.

        Man kann durchaus auf gemounted devices schreiben - aber wenn die Systeme halt dann mal wegbrechen - neu gebootet werden - dann muss die Behandlung wesentlich komplexer verlaufen

        ddab7cd9-97f0-40fc-99db-e026e58b43bb-image.png das kann mich sich halt mit einem perodischen Copy sparen.

        1 Reply Last reply Reply Quote 0
        • G
          Garf @mickym last edited by

          @mickym sagte in Datenpunkt in LOG oder CSV File schreiben:

          Ich überlege mir - eventuell einen eigenen Thread noch zu eröffnen, um ggf. den Flow noch detailierter zu erläutern.

          Gute Idee. Bei mir kommt als Ergebnis File not found - fNewFile=true. Naja gut einfach mal Copy und Paste klappt selten bis nie.

          Was möchte ich machen.

          Ich hole ein wenig aus. Bisher habe ich als Datenbank mysql phpMyAdmin auf meiner NAS genutzt. Lief soweit völlig ohne Probleme und ich dachte auch die Daten wären in der Datenbank gut aufgehoben. Weit gefehlt. Im Laufe des Jahres gab es ein Update und schon konnte man sich an der Datenbank nicht mehr anmelden. Nachdem ich dies dann geschnallt hatte und die Verwendung befindliche Nodes und PW angepasst waren lief alles wieder. Hat mich eine Ecke an Zeit gekostet. Da waren einige Handgriffe notwendig, bis hin zum Neustart von Node Red. Nun habe ich am Freitag ein für die NAS angebotenes Firmwareupdate zum Schließen von Sicherheitslücken aufgespielt. Jetzt kann ich mich an der Datenbank nicht mal mehr anmelden und die Nodes schreiben natürlich auch nichts mehr in die Datenbank. was für ein sinnloser Unfug. Es geht hier um Wettermessdaten und Wasserverbrauchswerte, dafür brauche ich doch keine gesicherte Datenbank, an die man irgenwann auch selber nicht mehr rankommt. Die Wetterdatenaufzeichnungen der letzten drei Jahre sind vermutlich weg. Aber damit könnte ich noch leben.
          Für die Zukunft möchte ich eine ganz einfache Datenbank aufbauen, auf die ich zu jedem Zeitpunkt Zugriff habe. Klar der Wunsch wäre die Speicherung auf die NAS gewesen, aber scheint aber etwas kompliziert zu sein. Mir würde auch eine tägliche Wertespeicherung um 24:00 Uhr auf dem RasPi reichen. Bisher hatte ich alle 10 Minuten Werte in die DB geschrieben, Evtl. noch eine monatlichen Sicherung (Kopie) auf der NAS. Ein Zeitstempel im Klartext wäre sehr hilfreich. Für meine Regenmengendarstellung bräuchte ich noch Zugriff auf den letzten Regenmengenwert. Den Wert hatte ich bisher immer aus der Datenbank ausgelesen- Diesen könnte ich mir allerdings auch im Flow noch festhalten.

          Irgendwie hoffte ich kurz dein Flow könnte die Lösung sein. Jetzt bin ich mir nicht mehr so sicher. Ich mache mich mal an eine eigene Lösung.

          Gruß Garf

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @Garf last edited by mickym

            @garf sagte in Datenpunkt in LOG oder CSV File schreiben:

            @mickym sagte in Datenpunkt in LOG oder CSV File schreiben:

            Ich überlege mir - eventuell einen eigenen Thread noch zu eröffnen, um ggf. den Flow noch detailierter zu erläutern.

            Gute Idee. Bei mir kommt als Ergebnis File not found - fNewFile=true. Naja gut einfach mal Copy und Paste klappt selten bis nie.

            Was möchte ich machen.

            Ich hole ein wenig aus. Bisher habe ich als Datenbank mysql phpMyAdmin auf meiner NAS genutzt. Lief soweit völlig ohne Probleme und ich dachte auch die Daten wären in der Datenbank gut aufgehoben. Weit gefehlt. Im Laufe des Jahres gab es ein Update und schon konnte man sich an der Datenbank nicht mehr anmelden. Nachdem ich dies dann geschnallt hatte und die Verwendung befindliche Nodes und PW angepasst waren lief alles wieder. Hat mich eine Ecke an Zeit gekostet. Da waren einige Handgriffe notwendig, bis hin zum Neustart von Node Red. Nun habe ich am Freitag ein für die NAS angebotenes Firmwareupdate zum Schließen von Sicherheitslücken aufgespielt. Jetzt kann ich mich an der Datenbank nicht mal mehr anmelden und die Nodes schreiben natürlich auch nichts mehr in die Datenbank. was für ein sinnloser Unfug. Es geht hier um Wettermessdaten und Wasserverbrauchswerte, dafür brauche ich doch keine gesicherte Datenbank, an die man irgenwann auch selber nicht mehr rankommt. Die Wetterdatenaufzeichnungen der letzten drei Jahre sind vermutlich weg. Aber damit könnte ich noch leben.
            Für die Zukunft möchte ich eine ganz einfache Datenbank aufbauen, auf die ich zu jedem Zeitpunkt Zugriff habe. Klar der Wunsch wäre die Speicherung auf die NAS gewesen, aber scheint aber etwas kompliziert zu sein. Mir würde auch eine tägliche Wertespeicherung um 24:00 Uhr auf dem RasPi reichen. Bisher hatte ich alle 10 Minuten Werte in die DB geschrieben, Evtl. noch eine monatlichen Sicherung (Kopie) auf der NAS. Ein Zeitstempel im Klartext wäre sehr hilfreich. Für meine Regenmengendarstellung bräuchte ich noch Zugriff auf den letzten Regenmengenwert. Den Wert hatte ich bisher immer aus der Datenbank ausgelesen- Diesen könnte ich mir allerdings auch im Flow noch festhalten.

            Irgendwie hoffte ich kurz dein Flow könnte die Lösung sein. Jetzt bin ich mir nicht mehr so sicher. Ich mache mich mal an eine eigene Lösung.

            Gruß Garf

            Na ich verstehe nicht, warum der Flow es nicht sein kann? Für die Überprüfung der Existenz einer Datei muss man halt die angegebenen Nodes noch installieren. Erst kann man es mit einer lokalen Datei untersuchen. Mit der Abprüfung ob die Datei existiert oder nicht wird ja nur unterschieden, ob eine Überschrift in die 1. Zeile geschrieben werden muss. Das es am Anfang mit einer File Not Found Nachricht losgeht ist doch normal. Ansonsten muss man halt untersuchen wo das Problem liegt.

            Schließe halte Datenpunkte - iobroker In Nodes zu Beginn des Flows an - und behalte mal als Datei unter dem iobroker Homeverzeichnis wie in der Change Node angegeben bei. Wie gesagt DU kannst nicht einfach irgendwo hinschreiben, da alles unter der iobroker Kennung läuft. Ansonsten kann man unter dem iobroker Home Verzeichnis ein externes Vz. mounten - hat aber wie gesagt ein Problem, wenn das NAS nicht verfügbar ist, dann muss man das Ganze halt mitüberprüfen. Natürlich kannst Du gerne Deine Lösung nehmen. Aber wie gesagt file not found ist ganz normal und wird erst beim Schreiben des nächsten Datensatzes ja geändert.

            G 1 Reply Last reply Reply Quote 0
            • G
              Garf @mickym last edited by

              @mickym sagte in Datenpunkt in LOG oder CSV File schreiben:

              Na ich verstehe nicht, warum der Flow es nicht sein kann?

              Da sind wir schon Zwei. Ich robbe mich gerade so an das Thema ran und verstehe in kleinen Schritten was Du da mit den Nodes machst. iobroker läuft bei mir nicht. Ich habe mich für einen anderen Weg entschieden. Meine Daten bekäme ich über den MQTT-Broker und den MQTT Nodes.

              Ich muss mal schauen inwieweit ich den Flow auch für nutzbar bekomme. Die ersten Eigenversuche mit dem Erstellen der csv-Datei zeigen deutlich welche Probleme Du mit dem Flow gelöst hast. Sieht super aus und kann direkt in Excel weiter verarbeitet werden.

              Ich schau mal wie weit ich kommen werde.

              Danke schon einmal für deine tolle Arbeit.

              mickym 1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @Garf last edited by

                @garf sagte in Datenpunkt in LOG oder CSV File schreiben:

                Da sind wir schon Zwei. Ich robbe mich gerade so an das Thema ran und verstehe in kleinen Schritten was Du da mit den Nodes machst. iobroker läuft bei mir nicht. Ich habe mich für einen anderen Weg entschieden. Meine Daten bekäme ich über den MQTT-Broker und den MQTT Nodes.

                Nun dann entweder die aus den MQTT kommenden Strings in Zahlen umwandeln:

                859d3179-37c5-4344-bdbb-b4bb0e3e07f9-image.png

                Ansonsten musst halt Strings manipulieren.
                Die topics der Change Nodes musst Du den Spaltenüberschriften anpassen und die Reihenfolge legst Du über msg.columns fest.

                Und wie gesagt die Eigenart beachten:

                Die Eigenart ist, dass wenn man den Pfad der Datei in die file Node selbst schreibt - bleibt die Datei immer offen. Wenn die Datei nach dem Schreiben einer payload immer geschlossen werden soll, dann muss man die Datei in msg.filename speichern und keine Datei in der file Node definieren.

                G 1 Reply Last reply Reply Quote 0
                • G
                  Garf @mickym last edited by

                  @mickym

                  Soweit bin ich noch nicht. Die Fehlermeldung bleibt, auch wenn sechs Werte eingegangen sind. Simuliere die sechs Werte mit inject-Nodes. Die csv-Datei sieht noch nicht wie gewünscht aus. Wo habe ich da noch einen Fehler?

                  Payload.JPG Payload

                  Excel.JPG csv-Datei

                  mickym 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @Garf last edited by mickym

                    @garf Also Du musst im Excel das einmal richtig importieren - in diesem Fall ist es ein Tab:

                    Also im Excel Daten ==> aus Text dann macht sich der Assitent auf und dann Tab als Trennzeichen auswählen:

                    e8d13597-c2bd-4a42-87b5-f657d09a4da2-image.png

                    b1089553-e1bd-4944-9c6c-072fdc0c92f4-image.png

                    G 1 Reply Last reply Reply Quote 0
                    • G
                      Garf @mickym last edited by

                      @mickym

                      Ich dachte es mir schon. CSV Dateien sind im Prinzip ja nur Textdateien. Ich wandel mal um, mal sehen wie es dann aussieht.

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @Garf last edited by mickym

                        @garf sagte in Datenpunkt in LOG oder CSV File schreiben:

                        @mickym

                        Ich dachte es mir schon. CSV Dateien sind im Prinzip ja nur Textdateien. Ich wandel mal um, mal sehen wie es dann aussieht.

                        Mach so wie ich gerade beschrieben habe.

                        Wenn diese Datei dann wächst brauchst im Excel dann unter Daten nur noch auf aktualisieren gehen.

                        2aae7716-2c44-41f9-800e-322d7153c912-image.png

                        und auch nicht wieder neu importieren.

                        Also 1. blauer Pfeil, Tab als Trennzeichen wählen, 2. wenn Datei wächst nur noch aktualisieren roter Pfeil.

                        G 1 Reply Last reply Reply Quote 0
                        • G
                          Garf @mickym last edited by

                          @mickym

                          Alles klar. Die Datei war noch geöffnet und mit Text in Spalte kommt dann folgendes Ergebnis heraus:

                          Excel_2.JPG

                          Ergebnis sieht mehr als brauchbar aus. Werde gleich den von dir beschriebenen Weg probieren. Insgesamt kann es sich schon mal sehen lassen.

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @Garf last edited by mickym

                            @garf sagte in Datenpunkt in LOG oder CSV File schreiben:

                            @mickym

                            Alles klar. Die Datei war noch geöffnet und mit Text in Spalte kommt dann folgendes Ergebnis heraus:

                            Excel_2.JPG

                            Ergebnis sieht mehr als brauchbar aus. Werde gleich den von dir beschriebenen Weg probieren. Insgesamt kann es sich schon mal sehen lassen.

                            Dann hast Du wahrscheinlich wie ich gesagt habe - den Dateipfad fest in die file Node geschrieben. Ich habe nicht umsonst den fetten Text hier reingeschrieben:

                            https://forum.iobroker.net/topic/49120/datenpunkt-in-log-oder-csv-file-schreiben/8?_=1637518991766

                            wie gesagt Dateinamen nicht in die File Node schreiben - dann wird die Datei auch nach jedem Datensatz geschlossen.

                            Bin in der nächsten Zeit nur sporadisch an Board.

                            G 2 Replies Last reply Reply Quote 0
                            • G
                              Garf @mickym last edited by

                              @mickym

                              Nein habe ich nur bei den Eigenversuchen gemacht. Die Datei habe ich mit Filezilla auf den Desktop kopiert. Ich muss es gleich noch einmal nach deiner Beschreibung machen. Gebe dir dazu im Laufe des Abends noch eine Rückmeldung. Allerdings die Fehlermeldung kommt immer noch.

                              Payload_2.JPG

                              mickym 1 Reply Last reply Reply Quote 0
                              • G
                                Garf @mickym last edited by

                                @mickym sagte in Datenpunkt in LOG oder CSV File schreiben:

                                Bin in der nächsten Zeit nur sporadisch an Board.

                                Kein Problem. Ich kann jetzt ja schon einmal die Daten in den csv-File schreiben lassen. Dies hilft mir doch schon sehr weiter. Der Rest wird schon noch im Laufe der Zeit.

                                1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @Garf last edited by

                                  @garf Na dann hast die File Nodes zum Testen des Zugriffs nicht installiert oder falschen Dateinamen eingetragen.

                                  G 1 Reply Last reply Reply Quote 0
                                  • G
                                    Garf @mickym last edited by

                                    @mickym sagte in Datenpunkt in LOG oder CSV File schreiben:

                                    Na dann hast die File Nodes zum Testen des Zugriffs nicht installiert oder falschen Dateinamen eingetragen.

                                    Ja, durchaus möglich, dass ich da noch etwas nicht gemacht habe. Die Datei wird ja angelegt. Ich mache mal eins nach dem anderen.

                                    Danke für deine Unterstützung.

                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @Garf last edited by

                                      @garf sagte in Datenpunkt in LOG oder CSV File schreiben:

                                      @mickym sagte in Datenpunkt in LOG oder CSV File schreiben:

                                      Na dann hast die File Nodes zum Testen des Zugriffs nicht installiert oder falschen Dateinamen eingetragen.

                                      Ja, durchaus möglich, dass ich da noch etwas nicht gemacht habe. Die Datei wird ja angelegt. Ich mache mal eins nach dem anderen.

                                      Danke für deine Unterstützung.

                                      https://flows.nodered.org/node/node-red-contrib-fs-ops

                                      node-red-contrib-fs-ops installieren - ist Bestandteil des Flows

                                      G 2 Replies Last reply Reply Quote 0
                                      • G
                                        Garf @mickym last edited by Garf

                                        @mickym

                                        Habe ich installiert.

                                        Flow.JPG

                                        Entwarnung. Ist die Ausgabe der msg-Node und das Ergebnis der Prüfung. Das Thema können wir abhaken.

                                        Fehlermeldung.JPG

                                        1 Reply Last reply Reply Quote 0
                                        • G
                                          Garf @mickym last edited by Garf

                                          @mickym
                                          @rewenode

                                          In Teilen bin ich nun weiter gekommen. Die csv Datei wird nun so geschrieben , dass man diese nun nicht mehr für die Aufteilung in Spalten in Excel noch umwandeln muss. Öffnet man die csv in Excel erscheint nun direkt folgende Darstellung:

                                          csv_SpaltendarstellungJPG.JPG

                                          Die ersten Werte sammel ich gerade über MQTT für die Datenbank ein. Dabei ist mir aufgefallen, das die Wetterstation als Dezimaltrennzeichen einen Punkt verwendet und bei ganzen Zahlen keine Nachkommastellen sendet. Dies kann ich zwar über ein function-Node und der Funktion replace korrigieren. Ich würde dies aber lieber über JSONata und dem Change-Node machen. Leider steige ich da nicht wirklich durch. Angesehen habe ich mir die string Funktionen zwar, aber eine Lösung konnte ich mir damit nicht herleiten. Könnt ihr mir evtl. weiterhelfen?

                                          Danke.

                                          P.S: Ich habe hier https://forum.iobroker.net/topic/49835/vergleich-von-zwei-eingangswerten-um-wert-festzulegen/49 sehr interessiert mitgelesen, auch wenn ich in der Tiefe nicht alles verstanden habe,

                                          mickym 1 Reply Last reply Reply Quote 0
                                          • mickym
                                            mickym Most Active @Garf last edited by mickym

                                            @garf In der Change Node Zahlen Komma - habe ich doch alles gemacht?? Es war alles fix und fertig, so dass man nur einmal importieren muss und dann kann man einfach Daten aktualisieren im Excel machen.

                                            In dem Originalflow - war diese Change Node jedenfalls schon drin - ich weiß nicht, warum man die dann nicht verwenden kann?? Ich gehe eigentlich schon davon aus ,wenn ich mir die Mühe für eine Lösung mache, dass man die Flows auch importiert und zumindest anschaut. - Sonst kann ich mir das ja auch sparen.

                                            be512256-7c39-46f0-bef1-ee70311d3f5b-image.png

                                            [{"id":"579569f5.ebb9c8","type":"change","z":"58159633dd63b0d9","name":"Zahlen  Komma","rules":[{"t":"set","p":"payload","pt":"msg","to":"$formatNumber(payload, \"#,##\", {'decimal-separator':',', 'grouping-separator':'.'} )\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":760,"wires":[["8f46052e.5418c8"]]}]
                                            

                                            Wenn Du es nicht aufgerundet - sondern zwingend 2 Dezimalstellen haben willst - also auch bei Ganzzahlen musst halt den Formatstring auf #,00 anpassen.

                                            153c6efd-11fd-43ad-aae1-739b3497c92c-image.png

                                            a2d8f65d-88e7-47bb-81f8-a2f55311f187-image.png

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            418
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            48
                                            6912
                                            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