NEWS
Grünlandtemperatursumme und Flux
-
@marc-berg du bist nicht der erste
https://forum.iobroker.net/post/762283
allerdings rechnest du selber
-
@homoran sagte in Grünlandtemperatursumme und Flux:
@marc-berg du bist nicht der erste
Oh, das hätte ich jetzt nicht erwartet, dass das noch andere interessiert.
-
@marc-berg Hallo Marc, kurze Rückfrage zu deinem obigen Code, ziehst du dort nur die positiven Tagesmitteltemperaturen oder auch die negativen, was falsch wäre und startest du jährlich zum 1.1. neu?
Leider sind meine Flux Kenntnisse aktuell noch sehr rudimentär
-
@andreasploetz sagte in Grünlandtemperatursumme und Flux:
kurze Rückfrage zu deinem obigen Code, ziehst du dort nur die positiven Tagesmitteltemperaturen
Ich hätte wetten können, das das drin war, aber du hast natürlich Recht, hier die korrigierte Abfrage, in welcher Tagesmitteltemperaturen unter 0°C gefiltert werden.
und startest du jährlich zum 1.1. neu?
Ja das war und ist mit drin, es wird immer das aktuelle Jahr berechnet:
|> range(start:date.truncate(t:now(), unit:1y))
-
Und hier noch die Darstellung in Jahresverlauf:
In Abhängigkeit von dieser Zeile und ob man "_start" bzw. "_stop" einträgt
|> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:true)
wird die Summe entweder für den aktuellen oder den Folgetag dargestellt. Da bin ich mir unsicher, was fachlich korrekter ist.
-
In Abhängigkeit von dieser Zeile und ob man "_start" bzw. "_stop" einträgt
|> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:true)
wird die Summe entweder für den aktuellen oder den Folgetag dargestellt. Da bin ich mir unsicher, was fachlich korrekter ist.
Fachlich korrekt ist der aktuelle Tag, da an diesem ja der Wert faktisch auch vor bzw. bis 0 Uhr erreicht wurde.
Was noch schön wäre, wenn die Tage mit negativen Temperaturmittelwerten auch dargestellt werden bzw. dann mit den letzten zu verwendenden positiven Werten unverändert zu sehen sind - dann wäre das ganze einfacher zu "lesen"
Ansonsten top Arbeit!
-
@andreasploetz sagte in Grünlandtemperatursumme und Flux:
Was noch schön wäre, wenn die Tage mit negativen Temperaturmittelwerten auch dargestellt werden bzw. dann mit den letzten zu verwendenden positiven Werten unverändert zu sehen sind - dann wäre das ganze einfacher zu "lesen
probier' mal:
import "date" import "timezone" option location = timezone.location(name: "Europe/Berlin") from(bucket: "iobroker") |> range(start:date.truncate(t:now(), unit:1y)) |> filter(fn: (r) => r["_measurement"] == "mqtt.0.Lora.esp03.temperature") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:false) |> filter(fn: (r) => r["_value"] > 0 ) |> aggregateWindow(every: 1d,fn:last,timeSrc: "_start",createEmpty:true) |> fill(column: "_value", value:0.0) |> map(fn: (r) => ({ _time: r._time, sum: if date.month(t: r._time) == 1 then r._value * 0.5 else if date.month(t: r._time) == 2 then r._value * 0.75 else r._value })) |> cumulativeSum(columns: ["sum"]) |> rename(columns: {sum: "Grünlandtemperatursumme"})
-
@marc-berg said in Grünlandtemperatursumme und Flux:
@andreasploetz sagte in Grünlandtemperatursumme und Flux:
Was noch schön wäre, wenn die Tage mit negativen Temperaturmittelwerten auch dargestellt werden bzw. dann mit den letzten zu verwendenden positiven Werten unverändert zu sehen sind - dann wäre das ganze einfacher zu "lesen
probier' mal:
import "date" import "timezone" option location = timezone.location(name: "Europe/Berlin") from(bucket: "iobroker") |> range(start:date.truncate(t:now(), unit:1y)) |> filter(fn: (r) => r["_measurement"] == "mqtt.0.Lora.esp03.temperature") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:false) |> filter(fn: (r) => r["_value"] > 0 ) |> aggregateWindow(every: 1d,fn:last,timeSrc: "_start",createEmpty:true) |> fill(column: "_value", value:0.0) |> map(fn: (r) => ({ _time: r._time, sum: if date.month(t: r._time) == 1 then r._value * 0.5 else if date.month(t: r._time) == 2 then r._value * 0.75 else r._value })) |> cumulativeSum(columns: ["sum"]) |> rename(columns: {sum: "Grünlandtemperatursumme"})
Perfekt - passt! Vielen Dank.
-
@marc-berg
Sehr genial, ich war auf der Suche nach einer Lösung um im IoBroker mit den in der InfluxDB gespeicherten Daten die Grünlandtemp zu berechnen.
Aber mal eine womöglich etwas blöde Frage:
Ist das Javascript, so dass ich es direkt als Skript verwenden kann und muss nur den Datenpunkt meines Außentemp-Sensors angeben?
Ich hab mir den Code angesehen und sehe nicht, wo der kummulierte Wert als Ergebnis zurück gegeben wird oder (noch besser) direkt in einen Datenpunkt geschrieben wird.Mein Ziel:
Einmal pro Tag ein Skript laufen lassen (Blockly oder Javascript), welches aus den vorhandenen Daten in der InfluxDB (Datenpunkt des Temp-Sensors) die aktuelle Gründlandtemperatur berechnet und in einem Objekt/Datenpunkt ablegt.
Das Objekt würde ich dann wiederum mit loggen und zur Darstellung nutzen.VIELEN DANK!
Schön zu sehen, dass auch andere Interesse an sowas haben. -
@lansester sagte in Grünlandtemperatursumme und Flux:
Ist das Javascript, so dass ich es direkt als Skript verwenden kann und muss nur den Datenpunkt meines Außentemp-Sensors angeben?
Nein, das ist kein Javascript, sondern Flux, also die Standard-Abfragesprache der InfluxDB 2.x
Mein Ziel:
Einmal pro Tag ein Skript laufen lassen (Blockly oder Javascript), welches aus den vorhandenen Daten in der InfluxDB (Datenpunkt des Temp-Sensors) die aktuelle Gründlandtemperatur berechnet und in einem Objekt/Datenpunkt ablegt.
Das Objekt würde ich dann wiederum mit loggen und zur Darstellung nutzen.Genau diesem Umweg benötigst du mit meiner Abfrage eben nicht. Die Abfrage setzt einen Datenpunkt mit Außentemperaturen voraus, der mindestens stündlich in die InfluxDB loggen sollte. Diese Abfrage kannst du 1:1 z.B. in Grafana einfügen (Datenpunkt natürlich anpassen) und bist damit fertig.