Add TOU SOC handling for battery priority in passive mode
- Introduced `effective_sell_price_czk_kwh` to `ControlSetpoints` for managing battery usage based on sell price. - Implemented logic in `_deye_passive_tou_battery_soc_pct` to set TOU SOC to 100% when conditions favor battery usage. - Updated tests to validate new behavior for negative sell prices and planned charging scenarios. - Enhanced documentation to clarify TOU SOC behavior in passive mode.
This commit is contained in:
@@ -62,12 +62,50 @@ class DeyeTouParamsTests(unittest.TestCase):
|
||||
ev1_power_w=0,
|
||||
ev2_power_w=0,
|
||||
target_soc_pct=None,
|
||||
effective_sell_price_czk_kwh=None,
|
||||
)
|
||||
self.assertEqual(get_deye_mode(sp), "PASSIVE")
|
||||
p, s, g = _deye_tou_params(sp, _inv(min_soc=12, reserve_soc=20))
|
||||
self.assertFalse(g)
|
||||
self.assertEqual(s, 12)
|
||||
|
||||
def test_passive_negative_sell_steers_tou_above_current_soc(self) -> None:
|
||||
"""Záporná vykupní → TOU SOC = 100 % (priorita akumulace vs. přetok)."""
|
||||
sp = ControlSetpoints(
|
||||
battery_w=-400,
|
||||
grid_export_limit=0,
|
||||
ev1_current_a=0,
|
||||
ev2_current_a=0,
|
||||
heat_pump_enable=False,
|
||||
grid_setpoint_w=0,
|
||||
ev1_power_w=0,
|
||||
ev2_power_w=0,
|
||||
target_soc_pct=14,
|
||||
effective_sell_price_czk_kwh=-0.25,
|
||||
)
|
||||
self.assertEqual(get_deye_mode(sp), "PASSIVE")
|
||||
_p, s, g = _deye_tou_params(sp, _inv(min_soc=12, reserve_soc=20))
|
||||
self.assertFalse(g)
|
||||
self.assertEqual(s, 100)
|
||||
|
||||
def test_passive_planned_charge_steers_tou(self) -> None:
|
||||
sp = ControlSetpoints(
|
||||
battery_w=800,
|
||||
grid_export_limit=0,
|
||||
ev1_current_a=0,
|
||||
ev2_current_a=0,
|
||||
heat_pump_enable=False,
|
||||
grid_setpoint_w=0,
|
||||
ev1_power_w=0,
|
||||
ev2_power_w=0,
|
||||
target_soc_pct=60,
|
||||
effective_sell_price_czk_kwh=1.0,
|
||||
)
|
||||
self.assertEqual(get_deye_mode(sp), "PASSIVE")
|
||||
_p, s, g = _deye_tou_params(sp, _inv(min_soc=12, reserve_soc=20))
|
||||
self.assertFalse(g)
|
||||
self.assertEqual(s, 100)
|
||||
|
||||
def test_charge_unchanged_grid_charge(self) -> None:
|
||||
sp = ControlSetpoints(
|
||||
battery_w=5000,
|
||||
|
||||
Reference in New Issue
Block a user