diff --git a/modules/class_akku.py b/modules/class_akku.py index cd56a3b..f89c9ce 100644 --- a/modules/class_akku.py +++ b/modules/class_akku.py @@ -72,6 +72,10 @@ class PVAkku: # Berechnung der maximal abgebenden Energiemenge unter Berücksichtigung der Entladeeffizienz max_abgebbar_wh = self.soc_wh * self.entlade_effizienz + # Berücksichtigen der maximalen Entladeleistung des Akkus + max_abgebbar_wh = min(max_abgebbar_wh, self.max_ladeleistung_w) + + # Tatsächlich abgegebene Energie darf nicht mehr sein als angefragt und nicht mehr als maximal abgebbar tatsaechlich_abgegeben_wh = min(wh, max_abgebbar_wh) diff --git a/modules/class_ems.py b/modules/class_ems.py index 3f36d17..c948dae 100644 --- a/modules/class_ems.py +++ b/modules/class_ems.py @@ -3,8 +3,8 @@ from pprint import pprint class EnergieManagementSystem: - def __init__(self, akku=None, pv_prognose_wh=None, strompreis_euro_pro_wh=None, einspeiseverguetung_euro_pro_wh=None, eauto=None, gesamtlast=None, haushaltsgeraet=None): - self.akku = akku + def __init__(self, pv_prognose_wh=None, strompreis_euro_pro_wh=None, einspeiseverguetung_euro_pro_wh=None, eauto=None, gesamtlast=None, haushaltsgeraet=None, wechselrichter=None): + self.akku = wechselrichter.akku #self.lastkurve_wh = lastkurve_wh self.gesamtlast = gesamtlast self.pv_prognose_wh = pv_prognose_wh @@ -12,6 +12,8 @@ class EnergieManagementSystem: self.einspeiseverguetung_euro_pro_wh = einspeiseverguetung_euro_pro_wh # Einspeisevergütung in Cent pro Wh self.eauto = eauto self.haushaltsgeraet = haushaltsgeraet + self.wechselrichter = wechselrichter + def set_akku_discharge_hours(self, ds): @@ -83,30 +85,45 @@ class EnergieManagementSystem: stündlicher_netzbezug_wh = 0 stündliche_kosten_euro = 0 stündliche_einnahmen_euro = 0 - - if erzeugung > verbrauch: - überschuss = erzeugung - verbrauch - #geladene_energie = min(überschuss, self.akku.kapazitaet_wh - self.akku.soc_wh) - geladene_energie, verluste_laden_akku = self.akku.energie_laden(überschuss, stunde) - verluste_wh_pro_stunde[-1] += verluste_laden_akku - #print("verluste_laden_akku:",verluste_laden_akku) - netzeinspeisung_wh_pro_stunde.append(überschuss - geladene_energie-verluste_laden_akku) - eigenverbrauch_wh_pro_stunde.append(verbrauch) - stündliche_einnahmen_euro = (überschuss - geladene_energie-verluste_laden_akku) * self.einspeiseverguetung_euro_pro_wh[stunde] - #print(überschuss," ", geladene_energie," ",verluste_laden_akku) - netzbezug_wh_pro_stunde.append(0.0) - else: - netzeinspeisung_wh_pro_stunde.append(0.0) - benötigte_energie = verbrauch - erzeugung - aus_akku, akku_entladeverluste = self.akku.energie_abgeben(benötigte_energie, stunde) - verluste_wh_pro_stunde[-1] += akku_entladeverluste - #print("akku_entladeverluste:",akku_entladeverluste) + #Wieviel kann der WR + netzeinspeisung, netzbezug, verluste, eigenverbrauch = self.wechselrichter.energie_verarbeiten(erzeugung, verbrauch, stunde) + + # Speichern + netzeinspeisung_wh_pro_stunde.append(netzeinspeisung) + stündliche_einnahmen_euro = netzeinspeisung* self.einspeiseverguetung_euro_pro_wh[stunde] + + stündliche_kosten_euro = netzbezug * strompreis + netzbezug_wh_pro_stunde.append(netzbezug) + verluste_wh_pro_stunde[-1] += verluste + eigenverbrauch_wh_pro_stunde.append(eigenverbrauch) + + + + # Mehr erzeugt als verbraucht + # if erzeugung > verbrauch: + # überschuss = erzeugung - verbrauch + # #geladene_energie = min(überschuss, self.akku.kapazitaet_wh - self.akku.soc_wh) + # geladene_energie, verluste_laden_akku = self.akku.energie_laden(überschuss, stunde) + # verluste_wh_pro_stunde[-1] += verluste_laden_akku + # #print("verluste_laden_akku:",verluste_laden_akku) + # netzeinspeisung_wh_pro_stunde.append(überschuss - geladene_energie-verluste_laden_akku) + # eigenverbrauch_wh_pro_stunde.append(verbrauch) + # stündliche_einnahmen_euro = (überschuss - geladene_energie-verluste_laden_akku) * self.einspeiseverguetung_euro_pro_wh[stunde] + # #print(überschuss," ", geladene_energie," ",verluste_laden_akku) + # netzbezug_wh_pro_stunde.append(0.0) + # # Noch Netzbezug nötig + # else: + # netzeinspeisung_wh_pro_stunde.append(0.0) + # benötigte_energie = verbrauch - erzeugung + # aus_akku, akku_entladeverluste = self.akku.energie_abgeben(benötigte_energie, stunde) + # verluste_wh_pro_stunde[-1] += akku_entladeverluste + # #print("akku_entladeverluste:",akku_entladeverluste) - stündlicher_netzbezug_wh = benötigte_energie - aus_akku - netzbezug_wh_pro_stunde.append(stündlicher_netzbezug_wh) - eigenverbrauch_wh_pro_stunde.append(erzeugung+aus_akku) - stündliche_kosten_euro = stündlicher_netzbezug_wh * strompreis + # stündlicher_netzbezug_wh = benötigte_energie - aus_akku + # netzbezug_wh_pro_stunde.append(stündlicher_netzbezug_wh) + # eigenverbrauch_wh_pro_stunde.append(erzeugung+aus_akku) + # stündliche_kosten_euro = stündlicher_netzbezug_wh * strompreis if self.eauto: eauto_soc_pro_stunde.append(eauto_soc) diff --git a/modules/class_optimize.py b/modules/class_optimize.py index 6c8737f..b7e056c 100644 --- a/modules/class_optimize.py +++ b/modules/class_optimize.py @@ -7,6 +7,7 @@ from modules.class_akku import * from modules.class_strompreis import * from modules.class_heatpump import * from modules.class_load_container import * +from modules.class_inverter import * from modules.class_sommerzeit import * from modules.visualize import * from modules.class_haushaltsgeraet import * @@ -176,7 +177,7 @@ class optimization_problem: pv_forecast_url = parameter['pv_forecast_url'] #"https://api.akkudoktor.net/forecast?lat=52.52&lon=13.405&power=5000&azimuth=-10&tilt=7&powerInvertor=10000&horizont=20,27,22,20&power=4800&azimuth=-90&tilt=7&powerInvertor=10000&horizont=30,30,30,50&power=1400&azimuth=-40&tilt=60&powerInvertor=2000&horizont=60,30,0,30&power=1600&azimuth=5&tilt=45&powerInvertor=1400&horizont=45,25,30,60&past_days=5&cellCoEff=-0.36&inverterEfficiency=0.8&albedo=0.25&timezone=Europe%2FBerlin&hourly=relativehumidity_2m%2Cwindspeed_10m" - akku = PVAkku(kapazitaet_wh=akku_size,hours=self.prediction_hours,start_soc_prozent=parameter["pv_soc"]) + akku = PVAkku(kapazitaet_wh=akku_size,hours=self.prediction_hours,start_soc_prozent=parameter["pv_soc"], max_ladeleistung_w=5000) discharge_array = np.full(self.prediction_hours,1) #np.array([1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]) # laden_moeglich = np.full(self.prediction_hours,1) # np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0]) @@ -235,7 +236,9 @@ class optimization_problem: leistung_wp = wp.simulate_24h(temperature_forecast) gesamtlast.hinzufuegen("Heatpump", leistung_wp) - ems = EnergieManagementSystem(akku=akku, gesamtlast = gesamtlast, pv_prognose_wh=pv_forecast, strompreis_euro_pro_wh=specific_date_prices, einspeiseverguetung_euro_pro_wh=einspeiseverguetung_euro_pro_wh, eauto=eauto, haushaltsgeraet=spuelmaschine) + wr = Wechselrichter(5000, akku) + + ems = EnergieManagementSystem(gesamtlast = gesamtlast, pv_prognose_wh=pv_forecast, strompreis_euro_pro_wh=specific_date_prices, einspeiseverguetung_euro_pro_wh=einspeiseverguetung_euro_pro_wh, eauto=eauto, haushaltsgeraet=spuelmaschine,wechselrichter=wr) o = ems.simuliere(start_hour) ###############