Exemplo n.º 1
0
 def check_acct(self):
     actor_sums = {}
     for t in self.market.trades:
         actor_sums = add_or_create_key(actor_sums, t.seller, t.offer_bid.energy)
         actor_sums = subtract_or_create_key(actor_sums, t.buyer, t.offer_bid.energy)
     for actor, sum_ in actor_sums.items():
         assert self.market.traded_energy[actor] == sum_
     assert sum(self.market.traded_energy.values()) == 0
Exemplo n.º 2
0
 def _update_stats_after_trade(self, trade, offer, buyer, already_tracked=False):
     # FIXME: The following updates need to be done in response to the BC event
     # TODO: For now event driven blockchain updates have been disabled in favor of a
     # sequential approach, but once event handling is enabled this needs to be handled
     if not already_tracked:
         self.trades.append(trade)
     self._update_accumulated_trade_price_energy(trade)
     self.traded_energy = add_or_create_key(self.traded_energy, offer.seller, offer.energy)
     self.traded_energy = subtract_or_create_key(self.traded_energy, buyer, offer.energy)
     self._update_min_max_avg_trade_prices(offer.price / offer.energy)
     # Recalculate offer min/max price since offer was removed
     self._update_min_max_avg_offer_prices()
Exemplo n.º 3
0
def _accumulate_area_trades(area, parent, accumulated_trades,
                            past_market_types):
    if area.name not in accumulated_trades:
        accumulated_trades[area.name] = {
            "type": "house",
            "produced": 0.0,
            "earned": 0.0,
            "consumedFrom": {},
            "spentTo": {},
            "producedForExternal": {},
            "earnedFromExternal": {},
            "consumedFromExternal": {},
            "spentToExternal": {},
        }
    area_IAA_name = make_iaa_name(area)
    child_names = [
        area_name_from_area_or_iaa_name(c.name) for c in area.children
    ]
    area_markets = getattr(area, past_market_types)
    if area_markets is not None:
        if type(area_markets) != list:
            area_markets = [area_markets]
        for market in area_markets:
            for trade in market.trades:
                if area_name_from_area_or_iaa_name(trade.seller) in child_names and \
                        area_name_from_area_or_iaa_name(trade.buyer) in child_names:
                    # House self-consumption trade
                    accumulated_trades[
                        area.name]["produced"] -= trade.offer.energy
                    accumulated_trades[
                        area.name]["earned"] += trade.offer.price
                    accumulated_trades[area.name]["consumedFrom"] = \
                        add_or_create_key(accumulated_trades[area.name]["consumedFrom"],
                                          area.name, trade.offer.energy)
                    accumulated_trades[area.name]["spentTo"] = \
                        add_or_create_key(accumulated_trades[area.name]["spentTo"],
                                          area.name, trade.offer.price)
                elif trade.buyer == area_IAA_name:
                    accumulated_trades[
                        area.name]["earned"] += trade.offer.price
                    accumulated_trades[
                        area.name]["produced"] -= trade.offer.energy
        for market in area_markets:
            for trade in market.trades:
                if area_name_from_area_or_iaa_name(trade.seller) == \
                        area.name and area_name_from_area_or_iaa_name(trade.buyer) in child_names:
                    accumulated_trades[area.name]["consumedFromExternal"] = \
                        subtract_or_create_key(accumulated_trades[area.name]
                                               ["consumedFromExternal"],
                                               area_name_from_area_or_iaa_name(trade.buyer),
                                               trade.offer.energy)
                    accumulated_trades[area.name]["spentToExternal"] = \
                        add_or_create_key(accumulated_trades[area.name]["spentToExternal"],
                                          area_name_from_area_or_iaa_name(trade.buyer),
                                          trade.offer.price)
                elif area_name_from_area_or_iaa_name(trade.buyer) == \
                        area.name and area_name_from_area_or_iaa_name(trade.seller) in child_names:
                    accumulated_trades[area.name]["producedForExternal"] = \
                        add_or_create_key(accumulated_trades[area.name]["producedForExternal"],
                                          area_name_from_area_or_iaa_name(trade.seller),
                                          trade.offer.energy)
                    accumulated_trades[area.name]["earnedFromExternal"] = \
                        add_or_create_key(accumulated_trades[area.name]["earnedFromExternal"],
                                          area_name_from_area_or_iaa_name(trade.seller),
                                          trade.offer.price)

    accumulated_trades = \
        _area_trade_from_parent(area, parent, accumulated_trades, past_market_types)

    return accumulated_trades