NEWS
Werte vom Datenpunkt in CSV-Datei schreiben *gelöst*
-
@mickym Wie müsste man die dort einbauen? Einfach hinten anhängen?
-
@surfer09 Nee Du willst die ja nicht nach jedem Schreiben kopieren. Erst mal wieder testen, ob es überhaupt tut.
In dem Fall nimmst du eine Inject Node und triggerst manuell und trägst die Pfade in die File Copy Node.
Hier mal zum Test - dann einfach auf die Schaltfläche der Inject Node drücken:
EDIT: Das overwrite Flag muss natürlich gesetzt sein
-
@mickym Leider nein. Da bekomme ich eine große Fehlermeldung im LOG:
node-red.0 2022-06-05 18:56:08.161 error 5 Jun 18:56:08 - [error] [fs-ops-copy:91d0be5079826409] TypeError: Cannot read property 'csv' of undefined at I:\iobroker\node_modules\@node-red\util\lib\util.js:430:29 at Array.reduce (<anonymous>) at getObjectProperty (I:\iobroker\node_modules\@node-red\util\lib\util.js:429:18) at getMessageProperty (I:\iobroker\node_modules\@node-red\util\lib\util.js:401:12) at Object.evaluateNodeProperty (I:\iobroker\node_modules\@node-red\util\lib\util.js:647:22) at CopyNode._inputCallback (I:\iobroker\node_modules\iobroker.node-red\userdata\node_modules\node-red-contrib-fs-ops\fs-ops.js:176:32) at I:\iobroker\node_modules\@node-red\runtime\lib\nodes\Node.js:210:26 at Object.trigger (I:\iobroker\node_modules\@node-red\util\lib\hooks.js:166:13) at CopyNode.Node._emitInput (I:\iobroker\node_modules\@node-red\runtime\lib\nodes\Node.js:202:11) at CopyNode.Node.emit (I:\iobroker\node_modules\@node-red\runtime\lib\nodes\Node.js:186:25)
-
@surfer09 OK - um zu checken, dass Du auch die Syntax richtig eingeben hast, probiere halt erst mal eine Datei lokal, wie in meinem Beispiel zu kopieren und erst wenn Du siehst, dass es am Zielpfad hängt, dann musst Du Dich halt im Berechtigungsdschungel Deiner NAS versuchen. Da kann NodeRed wenig ausrichten. Das Problem ist dann wahrscheinlich - gerade auf Windowssystemen, dass der Dienst ggf. unter SYSTEM Kennung läuft - und das schließt Netzwerkzugriffe aus. Da muss man dann ggf. mit Benutzern als Dienst arbeiten - aber da habe ich bzgl. Seiteneffekte keine Ahnung. Also das ist was ich meinte - dann lasse es halt weg. Aber ist halt nicht trivial.
-
@mickym Also lokal kein Problem, funktioniert. Auf ein Netzlaufwerk kopieren wird schwierig. Ich vermute auch Berechtigungsproblem, aber kein Problem.
-
@surfer09 Eben - die Datei ist ja sicher Bestandteil Deiner Datensicherung, die dann sowieso auf dem NAS landet. Also schönen Abend noch.
-
@mickym Kannst du mir vielleicht noch einmal helfen? Die CSV Datei läuft ja jetzt schon ein paar Tage und das Ergebnis sieht aktuell so aus.
Ich kann mir nicht wirklich erklären, woher die Nullwerte kommen und warum er zwischendurch anfängt die Überschrift wieder einzufügen. Eigentlich werden die Nullwerte gar nicht aufgezeichnet.
Hier die Verlaufsdaten des Datenpunktes.Außerdem erstellt er jedes Mal die Datei neu. Wenn ich manuell die Nullwerte lösche, sind diese bei der nächsten Datenübertragung wieder drin. Gibt es die Möglichkeit die CSV Datei einfach zu ergänzen mit den neuen Werten?
[ { "id": "f8853ddf8535a98c", "type": "ioBroker in", "z": "1f191dc3161284eb", "name": "Tagesertrag-Solaranlage-Carport", "topic": "0_userdata.0.Tagesertrag-Solaranlage-Carport", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "outFormat": "MQTT", "x": 170, "y": 320, "wires": [ [ "ff441e41.86da6" ] ] }, { "id": "cd391a0c.856018", "type": "file", "z": "1f191dc3161284eb", "name": "", "filename": "", "appendNewline": false, "createDir": false, "overwriteFile": "false", "encoding": "cp1252", "x": 1900, "y": 500, "wires": [ [] ] }, { "id": "792b60ad.f1578", "type": "csv", "z": "1f191dc3161284eb", "name": "", "sep": ";", "hdrin": "", "hdrout": "once", "multi": "one", "ret": "\\r\\n", "temp": "", "skip": "0", "strings": true, "include_empty_strings": "", "include_null_values": "", "x": 1340, "y": 500, "wires": [ [ "df1d94b.c458e68" ] ] }, { "id": "8f1ae972.d5f228", "type": "change", "z": "1f191dc3161284eb", "name": "", "rules": [ { "t": "set", "p": "reset", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1170, "y": 440, "wires": [ [ "792b60ad.f1578" ] ] }, { "id": "fbd8dc3f.4df7c", "type": "change", "z": "1f191dc3161284eb", "name": "", "rules": [ { "t": "set", "p": "columns", "pt": "msg", "to": "Datum & Uhrzeit,Ertrag in kWh", "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": 780, "y": 480, "wires": [ [ "31ffef83.0a28a" ] ] }, { "id": "31ffef83.0a28a", "type": "switch", "z": "1f191dc3161284eb", "name": "NewFile?", "property": "fNewFile", "propertyType": "flow", "rules": [ { "t": "true" }, { "t": "false" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 970, "y": 480, "wires": [ [ "8f1ae972.d5f228" ], [ "792b60ad.f1578" ] ] }, { "id": "ff441e41.86da6", "type": "change", "z": "1f191dc3161284eb", "name": "Ertrag in kWh", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "Ertrag in kWh", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 200, "y": 480, "wires": [ [ "579569f5.ebb9c8" ] ] }, { "id": "df1d94b.c458e68", "type": "change", "z": "1f191dc3161284eb", "name": "fNewFile = false", "rules": [ { "t": "set", "p": "fNewFile", "pt": "flow", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1510, "y": 500, "wires": [ [ "7f14f556.0e8bcc" ] ] }, { "id": "7f14f556.0e8bcc", "type": "change", "z": "1f191dc3161284eb", "name": "", "rules": [ { "t": "set", "p": "filename", "pt": "msg", "to": "I:\\CSV\\Solarertrag.csv", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1720, "y": 500, "wires": [ [ "cd391a0c.856018" ] ] }, { "id": "579569f5.ebb9c8", "type": "change", "z": "1f191dc3161284eb", "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": 410, "y": 480, "wires": [ [ "8f46052e.5418c8", "3c6c5d15.ba7f42" ] ] }, { "id": "8f46052e.5418c8", "type": "join", "z": "1f191dc3161284eb", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "1", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 600, "y": 480, "wires": [ [ "fbd8dc3f.4df7c" ] ] }, { "id": "3c6c5d15.ba7f42", "type": "fs-ops-access", "z": "1f191dc3161284eb", "name": "", "path": "I:\\CSV", "pathType": "str", "filename": "Solarertrag.csv", "filenameType": "str", "read": true, "write": true, "throwerror": false, "x": 640, "y": 620, "wires": [ [ "8d3670b.8ae109" ], [ "ea9cb3bc.5c8b4" ] ] }, { "id": "8d3670b.8ae109", "type": "change", "z": "1f191dc3161284eb", "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": 830, "y": 580, "wires": [ [ "992590f7.3b452" ] ] }, { "id": "ea9cb3bc.5c8b4", "type": "change", "z": "1f191dc3161284eb", "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": 830, "y": 660, "wires": [ [ "992590f7.3b452" ] ] }, { "id": "992590f7.3b452", "type": "debug", "z": "1f191dc3161284eb", "name": "", "active": true, "tosidebar": false, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "msg", "x": 1020, "y": 620, "wires": [] } ]
Gruß surfer
-
@surfer09 Also die 0 Werte kann ich mir auch nicht erklären, aber werden ja wohl kommen.
Als erstes kannst Du mal versuchen, in der iobroker-IN Node nur Werte mit ACK=true durchzulassen (also nicht dass da Commandos in dem Datenpunkt existieren), wobei das ist ja ein selbst erstellter Datenpunkt - da müsstest Du ggf. auch mal Dein Blockly oder was das ist, der den Datenpunkt befüllt mal überprüfen.
Ausserdem hake mal bitte in der JOIN Node an, dass auch bei folgenden Nachrichten gesendet wird.
Ansonsten wenn das nichts hilft - hängst Du eine switch Node hinter die iobroker IN Node, die diese 0 Werte ausfiltert.
Das 2. Problem mit den Überschriften taucht eigentlich nur auf, wenn der reset gesendet wird und quasi die Datei als nicht verfügbar angezeigt wird.
Man kann das natürlich alles wegschmeissen. Das einfachste wäre allerdings einfach, wenn die Datei existiert - in der csv Node einzustellen, dass die Spaltenüberschriften nie gesendet werden:Wie gesagt, wir können das auch alles aus dem Flow entfernen.
Ohne Überschriften mit LogEintrag, wenn Wert geschrieben wird und ohne Prüfung ob Datei existiert, vereinfacht sich das dann wie folgt:
-
@surfer09 sagte in Werte vom Datenpunkt in CSV-Datei schreiben *gelöst*:
Wenn ich manuell die Nullwerte lösche, sind diese bei der nächsten Datenübertragung wieder drin.
Nun ganz verstehe ich das nicht. Es wird ja immer nur ein Wert gesendet, wenn der Datenpunkt aktualisiert wird. Du kannst ja ein Debug Node hinter Deine iobroker In Node machen und in die "Systemkonsole" schreiben - dann erhälst Du jedesmal einen Logeintrag, wenn der Flow über die iobroker IN Node getriggert wird oder Du machst es hinter die switch NOde. Was Du halt untersuchen möchtest.
-
@mickym Danke dir für die schnelle Hilfe. Ich habe die Dinge jetzt mal einbaut. Mal sehen, wie es jetzt dann die nächsten Tage aussieht.