Fix grid meter sign: positive reading is export

The assumption meter1_power positive = import was wrong. Evidence
from the recorded data: sustained +2kW meter readings at high PV
with a full battery in maximize-self-consumption mode (exports,
not imports), and a single -2.5kW sample at 17:54 with only 600W
PV - a kettle import, physically impossible as an export under
the old assumption. house_load was inflated by adding export on
top of production, which made PV and consumption look swapped.

All derived flow fields follow the single METER_IMPORT_POSITIVE
constant; tests now describe the observed kettle/export patterns.
This commit is contained in:
dj7nt committed 2026-10-10 17:32:37 +02:00
1 parent d266654696
commit 412accc003
2 files changed
+9 -7

No files matched your search

+4 -2
View File
@@ -86,10 +86,12 @@ storage_mode_map = [
"Remote Control"
]
# Observed on the probed system: meter1_power positive = grid import,
# Observed on the probed system: meter1_power positive = grid EXPORT
# (verified against a full-battery self-consumption system: sustained +2kW
# readings at high PV were exports; a kettle appears as a negative spike).
# battery1_power positive = discharge. If day-one graphs disagree, flip here -
# all derived flow fields (house_load, grid_import, ...) follow.
METER_IMPORT_POSITIVE = True
METER_IMPORT_POSITIVE = False
BATTERY_DISCHARGE_POSITIVE = True
+5 -5
View File
@@ -210,8 +210,8 @@ class TestSolarData(unittest.TestCase):
self.assertAlmostEqual(597.0, solarData.data['power_ac'])
def testFlowsImport(self):
# probed live values: PV 861.2 W, grid +689.5 (import), battery idle
solarData = SolarData(probe_data(power_ac=8612, m1_power=6895, b1_power=0.0))
# kettle: PV 861.2 W, grid meter reads -689.5 (import), battery idle
solarData = SolarData(probe_data(power_ac=8612, m1_power=-6895, b1_power=0.0))
self.assertAlmostEqual(1550.7, solarData.data['house_load'])
self.assertAlmostEqual(689.5, solarData.data['grid_import'])
@@ -220,9 +220,9 @@ class TestSolarData(unittest.TestCase):
self.assertAlmostEqual(0.0, solarData.data['battery_discharge'])
self.assertAlmostEqual(861.2, solarData.data['solar_to_house'])
def testFlowsSurplus(self):
# PV 5000, exporting 2000, charging battery with 1000
solarData = SolarData(probe_data(power_ac=50000, m1_power=-20000, b1_power=-1000.0))
def testFlowsExport(self):
# observed afternoon: PV 5000, exporting 2000, charging battery with 1000
solarData = SolarData(probe_data(power_ac=50000, m1_power=20000, b1_power=-1000.0))
self.assertAlmostEqual(2000.0, solarData.data['house_load'])
self.assertAlmostEqual(0.0, solarData.data['grid_import'])