def activate(self, bc=None): if bc: self._bc = bc for attr, kind in [(self.strategy, 'Strategy'), (self.appliance, 'Appliance')]: if attr: if self.parent: attr.area = self.parent attr.owner = self else: raise AreaException("{kind} {attr.__class__.__name__} " "on area {s} without parent!".format( kind=kind, attr=attr, s=self)) if self.budget_keeper: self.budget_keeper.activate() # Cycle markets without triggering it's own event chain. self._cycle_markets(_trigger_event=False) if not self.strategy and self.parent is not None: self.log.warning("No strategy. Using inter area agent.") self.log.info('Activating area') self.active = True self.dispatcher.broadcast_activate()
def activate(self, bc=None, current_tick=None, simulation_id=None): if current_tick is not None: self.current_tick = current_tick self._bc = blockchain_interface_factory(bc, self.uuid, simulation_id) if self.strategy: if self.parent: self.strategy.area = self.parent self.strategy.owner = self else: raise AreaException( f"Strategy {self.strategy.__class__.__name__} on area {self} without parent!" ) if self.budget_keeper: self.budget_keeper.activate() if ConstSettings.IAASettings.AlternativePricing.PRICING_SCHEME != 0: self._set_grid_fees(0, 0) # Cycle markets without triggering it's own event chain. self.cycle_markets(_trigger_event=False) if not self.strategy and self.parent is not None: self.log.debug("No strategy. Using inter area agent.") self.log.debug("Activating area") self.active = True self.dispatcher.broadcast_activate(bc=bc, current_tick=self.current_tick, simulation_id=simulation_id) if self.redis_ext_conn is not None: self.redis_ext_conn.sub_to_external_channels()
def activate(self, bc=None): if bc: self._bc = bc for attr, kind in [(self.strategy, 'Strategy'), (self.appliance, 'Appliance')]: if attr: if self.parent: attr.area = self.parent attr.owner = self else: raise AreaException("{kind} {attr.__class__.__name__} " "on area {s} without parent!".format( kind=kind, attr=attr, s=self)) if self.budget_keeper: self.budget_keeper.activate() if ConstSettings.IAASettings.AlternativePricing.PRICING_SCHEME != 0: self.transfer_fee_pct = 0 elif self.transfer_fee_pct is None: self.transfer_fee_pct = self.config.iaa_fee if self.transfer_fee_const is None: self.transfer_fee_const = self.config.iaa_fee_const # Cycle markets without triggering it's own event chain. self._cycle_markets(_trigger_event=False) if not self.strategy and self.parent is not None: self.log.debug("No strategy. Using inter area agent.") self.log.debug('Activating area') self.active = True self.dispatcher.broadcast_activate()
def __init__(self, name: str = None, children: List["Area"] = None, uuid: str = None, strategy: BaseStrategy = None, config: SimulationConfig = None, budget_keeper=None, balancing_spot_trade_ratio=ConstSettings.BalancingSettings.SPOT_TRADE_RATIO, event_list=[], grid_fee_percentage: float = None, grid_fee_constant: float = None, external_connection_available: bool = False, throughput: ThroughputParameters = ThroughputParameters() ): validate_area(grid_fee_constant=grid_fee_constant, grid_fee_percentage=grid_fee_percentage) self.balancing_spot_trade_ratio = balancing_spot_trade_ratio self.active = False self.log = TaggedLogWrapper(log, name) self.current_tick = 0 self.__name = name self.throughput = throughput self.uuid = uuid if uuid is not None else str(uuid4()) self.slug = slugify(name, to_lower=True) self.parent = None self.children = AreaChildrenList(self, children) if children is not None\ else AreaChildrenList(self) for child in self.children: child.parent = self if (len(self.children) > 0) and (strategy is not None): raise AreaException("A leaf area can not have children.") self.strategy = strategy self._config = config self.events = Events(event_list, self) self.budget_keeper = budget_keeper if budget_keeper: self.budget_keeper.area = self self._bc = None self._markets = None self.dispatcher = DispatcherFactory(self)() self._set_grid_fees(grid_fee_constant, grid_fee_percentage) self.display_type = "Area" if self.strategy is None else self.strategy.__class__.__name__ self._markets = AreaMarkets(self.log) self.stats = AreaStats(self._markets, self) log.debug("External connection %s for area %s", external_connection_available, self.name) self.redis_ext_conn = RedisMarketExternalConnection(self) \ if external_connection_available and self.strategy is None else None self.should_update_child_strategies = False self.external_connection_available = external_connection_available
def __init__(self, name: str = None, children: List["Area"] = None, uuid: str = None, strategy: BaseStrategy = None, appliance: BaseAppliance = None, config: SimulationConfig = None, budget_keeper=None, balancing_spot_trade_ratio=ConstSettings.BalancingSettings. SPOT_TRADE_RATIO, event_list=[], grid_fee_percentage: float = None, transfer_fee_const: float = None, external_connection_available=False): validate_area(grid_fee_percentage=grid_fee_percentage) self.balancing_spot_trade_ratio = balancing_spot_trade_ratio self.active = False self.log = TaggedLogWrapper(log, name) self.current_tick = 0 self.name = name self.uuid = uuid if uuid is not None else str(uuid4()) self.slug = slugify(name, to_lower=True) self.parent = None self.children = children if children is not None else [] for child in self.children: child.parent = self if (len(self.children) > 0) and (strategy is not None): raise AreaException("A leaf area can not have children.") self.strategy = strategy self.appliance = appliance self._config = config self.events = Events(event_list, self) self.budget_keeper = budget_keeper if budget_keeper: self.budget_keeper.area = self self._bc = None self._markets = None self.dispatcher = DispatcherFactory(self)() self.grid_fee_percentage = grid_fee_percentage self.transfer_fee_const = transfer_fee_const self.display_type = "Area" if self.strategy is None else self.strategy.__class__.__name__ self._markets = AreaMarkets(self.log) self.stats = AreaStats(self._markets) self.redis_ext_conn = RedisAreaExternalConnection(self) \ if external_connection_available is True else None
def __init__(self, name: str = None, children: List["Area"] = None, uuid: str = None, strategy: BaseStrategy = None, appliance: BaseAppliance = None, config: SimulationConfig = None, budget_keeper=None, balancing_spot_trade_ratio=ConstSettings.BalancingSettings. SPOT_TRADE_RATIO, event_list=[], grid_fee_percentage: float = None, transfer_fee_const: float = None, external_connection_available: bool = False, baseline_peak_energy_import_kWh: float = None, baseline_peak_energy_export_kWh: float = None, import_capacity_kVA: float = None, export_capacity_kVA: float = None): validate_area( grid_fee_constant=transfer_fee_const, grid_fee_percentage=grid_fee_percentage, baseline_peak_energy_import_kWh=baseline_peak_energy_import_kWh, baseline_peak_energy_export_kWh=baseline_peak_energy_export_kWh, import_capacity_kVA=import_capacity_kVA, export_capacity_kVA=export_capacity_kVA) self.balancing_spot_trade_ratio = balancing_spot_trade_ratio self.active = False self.log = TaggedLogWrapper(log, name) self.current_tick = 0 self.name = name self.baseline_peak_energy_import_kWh = baseline_peak_energy_import_kWh self.baseline_peak_energy_export_kWh = baseline_peak_energy_export_kWh self.uuid = uuid if uuid is not None else str(uuid4()) self.slug = slugify(name, to_lower=True) self.parent = None self.children = children if children is not None else [] for child in self.children: child.parent = self if (len(self.children) > 0) and (strategy is not None): raise AreaException("A leaf area can not have children.") self.strategy = strategy self.appliance = appliance self._config = config self.events = Events(event_list, self) self.budget_keeper = budget_keeper if budget_keeper: self.budget_keeper.area = self self._bc = None self._markets = None self.dispatcher = DispatcherFactory(self)() self._set_grid_fees(transfer_fee_const, grid_fee_percentage) self._convert_area_throughput_kva_to_kwh(import_capacity_kVA, export_capacity_kVA) self.display_type = "Area" if self.strategy is None else self.strategy.__class__.__name__ self._markets = AreaMarkets(self.log) self.endpoint_stats = {} self.stats = AreaStats(self._markets) log.debug( f"External connection {external_connection_available} for area {self.name}" ) self.redis_ext_conn = RedisMarketExternalConnection(self) \ if external_connection_available is True else None
def _validate_before_insertion(self, item): if check_area_name_exists_in_parent_area(self.parent_area, item.name): raise AreaException("Area name should be unique inside the same Parent Area")
def name(self, new_name): if check_area_name_exists_in_parent_area(self.parent, new_name): raise AreaException("Area name should be unique inside the same Parent Area") self.__name = new_name