Hallöchen zusammen,
nach Anschaffung des Balkonkraftwerks im letzten Jahr hatte ich mich schon mal intensiver mit Grafana beschäftigt, was dann aber irgendwann auch weide ein wenig eingeschlafen ist. Jetzt gabs vor einiger zeit dann auch mal nen digitalen Stromzähler und nen passenden Lesekopf dazu, was mich dann weider mehr damit basteln lies. Hier treten jetzt ein paar "Problemchen" auf, zu denen ich keine Lösung finde:
Problem 1:
In einer Visualisierung möchte ich anzeigen, wie viel Strom mein BKW produziert hat, wieviel davon ich selbst genutzt und wieviel Geld ich damit gespart habe. Den genutzten PV-Strom errechne aus dem erzeugten PV-Strom und der Einspeisung ins Netz, bzw berechne zusätzlich mit dem aktuellen Strompreis aus einem manuellen Datenpunkt die Ersparnis:
from(bucket: "ioBroker")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "PV_Inverter___Ertrag_total" or r._measurement == "Strompreis_kWh" or r._measurement == "SmartMeter___Einspeisung_gesamt")
|> filter(fn: (r) => r._field == "value")
|> aggregateWindow(every: 1mo, fn: last, timeSrc: "_start")
|> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value")
|> difference(columns: ["PV_Inverter___Ertrag_total", "SmartMeter___Einspeisung_gesamt" ])
|> map(fn: (r) => ({ r with PV_Nutzung: r.PV_Inverter___Ertrag_total - r.SmartMeter___Einspeisung_gesamt }))
|> map(fn: (r) => ({ r with Ersparnis: (r.PV_Inverter___Ertrag_total - r.SmartMeter___Einspeisung_gesamt) * r.Strompreis_kWh }))
Funktioniert soweit ganz gut, allerdings gibt es den Datenpunkt für die Einspeisung erst seit Mitte Mai, in der Folge werden alle Tage/Monate ohne diesen Datenpunkt gar nicht berechnet:

Kann ich das irgenwie umgehen? zB indem ich Grafana irgendwie mitteile, dass er stattdessen mit "0" weiterrechnen soll, wenn er keinen Wert findet?
Problem 2:
In 2 weiteren Visualisierungen geht es um meine tagl. Energie-Bilanz, erstellt aus dem tägl. Bezug aus dem Netz, PV-Ertrag und Einspeisung. Daraus errechne ich den Gesamtverbrauch (also Netzbezug + PV-Ertrag - Einspeisung). Das Ergebnis soll aber nicht in der Visualisierung selbst angezeigt werden, sondern nur im ToolTip und in der Legende. Die beiden Visualisierungen unterscheiden sich nur in 2 Punkten: die eine geht über 30 tage als Barchart, die andere über 365 Tage (aktuell nur Messpunkte ab Mitta Mai) als Time series. Bei dem einen zeigt er den Gesamtverbrauch nur im Tooltip an, beim anderen nur in der Legende. Die entsprechenden Felder sind komplett gleich per Overrides eingestellt.
Hier erschließt sich mir die mögliche Ursache dafür nicht. Habt ihr vielleicht eine Idee?
import "timezone"
option location = timezone.location(name: "Europe/Berlin")
from(bucket: "ioBroker")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "PV_Inverter___Ertrag_total" or r._measurement == "SmartMeter___Einspeisung_gesamt" or r._measurement == "SmartMeter___Bezug_gesamt")
|> filter(fn: (r) => r._field == "value")
|> aggregateWindow(every: 1d, fn: last, timeSrc: "_start")
|> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value")
|> difference(columns: ["PV_Inverter___Ertrag_total", "SmartMeter___Einspeisung_gesamt", "SmartMeter___Bezug_gesamt"])
|> map(fn: (r) => ({ r with PV_Nutzung: r.PV_Inverter___Ertrag_total - r.SmartMeter___Einspeisung_gesamt }))
|> map(fn: (r) => ({ r with Gesamtverbrauch: r.PV_Inverter___Ertrag_total - r.SmartMeter___Einspeisung_gesamt + r.SmartMeter___Bezug_gesamt}))
Problem 3:
Die Abfrage aus Problem 2 brauchen echt lang bis sie angezeigt werden und der verwendete Raspi 4 geht mit der CPU-Last auch für längere Zeit an die Leistungsgrenze. Liegt das an der Abfrage im Allgemeinen oder hab ich da womöglich irgendwelche Knoten in meiner Query, die das ganze an die Leistungsgrenze treibt?
Besten Gruß und vielen Dank im Voraus
Marian