From 941ca22a9e38b20bed61d73a5f17c5efc09720cb Mon Sep 17 00:00:00 2001 From: hannesdiedrich Date: Thu, 15 Jan 2026 09:25:36 +0100 Subject: [PATCH] GSYE-900: Decrease heat demand when trade has happened in the HeatPumpEnergyParametersWithoutTanks --- .../strategy/energy_parameters/heatpump/heat_pump.py | 7 ++++++- .../energy_parameters/test_heat_pump_without_tanks.py | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gsy_e/models/strategy/energy_parameters/heatpump/heat_pump.py b/src/gsy_e/models/strategy/energy_parameters/heatpump/heat_pump.py index 229286eeb..860dfb913 100644 --- a/src/gsy_e/models/strategy/energy_parameters/heatpump/heat_pump.py +++ b/src/gsy_e/models/strategy/energy_parameters/heatpump/heat_pump.py @@ -648,9 +648,10 @@ def last_time_slot(self, current_market_slot: DateTime) -> DateTime: """Calculate the previous time slot from the current one.""" return current_market_slot - GlobalConfig.slot_length - def event_traded_energy(self, _time_slot: DateTime, energy_kWh: float): + def event_traded_energy(self, time_slot: DateTime, energy_kWh: float): """React to an event_traded_energy.""" self._bought_energy_kWh += energy_kWh + self._decrement_posted_energy(time_slot, energy_kWh) def serialize(self): """Return dict with the current energy parameter values.""" @@ -752,3 +753,7 @@ def _populate_state(self, time_slot: DateTime): energy_demand_kWh = self._calc_energy_kWh_from_Q_kJ(time_slot, produced_heat_energy_kJ) self._state.set_heat_demand_kJ(time_slot, produced_heat_energy_kJ) self._state.set_energy_demand_kWh(time_slot, energy_demand_kWh) + + def _decrement_posted_energy(self, time_slot: DateTime, energy_kWh: float): + updated_energy_demand_kWh = max(0.0, self.get_energy_demand_kWh(time_slot) - energy_kWh) + self._state.set_energy_demand_kWh(time_slot, updated_energy_demand_kWh) diff --git a/tests/strategies/energy_parameters/test_heat_pump_without_tanks.py b/tests/strategies/energy_parameters/test_heat_pump_without_tanks.py index a0faf40bb..7111903b2 100644 --- a/tests/strategies/energy_parameters/test_heat_pump_without_tanks.py +++ b/tests/strategies/energy_parameters/test_heat_pump_without_tanks.py @@ -121,13 +121,15 @@ def test_event_market_cycle_populates_state_correctly_heat_profile( assert energy_params_heat_profile._state._heat_demand_kJ[current_market_slot] == 18 assert energy_params_heat_profile._state._energy_demand_kWh[current_market_slot] == 0.001 - def test_event_traded_energy_increases_energies(self, energy_params): + def test_event_traded_energy_updates_energy_state_variables(self, energy_params): # Given energy_params.event_activate() + energy_params.event_market_cycle(CURRENT_MARKET_SLOT) # When - energy_params.event_traded_energy(CURRENT_MARKET_SLOT, 2) + energy_params.event_traded_energy(CURRENT_MARKET_SLOT, 0.2) # Then - assert energy_params._bought_energy_kWh == 2 + assert energy_params._bought_energy_kWh == 0.2 + assert energy_params.state.get_energy_demand_kWh(CURRENT_MARKET_SLOT) == 0.8 def test_serialize_returns_correct_input_arguments(self, energy_params): # When