Hallo bernd,
vielen Dank für Deine ausführlichen Informationen Erklärungen und den Code.
Ich würde es mir ja einfacher machen und anstelle von bereits viel kWh-Werten über den Tag verteilt würden mir die Tageswerte vollkommen ausreichen und da ich bereits kWh-Werte habe muss ich nichts von W oder kW umrechnen.
Ich mache das ja jetzt schon mit
import "timezone"
option location = timezone.location(name: "Europe/Berlin")
from(bucket: "homeassistant")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "Wh")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "multimedia_energy")
|> map(fn: (r) => ({r with _value: float(v: r._value) / 1000.0}))
|> aggregateWindow(every: 1d, fn: last, timeSrc: "_start", createEmpty: false)
|> yield(name: "last")
bei den Sensoren bei denen sich die kWh-Werte am Tagesende wieder auf 0 setzen und mit
import "timezone"
option location = timezone.location(name: "Europe/Berlin")
from(bucket: "homeassistant")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "kWh")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "multimedia_energy")
|> aggregateWindow(every: 1d, fn: last, timeSrc: "_start", createEmpty: false)
|> difference()
bei Sensoren bei denen der kWh-Wert permanent steigt.
Aber eben nur in der Auswertung.
Und ich weiss auch, dass die influxDB so intelligent ist nur Werte zu speichern wenn sie sich auch geändert haben.
Was mir bei deinem Task Sorgen macht ist der Umstand, dass Du in der alten influxDB mit den Detailwerten ja irgendwann diese löschst und es dann dazu kommt, dass sich Dein Wert an dem Tag an dem Du löschst sukzessive reduziert oder löschst Du in der Details-DB tageweise?
Vielleicht mache ich mir auch zu viel Kopf um das ganze Thema, da ich in einem ersten Versuch damit auf die Nase geflogen bin, da die InfluxDB andauernd um 24Uhr in der influxDB-Zeit seinen Schnitt gemacht hat aber erst um 1Uhr hätte machen sollen. Seitdem ich das für grafana mit der Zeitzonendefinition beseitigen konnte, habe ich Tasks nicht mehr probiert, da auch die Detaildarstellung recht flott vonstatten geht. Wobei natürlich Tageswerte viel viel schneller sind als erst einmal viele untertägige Werte zu ermitteln und auszuwerten.
Momentan belegt meine Detail-influxDB auch noch nicht so viel Speicher, dass ich irgendwie eine Not hätte, aber es dauert momentan schon 5-10sec, wenn ich meine Auswertung fürs vergangenen Jahr auf Monatsbasis ausgeben möchte.
Folgende Ansicht benötigt ungefähr 10sec bis sie aufgebaut ist.
bei folgendem Code
#Beispiel für einen der 3 Werte
import "timezone"
option location = timezone.location(name: "Europe/Berlin")
from(bucket: "homeassistant")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "kWh")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "ahoy_yieldtotal")
|> aggregateWindow(every: 1mo, fn: last, timeSrc: "_start", createEmpty: false)
|> difference()
das würde mit reinen Tageswerten vermutlich sehr viel schneller gehen als mit den vielen untertägigen Werten.
Ich danke Dir mal recht herzlich und werde mir das Thema nochmal im Detail anschauen.
P.S. man könnte ja Deinen Code mit sehr großer Range verwenden um einmalig alle Detailwerte zu verarbeiten und danach die Range auf wenige Tage einzugrenzen, die Tage davor sind ja dann sowieso schon verarbeitet und es kann nichts mehr kaputt gehen und wenn in der DetailDB die Daten etwas länger ausgehoben werden als im RANGE-Bereich, dann sollte in der Aggregierten DB nichts passieren.
Klingt gut… Danke nochmals für den Anstoss und die Erklärungen.
→ geiler Scheiss… das klappt ja super und ist erwartungsgemäß extrem schnell. Mal schauen wofür ich das alles einbaue.























