70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
import datetime
|
|
from typing import List
|
|
|
|
import numpy as np
|
|
|
|
from EngieApi.DistributionCosts import Capaciteitstarief
|
|
from EngieApi.EngieAPI import EngieAPI
|
|
|
|
|
|
class Dynamic:
|
|
def __init__(self, btw=1.21, cache: bool = False):
|
|
self.btw = btw
|
|
self.vast = 100.7 # EUR / jaar
|
|
|
|
self.groene_stroom = 0.00530 # EUR / kWh
|
|
self.wwk = 0.02544 # EUR / kWh
|
|
|
|
# Supplementen
|
|
self.energiebijdrage = 0.0020417 # EUR / kWh
|
|
# federale accijns
|
|
# 0 < kwh < 20000: 1.44160 cent / kWh
|
|
# 20000 < kwh < 50000: 1.22748 cent / kWh
|
|
# 50000 < kwh < 100000: 1.15540 cent / kWh
|
|
self.federale_accijns = 0.0144160 # EUR / kWh
|
|
self.cache = cache
|
|
|
|
def calculate_price_per_kwh(self, date, peak: float):
|
|
"""calculate_price_per_kwh
|
|
|
|
:param date: date to calculate for
|
|
:type date: date
|
|
"""
|
|
api = EngieAPI(cache=self.cache)
|
|
epex_spot = np.array(api.get_epex_spot(date))
|
|
|
|
prijs = 0.2040 + 0.1 * (epex_spot) # zonder BTW per Cent/kWh
|
|
# cent to eur
|
|
prijs /= 100
|
|
prijs += (
|
|
self.groene_stroom + self.wwk + self.energiebijdrage + self.federale_accijns
|
|
)
|
|
|
|
# distirbution costs
|
|
d = Capaciteitstarief()
|
|
p, yearly = d.calculate_per_kwh(peak=peak)
|
|
prijs += p
|
|
|
|
# add btw
|
|
prijs *= self.btw
|
|
return prijs, yearly + self.vast
|
|
|
|
def calculate_total_price_for_day(
|
|
self, verbruik: List[int], date: datetime.date, peak: float
|
|
) -> float:
|
|
"""calculate_total_price_for_day calculate total price for given usage
|
|
|
|
:param verbruik: a list of hourly usage values
|
|
:type verbruik: List[int]
|
|
:param date: the date for the energy prices
|
|
:type date: datetime.date
|
|
:param peak: the monthly peak for the distribution costs
|
|
:type peak: float
|
|
:return: the total calculated price
|
|
:rtype: float
|
|
"""
|
|
prices, yearly = self.calculate_price_per_kwh(date, peak)
|
|
|
|
total = np.dot(prices, np.array(verbruik).T) + yearly / 365
|
|
return total
|