Skip to content

Commit

Permalink
switch to power units
Browse files Browse the repository at this point in the history
Signed-off-by: Victor Garcia Reolid <victor@seita.nl>
  • Loading branch information
victorgarcia98 committed Dec 14, 2023
1 parent bf11552 commit 3743c84
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 19 deletions.
7 changes: 2 additions & 5 deletions flexmeasures/data/models/planning/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import numpy as np
from flask import current_app

from flexmeasures import Sensor
from flexmeasures.data.models.planning import Scheduler, SchedulerOutputType
from flexmeasures.data.models.planning.linear_optimization import device_scheduler
from flexmeasures.data.models.planning.utils import (
Expand Down Expand Up @@ -244,15 +243,13 @@ def _prepare(self, skip_validation: bool = False) -> tuple: # noqa: C901
stock_delta_series = get_continuous_series_sensor_or_quantity(
quantity_or_sensor=component,
actuator=sensor,
unit="MWh",
unit="MW",
query_window=(start, end),
resolution=resolution,
beliefs_before=belief_time,
)

if isinstance(component, Sensor):
from_unit = component.event_resolution
stock_delta_series *= resolution / from_unit
stock_delta_series *= resolution / timedelta(hours=1) # MW -> MW

if is_usage:
stock_delta_series *= -1
Expand Down
7 changes: 4 additions & 3 deletions flexmeasures/data/models/planning/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,9 +232,10 @@ def add_stock_delta(db, add_battery_assets, setup_sources) -> dict[str, Sensor]:
capacity = battery.get_attribute("capacity_in_mw")
sensors = {}
sensor_specs = [
("delta fails", timedelta(minutes=15), capacity),
("delta", timedelta(minutes=15), capacity * 0.25),
("delta fails", timedelta(minutes=15), capacity * 1.2),
("delta", timedelta(minutes=15), capacity),
("delta hourly", timedelta(hours=1), capacity),
("delta 5min", timedelta(minutes=5), capacity),
]

for name, resolution, value in sensor_specs:
Expand All @@ -247,7 +248,7 @@ def add_stock_delta(db, add_battery_assets, setup_sources) -> dict[str, Sensor]:

stock_delta_sensor = Sensor(
name=name,
unit="MWh",
unit="MW",
event_resolution=resolution,
generic_asset=battery,
)
Expand Down
15 changes: 6 additions & 9 deletions flexmeasures/data/models/planning/tests/test_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -1452,7 +1452,7 @@ def test_battery_power_capacity_as_sensor(

@pytest.mark.parametrize(
"stock_delta_sensor",
["delta fails", "delta", "delta hourly"],
["delta fails", "delta", "delta hourly", "delta 5min"],
)
def test_battery_stock_delta_sensor(
add_battery_assets, add_stock_delta, stock_delta_sensor
Expand Down Expand Up @@ -1500,10 +1500,10 @@ def test_battery_stock_delta_sensor(
@pytest.mark.parametrize(
"gain,usage,expected_delta",
[
(["1 MWh"], ["1MWh"], 0), # delta stock is 0 (1 MWh - 1 MWh)
(["0.5 MWh", "0.5MWh"], [], 1), # 1 MWh stock gain in every 15 min period
(["100 kWh"], None, 0.1), # 100 kWh stock gain in every 15 min period
(None, ["100 kWh"], -0.1), # 100 kWh stock loss in every 15 min period
(["1 MW"], ["1MW"], 0), # delta stock is 0 (1 MW - 1 MW)
(["0.5 MW", "0.5 MW"], [], 1), # 1 MW stock gain
(["100 kW"], None, 0.1), # 100 MW stock gain
(None, ["100 kW"], -0.1), # 100 kW stock loss
([], [], None), # no gain defined -> no gain or loss happens
],
)
Expand Down Expand Up @@ -1537,9 +1537,6 @@ def test_battery_stock_delta_quantity(add_battery_assets, gain, usage, expected_
scheduler_info = scheduler._prepare()

if expected_delta is not None:
assert all(
scheduler_info[5][0]["stock delta"]
== expected_delta * (timedelta(hours=1) / resolution)
)
assert all(scheduler_info[5][0]["stock delta"] == expected_delta)
else:
assert all(scheduler_info[5][0]["stock delta"].isna())
4 changes: 2 additions & 2 deletions flexmeasures/data/schemas/scheduling/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,9 @@ class StorageFlexModelSchema(Schema):
storage_efficiency = EfficiencyField(data_key="storage-efficiency")
prefer_charging_sooner = fields.Bool(data_key="prefer-charging-sooner")

soc_gain = fields.List(QuantityOrSensor("MWh"), data_key="soc-gain", required=False)
soc_gain = fields.List(QuantityOrSensor("MW"), data_key="soc-gain", required=False)
soc_usage = fields.List(
QuantityOrSensor("MWh"), data_key="soc-usage", required=False
QuantityOrSensor("MW"), data_key="soc-usage", required=False
)

def __init__(self, start: datetime, sensor: Sensor, *args, **kwargs):
Expand Down

0 comments on commit 3743c84

Please sign in to comment.