def baa(): lower_market = FakeBalancingMarket([BalancingOffer('id', pendulum.now(), 2, 2, 'other'), BalancingOffer('id', pendulum.now(), 2, -2, 'other')]) higher_market = FakeBalancingMarket([]) owner = FakeArea('owner') baa = BalancingAgent(owner=owner, lower_market=lower_market, higher_market=higher_market) return baa
def baa2(): lower_market = FakeBalancingMarket([ BalancingOffer('id', 2, 0.2, 'other'), BalancingOffer('id', 2, -0.2, 'other') ]) higher_market = FakeBalancingMarket([]) owner = FakeArea('owner') baa = BalancingAgent(owner=owner, lower_market=lower_market, higher_market=higher_market) return baa
def balancing_offer(self, price: float, energy: float, seller: str, original_offer_price=None, offer_id=None, from_agent: bool = False, adapt_price_with_fees: bool = False, dispatch_event=True, seller_origin=None, attributes: Dict = None, requirements: List[Dict] = None) -> BalancingOffer: if seller not in DeviceRegistry.REGISTRY.keys() and not from_agent: raise DeviceNotInRegistryError(f"Device {seller} " f"not in registry ({DeviceRegistry.REGISTRY}).") if self.readonly: raise MarketReadOnlyException() if energy == 0: raise InvalidOffer() if adapt_price_with_fees: if self._is_constant_fees: price = price + self.fee_class.grid_fee_rate * energy else: price = price * (1 + self.fee_class.grid_fee_rate) if offer_id is None: offer_id = str(uuid.uuid4()) offer = BalancingOffer( offer_id, self.now, price, energy, seller, seller_origin=seller_origin, attributes=attributes, requirements=requirements) self.offers[offer.id] = offer self.offer_history.append(offer) log.debug(f"[BALANCING_OFFER][NEW][{self.time_slot_str}] {offer}") if dispatch_event is True: self._notify_listeners(MarketEvent.BALANCING_OFFER, offer=offer) return offer
def balancing_offer(self, price: float, energy: float, seller: str, from_agent: bool = False, iaa_fee: bool = False, seller_origin=None) -> BalancingOffer: if seller not in DeviceRegistry.REGISTRY.keys() and not from_agent: raise DeviceNotInRegistryError( f"Device {seller} " f"not in registry ({DeviceRegistry.REGISTRY}).") if self.readonly: raise MarketReadOnlyException() if energy == 0: raise InvalidOffer() if iaa_fee: price = price * ( 1 + self.transfer_fee_ratio) + self.transfer_fee_const * energy offer = BalancingOffer(str(uuid.uuid4()), price, energy, seller, seller_origin=seller_origin) self.offers[offer.id] = offer self._sorted_offers = \ sorted(self.offers.values(), key=lambda o: o.price / o.energy) self.offer_history.append(offer) log.debug(f"[BALANCING_OFFER][NEW][{self.time_slot_str}] {offer}") self._notify_listeners(MarketEvent.BALANCING_OFFER, offer=offer) return offer
def accept_offer(self, offer_or_id, buyer, energy=None, time=None, trade_rate: float = None): if time is None: time = self.time_slot offer = offer_or_id if (offer.energy > 0 and energy < 0) or (offer.energy < 0 and energy > 0): raise InvalidBalancingTradeException("BalancingOffer and energy " "are not compatible") if abs(energy) < abs(offer.energy): residual_energy = offer.energy - energy residual = BalancingOffer('res', pendulum.now(), offer.price, residual_energy, offer.seller) traded = BalancingOffer(offer.id, pendulum.now(), offer.price, energy, offer.seller) return BalancingTrade('trade_id', time, traded, traded.seller, buyer, residual) else: return BalancingTrade('trade_id', time, offer, offer.seller, buyer)
def balancing_offer(self, price: float, energy: float, seller: str, from_agent: bool = False) -> BalancingOffer: if seller not in DeviceRegistry.REGISTRY.keys() and not from_agent: raise DeviceNotInRegistryError( f"Device {seller} " f"not in registry ({DeviceRegistry.REGISTRY}).") if self.readonly: raise MarketReadOnlyException() if energy == 0: raise InvalidOffer() offer = BalancingOffer(str(uuid.uuid4()), price, energy, seller, self) self.offers[offer.id] = offer self._sorted_offers = \ sorted(self.offers.values(), key=lambda o: o.price / o.energy) log.info(f"[BALANCING_OFFER][NEW][{self.time_slot_str}] {offer}") self._notify_listeners(MarketEvent.BALANCING_OFFER, offer=offer) return offer
def balancing_offer(self, price, energy, seller): offer = BalancingOffer('id', price, energy, seller) self.created_balancing_offers.append(offer) offer.id = 'id' return offer
def balancing_offer(self, price, energy, seller, market=None): offer = BalancingOffer('id', now(), price, energy, seller, market) self.created_balancing_offers.append(offer) offer.id = 'id' return offer