def get_setup(config): config.grid_fee_type = 1 ConstSettings.GeneralSettings.DEFAULT_UPDATE_INTERVAL = 5 area = Area('Grid', [ Area('Neighborhood 1', [ Area('House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=24, hrs_of_day=list(range(0, 24)), initial_buying_rate=30, final_buying_rate=30)), ], grid_fee_constant=0) ], grid_fee_constant=1), Area('Neighborhood 2', [ Area('House 2', [ Area( 'H2 PV', strategy=PVStrategy(panel_count=10, initial_selling_rate=10, final_selling_rate=10), ) ], grid_fee_constant=0), ], grid_fee_constant=1) ], config=config, grid_fee_constant=2) return area
def get_setup(config): area = Area( 'Grid', [ Area('Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24)), initial_buying_rate=0, use_market_maker_rate=True)), Area('Market Maker', strategy=MarketMakerStrategy(energy_rate=30) ), ], config=config, grid_fee_constant=5, ) return area
def test_export_unmatched_loads_is_reported_correctly_for_all_loads_matched( self): house1 = Area("House1", [self.area1, self.area2]) self.grid = Area("Grid", [house1]) self.grid._markets.past_markets = {} for i in range(1, 11): timeslot = DateTime(2018, 1, 1, 12 + i, 0, 0) self.strategy1.state.desired_energy_Wh[timeslot] = 100 self.strategy2.state.desired_energy_Wh[timeslot] = 100 mock_market = MagicMock(spec=Market) mock_market.time_slot = timeslot mock_market.traded_energy = {"load1": -0.101, "load2": -0.101} house1._markets.past_markets[timeslot] = mock_market self.grid._markets.past_markets[timeslot] = mock_market unmatched_loads = export_unmatched_loads(self.grid) assert unmatched_loads["unmatched_load_count"] == 0 assert unmatched_loads["all_loads_met"]
def get_setup(config): area = Area('Grid', [ Area('House 1', [ Area('H1 General Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=15, hrs_of_day=list(range(5, 20))), appliance=SwitchableAppliance()), Area('H1 PV1', strategy=PVPredefinedStrategy(panel_count=1, risk=80), appliance=PVAppliance()), Area('H1 PV2', strategy=PVPredefinedStrategy(panel_count=1, risk=80), appliance=PVAppliance()), ]), ], config=config) return area
def get_setup(config): area = Area( 'Grid', [ Area('Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=24, hrs_of_day=list( range(0, 24)), final_buying_rate=40) ), Area('Market Maker', strategy=MarketMakerStrategy(energy_rate=18.7, grid_connected=False) ), ], config=config ) return area
def get_setup(config): area = Area('Grid', [ Area('House 1', [ Area('H1 Storage1', strategy=StorageStrategy(initial_soc=40, battery_capacity_kWh=5, max_abs_battery_power_kW=5, initial_buying_rate=0, final_buying_rate=16.99, final_selling_rate=17.01)), ]), Area( 'Commercial Energy Producer', strategy=CommercialStrategy(energy_rate=15), ) ], 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=24, hrs_of_day=list(range(0, 24)), final_buying_rate=35), appliance=SwitchableAppliance()), ]), Area('Finite Commercial Producer Profile', strategy=FinitePowerPlant( energy_rate=31.3, max_available_power_kW=diesel_power_profile_kW), appliance=SwitchableAppliance()), ], config=config) return area
def get_setup(config): ConstSettings.IAASettings.MARKET_TYPE = 2 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=24, hrs_of_day=list(range(0, 24)), initial_buying_rate=0, final_buying_rate=30)) ]), Area('Commercial Energy Producer', strategy=CommercialStrategy(energy_rate=30), appliance=SimpleAppliance()), ], config=config) return area
def test_cycle_markets(self): GlobalConfig.end_date = GlobalConfig.start_date + GlobalConfig.sim_duration self.area = Area(name="Street", children=[Area(name="House")], config=GlobalConfig, grid_fee_percentage=1) self.area.parent = Area(name="GRID") self.area.config.market_count = 5 self.area.activate() assert len(self.area.all_markets) == 5 assert len(self.area.balancing_markets) == 5 self.area.current_tick = 900 self.area._cycle_markets() assert len(self.area.past_markets) == 1 assert len(self.area.past_balancing_markets) == 1 assert len(self.area.all_markets) == 5 assert len(self.area.balancing_markets) == 5
def test_export_unmatched_loads_is_reported_correctly_for_half_loads_unmatched( self): house1 = Area("House1", [self.area1, self.area2]) self.grid = Area("Grid", [house1]) self.grid._markets.past_markets = {} for i in range(1, 11): timeslot = today(tz=TIME_ZONE).add(hours=12 + i) self.strategy1.state.desired_energy_Wh[timeslot] = 100 self.strategy2.state.desired_energy_Wh[timeslot] = 100 mock_market = MagicMock(spec=Market) mock_market.time_slot = timeslot mock_market.traded_energy = {"load1": -0.09, "load2": -0.101} house1._markets.past_markets[timeslot] = mock_market self.grid._markets.past_markets[timeslot] = mock_market unmatched_loads, unmatched_loads_redis = \ ExportUnmatchedLoads(self.grid).get_current_market_results(all_past_markets=True) assert get_number_of_unmatched_loads(unmatched_loads) == 10
def setUp(self): ConstSettings.IAASettings.MARKET_TYPE = 2 self.market1 = OneSidedMarket(name="test_market") self.market1.id = "id1" self.market2 = OneSidedMarket(name="test_market") self.market2.id = "id2" self.area = Area(name="test_area") self.area._markets.markets = {1: self.market1, 2: self.market2} self.publisher = AreaToMarketEventPublisher(self.area)
def setUp(self): ConstSettings.BalancingSettings.ENABLE_BALANCING_MARKET = True DeviceRegistry.REGISTRY = { "H1 General Load": (33, 35), "H2 General Load": (33, 35), "H1 Storage1": (23, 25), "H1 Storage2": (23, 25), } self.appliance = MagicMock(spec=SimpleAppliance) self.strategy = MagicMock(spec=StorageStrategy) self.config = MagicMock(spec=SimulationConfig) self.config.slot_length = duration(minutes=15) self.config.tick_length = duration(seconds=15) self.area = Area("test_area", None, self.strategy, self.appliance, self.config, None) self.area.parent = self.area self.area.children = [self.area]
def get_setup(config): DeviceRegistry.REGISTRY = device_registry_dict ConstSettings.BalancingSettings.FLEXIBLE_LOADS_SUPPORT = False 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=8, hrs_of_day=list(range(8, 16)))), ]), Area('House 2', [ Area('H2 PV', strategy=PVStrategy(4, 0)), ]), ], config=config) return area
def get_setup(config): ConstSettings.IAASettings.MARKET_TYPE = 2 ConstSettings.IAASettings.MIN_OFFER_AGE = 0 ConstSettings.IAASettings.MIN_BID_AGE = 0 area = Area( "Grid", [ Area("Community", [ Area("Family 2 children with PV + ESS", [ Area("Family General Load", strategy=LoadHoursStrategy(avg_power_W=5680, hrs_of_day=list(range(24)), hrs_per_day=24, initial_buying_rate=23, final_buying_rate=23)), Area("Family PV", strategy=PVStrategy(max_panel_power_W=17985, panel_count=1, initial_selling_rate=6, final_selling_rate=6)), Area("Family ESS", strategy=StorageStrategy(initial_soc=20, battery_capacity_kWh=5, initial_buying_rate=22.94, final_buying_rate=22.94, initial_selling_rate=22.95, final_selling_rate=22.95)) ]), Area("Community PP", strategy=FinitePowerPlant(max_available_power_kW=10, energy_rate=1)), Area("Community Load", strategy=LoadHoursStrategy(avg_power_W=1200, hrs_of_day=list(range(24)), hrs_per_day=24, initial_buying_rate=10, final_buying_rate=10)) ], grid_fee_constant=4.0), Area("DSO", strategy=InfiniteBusStrategy(energy_buy_rate=20, energy_sell_rate=22)) ], config=config, grid_fee_constant=4.0, ) return area
def get_setup(config): ConstSettings.GeneralSettings.EXPORT_SUPPLY_DEMAND_PLOTS = True ConstSettings.IAASettings.MARKET_TYPE = 2 ConstSettings.IAASettings.BID_OFFER_MATCH_TYPE = \ BidOfferMatchAlgoEnum.PAY_AS_CLEAR.value ConstSettings.IAASettings.PAY_AS_CLEAR_AGGREGATION_ALGORITHM = 1 ConstSettings.GeneralSettings.MARKET_CLEARING_FREQUENCY_PER_SLOT = 1 ConstSettings.IAASettings.MIN_OFFER_AGE = 0 ConstSettings.IAASettings.MIN_BID_AGE = 0 area = Area( 'Grid', [ Area( 'House 1', [ Area('H1 General Load1', strategy=LoadHoursStrategy( avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(24)), initial_buying_rate=28.8, fit_to_limit=False, energy_rate_increase_per_update=0), ), Area('H1 General Load2', strategy=LoadHoursStrategy( avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(24)), initial_buying_rate=18.8, fit_to_limit=False, energy_rate_increase_per_update=0), ), Area('H1 General Load3', strategy=LoadHoursStrategy( avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(24)), initial_buying_rate=8.8, fit_to_limit=False, energy_rate_increase_per_update=0), ), Area('H1 CEP1', strategy=FinitePowerPlant(energy_rate=5.1, max_available_power_kW=0.1), ), Area('H1 CEP2', strategy=FinitePowerPlant(energy_rate=15.5, max_available_power_kW=0.1), ), Area('H1 CEP3', strategy=FinitePowerPlant(energy_rate=25.001, max_available_power_kW=0.1), ), Area('H1 CEP4', strategy=FinitePowerPlant(energy_rate=28.001, max_available_power_kW=0.1), ), ] ), ], config=config ) return area
def get_setup(config): ConstSettings.IAASettings.MARKET_TYPE = 3 # 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), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), Area('H1 Storage2', strategy=StorageStrategy(initial_soc=50), appliance=SwitchableAppliance()), ]), 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), appliance=SwitchableAppliance()), Area('H2 PV', strategy=PVStrategy(4), appliance=PVAppliance()), Area('H2 CEP', strategy=CommercialStrategy(energy_rate=10), appliance=SimpleAppliance()), ]), 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()), ], config=config) return area
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(12, 18)), max_energy_rate=35), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(initial_capacity_kWh=0.6), appliance=SwitchableAppliance()), Area('H1 Storage2', strategy=StorageStrategy(initial_capacity_kWh=0.6), appliance=SwitchableAppliance()), ] ), Area( 'House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=4, hrs_of_day=list( range(12, 16)), max_energy_rate=35), appliance=SwitchableAppliance()), Area('H2 PV', strategy=PVStrategy(4, 80), appliance=PVAppliance()), ] ), Area('Cell Tower', strategy=CellTowerLoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24)), max_energy_rate=35), appliance=SwitchableAppliance()), # Area('Commercial Energy Producer', # strategy=CommercialStrategy(energy_rate=30), # appliance=SimpleAppliance() # ), ], config=config ) return area
def get_setup(config): area = Area('Grid', [ Area('InfiniteBus', strategy=InfiniteBusStrategy(energy_sell_rate=30, energy_buy_rate=12), appliance=SimpleAppliance()), Area('House', [ Area('Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=10, hrs_of_day=list(range(8, 19))), appliance=SwitchableAppliance()), Area('PV', strategy=PVPredefinedStrategy(cloud_coverage=0), appliance=PVAppliance()), ]), ], config=config) return area
def get_setup(config): area = Area( 'Grid', [ Area( 'House 1', [ Area('PV', strategy=PVStrategy( max_panel_power_W=2000, initial_selling_rate=30, final_selling_rate=30.0), appliance=PVAppliance()), Area('storage', strategy=StorageExternalStrategy( initial_soc=50, battery_capacity_kWh=20), appliance=SwitchableAppliance()), ], ), ], config=config ) return area
def get_setup(config): area = Area( 'Grid', [ Area( 'House 1', [ Area('H1 DefinedLoad', strategy=DefinedLoadStrategy(daily_load_profile=profile_path, final_buying_rate=36) ), ] ), Area('Commercial Energy Producer', strategy=CommercialStrategy() ), ], config=config ) return area
def get_setup(config): area = Area('Grid', [ Area('House 1', [ Area('H1 General Load 1', strategy=LoadHoursStrategy( avg_power_W=200, hrs_of_day=list(range(0, 24)), final_buying_rate=user_profile_int)), Area('H1 General Load 2', strategy=LoadHoursStrategy( avg_power_W=200, hrs_of_day=list(range(0, 24)), final_buying_rate=user_profile_str)), ]), Area('Commercial Energy Producer', strategy=CommercialStrategy(energy_rate=34)), ], config=config) return area
def test_keep_past_markets(self): ConstSettings.GeneralSettings.KEEP_PAST_MARKETS = True self.area = Area(name="Street", children=[Area(name="House")], config=GlobalConfig, transfer_fee_pct=5) self.area.config.market_count = 1 self.area.activate() self.area._bc = False self.area._cycle_markets(False, False, False) assert len(self.area.past_markets) == 0 current_time = today(tz=TIME_ZONE).add(hours=1) self.area._markets.rotate_markets(current_time, self.stats, self.dispatcher) assert len(self.area.past_markets) == 1 self.area._markets.create_future_markets(current_time, True, self.area) current_time = today(tz=TIME_ZONE).add(hours=2) self.area._markets.rotate_markets(current_time, self.stats, self.dispatcher) assert len(self.area.past_markets) == 2
def get_setup(config): area = Area('Grid', [ Area('House 1', [ Area('H1 Storage1', strategy=StorageStrategy(initial_capacity_kWh=2, initial_rate_option=2, energy_rate_decrease_option=2, energy_rate_decrease_per_update=3, battery_capacity_kWh=5, max_abs_battery_power_kW=5, break_even=(16.99, 17.01)), appliance=SwitchableAppliance()), ]), Area('Commercial Energy Producer', strategy=CommercialStrategy(energy_rate=15), appliance=SimpleAppliance()), ], config=config) return area
def test_delete_past_markets_instead_of_last(self): self.area = Area(name="Street", children=[Area(name="House")], config=GlobalConfig, transfer_fee_pct=5) self.area.config.market_count = 1 self.area.activate() self.area._bc = False self.area._cycle_markets(False, False, False) assert len(self.area.past_markets) == 0 current_time = today(tz=TIME_ZONE).add(hours=1) self.area._markets.rotate_markets(current_time, self.stats, self.dispatcher) assert len(self.area.past_markets) == 1 self.area._markets.create_future_markets(current_time, True, self.area) current_time = today(tz=TIME_ZONE).add(hours=2) self.area._markets.rotate_markets(current_time, self.stats, self.dispatcher) assert len(self.area.past_markets) == 1 assert list(self.area.past_markets)[-1].time_slot == today(tz=TIME_ZONE).add(hours=1)
def get_setup(config): area = Area('Grid', [ Area('Electrolyzer', strategy=ElectrolyzerStrategy( discharge_profile=electrolizer_profile_file, conversion_factor_kg_to_kWh=50, reservoir_capacity_kg=56.0, reservoir_initial_capacity_kg=10, production_rate_kg_h=2.8), appliance=SwitchableAppliance()), Area('PV', strategy=PVPredefinedStrategy(panel_count=1), appliance=PVAppliance()), Area("Commercial Energy Producer", strategy=CommercialStrategy(), appliance=SwitchableAppliance()), ], config=config) return area
def get_setup(config): ConstSettings.IAASettings.MARKET_TYPE = 2 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=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(), appliance=SwitchableAppliance()) ]), 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), appliance=SwitchableAppliance()), Area('H2 PV', strategy=PVStrategy(4), appliance=PVAppliance()), ]), 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_range_wh=(40, 120), energy_price=30), # appliance=SimpleAppliance() # ), ], 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=24, hrs_of_day=list(range(0, 24)), final_buying_rate=25)), Area('H1 Storage1', strategy=StorageStrategy(initial_soc=100, battery_capacity_kWh=5, max_abs_battery_power_kW=5, initial_buying_rate=0, final_buying_rate=16.99, final_selling_rate=17.01)), ]), ], config=config) return area
def get_setup(config): area = Area('Grid', [ Area('Finite Power Plant', strategy=FinitePowerPlant(energy_rate=30, max_available_power_kW=100), appliance=SwitchableAppliance()), Area('Load', strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=9, hrs_of_day=list(range(8, 18))), appliance=SwitchableAppliance(), children=[ Area("Forbidden Load", strategy=LoadHoursStrategy(avg_power_W=100, hrs_per_day=9)) ]), ], config=config) return area
def setUp(self): self.ext_strategy_mock = MagicMock d3a.models.area.redis_external_connection.ExternalStrategy = self.ext_strategy_mock d3a.models.area.redis_external_connection.StrictRedis = MagicMock() redis_db_object = MagicMock() redis_db_object.pubsub = MagicMock d3a.models.area.redis_external_connection.StrictRedis.from_url = \ MagicMock(return_value=redis_db_object) self.area = Area(name="base_area") self.external_connection = RedisAreaExternalConnection(self.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)), max_energy_rate=25), appliance=SwitchableAppliance()), Area('H1 Storage1', strategy=StorageStrategy(initial_capacity_kWh=0.6), appliance=SwitchableAppliance()), Area('H1 Storage2', strategy=StorageStrategy(initial_capacity_kWh=0.6), appliance=SwitchableAppliance()), ] ), Area( 'House 2', [ Area('H2 General Load', strategy=LoadHoursStrategy(avg_power_W=200, hrs_per_day=4, hrs_of_day=list( range(12, 16)), max_energy_rate=35), appliance=SwitchableAppliance()), Area('H2 PV', strategy=PVStrategy(4, 80), appliance=PVAppliance()), ] ), Area('Cell Tower', strategy=CellTowerLoadHoursStrategy(avg_power_W=100, hrs_per_day=24, hrs_of_day=list(range(0, 24)), max_energy_rate=35), appliance=SwitchableAppliance()) # Area('Commercial Energy Producer', # strategy=CommercialStrategy(energy_range_wh=(40, 120), energy_price=30), # appliance=SimpleAppliance() # ), ], config=config ) return area