NEWS
Datenpunkt in LOG oder CSV File schreiben
-
@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:
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.
-
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
csv-Datei
-
@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:
-
Ich dachte es mir schon. CSV Dateien sind im Prinzip ja nur Textdateien. Ich wandel mal um, mal sehen wie es dann aussieht.
-
@garf sagte in Datenpunkt in LOG oder CSV File schreiben:
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.
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.
-
Alles klar. Die Datei war noch geöffnet und mit Text in Spalte kommt dann folgendes Ergebnis heraus:
Ergebnis sieht mehr als brauchbar aus. Werde gleich den von dir beschriebenen Weg probieren. Insgesamt kann es sich schon mal sehen lassen.
-
@garf sagte in Datenpunkt in LOG oder CSV File schreiben:
Alles klar. Die Datei war noch geöffnet und mit Text in Spalte kommt dann folgendes Ergebnis heraus:
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.
-
Nein habe ich nur bei den Eigenversuchen gemacht. Die Datei habe ich mit Filezilla auf den Desktop kopiert. Ich muss es gleich noch einmal nach deiner Beschreibung machen. Gebe dir dazu im Laufe des Abends noch eine Rückmeldung. Allerdings die Fehlermeldung kommt immer noch.
-
@mickym sagte in Datenpunkt in LOG oder CSV File schreiben:
Bin in der nächsten Zeit nur sporadisch an Board.
Kein Problem. Ich kann jetzt ja schon einmal die Daten in den csv-File schreiben lassen. Dies hilft mir doch schon sehr weiter. Der Rest wird schon noch im Laufe der Zeit.
-
@garf Na dann hast die File Nodes zum Testen des Zugriffs nicht installiert oder falschen Dateinamen eingetragen.
-
@mickym sagte in Datenpunkt in LOG oder CSV File schreiben:
Na dann hast die File Nodes zum Testen des Zugriffs nicht installiert oder falschen Dateinamen eingetragen.
Ja, durchaus möglich, dass ich da noch etwas nicht gemacht habe. Die Datei wird ja angelegt. Ich mache mal eins nach dem anderen.
Danke für deine Unterstützung.
-
@garf sagte in Datenpunkt in LOG oder CSV File schreiben:
@mickym sagte in Datenpunkt in LOG oder CSV File schreiben:
Na dann hast die File Nodes zum Testen des Zugriffs nicht installiert oder falschen Dateinamen eingetragen.
Ja, durchaus möglich, dass ich da noch etwas nicht gemacht habe. Die Datei wird ja angelegt. Ich mache mal eins nach dem anderen.
Danke für deine Unterstützung.
https://flows.nodered.org/node/node-red-contrib-fs-ops
node-red-contrib-fs-ops installieren - ist Bestandteil des Flows
-
Habe ich installiert.
Entwarnung. Ist die Ausgabe der msg-Node und das Ergebnis der Prüfung. Das Thema können wir abhaken.
-
In Teilen bin ich nun weiter gekommen. Die csv Datei wird nun so geschrieben , dass man diese nun nicht mehr für die Aufteilung in Spalten in Excel noch umwandeln muss. Öffnet man die csv in Excel erscheint nun direkt folgende Darstellung:
Die ersten Werte sammel ich gerade über MQTT für die Datenbank ein. Dabei ist mir aufgefallen, das die Wetterstation als Dezimaltrennzeichen einen Punkt verwendet und bei ganzen Zahlen keine Nachkommastellen sendet. Dies kann ich zwar über ein function-Node und der Funktion replace korrigieren. Ich würde dies aber lieber über JSONata und dem Change-Node machen. Leider steige ich da nicht wirklich durch. Angesehen habe ich mir die string Funktionen zwar, aber eine Lösung konnte ich mir damit nicht herleiten. Könnt ihr mir evtl. weiterhelfen?
Danke.
P.S: Ich habe hier https://forum.iobroker.net/topic/49835/vergleich-von-zwei-eingangswerten-um-wert-festzulegen/49 sehr interessiert mitgelesen, auch wenn ich in der Tiefe nicht alles verstanden habe,
-
@garf In der Change Node Zahlen Komma - habe ich doch alles gemacht?? Es war alles fix und fertig, so dass man nur einmal importieren muss und dann kann man einfach Daten aktualisieren im Excel machen.
In dem Originalflow - war diese Change Node jedenfalls schon drin - ich weiß nicht, warum man die dann nicht verwenden kann?? Ich gehe eigentlich schon davon aus ,wenn ich mir die Mühe für eine Lösung mache, dass man die Flows auch importiert und zumindest anschaut. - Sonst kann ich mir das ja auch sparen.
Wenn Du es nicht aufgerundet - sondern zwingend 2 Dezimalstellen haben willst - also auch bei Ganzzahlen musst halt den Formatstring auf #,00 anpassen.
-
@mickym sagte in Datenpunkt in LOG oder CSV File schreiben:
ich weiß nicht, warum man die dann nicht verwenden kann??
Keine Sorge, deinen Flow habe ich schon 1:1 in das Testsystem übernommen.
Soweit ich den den Change-Node verstehe wandelst Du einen Zahlenwert in ein beliebiges Format um und tauscht Punkt gegen Komma. Ich habe aber keinen Zahlenwert, sondern ein Textfeld.Und dies kommt, wenn ich den von MQTT übergeben Wert in deinen Flow übernehme:
Deshalb habe ich die Frage auch nach dem Tausch der Dezimalstelle in einem String gefragt. Im function-Node geht dies mit der replace Funktion. Beispiel: regenTag = regenTag.replace('.', ',');
So sehen die von MQTT übegebenen Werte aus:
Umwandeln von String in Number und dann von Punkt auf Komma?
-
@garf Hast Du die unselige Option in den Adaptereinstellungen raus gemacht - dass alles in strings umgewandelt wird? Oder holst Du direkt alles aus mqtt Nodes? Wenn ja dann kommen da auch nur strings raus - dann musst Du in Zahlen mit Numbers umwandeln - einfach JSONATA erweitern.
Dann einfach ein $number drum rum machen:
$number( $formatNumber( payload, "#,00", { 'decimal-separator':',', 'grouping-separator':'.' } ) )
-
Ich verwende keinen Adapter und kein iobroker. Ich verwende ausschließlich Node Red und zur Kommunikation unter den verschiedenen Reglern Modbus und den MQTT Broker. Die Werte in den MQTT Nodes sind leider immer im Stringformat. Ich glaube sogar die ELV Wetterstation übergibt die Werte schon als Stringwert.
-
@mickym sagte in Datenpunkt in LOG oder CSV File schreiben:
@garf Hast Du die unselige Option in den Adaptereinstellungen raus gemacht - dass alles in strings umgewandelt wird? Oder holst Du direkt alles aus mqtt Nodes? Wenn ja dann kommen da auch nur strings raus - dann musst Du in Zahlen mit Numbers umwandeln - einfach JSONATA erweitern.
Dann einfach ein $number drum rum machen:
$number( $formatNumber( payload, "#,00", { 'decimal-separator':',', 'grouping-separator':'.' } ) )
Cool, wird sofort getestet. Dass wäre ja ein Ding. Du glaubst gar nicht was ich schon gesucht habe.
-
@garf Ja ich habe es gerade gedacht - dann wie gesagt erst in Zahl umwandeln und dann mit dieser Format funktion wieder umwandeln - also einfach nochmal ein $number() drum rum -