NEWS
Object Daten in Influx db speichern
-
@mickym sagte in Object Daten in Influx db speichern:
Ich sehe nur EINEN Wert.
Bin mir nicht ganz sicher, aber es könnte hieran liegen:
Die meisten Werte liegen ja in der Zukunft. Versuch mal den Zeitraum anzupassen.
-
@marc-berg Oh Du bist sooo schlau. - und ich so doof - das wars.
-
@marc-berg Ich passe trotzdem mal Deinen Flow an - um mal wieder zu beweisen, dass man für sowas keine function Node braucht.
Ein weiterer Unterschied zu meiner Methode über die Batch-Node ist, dass man alles aufeinmal übergeben kann und nicht alles in einzelne Nachrichten aufteilen musst.
Angeblich soll das ja auch mit der influx Out Node gehen:
-
@mickym sagte in Object Daten in Influx db speichern:
Na ja eine function Node ist dafür nicht erforderlich, dass kann ich Dir gerne zeigen wenn Du willst
Nachdem es bei meinen Versuchen mit dem Change Node nicht gleich funktioniert hatte, habe ich es einfach mit der Function Node gemacht. Aber wäre cool wenn du eine Lösung parat hättest. Function Nodes finde ich eigentlich auch bäh.
Edit: zu lange gebraucht für die Antwort
-
@mickym sagte in Object Daten in Influx db speichern:
Angeblich soll das ja auch mit der influx Out Node gehen:
Jaha! Aber so wie ich das verstehe, werden dann ALLE Fields und Tags in einen Datensatz mit einem Timestamp gepackt. Das ist ja nicht das, was wir wollen.
-
@marc-berg Ah OK - aber dann geht es mit der Batch- Node wie ich ja dann an dem Flow für @drdoener zeigen konnte.
in der Batch Node - kannst Du einen timestamp Property setzen.
Deswegen schauen meine Objekte auch so aus:
{ "measurement": "Solarprognose1", "timestamp": 1695790800, "fields": { "Datum": "27.09.2023 07:00:00", "Prognose_W": 0, "Prognose_Wh": 0 } }
Ok - ich bin aber noch an Deinem Flow ...
bissi Geduld.
-
@marc-berg sagte in Object Daten in Influx db speichern:
@mickym sagte in Object Daten in Influx db speichern:
Na ja eine function Node ist dafür nicht erforderlich, dass kann ich Dir gerne zeigen wenn Du willst
Nachdem es bei meinen Versuchen mit dem Change Node nicht gleich funktioniert hatte, habe ich es einfach mit der Function Node gemacht. Aber wäre cool wenn du eine Lösung parat hättest. Function Nodes finde ich eigentlich auch bäh.
Edit: zu lange gebraucht für die Antwort
Ok - ist eigentlich nicht schwer - man muss nur aufpassen mit den verschachtelten Arrays - aber ich habs jetzt mit Deiner Ausgabe abgeglichen.
Hier die modifizierte ChangeNode:
Das Array mit den geänderten Objekten kannst Du einfach so erstellen:
payload.data.[[{"time":start_timestamp,"value":marketprice}]]
falls Du noch tags dahinter machen wolltest.
EDIT: Habs gleich in eine Regel gepackt.
-
@marc-berg sagte in Object Daten in Influx db speichern:
@mickym sagte in Object Daten in Influx db speichern:
Angeblich soll das ja auch mit der influx Out Node gehen:
Jaha! Aber so wie ich das verstehe, werden dann ALLE Fields und Tags in einen Datensatz mit einem Timestamp gepackt. Das ist ja nicht das, was wir wollen.
Du brauchst das nicht in einzelne Nachrichten aufteilen. Ich hab einfach mal das gesamte Array übergeben und das ist in der Datenbank völlig identisch. Und ja es geht mit _time. Klasse wieder viel gelernt.
Du musst nur eine Verschachtelung weniger machen.
Wenn Du also das ganze Array auf einmal in die Influx Node schickst, kommt das identische raus (power.marketdata.3), Deine Lösung (power.marketdata.2).
Fazit für mich: Man muss nicht die Batch-Node verwenden.
-
@mickym sagte in Object Daten in Influx db speichern:
Du musst nur eine Verschachtelung weniger machen.
So, das habe ich jetzt eingebaut und das Ergebnis sieht sehr gut aus. Immer toll zu sehen, wie mächtig eine kurze Zeile JSONata ist. Zwei Nodes gespart.
Danke dir!
-
@marc-berg Und wie gesagt - Du kannst das komplette Array aufeinmal senden.
-
@marc-berg sagte in Object Daten in Influx db speichern:
Immer toll zu sehen, wie mächtig eine kurze Zeile JSONata ist.
Ja das fasziniert mich auch immer wieder, wie mächtig das Teil ist und wieviel Code man sich gegenüber normalem Javascript sparen kann.
-
@mickym sagte in Object Daten in Influx db speichern:
Und wie gesagt - Du kannst das komplette Array aufeinmal senden.
Ja, das ist klar. Hätte ich nicht gedacht, dass es so geht.
-
Ist ja richtig was los hier in diesem jungen Beitrag.
Danke Euch beiden, insbesondere mickym für´s schnelle Antworten.
Das läuft jetzt wunderbar.
Hätte ich gleich posten sollen, dann hätte ich mir 2 Stunden rumprobieren ersparen können! -
@mickym said in Object Daten in Influx db speichern:
Das Array mit den geänderten Objekten kannst Du einfach so erstellen:
payload.data.[[{"time":start_timestamp,"value":marketprice}]]Hallo nochmal,
bin auch gerade dabei, die Preise von der Strombörse in meine influx zu schreiben.
Klappt mit Marcs Vorlage grundsätzlich auch wunderbar.
Nun möchte ich aber noch tags hinzufügen. Habe verschiedenes ausprobiert und es will nicht wirklich klappen.
Wie baue ich die am Besten in die payload ein?Danke Euch!
-
@drdoener Tags ist einfach ein 2.Objekt im Array jedes Datenpunktes.
Also einfach
[[{"time":start_timestamp,"value":marketprice},{"tag":"tag1"}]]
-
@mickym
Danke !!
Klappt wunderbar, VG! -
@mickym sagte in Object Daten in Influx db speichern:
payload.data.[[{"time":start_timestamp,"value":marketprice}]]
Ich bräuchte bitte nochmal deine JSONata Zauberkünste. Ich möchte die Daten nicht mehr bei Awattar abfragen, sondern beim Fraunhofer Institut. Die Daten sehen dort aber anders aus:
Es gibt jeweils ein eigenes Array für die Zeit und den Preis. Geht das auch per JSONata aufzubereiten? Im Ergebnis bräuchte ich dann wieder als Input für den "influxdb out" Node so etwas:Nach meinem Verständnis hätte es so funktionieren müssen:
$map( [$zip(payload.unix_seconds, payload.price)], function($v, $i, $a) { return [{"time": $v[0], "value": $v[1]}] } )
Mit der "zip" Funktion die "Pärchen" zusammenstellen und danach mit der "map" Funktion die Bezeichner austauschen. Geht aber nicht, ich bekomme kein (ein leeres) Ergebnis.
Hast du eine Idee?
Danke dir!
EDIT: ich hab's jetzt, die Klammern waren falsch gesetzt! Aber vielleicht hast du noch eine elegantere Lösung!?
$map( $zip(payload.unix_seconds, payload.price), function($v, $i, $a) { [return {"time": $v[0], "value": $v[1]}] } )
-
@marc-berg sagte in Object Daten in Influx db speichern:
Ja mit dem Zip ist schon richtig - da Du die Daten aber nicht aufbereiten willst, kannst du Dir die map-Funktion sparen und mit dem internen Mapper die Objekte neu aufbauen:
$zip(unix_seconds,price).{"time":$[0],"value":$[1]}
https://try.jsonata.org/kkHXkQ6s2
Halt payload noch davorsetzen - um auf die Eigenschaften der payload zugreifen. Also
$zip(payload.unix_seconds,payload.price).{"time":$[0],"value":$[1]}
-
@mickym sagte in Object Daten in Influx db speichern:
Halt payload noch davorsetzen - um auf die Eigenschaften der payload zugreifen. Also
$zip(payload.unix_seconds,payload.price).{"time":$[0],"value":$[1]}Ja, fast! Es fehlt noch die "innere" Klammer.
Ist:
[{"time":1703264400,"value":50.36},{"time":1703268000,"value":40.49},{"time":1703271600,"value":24.66},{"time":1703275200,"value":25.53},{"time":1703278800,"value":30.41},{"time":1703282400,"value":12},{"time":1703286000,"value":0.04},{"time":1703289600,"value":-0.01},{"time":1703293200,"value":-0.01},{"time":1703296800,"value":-0.02},{"time":1703300400,"value":-0.01},{"time":1703304000,"value":0},{"time":1703307600,"value":0.1},{"time":1703311200,"value":7.43},{"time":1703314800,"value":20},{"time":1703318400,"value":42.08},{"time":1703322000,"value":41.64},{"time":1703325600,"value":45.9},{"time":1703329200,"value":47.36},{"time":1703332800,"value":49.81},{"time":1703336400,"value":52.3},{"time":1703340000,"value":53.77},{"time":1703343600,"value":58.05},{"time":1703347200,"value":68.12}]
Soll:
[[{"time":1703260800000,"value":42.95}],[{"time":1703264400000,"value":50.36}],[{"time":1703268000000,"value":40.49}],[{"time":1703271600000,"value":24.66}],[{"time":1703275200000,"value":25.53}],[{"time":1703278800000,"value":30.41}],[{"time":1703282400000,"value":12}],[{"time":1703286000000,"value":0.04}],[{"time":1703289600000,"value":-0.01}],[{"time":1703293200000,"value":-0.01}],[{"time":1703296800000,"value":-0.02}],[{"time":1703300400000,"value":-0.01}],[{"time":1703304000000,"value":0}],[{"time":1703307600000,"value":0.1}],[{"time":1703311200000,"value":7.43}],[{"time":1703314800000,"value":20}],[{"time":1703318400000,"value":42.08}],[{"time":1703322000000,"value":41.64}],[{"time":1703325600000,"value":45.9}],[{"time":1703329200000,"value":47.36}],[{"time":1703332800000,"value":49.81}],[{"time":1703336400000,"value":52.3}],[{"time":1703340000000,"value":53.77}],[{"time":1703343600000,"value":58.05}]]
-
@marc-berg Nein da fehlt keine Klammer: https://try.jsonata.org/BSZozJuYr