def storage_strategy_test12(area_test12): s = StorageStrategy(battery_capacity_kWh=5, max_abs_battery_power_kW=5, cap_price_strategy=True) s.owner = area_test12 s.area = area_test12 return s
def storage_strategy_test6(area_test6, market_test6, called): s = StorageStrategy(initial_soc=41.67) s.owner = area_test6 s.area = area_test6 s.accept_offer = called s.offers.post(market_test6.trade.offer, market_test6.id) return s
def get_setup(config): GlobalConfig.POWER_FLOW = True area = Area( 'Grid', [ Area( 'House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=6, hrs_of_day=list( range(12, 18)), final_buying_rate=35), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), ], grid_fee_percentage=0, grid_fee_constant=0, ), Area( 'House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=4, hrs_of_day=list( range(12, 16)), final_buying_rate=35), appliance=SwitchableAppliance()), Area('H2 PV', strategy=PVStrategy(panel_count=4, initial_selling_rate=30, final_selling_rate=5, max_panel_power_W=100), appliance=PVAppliance()), ], grid_fee_percentage=0, grid_fee_constant=0, ), Area('Cell Tower', strategy=CellTowerLoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list( range(0, 24)), final_buying_rate=35), appliance=SwitchableAppliance()), Area('DSO', strategy=InfiniteBusStrategy(energy_buy_rate=10, energy_sell_rate=30), appliance=SimpleAppliance()), ], config=config, ) return area
def storage_strategy_test4(area_test4, called): s = StorageStrategy(initial_soc=100, battery_capacity_kWh=2.1) s.owner = area_test4 s.area = area_test4 s.accept_offer = called return s
def get_setup(config): DeviceRegistry.REGISTRY = device_registry_dict ConstSettings.BalancingSettings.ENABLE_BALANCING_MARKET = True area = Area('Grid', [ Area('House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=6, hrs_of_day=list(range(0, 18)), final_buying_rate=35)), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50)), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=50)), ]), Area('House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=4, hrs_of_day=list(range(12, 16)), final_buying_rate=35)), Area( 'H2 PV', strategy=PVStrategy(4, 80), ), ]), Area('Cell Tower', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24)), final_buying_rate=35)) ], config=config) return area
def get_setup(config): area = Area( 'Grid', [ Area('House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=6, hrs_of_day=list(range(12, 18)), final_buying_rate=25)), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50)), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=50)), ]), Area('House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=4, hrs_of_day=list(range(12, 16)), final_buying_rate=35)), Area( 'H2 PV', strategy=PVStrategy(3, 80), ), ]), Area('Cell Tower', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24)), final_buying_rate=35)) # Area('Commercial Energy Producer', # strategy=CommercialStrategy(energy_range_wh=(40, 120), energy_price=30) # ), ], config=config) return area
def get_setup(config): i_c = 12 * 1.2 i_c_f = 1 area = Area('Grid', [ Area('House 1', [ Area('H1 PV', strategy=PVStrategy(60, 80), appliance=PVAppliance()), Area('H1 General Load', strategy=DefinedLoadStrategy(daily_load_profile=os.path.join( d3a_path, 'resources', 'SAM_MF2_Summer.csv'), max_energy_rate=35), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(battery_capacity_kWh=i_c, max_abs_battery_power_kW=i_c, initial_capacity_kWh=i_c_f * i_c), appliance=SwitchableAppliance()), ]), Area('House 2', [ Area('H2 PV', strategy=PVStrategy(60, 80), appliance=PVAppliance()), Area('H2 General Load', strategy=DefinedLoadStrategy(daily_load_profile=os.path.join( d3a_path, 'resources', 'SAM_MF2_Summer.csv'), max_energy_rate=35), appliance=SwitchableAppliance()), Area('H2 Storage1', strategy=StorageStrategy(battery_capacity_kWh=i_c, max_abs_battery_power_kW=i_c, initial_capacity_kWh=i_c_f * i_c), appliance=SwitchableAppliance()), ]), Area('House 3', [ Area('H3 General Load', strategy=DefinedLoadStrategy(daily_load_profile=os.path.join( d3a_path, 'resources', 'SAM_MF2_Summer.csv'), max_energy_rate=35), appliance=SwitchableAppliance()), Area('H3 Storage1', strategy=StorageStrategy(battery_capacity_kWh=i_c, max_abs_battery_power_kW=i_c, initial_capacity_kWh=i_c_f * i_c), appliance=SwitchableAppliance()), ]), Area('House 4', [ Area('H4 General Load', strategy=DefinedLoadStrategy(daily_load_profile=os.path.join( d3a_path, 'resources', 'SAM_MF2_Summer.csv'), max_energy_rate=35), appliance=SwitchableAppliance()), Area('H4 Storage1', strategy=StorageStrategy(battery_capacity_kWh=i_c, max_abs_battery_power_kW=i_c, initial_capacity_kWh=i_c_f * i_c), appliance=SwitchableAppliance()), ]), ], config=config) return area
def get_setup(config): area = Area('Grid', [ Area( 'House 1', [ Area('H1 Storage1', strategy=StorageStrategy(initial_soc=10, battery_capacity_kWh=15.0, initial_buying_rate=0, final_buying_rate=23.99, final_selling_rate=28.01)), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=10, battery_capacity_kWh=15.0, initial_buying_rate=0, final_buying_rate=22.99, final_selling_rate=28.01)), ], grid_fee_percentage=0, ), Area( 'House 2', [ Area('H2 PV', strategy=PVStrategy(1, final_selling_rate=23.0)), ], grid_fee_percentage=0, ), ], config=config) return area
def get_setup(config): ConstSettings.IAASettings.MARKET_TYPE = 2 ConstSettings.GeneralSettings.EXPORT_OFFER_BID_TRADE_HR = True area = Area('Grid', [ Area('House 1', [ Area('H1 Storage1', strategy=StorageStrategy(initial_soc=10, min_allowed_soc=10, battery_capacity_kWh=1.2, max_abs_battery_power_kW=5, initial_selling_rate=30, final_buying_rate=25, final_selling_rate=25.1, initial_buying_rate=0, fit_to_limit=True, update_interval=1)), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=10, min_allowed_soc=10, battery_capacity_kWh=1.2, max_abs_battery_power_kW=5, initial_selling_rate=30, final_buying_rate=25, final_selling_rate=25.1, initial_buying_rate=0, fit_to_limit=True, update_interval=1)) ]), ], config=config) return area
def get_setup(config): ConstSettings.IAASettings.MARKET_TYPE = 3 ConstSettings.GeneralSettings.MARKET_CLEARING_FREQUENCY_PER_SLOT = 3 ConstSettings.LoadSettings.INITIAL_BUYING_RATE = 35 ConstSettings.LoadSettings.FINAL_BUYING_RATE = 35 ConstSettings.StorageSettings.BUYING_RANGE = RangeLimit(24.99, 25) ConstSettings.StorageSettings.SELLING_RANGE = RangeLimit(30, 25.01) area = Area('Grid', [ Area('House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(24)), final_buying_rate=35), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), Area('H1 PV', strategy=PVStrategy(4), appliance=PVAppliance()), Area('H1 CEP', strategy=CommercialStrategy(energy_rate=30), appliance=SimpleAppliance()), ]), ], config=config) return area
def storage_strategy_test8(area_test8): s = StorageStrategy(initial_soc=99, battery_capacity_kWh=101, max_abs_battery_power_kW=401) s.owner = area_test8 s.area = area_test8 return s
def get_setup(config): from d3a.models.const import ConstSettings ConstSettings.GeneralSettings.MAX_OFFER_TRAVERSAL_LENGTH = 1 area = Area('Grid', [ Area('House 1', [ Area('H1 Storage1', strategy=StorageStrategy(risk=0, initial_capacity_kWh=1.5, battery_capacity_kWh=15.0, break_even=(23.99, 28.01)), appliance=SwitchableAppliance()), Area('H1 Storage2', strategy=StorageStrategy(risk=0, initial_capacity_kWh=1.5, battery_capacity_kWh=15.0, break_even=(22.99, 28.01)), appliance=SwitchableAppliance()), ]), Area('House 2', [ Area('H2 PV', strategy=PVStrategy( 1, 0, min_selling_rate=23.0, initial_rate_option=2), appliance=PVAppliance()), ]), ], config=config) return area
def get_setup(config): ConstSettings.IAASettings.MIN_BID_AGE = 0 ConstSettings.IAASettings.MIN_OFFER_AGE = 0 area = Area('Grid', [ Area('House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=6, hrs_of_day=list(range(12, 18)), final_buying_rate=35)), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=100, battery_capacity_kWh=20)), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=100, battery_capacity_kWh=20)), ], grid_fee_constant=2), Area('House 2', [ Area('load', strategy=LoadHoursExternalStrategy(avg_power_W=200, hrs_per_day=24, hrs_of_day=list( range(0, 24)), final_buying_rate=35)), Area('pv', strategy=PVExternalStrategy(panel_count=4)), ], external_connection_available=True, grid_fee_constant=1), Area('Market Maker', strategy=MarketMakerStrategy(energy_rate=30)), ], grid_fee_constant=10, config=config) return area
def get_setup(config): ConstSettings.IAASettings.AlternativePricing.PRICING_SCHEME = 1 area = Area('Grid', [ Area('House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24))), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), Area('H1 PV', strategy=PVStrategy(4, 0), appliance=PVAppliance()), ]), Area('House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24))), appliance=SwitchableAppliance()), Area('H2 PV', strategy=PVStrategy(4, 0), appliance=PVAppliance()), Area('H2 Storage1', strategy=StorageStrategy(initial_soc=100), appliance=SwitchableAppliance()), ]), Area('Commercial Energy Producer', strategy=CommercialStrategy(energy_rate=30), appliance=SimpleAppliance()), ], config=config) return area
def storage_strategy_test7_1(area_test7): s = StorageStrategy(initial_soc=99.67, battery_capacity_kWh=3.01, max_abs_battery_power_kW=5.21, final_buying_rate=26, final_selling_rate=27) s.owner = area_test7 s.area = area_test7 return s
def storage_strategy_test11(area_test11, called): s = StorageStrategy(battery_capacity_kWh=100, initial_capacity_kWh=50, max_abs_battery_power_kW=1) s.owner = area_test11 s.area = area_test11 s.accept_offer = called return s
def storage_strategy_test1(area_test1, called): s = StorageStrategy(max_abs_battery_power_kW=2.01, initial_buying_rate=23.6, final_buying_rate=23.6, initial_selling_rate=23.7, final_selling_rate=23.7) s.owner = area_test1 s.area = area_test1 s.accept_offer = called return s
def storage_strategy_test14(area_test14, called): s = StorageStrategy(initial_soc=50, battery_capacity_kWh=30, max_abs_battery_power_kW=10, initial_selling_rate=25, final_selling_rate=24, initial_buying_rate=0, final_buying_rate=23.9) s.owner = area_test14 s.area = area_test14 s.accept_offer = called return s
def storage_strategy_test13(area_test13, called): s = StorageStrategy(battery_capacity_kWh=5, max_abs_battery_power_kW=5, initial_selling_rate=35.1, final_selling_rate=35, initial_buying_rate=34, final_buying_rate=34) s.owner = area_test13 s.area = area_test13 s.accept_offer = called return s
def storage_strategy_test11(area_test11, called): s = StorageStrategy(battery_capacity_kWh=100, initial_soc=50, max_abs_battery_power_kW=1, initial_buying_rate=30, final_buying_rate=30, initial_selling_rate=33, final_selling_rate=32) s.owner = area_test11 s.area = area_test11 s.accept_offer = called return s
def storage_strategy_test12(area_test12): s = StorageStrategy(battery_capacity_kWh=5, initial_capacity_kWh=2.5, max_abs_battery_power_kW=5, break_even=(16.99, 17.01), cap_price_strategy=True) s.owner = area_test12 s.area = area_test12 return s
def storage_strategy_test13(area_test13, called): s = StorageStrategy(battery_capacity_kWh=5, initial_capacity_kWh=2.5, max_abs_battery_power_kW=5, break_even=(34, 35.1)) s.owner = area_test13 s.area = area_test13 s.accept_offer = called return s
def test_storage_strategy_increases_rate_when_fit_to_limit_is_false(): storage = StorageStrategy( fit_to_limit=False, initial_selling_rate=30, final_selling_rate=25, energy_rate_decrease_per_update=1, initial_buying_rate=10, final_buying_rate=20, energy_rate_increase_per_update=1) storage.area = FakeArea(1) storage.event_activate() assert all([rate == -1 for rate in storage.bid_update.energy_rate_change_per_update.values()]) assert all([rate == 1 for rate in storage.offer_update.energy_rate_change_per_update.values()])
def storage_strategy_test7_3(area_test7): s = StorageStrategy(initial_soc=19.96, battery_capacity_kWh=5.01, max_abs_battery_power_kW=5.21, final_selling_rate=17, initial_buying_rate=15, final_buying_rate=16) s.owner = area_test7 s.area = area_test7 s.offers.posted = {Offer('id', 30, 1, 'FakeArea'): area_test7.current_market.id} s.market = area_test7.current_market return s
def get_setup(config): area = Area( 'Grid', [ Area( 'House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=6, hrs_of_day=list( range(12, 18)), final_buying_rate=35), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), ], transfer_fee_pct=0, transfer_fee_const=0, ), Area( 'House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=4, hrs_of_day=list( range(12, 16)), final_buying_rate=35), appliance=SwitchableAppliance()), Area('H2 PV', strategy=PVStrategy(panel_count=4, initial_selling_rate=30, final_selling_rate=5), appliance=PVAppliance()), ], transfer_fee_pct=0, transfer_fee_const=0, ), Area('Cell Tower', strategy=CellTowerLoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list( range(0, 24)), final_buying_rate=35), appliance=SwitchableAppliance()), # Area('Commercial Energy Producer', # strategy=CommercialStrategy(energy_rate=30), # appliance=SimpleAppliance() # ), ], config=config) return area
def storage_strategy_test7_1(area_test7): s = StorageStrategy(initial_capacity_kWh=3.0, battery_capacity_kWh=3.01, max_abs_battery_power_kW=5.21, initial_rate_option=2, break_even=(26, 27)) s.owner = area_test7 s.area = area_test7 return s
def get_setup(config): ConstSettings.GeneralSettings.DEFAULT_UPDATE_INTERVAL = 5 area = Area( 'Grid', [ Area( 'House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=6, hrs_of_day=list( range(12, 18)), final_buying_rate=25), grid_fee_percentage=0), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50), grid_fee_percentage=0), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=50), grid_fee_percentage=0), ], grid_fee_percentage=0, grid_fee_constant=0, ), Area( 'House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=4, hrs_of_day=list( range(12, 16)), final_buying_rate=35), grid_fee_percentage=0), Area('H2 PV', strategy=PVStrategy(10), grid_fee_percentage=0), ], grid_fee_percentage=0, grid_fee_constant=0, ), Area('Cell Tower', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24)), final_buying_rate=35), grid_fee_percentage=0) # Area('Commercial Energy Producer', # strategy=CommercialStrategy(energy_range_wh=(40, 120), energy_price=30), # # ), ], config=config) return area
def test_storage_populates_break_even_profile_correctly(): from d3a.models.read_user_profile import default_profile_dict s = StorageStrategy(break_even=(22, 23)) assert all([be[0] == 22 and be[1] == 23 for _, be in s.break_even.items()]) assert set(s.break_even.keys()) == set(default_profile_dict().keys()) s = StorageStrategy(break_even={0: (22, 23), 10: (24, 25), 20: (27, 28)}) assert set(s.break_even.keys()) == set(default_profile_dict().keys()) assert all([s.break_even[f"{i:02}:00"] == (22, 23) for i in range(10)]) assert all([s.break_even[f"{i:02}:00"] == (24, 25) for i in range(10, 20)]) assert all([s.break_even[f"{i:02}:00"] == (27, 28) for i in range(20, 24)])
def get_setup(config): ConstSettings.IAASettings.MARKET_TYPE = 2 ConstSettings.IAASettings.BID_OFFER_MATCH_TYPE = \ BidOfferMatchAlgoEnum.PAY_AS_CLEAR.value # ConstSettings.GeneralSettings.SUPPLY_DEMAND_PLOTS = False ConstSettings.GeneralSettings.MARKET_CLEARING_FREQUENCY_PER_SLOT = 3 ConstSettings.GeneralSettings.DEFAULT_UPDATE_INTERVAL = 5 area = Area('Grid', [ Area('House 1', [ Area( 'H1 General Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=6, hrs_of_day=list(range(12, 18)), initial_buying_rate=35, final_buying_rate=35), ), Area( 'H1 Storage1', strategy=StorageStrategy(initial_soc=50), ), Area( 'H1 Storage2', strategy=StorageStrategy(initial_soc=50), ), ]), Area('House 2', [ Area( 'H2 General Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=4, hrs_of_day=list(range(12, 16)), final_buying_rate=35), ), Area( 'H2 PV', strategy=PVStrategy(4), ), Area( 'H2 CEP', strategy=CommercialStrategy(energy_rate=10), ), ]), Area( 'Cell Tower', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24)), final_buying_rate=35), ), ], config=config) return area
def test_first_market_cycle_with_initial_capacity(storage_strategy_test8: StorageStrategy, area_test8: FakeArea): storage_strategy_test8.event_activate() storage_strategy_test8.event_market_cycle() sell_market = area_test8.all_markets[0] assert(isclose(storage_strategy_test8.state.offered_sell_kWh[sell_market.time_slot], 100.0 - storage_strategy_test8.state.capacity * storage_strategy_test8.state.min_allowed_soc_ratio, rel_tol=1e-02)) assert len(storage_strategy_test8.offers.posted_in_market( area_test8._markets_return["Fake Market"].id) ) > 0