NEWS
InfluxDB Daten aufarbeiten
-
Moin,
Ich würde gerne meine gesammelten Raumwerte in Influx aufarbeiten und mittels Task in ein neues Bucket mit mehr Struktur überführen.
Ich habe Sonoff Sensoren für die Temperatur und Luftfeuchte in den Räumen. die Werte werden in Influx gesammelt und in das Bucket iobroker übermittelt. Leider sind diese Datenströme nicht strukturiert. Mein Ziel ist es diese so aufzuarbeiten damit am ende es so aussieht raumwerte, zimmer , stube, temperatur oder luftfeuchtigkeit
Ich habe nun dieses Skript das die gesammelten Werte in diesem fall der stube alle 60min ausgibt. um es dann in die neu zu bringende Struktur zu erfassen jeweils nach 24h. Leider ist da was falsch in den Zeilen "to" aber ich weiß nicht wirklich was. Wie müßte das richtig aussehen ?, damit ich dann auch alle anderen Räume darin speichern kann.from(bucket: "iobroker") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "zigbee.0.00124b00290fd3fb.humidity" or r["_measurement"] == "zigbee.0.00124b00290fd3fb.temperature") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 60m, fn: mean, createEmpty: false) |> yield(name: "mean") |> to( bucket: "raumwerte", tagColumns: ["zimmer"],["stube"], fieldFn: (r) => ({ "temperatur": r._value, "humidity": r._value }) )
Gruß
Mico -
@mico
Da fehlt neben der korrekten Aufbereitung auch das Ziel-Measurement. Bin nicht ganz sicher, ob das das Ziel ist, aber wenn du es so machst:from(bucket: "iobroker") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "zigbee.0.00124b00290fd3fb.humidity" or r["_measurement"] == "zigbee.0.00124b00290fd3fb.temperature") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 60m, fn: mean, createEmpty: false) |> pivot(rowKey:["_time"], columnKey: ["_measurement"], valueColumn: "_value") |> map(fn: (r) => ({ _time: r._time, _field: "value", _measurement: "raumwerte", temperatur: r["zigbee.0.00124b00290fd3fb.temperature"], humidity: r["zigbee.0.00124b00290fd3fb.humidity"], zimmer: "stube" })) |> to( bucket: "raumwerte", tagColumns: ["zimmer"], fieldFn: (r) => ({ temperatur: r.temperatur, humidity: r.humidity }) )
Dann würden die zwei Measurements in eins mit dem "Zimmer"-Tag "Stube" überführt werden. Ob es jetzt sinnvoll ist, ein neues Bucket "raumwerte" zu erstellen oder einfach das neue Measurement "raumwerte" im Bucket "iobroker" zu erstellen, ist Ansichtssache.
Grüße aus dem Zug nach Solingen. (dessen Halt in Solingen heute entfällt )
-
Danke für deine schnelle Antwort leider meldet er ein invalid script.
Ich weiß noch nicht warum deswegen habe ich ein Bild wo die werte stehen beigefügt und in welcher struktur sie stehen sollten.
Da sind die Werte:
und so sollen sie hinterher in einem neuen bucket überführt werden.
Ein neues bucket damit ich die werte aus dem iobroker nach einer Zeit löschen kann.
Gruß
Mico -
@mico sagte in InfluxDB Daten aufarbeiten:
Danke für deine schnelle Antwort leider meldet er ein invalid script.
Hmmm, bei mir läuft das. Führe mal nur die Query (ohne "to") aus und zeige mal das Ergebnis. Es wird ja immer ausgegeben, wo genau der Fehler liegt.
EDIT: und ja, genau so wie du jetzt beschreibst würde es dann aussehen.
-
@marc-berg said in InfluxDB Daten aufarbeiten:
Hmmm, bei mir läuft das. Führe mal nur die Query (ohne "to") aus und zeige mal das Ergebnis. Es wird ja immer ausgegeben, wo genau der Fehler liegt.
EDIT: und ja, genau so wie du jetzt beschreibst würde es dann aussehen.
Ich versuche das über Create Task ist das falsch?
-
So nun glaube ich das es geklappt hat ich habe die range verändert und es zeigte grün.
Danke
Mico -
@mico sagte in InfluxDB Daten aufarbeiten:
So nun glaube ich das es geklappt hat ich habe die range verändert und es zeigte grün.
Ja, die „v.“ Variablen funktionieren im Task nicht.
-
Eine Frage noch zur besseren Ordnung der Task
jetzt habe ich jeden Raum mit einer Task Run für 0:00 gespeichert ist es auch möglich die Räume in einem Task zu speichern.Ich habe mal das Script für 2 Räume so wie es im Moment bei mir ist.
option task = {name: "arbeitszimmerwerte", cron: "0 0 * * *"} from(bucket: "iobroker") |> range(start: -24h) |> filter( fn: (r) => r["_measurement"] == "zigbee.0.00124b002fabe53f.humidity" or r["_measurement"] == "zigbee.0.00124b002fabe53f.temperature", ) |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 60m, fn: mean, createEmpty: false) |> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value") |> map( fn: (r) => ({ _time: r._time, _field: "value", _measurement: "raumwerte", temperatur: r["zigbee.0.00124b002fabe53f.temperature"], humidity: r["zigbee.0.00124b002fabe53f.humidity"], zimmer: "arbeitszimmer", }), ) |> to( bucket: "raumwerte", tagColumns: ["zimmer"], fieldFn: (r) => ({temperatur: r.temperatur, humidity: r.humidity}), )
option task = {name: "badwerte", cron: "0 0 * * *"} from(bucket: "iobroker") |> range(start: -24h) |> filter( fn: (r) => r["_measurement"] == "zigbee.0.00124b002fabe555.humidity" or r["_measurement"] == "zigbee.0.00124b002fabe555.temperature", ) |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 60m, fn: mean, createEmpty: false) |> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value") |> map( fn: (r) => ({ _time: r._time, _field: "value", _measurement: "raumwerte", temperatur: r["zigbee.0.00124b002fabe555.temperature"], humidity: r["zigbee.0.00124b002fabe555.humidity"], zimmer: "badwerte", }), ) |> to( bucket: "raumwerte", tagColumns: ["zimmer"], fieldFn: (r) => ({temperatur: r.temperatur, humidity: r.humidity}), )
Gruß
Mico