fakt me to nebavi furt jsou tam chyby
Some checks failed
CI and deploy / migration-check (push) Failing after 12s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-06-06 23:58:01 +02:00
parent b7903db714
commit 50ac40868d
3 changed files with 127 additions and 32 deletions

View File

@@ -3698,8 +3698,8 @@ class ChargeAcquisitionArbitrageTests(unittest.TestCase):
self.assertLess(results[0].grid_setpoint_w, -500)
self.assertLess(results[0].battery_soc_target, 70.0)
def test_degraded_relaxed_solver_no_night_dump_and_self_consume(self) -> None:
"""relaxed_solver_masks: žádný večerní dump za ~2,5 Kč; noc dům z baterie, ne import ~4 Kč."""
def test_degraded_relaxed_solver_evening_to_reserve_and_night_self_consume(self) -> None:
"""relaxed_solver_masks: večer vývoz k ~20 %, noc dům z baterie (ne import ~4 Kč)."""
prague = ZoneInfo("Europe/Prague")
base = datetime(2026, 6, 6, 21, 30, tzinfo=prague).astimezone(timezone.utc)
rows: list[tuple[float, float, int]] = [
@@ -3723,7 +3723,10 @@ class ChargeAcquisitionArbitrageTests(unittest.TestCase):
buy, sell, load = rows[i]
pv_a, pv_b = 0, 0
elif local.hour >= 5 and local.hour < 12:
buy, sell, load, pv_a, pv_b = 0.5, -0.3, 800, 2000, 2500
if 8 <= local.hour < 11:
buy, sell, load, pv_a, pv_b = -0.4, -0.3, 800, 2000, 2500
else:
buy, sell, load, pv_a, pv_b = 0.5, -0.3, 800, 2000, 2500
else:
buy, sell, load, pv_a, pv_b = 3.0, 2.0, 500, 0, 0
slots.append(
@@ -3742,6 +3745,8 @@ class ChargeAcquisitionArbitrageTests(unittest.TestCase):
)
bat = _battery(uc_wh=64_000.0, arb_pct=20.0, terminal_soc_value_factor=0.9)
bat.planner_neg_sell_prep_soc_percent = 100.0
bat.max_charge_power_w = 18_000
bat.max_discharge_power_w = 18_000
hp = SimpleNamespace(rated_heating_power_w=0, tuv_min_temp_c=45.0, tuv_target_temp_c=55.0)
grid = SimpleNamespace(
max_import_power_w=17_000,
@@ -3753,7 +3758,7 @@ class ChargeAcquisitionArbitrageTests(unittest.TestCase):
SimpleNamespace(max_charge_power_w=0, battery_capacity_kwh=1.0, default_target_soc_pct=80.0),
SimpleNamespace(max_charge_power_w=0, battery_capacity_kwh=1.0, default_target_soc_pct=80.0),
]
soc = 0.71 * bat.soc_max_wh
soc = 0.56 * bat.soc_max_wh
results, _ms, snap = solve_dispatch(
slots,
bat,
@@ -3774,13 +3779,21 @@ class ChargeAcquisitionArbitrageTests(unittest.TestCase):
)
inp = snap.get("inputs") or {}
self.assertTrue(inp.get("relaxed_solver_masks"))
self.assertGreater(len(inp.get("degraded_relaxed_night_ts") or []), 0)
for i, r in enumerate(results[:12]):
self.assertGreaterEqual(r.battery_soc_target, 10.0)
if i < 4:
self.assertGreater(r.grid_setpoint_w, -500, msg=f"slot {i} evening dump")
if 8 <= i <= 11 and rows[i][0] > 3.0:
self.assertLessEqual(r.grid_setpoint_w, rows[i][2] + 50, msg=f"slot {i} grid import")
self.assertGreater(len(inp.get("degraded_evening_export_ts") or []), 0)
evening_soc_end = min(r.battery_soc_target for r in results[:8])
self.assertLess(evening_soc_end, 55.0)
for i in range(8, 12):
if rows[i][0] > 3.0:
self.assertLessEqual(
results[i].grid_setpoint_w,
50,
msg=f"slot {i} should not import for baseload",
)
self.assertLess(
results[i].battery_setpoint_w,
-100,
msg=f"slot {i} should discharge for house",
)
def test_kv1_evening_push_profitable_vs_morning_zone_peak(self) -> None:
"""v52: KV1 večer ≥ ranní max (511) degrad; pod prahem ne."""