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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Datenpunkt in LOG oder CSV File schreiben

NEWS

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

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

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

Datenpunkt in LOG oder CSV File schreiben

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
48 Beiträge 5 Kommentatoren 9.0k Aufrufe 5 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.
  • M ManfredHi

    Hallo,
    wie kann ich um eine bestimmte Uhrzeit den Wert von zwei oder drei Datenpunkten automatisiert in ein Log-/oder CSV-File schreiben.
    Dieses wird benötigt für eine Excel-Tabelle, wo das File dann entsprechend verarbeitet wird.
    Gibt es dazu eine Möglichkeit (ohne den Weg des händigen Exports über History).
    DANKE !!!!!

    mickymM Online
    mickymM Online
    mickym
    Most Active
    schrieb am zuletzt editiert von mickym
    #2

    @manfredh-1 Du kannst das mit Deiner Logikmaschine machen. Da gibts sicher schon Blocklies die jemand geschrieben hat.
    Oder Du nimmst einen Node-Red Flow mit einer file Node.

    Habe einfach mal einen meiner Shellies genommen - der meldet immer kumuliert W/min Werte:

    28b5f56c-5b38-4518-b275-cea93c1aae7a-image.png

    Der Flow ist mit der file Node super easy:

    b09586fa-6109-412d-8869-34832a1b5e7a-image.png

    Die Überschrift muss halt schon vorhanden sein, ansonsten ist es ja kein Problem das im Excel in die 2. Zeile zu importieren.

    Das ganze erzeugt bei jedem Triggern der Datenpunkte eine neue Zeile:

    Datum & Uhrzeit;Wert
    06.11.2021 17:04:14;82934
    06.11.2021 17:05:13;82935
    06.11.2021 17:06:06;82936
    06.11.2021 17:06:43;82936
    06.11.2021 17:07:07;82937
    06.11.2021 17:08:13;82938
    06.11.2021 17:09:03;82939
    06.11.2021 17:10:13;82940
    06.11.2021 17:11:07;82942
    

    [
       {
           "id": "f705fd8.b0d16",
           "type": "change",
           "z": "40d29c16.113a14",
           "name": "",
           "rules": [
               {
                   "t": "set",
                   "p": "ts",
                   "pt": "msg",
                   "to": "",
                   "tot": "date"
               },
               {
                   "t": "set",
                   "p": "ts",
                   "pt": "msg",
                   "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                   "tot": "jsonata"
               },
               {
                   "t": "set",
                   "p": "payload",
                   "pt": "msg",
                   "to": "ts & ';' & payload",
                   "tot": "jsonata"
               }
           ],
           "action": "",
           "property": "",
           "from": "",
           "to": "",
           "reg": false,
           "x": 710,
           "y": 1320,
           "wires": [
               [
                   "cd391a0c.856018"
               ]
           ]
       },
       {
           "id": "cd391a0c.856018",
           "type": "file",
           "z": "40d29c16.113a14",
           "name": "",
           "filename": "/home/iobroker/Werte.csv",
           "appendNewline": true,
           "createDir": false,
           "overwriteFile": "false",
           "encoding": "none",
           "x": 950,
           "y": 1320,
           "wires": [
               []
           ]
       }
    ]
    

    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.

    M 1 Antwort Letzte Antwort
    0
    • mickymM mickym

      @manfredh-1 Du kannst das mit Deiner Logikmaschine machen. Da gibts sicher schon Blocklies die jemand geschrieben hat.
      Oder Du nimmst einen Node-Red Flow mit einer file Node.

      Habe einfach mal einen meiner Shellies genommen - der meldet immer kumuliert W/min Werte:

      28b5f56c-5b38-4518-b275-cea93c1aae7a-image.png

      Der Flow ist mit der file Node super easy:

      b09586fa-6109-412d-8869-34832a1b5e7a-image.png

      Die Überschrift muss halt schon vorhanden sein, ansonsten ist es ja kein Problem das im Excel in die 2. Zeile zu importieren.

      Das ganze erzeugt bei jedem Triggern der Datenpunkte eine neue Zeile:

      Datum & Uhrzeit;Wert
      06.11.2021 17:04:14;82934
      06.11.2021 17:05:13;82935
      06.11.2021 17:06:06;82936
      06.11.2021 17:06:43;82936
      06.11.2021 17:07:07;82937
      06.11.2021 17:08:13;82938
      06.11.2021 17:09:03;82939
      06.11.2021 17:10:13;82940
      06.11.2021 17:11:07;82942
      

      [
         {
             "id": "f705fd8.b0d16",
             "type": "change",
             "z": "40d29c16.113a14",
             "name": "",
             "rules": [
                 {
                     "t": "set",
                     "p": "ts",
                     "pt": "msg",
                     "to": "",
                     "tot": "date"
                 },
                 {
                     "t": "set",
                     "p": "ts",
                     "pt": "msg",
                     "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                     "tot": "jsonata"
                 },
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "ts & ';' & payload",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 710,
             "y": 1320,
             "wires": [
                 [
                     "cd391a0c.856018"
                 ]
             ]
         },
         {
             "id": "cd391a0c.856018",
             "type": "file",
             "z": "40d29c16.113a14",
             "name": "",
             "filename": "/home/iobroker/Werte.csv",
             "appendNewline": true,
             "createDir": false,
             "overwriteFile": "false",
             "encoding": "none",
             "x": 950,
             "y": 1320,
             "wires": [
                 []
             ]
         }
      ]
      

      M Offline
      M Offline
      ManfredHi
      schrieb am zuletzt editiert von
      #3

      @mickym Hallo Dankeschön. Hab das jetzt mal ausprobiert und es funktioniert. zumindest bekomm ich einen Wert aus meinen Datenpunkten richtig in das CSV.
      Wenn ich aber zwei oder drei Felder in das CSV exportieren will, wie muss ich da vorgehen.

      Sorry, für die vielleicht dämliche Fragestellung, aber ich bin mit iobroker noch ziemlich am Anfang und mit node-red habe ich bisher noch gar nichts gemacht.

      DANKE.

      mickymM 1 Antwort Letzte Antwort
      0
      • M ManfredHi

        @mickym Hallo Dankeschön. Hab das jetzt mal ausprobiert und es funktioniert. zumindest bekomm ich einen Wert aus meinen Datenpunkten richtig in das CSV.
        Wenn ich aber zwei oder drei Felder in das CSV exportieren will, wie muss ich da vorgehen.

        Sorry, für die vielleicht dämliche Fragestellung, aber ich bin mit iobroker noch ziemlich am Anfang und mit node-red habe ich bisher noch gar nichts gemacht.

        DANKE.

        mickymM Online
        mickymM Online
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #4

        @manfredh-1 Na das ist keine dumme Frage - wahrscheinlich gibt es auch 1000 andere Wege, viele nutzen halt Blockly im iobroker Umfeld als Logikmaschine und ich halt NodeRed. Deshalb muss man sich als Anfänger nur mal mit der Frage auseinandersetzen, welche Logikmaschine man einsetzen will.

        Und solche fertige Nodes - wie das Schreiben von Dateien bieten halt die anderen Logikmaschine nicht immer. Also setz Dich ruhig mit all den Fragen auseinander und Du wirst hier sicher Hilfe finden.

        So nun zu Deiner Frage:

        Wenn ich aber zwei oder drei Felder in das CSV exportieren will, wie muss ich da vorgehen.

        Nun Datenpunkte kannst Du einfach soviele iobroker In Nodes vorne dran hängen wie Du willst. Wenn Du noch andere Infos in Deinem CSV haben möchtest, dann müsstest Du halt sagen was und dann können wir schauen, ob und wie man das realisieren könnte und ob das Sinn macht. Was zum Beispiel nicht geht sind die Aufzählungen (Raum oder Funktion) da rein zu schreiben, da diese kein Bestandteil des state-Objektes sind

        das geht also nicht:

        b583c456-29a6-4f34-967a-c99c8e854c37-image.png

        Sinn macht noch den Pfad des Datenpunktes mit aufzunehmen, damit man weiß woher der Wert kommt.

        Hab das mal hinzugefügt:

        cat Werte.csv
        Datum & Uhrzeit;Datenpunkt;Wert
        06.11.2021 19:05:59;mqtt/1/shellies/shellyplug-s-xxxxxx/relay/0/energy;83058
        06.11.2021 19:06:21;mqtt/1/shellies/shellyplug-s-xxxxxx/relay/0/energy;83059
        

        und hier die Change Node mit dieser hier ersetzen:

        [
            {
                "id": "f705fd8.b0d16",
                "type": "change",
                "z": "40d29c16.113a14",
                "name": "",
                "rules": [
                    {
                        "t": "set",
                        "p": "ts",
                        "pt": "msg",
                        "to": "",
                        "tot": "date"
                    },
                    {
                        "t": "set",
                        "p": "ts",
                        "pt": "msg",
                        "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                        "tot": "jsonata"
                    },
                    {
                        "t": "set",
                        "p": "payload",
                        "pt": "msg",
                        "to": "ts & ';' & topic & ';' & payload",
                        "tot": "jsonata"
                    }
                ],
                "action": "",
                "property": "",
                "from": "",
                "to": "",
                "reg": false,
                "x": 710,
                "y": 1240,
                "wires": [
                    [
                        "cd391a0c.856018"
                    ]
                ]
            }
        ]
        

        Die Änderung ist, dass ich das Topic des Datenpunktes mit in die CSV schreibe.

        319fcf92-ebee-4fcb-ac99-87ac72b3a771-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.

        HomoranH M 2 Antworten Letzte Antwort
        0
        • mickymM mickym

          @manfredh-1 Na das ist keine dumme Frage - wahrscheinlich gibt es auch 1000 andere Wege, viele nutzen halt Blockly im iobroker Umfeld als Logikmaschine und ich halt NodeRed. Deshalb muss man sich als Anfänger nur mal mit der Frage auseinandersetzen, welche Logikmaschine man einsetzen will.

          Und solche fertige Nodes - wie das Schreiben von Dateien bieten halt die anderen Logikmaschine nicht immer. Also setz Dich ruhig mit all den Fragen auseinander und Du wirst hier sicher Hilfe finden.

          So nun zu Deiner Frage:

          Wenn ich aber zwei oder drei Felder in das CSV exportieren will, wie muss ich da vorgehen.

          Nun Datenpunkte kannst Du einfach soviele iobroker In Nodes vorne dran hängen wie Du willst. Wenn Du noch andere Infos in Deinem CSV haben möchtest, dann müsstest Du halt sagen was und dann können wir schauen, ob und wie man das realisieren könnte und ob das Sinn macht. Was zum Beispiel nicht geht sind die Aufzählungen (Raum oder Funktion) da rein zu schreiben, da diese kein Bestandteil des state-Objektes sind

          das geht also nicht:

          b583c456-29a6-4f34-967a-c99c8e854c37-image.png

          Sinn macht noch den Pfad des Datenpunktes mit aufzunehmen, damit man weiß woher der Wert kommt.

          Hab das mal hinzugefügt:

          cat Werte.csv
          Datum & Uhrzeit;Datenpunkt;Wert
          06.11.2021 19:05:59;mqtt/1/shellies/shellyplug-s-xxxxxx/relay/0/energy;83058
          06.11.2021 19:06:21;mqtt/1/shellies/shellyplug-s-xxxxxx/relay/0/energy;83059
          

          und hier die Change Node mit dieser hier ersetzen:

          [
              {
                  "id": "f705fd8.b0d16",
                  "type": "change",
                  "z": "40d29c16.113a14",
                  "name": "",
                  "rules": [
                      {
                          "t": "set",
                          "p": "ts",
                          "pt": "msg",
                          "to": "",
                          "tot": "date"
                      },
                      {
                          "t": "set",
                          "p": "ts",
                          "pt": "msg",
                          "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                          "tot": "jsonata"
                      },
                      {
                          "t": "set",
                          "p": "payload",
                          "pt": "msg",
                          "to": "ts & ';' & topic & ';' & payload",
                          "tot": "jsonata"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 710,
                  "y": 1240,
                  "wires": [
                      [
                          "cd391a0c.856018"
                      ]
                  ]
              }
          ]
          

          Die Änderung ist, dass ich das Topic des Datenpunktes mit in die CSV schreibe.

          319fcf92-ebee-4fcb-ac99-87ac72b3a771-image.png

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

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

          Nun Datenpunkte kannst Du einfach soviele iobroker In Nodes vorne dran hängen wie Du willst.

          Die Frage wäre nur in welcher Form das .csv diese "mehreren" Informationen (=Spalten) verarbeiten soll.

          @ManfredH-1
          Immer zur (exakt) selben Zeit als Y-Achse und dann die Daten von verschiedenen Datenpunkten dahinter?
          Anders ergibt ein Excel-Sheet für mich keinen Sinn.

          Nur die Datenpunkte werden sehr wahrscheinlich nie den exakt selben Timestamp haben, da der auf Millisekunden basiert.
          Dann müsste man auch noch den (gemeinsamen) Timestamp manuell erzeugen

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Antwort Letzte Antwort
          0
          • mickymM mickym

            @manfredh-1 Na das ist keine dumme Frage - wahrscheinlich gibt es auch 1000 andere Wege, viele nutzen halt Blockly im iobroker Umfeld als Logikmaschine und ich halt NodeRed. Deshalb muss man sich als Anfänger nur mal mit der Frage auseinandersetzen, welche Logikmaschine man einsetzen will.

            Und solche fertige Nodes - wie das Schreiben von Dateien bieten halt die anderen Logikmaschine nicht immer. Also setz Dich ruhig mit all den Fragen auseinander und Du wirst hier sicher Hilfe finden.

            So nun zu Deiner Frage:

            Wenn ich aber zwei oder drei Felder in das CSV exportieren will, wie muss ich da vorgehen.

            Nun Datenpunkte kannst Du einfach soviele iobroker In Nodes vorne dran hängen wie Du willst. Wenn Du noch andere Infos in Deinem CSV haben möchtest, dann müsstest Du halt sagen was und dann können wir schauen, ob und wie man das realisieren könnte und ob das Sinn macht. Was zum Beispiel nicht geht sind die Aufzählungen (Raum oder Funktion) da rein zu schreiben, da diese kein Bestandteil des state-Objektes sind

            das geht also nicht:

            b583c456-29a6-4f34-967a-c99c8e854c37-image.png

            Sinn macht noch den Pfad des Datenpunktes mit aufzunehmen, damit man weiß woher der Wert kommt.

            Hab das mal hinzugefügt:

            cat Werte.csv
            Datum & Uhrzeit;Datenpunkt;Wert
            06.11.2021 19:05:59;mqtt/1/shellies/shellyplug-s-xxxxxx/relay/0/energy;83058
            06.11.2021 19:06:21;mqtt/1/shellies/shellyplug-s-xxxxxx/relay/0/energy;83059
            

            und hier die Change Node mit dieser hier ersetzen:

            [
                {
                    "id": "f705fd8.b0d16",
                    "type": "change",
                    "z": "40d29c16.113a14",
                    "name": "",
                    "rules": [
                        {
                            "t": "set",
                            "p": "ts",
                            "pt": "msg",
                            "to": "",
                            "tot": "date"
                        },
                        {
                            "t": "set",
                            "p": "ts",
                            "pt": "msg",
                            "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                            "tot": "jsonata"
                        },
                        {
                            "t": "set",
                            "p": "payload",
                            "pt": "msg",
                            "to": "ts & ';' & topic & ';' & payload",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 710,
                    "y": 1240,
                    "wires": [
                        [
                            "cd391a0c.856018"
                        ]
                    ]
                }
            ]
            

            Die Änderung ist, dass ich das Topic des Datenpunktes mit in die CSV schreibe.

            319fcf92-ebee-4fcb-ac99-87ac72b3a771-image.png

            M Offline
            M Offline
            ManfredHi
            schrieb am zuletzt editiert von
            #6

            Der Timestamp ist für mich in diesem FAll nicht so wichtig.

            b8eea04e-a0ce-423a-9803-207efcb3bdec-image.png

            Ich bräuchte für den Anfang einfach diese 3 Datenpunkte (HSV15 ....) jeden in einer Spalte im CSV und das ganze sollte eine Minute vor Mitternacht weggeschrieben werden.

            mickymM 1 Antwort Letzte Antwort
            0
            • M ManfredHi

              Der Timestamp ist für mich in diesem FAll nicht so wichtig.

              b8eea04e-a0ce-423a-9803-207efcb3bdec-image.png

              Ich bräuchte für den Anfang einfach diese 3 Datenpunkte (HSV15 ....) jeden in einer Spalte im CSV und das ganze sollte eine Minute vor Mitternacht weggeschrieben werden.

              mickymM Online
              mickymM Online
              mickym
              Most Active
              schrieb am zuletzt editiert von mickym
              #7

              @manfredh-1 Wie gesagt nimm mal die veränderte Change Node und das Topic ist mit dabei.

              Jetzt gibt es 2 Möglichkeiten - entweder Du machst im Excel Pivot Tabellen oder Du machst in die Change Nodes entsprechende Semicolons für die zusätzlichen Spalten.

              Die letzte Aktualisierung ist aber Käse weil der Timestamp ja durch die Change NOde gesetzt ist.

              Für die 1 Variante kannst alle in die modifizierte Change Node laufen lassen,
              ansonsten für Spalte 2 brauchst halt für jede Spalte eine andere Change Node.

              Die 2. Variante erzeugt dann so eine csv

              cat Werte.csv
              Datum & Uhrzeit;Datenpunkt;Aktualisierung;Tagesverbrauch;Tageszähler
              06.11.2021 19:24:51;HSV_15_letzte_Aktualisierung;06.11.2021. 19:05:01
              06.11.2021 19:24:53;HSV_15_Pellets_Tagesverbrauch;;23
              06.11.2021 19:24:54;HSV_15_Pellets_Tageszählerstand;;;522
              06.11.2021 19:25:00;HSV_15_letzte_Aktualisierung;06.11.2021. 19:05:01
              

              Ich finde das mit den zusätzlichen Spalten pro Datenpunkt eigentlich unschön

              6f455126-86e1-47ca-8e6c-27a5113ce90f-image.png

              [
                 {
                     "id": "cd391a0c.856018",
                     "type": "file",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "filename": "/home/iobroker/Werte.csv",
                     "appendNewline": true,
                     "createDir": false,
                     "overwriteFile": "false",
                     "encoding": "none",
                     "x": 1110,
                     "y": 1300,
                     "wires": [
                         []
                     ]
                 },
                 {
                     "id": "18b56710.ea67a9",
                     "type": "inject",
                     "z": "40d29c16.113a14",
                     "name": "HSV_15_letzte_Aktualisierung",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "HSV_15_letzte_Aktualisierung",
                     "payload": "06.11.2021. 19:05:01",
                     "payloadType": "str",
                     "x": 440,
                     "y": 1240,
                     "wires": [
                         [
                             "f705fd8.b0d16"
                         ]
                     ]
                 },
                 {
                     "id": "579a7ee5.1418c",
                     "type": "inject",
                     "z": "40d29c16.113a14",
                     "name": "HSV_15_Pellets_Tagesverbrauch",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "HSV_15_Pellets_Tagesverbrauch",
                     "payload": "23",
                     "payloadType": "num",
                     "x": 450,
                     "y": 1300,
                     "wires": [
                         [
                             "4b949208.b75f2c"
                         ]
                     ]
                 },
                 {
                     "id": "a2473482.45ab98",
                     "type": "inject",
                     "z": "40d29c16.113a14",
                     "name": "HSV_15_Pellets_Tageszählerstand",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "HSV_15_Pellets_Tageszählerstand",
                     "payload": "522",
                     "payloadType": "str",
                     "x": 440,
                     "y": 1360,
                     "wires": [
                         [
                             "d0075074.ad58f"
                         ]
                     ]
                 },
                 {
                     "id": "f705fd8.b0d16",
                     "type": "change",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "",
                             "tot": "date"
                         },
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                             "tot": "jsonata"
                         },
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "ts & ';' & topic & ';' & payload",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 710,
                     "y": 1240,
                     "wires": [
                         [
                             "cd391a0c.856018"
                         ]
                     ]
                 },
                 {
                     "id": "4b949208.b75f2c",
                     "type": "change",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "",
                             "tot": "date"
                         },
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                             "tot": "jsonata"
                         },
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "ts & ';' & topic & ';' & ';' & payload",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 710,
                     "y": 1300,
                     "wires": [
                         [
                             "cd391a0c.856018"
                         ]
                     ]
                 },
                 {
                     "id": "d0075074.ad58f",
                     "type": "change",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "",
                             "tot": "date"
                         },
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                             "tot": "jsonata"
                         },
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "ts & ';' & topic & ';' & ';' & ';' & payload",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 710,
                     "y": 1360,
                     "wires": [
                         [
                             "cd391a0c.856018"
                         ]
                     ]
                 }
              ]
              

              47f49ea7-b0fc-46a9-8b96-51bdf42c8bcf-image.png

              Wenn man sicher stellen kann, dass die Datenpunkte einmal in der richtigen Reihenfolge getriggert werden, kann man auch ein Objekt erstellen, dass wäre dann die 3. Möglichkeit:

              Dann muss man aber darauf achten, dass die Datenpunkte in der richtigen Reihenfolge einmal aktualisiert werden

              8b7f2c01-933d-47a5-ae2a-6429d917db43-image.png

              [
                 {
                     "id": "cd391a0c.856018",
                     "type": "file",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "filename": "/home/iobroker/Werte.csv",
                     "appendNewline": true,
                     "createDir": false,
                     "overwriteFile": "false",
                     "encoding": "none",
                     "x": 1110,
                     "y": 1300,
                     "wires": [
                         []
                     ]
                 },
                 {
                     "id": "18b56710.ea67a9",
                     "type": "inject",
                     "z": "40d29c16.113a14",
                     "name": "HSV_15_letzte_Aktualisierung",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "HSV_15_letzte_Aktualisierung",
                     "payload": "06.11.2021. 19:05:01",
                     "payloadType": "str",
                     "x": 440,
                     "y": 1240,
                     "wires": [
                         [
                             "a861d489.783478"
                         ]
                     ]
                 },
                 {
                     "id": "579a7ee5.1418c",
                     "type": "inject",
                     "z": "40d29c16.113a14",
                     "name": "HSV_15_Pellets_Tagesverbrauch",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "HSV_15_Pellets_Tagesverbrauch",
                     "payload": "35",
                     "payloadType": "num",
                     "x": 450,
                     "y": 1300,
                     "wires": [
                         [
                             "a861d489.783478"
                         ]
                     ]
                 },
                 {
                     "id": "a2473482.45ab98",
                     "type": "inject",
                     "z": "40d29c16.113a14",
                     "name": "HSV_15_Pellets_Tageszählerstand",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "HSV_15_Pellets_Tageszählerstand",
                     "payload": "525",
                     "payloadType": "str",
                     "x": 440,
                     "y": 1360,
                     "wires": [
                         [
                             "a861d489.783478"
                         ]
                     ]
                 },
                 {
                     "id": "d0075074.ad58f",
                     "type": "change",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "",
                             "tot": "date"
                         },
                         {
                             "t": "set",
                             "p": "ts",
                             "pt": "msg",
                             "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                             "tot": "jsonata"
                         },
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "ts & ';' & payload.HSV_15_letzte_Aktualisierung & ';' &  payload.HSV_15_Pellets_Tagesverbrauch & ';' & payload.HSV_15_Pellets_Tageszählerstand",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 850,
                     "y": 1300,
                     "wires": [
                         [
                             "cd391a0c.856018",
                             "c65b7e5.c323b8"
                         ]
                     ]
                 },
                 {
                     "id": "a861d489.783478",
                     "type": "join",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "mode": "custom",
                     "build": "object",
                     "property": "payload",
                     "propertyType": "msg",
                     "key": "topic",
                     "joiner": "\\n",
                     "joinerType": "str",
                     "accumulate": true,
                     "timeout": "",
                     "count": "3",
                     "reduceRight": false,
                     "reduceExp": "",
                     "reduceInit": "",
                     "reduceInitType": "",
                     "reduceFixup": "",
                     "x": 690,
                     "y": 1300,
                     "wires": [
                         [
                             "d0075074.ad58f"
                         ]
                     ]
                 },
                 {
                     "id": "c65b7e5.c323b8",
                     "type": "debug",
                     "z": "40d29c16.113a14",
                     "name": "",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "false",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 1080,
                     "y": 1260,
                     "wires": []
                 }
              ]
              

              In diesem Fall werden immer alle 3 Datenpunkte mit dem letzten Wert geschrieben:

              cat Werte.csv
              Datum & Uhrzeit;Aktualisierung;Tagesverbrauch;Tageszähler
              06.11.2021 19:52:02;06.11.2021. 19:05:01;35;525
              06.11.2021 19:54:02;06.11.2021. 19:05:01;35;525
              

              aea2f490-10cc-41e8-a0fc-d0988aaed8ce-image.png

              Meines Erachtens solltest Du aber die einfachste Methode (1. Methode) einfach Datum, Topic, Wert nehmen und mit Pivot Tabellen arbeiten und nach Topic gruppieren - aber da bin ich nicht der Spezialist - das können andere sicher besser.

              Aber ich denke ich habs hinbekommen:

              Präferierte Lösung:
              Wenn Du nut einfach Timestamp, Topic und Wert nimmst, dann bekommst den Linken Teil der Tabelle und kannst daraus über das Pivot das leicht gruppieren.

              20c63601-8f5e-4d45-97d4-91989095900e-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.

              M 1 Antwort Letzte Antwort
              0
              • mickymM mickym

                @manfredh-1 Wie gesagt nimm mal die veränderte Change Node und das Topic ist mit dabei.

                Jetzt gibt es 2 Möglichkeiten - entweder Du machst im Excel Pivot Tabellen oder Du machst in die Change Nodes entsprechende Semicolons für die zusätzlichen Spalten.

                Die letzte Aktualisierung ist aber Käse weil der Timestamp ja durch die Change NOde gesetzt ist.

                Für die 1 Variante kannst alle in die modifizierte Change Node laufen lassen,
                ansonsten für Spalte 2 brauchst halt für jede Spalte eine andere Change Node.

                Die 2. Variante erzeugt dann so eine csv

                cat Werte.csv
                Datum & Uhrzeit;Datenpunkt;Aktualisierung;Tagesverbrauch;Tageszähler
                06.11.2021 19:24:51;HSV_15_letzte_Aktualisierung;06.11.2021. 19:05:01
                06.11.2021 19:24:53;HSV_15_Pellets_Tagesverbrauch;;23
                06.11.2021 19:24:54;HSV_15_Pellets_Tageszählerstand;;;522
                06.11.2021 19:25:00;HSV_15_letzte_Aktualisierung;06.11.2021. 19:05:01
                

                Ich finde das mit den zusätzlichen Spalten pro Datenpunkt eigentlich unschön

                6f455126-86e1-47ca-8e6c-27a5113ce90f-image.png

                [
                   {
                       "id": "cd391a0c.856018",
                       "type": "file",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "filename": "/home/iobroker/Werte.csv",
                       "appendNewline": true,
                       "createDir": false,
                       "overwriteFile": "false",
                       "encoding": "none",
                       "x": 1110,
                       "y": 1300,
                       "wires": [
                           []
                       ]
                   },
                   {
                       "id": "18b56710.ea67a9",
                       "type": "inject",
                       "z": "40d29c16.113a14",
                       "name": "HSV_15_letzte_Aktualisierung",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "HSV_15_letzte_Aktualisierung",
                       "payload": "06.11.2021. 19:05:01",
                       "payloadType": "str",
                       "x": 440,
                       "y": 1240,
                       "wires": [
                           [
                               "f705fd8.b0d16"
                           ]
                       ]
                   },
                   {
                       "id": "579a7ee5.1418c",
                       "type": "inject",
                       "z": "40d29c16.113a14",
                       "name": "HSV_15_Pellets_Tagesverbrauch",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "HSV_15_Pellets_Tagesverbrauch",
                       "payload": "23",
                       "payloadType": "num",
                       "x": 450,
                       "y": 1300,
                       "wires": [
                           [
                               "4b949208.b75f2c"
                           ]
                       ]
                   },
                   {
                       "id": "a2473482.45ab98",
                       "type": "inject",
                       "z": "40d29c16.113a14",
                       "name": "HSV_15_Pellets_Tageszählerstand",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "HSV_15_Pellets_Tageszählerstand",
                       "payload": "522",
                       "payloadType": "str",
                       "x": 440,
                       "y": 1360,
                       "wires": [
                           [
                               "d0075074.ad58f"
                           ]
                       ]
                   },
                   {
                       "id": "f705fd8.b0d16",
                       "type": "change",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "rules": [
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "",
                               "tot": "date"
                           },
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                               "tot": "jsonata"
                           },
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "ts & ';' & topic & ';' & payload",
                               "tot": "jsonata"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 710,
                       "y": 1240,
                       "wires": [
                           [
                               "cd391a0c.856018"
                           ]
                       ]
                   },
                   {
                       "id": "4b949208.b75f2c",
                       "type": "change",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "rules": [
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "",
                               "tot": "date"
                           },
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                               "tot": "jsonata"
                           },
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "ts & ';' & topic & ';' & ';' & payload",
                               "tot": "jsonata"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 710,
                       "y": 1300,
                       "wires": [
                           [
                               "cd391a0c.856018"
                           ]
                       ]
                   },
                   {
                       "id": "d0075074.ad58f",
                       "type": "change",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "rules": [
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "",
                               "tot": "date"
                           },
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                               "tot": "jsonata"
                           },
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "ts & ';' & topic & ';' & ';' & ';' & payload",
                               "tot": "jsonata"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 710,
                       "y": 1360,
                       "wires": [
                           [
                               "cd391a0c.856018"
                           ]
                       ]
                   }
                ]
                

                47f49ea7-b0fc-46a9-8b96-51bdf42c8bcf-image.png

                Wenn man sicher stellen kann, dass die Datenpunkte einmal in der richtigen Reihenfolge getriggert werden, kann man auch ein Objekt erstellen, dass wäre dann die 3. Möglichkeit:

                Dann muss man aber darauf achten, dass die Datenpunkte in der richtigen Reihenfolge einmal aktualisiert werden

                8b7f2c01-933d-47a5-ae2a-6429d917db43-image.png

                [
                   {
                       "id": "cd391a0c.856018",
                       "type": "file",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "filename": "/home/iobroker/Werte.csv",
                       "appendNewline": true,
                       "createDir": false,
                       "overwriteFile": "false",
                       "encoding": "none",
                       "x": 1110,
                       "y": 1300,
                       "wires": [
                           []
                       ]
                   },
                   {
                       "id": "18b56710.ea67a9",
                       "type": "inject",
                       "z": "40d29c16.113a14",
                       "name": "HSV_15_letzte_Aktualisierung",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "HSV_15_letzte_Aktualisierung",
                       "payload": "06.11.2021. 19:05:01",
                       "payloadType": "str",
                       "x": 440,
                       "y": 1240,
                       "wires": [
                           [
                               "a861d489.783478"
                           ]
                       ]
                   },
                   {
                       "id": "579a7ee5.1418c",
                       "type": "inject",
                       "z": "40d29c16.113a14",
                       "name": "HSV_15_Pellets_Tagesverbrauch",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "HSV_15_Pellets_Tagesverbrauch",
                       "payload": "35",
                       "payloadType": "num",
                       "x": 450,
                       "y": 1300,
                       "wires": [
                           [
                               "a861d489.783478"
                           ]
                       ]
                   },
                   {
                       "id": "a2473482.45ab98",
                       "type": "inject",
                       "z": "40d29c16.113a14",
                       "name": "HSV_15_Pellets_Tageszählerstand",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "HSV_15_Pellets_Tageszählerstand",
                       "payload": "525",
                       "payloadType": "str",
                       "x": 440,
                       "y": 1360,
                       "wires": [
                           [
                               "a861d489.783478"
                           ]
                       ]
                   },
                   {
                       "id": "d0075074.ad58f",
                       "type": "change",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "rules": [
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "",
                               "tot": "date"
                           },
                           {
                               "t": "set",
                               "p": "ts",
                               "pt": "msg",
                               "to": "$moment(ts).locale(\"de\").tz('Europe/Berlin').format('DD.MM.YYYY HH:mm:ss')",
                               "tot": "jsonata"
                           },
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "ts & ';' & payload.HSV_15_letzte_Aktualisierung & ';' &  payload.HSV_15_Pellets_Tagesverbrauch & ';' & payload.HSV_15_Pellets_Tageszählerstand",
                               "tot": "jsonata"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 850,
                       "y": 1300,
                       "wires": [
                           [
                               "cd391a0c.856018",
                               "c65b7e5.c323b8"
                           ]
                       ]
                   },
                   {
                       "id": "a861d489.783478",
                       "type": "join",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "mode": "custom",
                       "build": "object",
                       "property": "payload",
                       "propertyType": "msg",
                       "key": "topic",
                       "joiner": "\\n",
                       "joinerType": "str",
                       "accumulate": true,
                       "timeout": "",
                       "count": "3",
                       "reduceRight": false,
                       "reduceExp": "",
                       "reduceInit": "",
                       "reduceInitType": "",
                       "reduceFixup": "",
                       "x": 690,
                       "y": 1300,
                       "wires": [
                           [
                               "d0075074.ad58f"
                           ]
                       ]
                   },
                   {
                       "id": "c65b7e5.c323b8",
                       "type": "debug",
                       "z": "40d29c16.113a14",
                       "name": "",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "false",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 1080,
                       "y": 1260,
                       "wires": []
                   }
                ]
                

                In diesem Fall werden immer alle 3 Datenpunkte mit dem letzten Wert geschrieben:

                cat Werte.csv
                Datum & Uhrzeit;Aktualisierung;Tagesverbrauch;Tageszähler
                06.11.2021 19:52:02;06.11.2021. 19:05:01;35;525
                06.11.2021 19:54:02;06.11.2021. 19:05:01;35;525
                

                aea2f490-10cc-41e8-a0fc-d0988aaed8ce-image.png

                Meines Erachtens solltest Du aber die einfachste Methode (1. Methode) einfach Datum, Topic, Wert nehmen und mit Pivot Tabellen arbeiten und nach Topic gruppieren - aber da bin ich nicht der Spezialist - das können andere sicher besser.

                Aber ich denke ich habs hinbekommen:

                Präferierte Lösung:
                Wenn Du nut einfach Timestamp, Topic und Wert nimmst, dann bekommst den Linken Teil der Tabelle und kannst daraus über das Pivot das leicht gruppieren.

                20c63601-8f5e-4d45-97d4-91989095900e-image.png

                M Offline
                M Offline
                ManfredHi
                schrieb am zuletzt editiert von
                #8

                @mickym Super vielen Dank für Deine Mühe. Werde mich jetzt mal damit genauer beschäftigen. Und eventuell nochmals nachfragen wenn ich nicht weiterkommen sollte.

                mickymM 1 Antwort Letzte Antwort
                0
                • M ManfredHi

                  @mickym Super vielen Dank für Deine Mühe. Werde mich jetzt mal damit genauer beschäftigen. Und eventuell nochmals nachfragen wenn ich nicht weiterkommen sollte.

                  mickymM Online
                  mickymM Online
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von
                  #9

                  @manfredh-1 Wenn Du übrigens Tabstopps haben willst dann änderst Du die JSONATA Zeile in der Change Node wie folgt:

                  ts & '\t' & topic & '\t' & payload
                  

                  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
                  • M ManfredHi

                    Hallo,
                    wie kann ich um eine bestimmte Uhrzeit den Wert von zwei oder drei Datenpunkten automatisiert in ein Log-/oder CSV-File schreiben.
                    Dieses wird benötigt für eine Excel-Tabelle, wo das File dann entsprechend verarbeitet wird.
                    Gibt es dazu eine Möglichkeit (ohne den Weg des händigen Exports über History).
                    DANKE !!!!!

                    mickymM Online
                    mickymM Online
                    mickym
                    Most Active
                    schrieb am zuletzt editiert von mickym
                    #10

                    @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

                    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.

                    mickymM G 2 Antworten Letzte Antwort
                    0
                    • mickymM 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

                      mickymM Online
                      mickymM Online
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von
                      #11

                      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.

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

                        G Offline
                        G Offline
                        Garf
                        schrieb am zuletzt editiert von
                        #12

                        @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

                        mickymM 1 Antwort Letzte Antwort
                        0
                        • G Garf

                          @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

                          mickymM Online
                          mickymM Online
                          mickym
                          Most Active
                          schrieb am zuletzt editiert von mickym
                          #13

                          @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.

                          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.

                          G 1 Antwort Letzte Antwort
                          0
                          • mickymM 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 Offline
                            G Offline
                            Garf
                            schrieb am zuletzt editiert von
                            #14

                            @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.

                            mickymM 1 Antwort Letzte Antwort
                            0
                            • G Garf

                              @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.

                              mickymM Online
                              mickymM Online
                              mickym
                              Most Active
                              schrieb am zuletzt editiert von
                              #15

                              @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.

                              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.

                              G 1 Antwort Letzte Antwort
                              0
                              • mickymM mickym

                                @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 Offline
                                G Offline
                                Garf
                                schrieb am zuletzt editiert von
                                #16

                                @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

                                mickymM 1 Antwort Letzte Antwort
                                0
                                • G Garf

                                  @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

                                  mickymM Online
                                  mickymM Online
                                  mickym
                                  Most Active
                                  schrieb am zuletzt editiert von mickym
                                  #17

                                  @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

                                  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.

                                  G 1 Antwort Letzte Antwort
                                  0
                                  • mickymM 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 Offline
                                    G Offline
                                    Garf
                                    schrieb am zuletzt editiert von
                                    #18

                                    @mickym

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

                                    mickymM 1 Antwort Letzte Antwort
                                    0
                                    • G Garf

                                      @mickym

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

                                      mickymM Online
                                      mickymM Online
                                      mickym
                                      Most Active
                                      schrieb am zuletzt editiert von mickym
                                      #19

                                      @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.

                                      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.

                                      G 1 Antwort Letzte Antwort
                                      0
                                      • mickymM 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 Offline
                                        G Offline
                                        Garf
                                        schrieb am zuletzt editiert von
                                        #20

                                        @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.

                                        mickymM 1 Antwort Letzte Antwort
                                        0
                                        • G Garf

                                          @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.

                                          mickymM Online
                                          mickymM Online
                                          mickym
                                          Most Active
                                          schrieb am zuletzt editiert von mickym
                                          #21

                                          @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.

                                          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.

                                          G 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          597

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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