NEWS
Werte vom Datenpunkt in CSV-Datei schreiben *gelöst*
-
Hallo zusammen,
ich würde gerne regelmäßig die Werte von einem Datenpunkt in eine CSV Datei schreiben lassen. Die neuen Daten sollen in der CSV ergänzt werden.
Der Datenunkt wird immer um 23:30 Uhr befüllt und um 23:59 Uhr wieder auf 0 gesetzt. Die Null-Werte sollen nicht übernommen werden. Vielleicht gibt es eine Blockly Lösung hierfür?
Ich habe mich schon an Node-Red versucht, aber da bin ich leider gar kein Experte von.
Danke im Voraus!Gruß surfer
-
@surfer09 ich habe diese Aufgabe in Node-Red mit fertigen Flows hier schon mal entwickelt, die müsstest Du doch nur importieren. Suche mal den thread.
-
@mickym Hallo Micky! Ich hatte vorhin schon einen Beitrag von dir gefunden, aber das funktionierte irgendwie nicht. Vielleicht hatte ich auch den falschen erwischt...
Dieser hier war das...
https://forum.iobroker.net/topic/49120/datenpunkt-in-log-oder-csv-file-schreiben?_=1654435736394
-
@surfer09 Genau und in diesem Post habe ich doch den Flow gepostet: https://forum.iobroker.net/topic/49120/datenpunkt-in-log-oder-csv-file-schreiben/34?_=1654435736394
und wenn was nicht funktioniert, dann muss man das halt Punkt für Punkt durchgehen. In dem Thread hat es ja funktioniert.
-
Das einzige was man ggf. noch davor bauen muss, ist nach dem Datenpunkt auslesen eine switch Node als Filter für Dein Zeitfenster.
-
@mickym Puhhh... bei mir gehts schon damit los, wie ich den entsprechenden Datenpunkt in Node bekomme..
Ich habe jetzt mal diesen hier genommen (würde vom Namen "inject" mal davon ausgehen, das man hier die zu verarbeitenden Daten reinkippt)
Aber wo wähle ich denn jetzt den Datenpunkt aus, um den es geht? -
@surfer09 Nein - mit der Inject Node kannst Du selbst Daten in einen Flow einspeisen, um das Ganze zu testen. Die Daten selbst bekommst Du über die iobroker IN Node. Da kannst Du den Datenpunkt direkt im Topic direkt auswählen.
Ich habe gerade den Flow nochmals importiert, was wichtig ist, dass Du ggf. noch die Dateisystem Nodes installierst. Ich habe das in dem Flow deshalb benutzt, um ggf. die erste Zeile mit den Überschriften zu erstellen, wenn di Datei noch nicht existiert.
-
@mickym Ahhh, das hat schon einmal funktioniert.
Kann ich beim "Datei schreiben" Block einfach einen Pfad von meinem NAS hinterlegen?
-
@surfer09 Theoretisch ja - aber das habe ich den Thread ja auch schon oft diskutiert. Das Problem was sich oft rausgestellt hat, dass es über UNC Namen oft nicht geht, es an Berechtigungen fehlt oder der Flow halt Fehler wirft, wenn die Netzverbindung weg ist. Ich bin inzwischen eher ein Anhänger die CSV Datei lokal zu erstellen und ggf. dann im Netz rumzukopieren. Aber Du kannst ja versuchen ob Du was schreiben kannst.
Du musst Dir immer vorstellen, dass NodeRed im iobroker mit dem User iobroker arbeitet, der dann auf dem Zielsystem die Rechte hat. Ggf. kannst auch mal versuchen, Dein NAS Speicherort lokal zu mounten, so dass NodeRed es gar nicht mitbekommt, dass Du auf einem entfernten System schreibst.Nimm halt einfach einen selbsterstellten Datenpunkt und versuche mit dem was Du in Deinem Flow gemacht hast, ob Du was schreiben kannst.
Allerdings bleibt die Datei immer offen, wenn Du den Pfad direkt in die WriteFile Node schreibst. Besser ist es den Dateinamen in einer Change Node mitzugeben und aus der FileNode zu löschen.
-
@surfer09 sagte in Werte vom Datenpunkt in CSV-Datei schreiben:
@mickym Ahhh, das hat schon einmal funktioniert.
Kann ich beim "Datei schreiben" Block einfach einen Pfad von meinem NAS hinterlegen?
Im Prinzip entspricht die iobroker IN Node diesem Blockly Teil
-
@mickym Okay, das habe ich verstanden. "Change" habe ich jetzt auch gesetzt
Allerdings läuft mein IO-Broker auf Windows. Kommt er dann mit dem /home/iobroker klar?
Aktuell schreibt sich noch gar nichts in die Datei.. Der IN-IOBroker Block zeigt aber schonmal den geschriebenen Wert an. -
Wie gesagt bevor Du den Flow aus dem anderen Thread importierst, solltest Du in deinem NodeRed noch die Dateisystem Nodes installieren. Damit kann man auch Dateien löschen etc..
Wie gesagt - nutze einfach mal den Flow aus dem anderen Thread - ich erkläre Dir das gleich.
Als erstes gehst Du bitte in Deine NodeRed Adaptereinstellungen und hakst dort an, dass Du den Paletten-Manager nutzen willst.
-
@mickym ok, ist erledigt.
-
@surfer09 sagte in Werte vom Datenpunkt in CSV-Datei schreiben:
@mickym ok, ist erledigt.
Dann öffnest Du den Palettenmanager im Hauptmenü
und gibst bei der Suche für die Installation folgendes ein:
node-red-contrib-fs-ops
Wenn das alles geklappt hat, dann siehst Du im ersten Tab, dass die Nodes installiert wurden:
die stehen Dir ab sofort auch zur Verfügung
-
falls du an einer Lösung mit Blockly interessiert bist, meld dich. Ich schreibe per Blockly die Werte meiner PV Anlage am Ende des Monats in eine CSV
-
@frana120500 Hallo Frana! Stelle deine Lösung doch vielleicht auch vor. Wäre ja gar nicht schlecht, wenn man 2 Lösungswege hat.
-
@mickym sagte in Werte vom Datenpunkt in CSV-Datei schreiben:
d gibst bei der Suche für die Installation folgendes ein:
Ja, auch erledigt
Hat alles funktioniert soweit.
-
@surfer09 Gut dann nimmst Du den Flow aus dem anderen Thread - ich kopier den nochmal hier rein - und kopierst ihn in die Zwischenablage und importierst ihn dann in Node Red.
Sobald Du den Code hier aus dem Thread in die Zwischenablage kopiert hast, gehst Du im Node Red im Hauptmenü auf Import:
und fügst den Code in das rosa Fenster und klickst auf Import
-
@mickym sagte in Werte vom Datenpunkt in CSV-Datei schreiben:
Hat auch funktioniert. Jetzt habe ich hier einige Blöcke mehr im Fenster
-
@surfer09 Sehr gut - nun schaut es erst mal so aus, wie in dem anderen Thread.
So nun müssen wir den Flow an deine Bedürfnisse anpassen.
Wieviele Datenpunkte möchtest Du denn schreiben und welche Spalten, wie sollten die Überschriften lauten etc. ????
-
Hier meine Blockly Lösung. Ich habe mir einen Mountpunkt angelegt, da ich die Daten noch weiterverarbeite.
In meinem Fall werden die neuen Daten unten angehangen. Habe jetzt hier mit dem ID von Selektor gearbeitet, aber das lässt sich ja anpassen.
Hier das Blockly:
Der Inhalt der Funktion:
und hier das ganze als Blockly Export: