Zeitprobleme (Sommerzeit, Strompreis + 0:00)

This commit is contained in:
Bla Bla 2024-04-01 13:16:24 +02:00
parent e6c04183cf
commit 118d70479e
6 changed files with 35 additions and 52 deletions

View File

@ -36,7 +36,7 @@ def isfloat(num):
try: try:
float(num) float(num)
return True return True
except ValueError: except:
return False return False
@ -231,10 +231,6 @@ def simulation():
if p not in parameter: if p not in parameter:
return jsonify({"error": f"Fehlender Parameter: {p}"}), 400 return jsonify({"error": f"Fehlender Parameter: {p}"}), 400
# Optional Typen der Parameter prüfen und sicherstellen, dass sie den Erwartungen entsprechen
# if not isinstance(parameter['start_hour'], int):
# return jsonify({"error": "start_hour muss vom Typ int sein"}), 400
# Simulation durchführen # Simulation durchführen
ergebnis = durchfuehre_simulation(parameter) ergebnis = durchfuehre_simulation(parameter)

View File

@ -46,8 +46,12 @@ class EnergieManagementSystem:
lastkurve_wh = self.gesamtlast.gesamtlast_berechnen() lastkurve_wh = self.gesamtlast.gesamtlast_berechnen()
assert len(lastkurve_wh) == len(self.pv_prognose_wh) == len(self.strompreis_euro_pro_wh), f"Arraygrößen stimmen nicht überein: Lastkurve = {len(lastkurve_wh)}, PV-Prognose = {len(self.pv_prognose_wh)}, Strompreis = {len(self.strompreis_euro_pro_wh)}"
ende = min( len(lastkurve_wh),len(self.pv_prognose_wh), len(self.strompreis_euro_pro_wh)) ende = min( len(lastkurve_wh),len(self.pv_prognose_wh), len(self.strompreis_euro_pro_wh))
#print(ende) # print(len(lastkurve_wh), " ",len(self.pv_prognose_wh)," ", len(self.strompreis_euro_pro_wh))
# sys.exit()
# Berechnet das Ende basierend auf der Länge der Lastkurve # Berechnet das Ende basierend auf der Länge der Lastkurve
for stunde in range(start_stunde, ende): for stunde in range(start_stunde, ende):

View File

@ -39,41 +39,6 @@ class Waermepumpe:
leistungsdaten.append(elektrische_leistung) leistungsdaten.append(elektrische_leistung)
return leistungsdaten return leistungsdaten
# # Lade die .npz-Datei beim Start der Anwendung
# class Waermepumpe:
# def __init__(self, max_heizleistung, prediction_hours):
# self.max_heizleistung = max_heizleistung
# self.prediction_hours = prediction_hours
# def cop_berechnen(self, aussentemperatur):
# cop = 3.0 + (aussentemperatur-0) * 0.1
# return max(cop, 1)
# def heizleistung_berechnen(self, aussentemperatur):
# #235.092 kWh + Temperatur * -11.645
# heizleistung = (((235.0) + aussentemperatur*(-11.645))*1000)/24.0
# heizleistung = min(self.max_heizleistung,heizleistung)
# return heizleistung
# def elektrische_leistung_berechnen(self, aussentemperatur):
# heizleistung = self.heizleistung_berechnen(aussentemperatur)
# cop = self.cop_berechnen(aussentemperatur)
# return heizleistung / cop
# def simulate_24h(self, temperaturen):
# leistungsdaten = []
# # Überprüfen, ob das Temperaturarray die richtige Größe hat
# if len(temperaturen) != self.prediction_hours:
# raise ValueError("Das Temperaturarray muss genau "+str(self.prediction_hours)+" Einträge enthalten, einen für jede Stunde des Tages.")
# for temp in temperaturen:
# elektrische_leistung = self.elektrische_leistung_berechnen(temp)
# leistungsdaten.append(elektrische_leistung)
# return leistungsdaten

View File

@ -15,12 +15,11 @@ def ist_dst_wechsel(tag, timezone="Europe/Berlin"):
# Prüfe, ob die UTC-Offsets unterschiedlich sind (DST-Wechsel) # Prüfe, ob die UTC-Offsets unterschiedlich sind (DST-Wechsel)
dst_wechsel = aktueller_tag_localized.dst() != naechster_tag_localized.dst() dst_wechsel = aktueller_tag_localized.dst() != naechster_tag_localized.dst()
return dst_wechsel, aktueller_tag_localized.dst(), naechster_tag_localized.dst() return dst_wechsel
# # Beispielverwendung
# Beispielverwendung # start_datum = datetime.datetime(2024, 3, 31) # Datum der DST-Umstellung
start_datum = datetime.datetime(2024, 3, 31) # Datum der DST-Umstellung # if ist_dst_wechsel(start_datum):
if ist_dst_wechsel(start_datum): # prediction_hours = 23 # Anpassung auf 23 Stunden für DST-Wechseltage
prediction_hours = 23 # Anpassung auf 23 Stunden für DST-Wechseltage # else:
else: # prediction_hours = 24 # Standardwert für Tage ohne DST-Wechsel
prediction_hours = 24 # Standardwert für Tage ohne DST-Wechsel

View File

@ -54,7 +54,24 @@ class HourlyElectricityPriceForecast:
def get_price_for_date(self, date_str): def get_price_for_date(self, date_str):
"""Gibt alle Preise für das spezifizierte Datum zurück.""" """Gibt alle Preise für das spezifizierte Datum zurück."""
#date_prices = [entry["marketpriceEurocentPerKWh"]+self.abgaben for entry in self.prices if date_str in entry['end']]
"""Gibt alle Preise für das spezifizierte Datum zurück, inklusive des Preises von 0:00 des vorherigen Tages."""
# Datumskonversion von String zu datetime-Objekt
date_obj = datetime.strptime(date_str, '%Y-%m-%d')
# Berechnung des Vortages
previous_day = date_obj - timedelta(days=1)
previous_day_str = previous_day.strftime('%Y-%m-%d')
# Extrahieren des Preises von 0:00 des vorherigen Tages
last_price_of_previous_day = [entry["marketpriceEurocentPerKWh"]+self.abgaben for entry in self.prices if previous_day_str in entry['end']][-1]
# Extrahieren aller Preise für das spezifizierte Datum
date_prices = [entry["marketpriceEurocentPerKWh"]+self.abgaben for entry in self.prices if date_str in entry['end']] date_prices = [entry["marketpriceEurocentPerKWh"]+self.abgaben for entry in self.prices if date_str in entry['end']]
# Hinzufügen des letzten Preises des vorherigen Tages am Anfang der Liste
date_prices.insert(0, last_price_of_previous_day)
return np.array(date_prices)/(1000.0*100.0) + self.abgaben return np.array(date_prices)/(1000.0*100.0) + self.abgaben
def get_price_for_daterange(self, start_date_str, end_date_str): def get_price_for_daterange(self, start_date_str, end_date_str):
@ -71,7 +88,7 @@ class HourlyElectricityPriceForecast:
date_str = start_date.strftime("%Y-%m-%d") date_str = start_date.strftime("%Y-%m-%d")
daily_prices = self.get_price_for_date(date_str) daily_prices = self.get_price_for_date(date_str)
#print(len(self.get_price_for_date(date_str))) #print(len(self.get_price_for_date(date_str)))
if daily_prices.size > 0: if daily_prices.size ==24:
price_list.extend(daily_prices) price_list.extend(daily_prices)
start_date += timedelta(days=1) start_date += timedelta(days=1)

View File

@ -90,9 +90,11 @@ def visualisiere_ergebnisse(gesamtlast, pv_forecast, strompreise, ergebnisse, d
if ist_dst_wechsel(datetime.now()): if ist_dst_wechsel(datetime.now()):
stunden = np.arange(start_hour, prediction_hours-1) stunden = np.arange(start_hour, prediction_hours-1)
else: else:
stunden = np.arange(start_hour, prediction_hours-1) stunden = np.arange(start_hour, prediction_hours)
print(ist_dst_wechsel(datetime.now())," ",datetime.now())
print(start_hour," ",prediction_hours," ",stunden)
print(ergebnisse['Eigenverbrauch_Wh_pro_Stunde'])
# Eigenverbrauch, Netzeinspeisung und Netzbezug # Eigenverbrauch, Netzeinspeisung und Netzbezug
plt.subplot(3, 2, 1) plt.subplot(3, 2, 1)
plt.plot(stunden, ergebnisse['Eigenverbrauch_Wh_pro_Stunde'], label='Eigenverbrauch (Wh)', marker='o') plt.plot(stunden, ergebnisse['Eigenverbrauch_Wh_pro_Stunde'], label='Eigenverbrauch (Wh)', marker='o')