@marc-berg, sorry, dass ich mich erst jetzt wieder melde, aber ich war beruflich unterwegs. Das ist meine Query, wie gesagt, genau Dein Vorschlag, nur mit meinen Influx-spezifischen Namen:
strompreis = 0.32 // €/kWh
einspeiseverguetung = 0.08 // €/kWh
// PV-Leistungsdaten abfragen
pv = from(bucket: "iobroker")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "senec.0.ENERGY.GUI_INVERTER_POWER")
|> filter(fn: (r) => r["_field"] == "value")
|> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
|> rename(columns: {_value: "PV_Einspeisung"})
// Hausverbrauchsdaten abfragen
verbrauch = from(bucket: "iobroker")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "senec.0.ENERGY.GUI_HOUSE_POW")
|> filter(fn: (r) => r["_field"] == "value")
|> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
|> rename(columns: {_value: "Hausverbrauch"})
// Daten zusammenführen
join(
tables: {pv: pv, verbrauch: verbrauch},
on: ["_time"]
)
|> map(fn: (r) => ({
_time: r._time,
PV_Einspeisung: r.PV_Einspeisung,
Hausverbrauch: r.Hausverbrauch,
einsparung:
if r.PV_Einspeisung <= r.Hausverbrauch then
r.PV_Einspeisung * strompreis
else
(r.Hausverbrauch * strompreis) + ((r.PV_Einspeisung - r.Hausverbrauch) * einspeiseverguetung)
})
)