Fix battery sign and separate PV from inverter output

Verified against simultaneous SolarEdge app readings (PV 40 W,
battery discharge 520 W, house 560 W): battery1_power negative
means discharge, and power_ac on this DC-coupled Energy Hub is
the inverter's TOTAL AC output - it already contains the battery
contribution. The old formula double-counted the battery, so
house_load collapsed (44 W shown vs 560 W real) and the PV tile
showed battery-inflated totals, which looked like PV and house
consumption were swapped.

New derived fields: house_load = power_ac + grid, and
pv_power = power_ac - battery (true PV production). Dashboard PV
tiles and both yield panels now use pv_power / integral(pv_power)
- the energy_total lifetime counter also counts battery
throughput and is not a PV yield.
This commit is contained in:
dj7nt committed 2026-10-10 17:48:23 +02:00
1 parent 412accc003
commit 0ec3bcb8ef
4 files changed
+57 -42

No files matched your search

+4 -4
View File
@@ -66,7 +66,7 @@
"type": "influxdb",
"uid": "${DS_INFLUXDB}"
},
"query": "SELECT last(\"power_ac\") AS \"PV\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter",
"query": "SELECT last(\"pv_power\") AS \"PV\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter",
"refId": "A",
"rawQuery": true,
"resultFormat": "time_series"
@@ -387,7 +387,7 @@
"type": "influxdb",
"uid": "${DS_INFLUXDB}"
},
"query": "SELECT spread(\"energy_total\") / 1000 AS \"Ertrag\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter",
"query": "SELECT integral(\"pv_power\", 1h) / 1000 AS \"Ertrag\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter",
"refId": "A",
"rawQuery": true,
"resultFormat": "time_series"
@@ -808,7 +808,7 @@
"type": "influxdb",
"uid": "${DS_INFLUXDB}"
},
"query": "SELECT mean(\"power_ac\") AS \"PV\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter GROUP BY time($__interval) fill(null)",
"query": "SELECT mean(\"pv_power\") AS \"PV\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter GROUP BY time($__interval) fill(null)",
"refId": "A",
"rawQuery": true,
"resultFormat": "time_series"
@@ -1177,7 +1177,7 @@
"type": "influxdb",
"uid": "${DS_INFLUXDB}"
},
"query": "SELECT non_negative_derivative(max(\"energy_total\"), 1h) / 1000 AS \"Ertrag\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter GROUP BY time(1h) fill(null)",
"query": "SELECT integral(\"pv_power\", 1h) / 1000 AS \"Ertrag\" FROM \"$measurement\" WHERE serialnumber =~ /^$serial$/ AND $timeFilter GROUP BY time(1h) fill(null)",
"refId": "A",
"rawQuery": true,
"resultFormat": "time_series"