From 9ab5ecf9ed3a3621895565210d78b661be56394e Mon Sep 17 00:00:00 2001 From: Bla Bla Date: Mon, 1 Apr 2024 13:16:24 +0200 Subject: [PATCH] Zeitprobleme (Sommerzeit, Strompreis + 0:00) --- flask_server.py | 6 +----- modules/class_ems.py | 6 +++++- modules/class_heatpump.py | 35 ----------------------------------- modules/class_sommerzeit.py | 15 +++++++-------- modules/class_strompreis.py | 19 ++++++++++++++++++- modules/visualize.py | 6 ++++-- 6 files changed, 35 insertions(+), 52 deletions(-) diff --git a/flask_server.py b/flask_server.py index ae9e8b4..32059a6 100644 --- a/flask_server.py +++ b/flask_server.py @@ -36,7 +36,7 @@ def isfloat(num): try: float(num) return True - except ValueError: + except: return False @@ -231,10 +231,6 @@ def simulation(): if p not in parameter: 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 ergebnis = durchfuehre_simulation(parameter) diff --git a/modules/class_ems.py b/modules/class_ems.py index 48a98c0..1cbd81e 100644 --- a/modules/class_ems.py +++ b/modules/class_ems.py @@ -46,8 +46,12 @@ class EnergieManagementSystem: 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)) - #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 for stunde in range(start_stunde, ende): diff --git a/modules/class_heatpump.py b/modules/class_heatpump.py index 4af5709..a9d9946 100644 --- a/modules/class_heatpump.py +++ b/modules/class_heatpump.py @@ -39,41 +39,6 @@ class Waermepumpe: leistungsdaten.append(elektrische_leistung) 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 - - diff --git a/modules/class_sommerzeit.py b/modules/class_sommerzeit.py index ba4002b..2e46570 100644 --- a/modules/class_sommerzeit.py +++ b/modules/class_sommerzeit.py @@ -15,12 +15,11 @@ def ist_dst_wechsel(tag, timezone="Europe/Berlin"): # Prüfe, ob die UTC-Offsets unterschiedlich sind (DST-Wechsel) 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 -start_datum = datetime.datetime(2024, 3, 31) # Datum der DST-Umstellung -if ist_dst_wechsel(start_datum): - prediction_hours = 23 # Anpassung auf 23 Stunden für DST-Wechseltage -else: - prediction_hours = 24 # Standardwert für Tage ohne DST-Wechsel +# # Beispielverwendung +# start_datum = datetime.datetime(2024, 3, 31) # Datum der DST-Umstellung +# if ist_dst_wechsel(start_datum): + # prediction_hours = 23 # Anpassung auf 23 Stunden für DST-Wechseltage +# else: + # prediction_hours = 24 # Standardwert für Tage ohne DST-Wechsel diff --git a/modules/class_strompreis.py b/modules/class_strompreis.py index 2201422..182cc68 100644 --- a/modules/class_strompreis.py +++ b/modules/class_strompreis.py @@ -54,7 +54,24 @@ class HourlyElectricityPriceForecast: def get_price_for_date(self, date_str): """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']] + + # 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 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") daily_prices = 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) start_date += timedelta(days=1) diff --git a/modules/visualize.py b/modules/visualize.py index c54331e..3b8ec63 100644 --- a/modules/visualize.py +++ b/modules/visualize.py @@ -90,9 +90,11 @@ def visualisiere_ergebnisse(gesamtlast, pv_forecast, strompreise, ergebnisse, d if ist_dst_wechsel(datetime.now()): stunden = np.arange(start_hour, prediction_hours-1) 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 plt.subplot(3, 2, 1) plt.plot(stunden, ergebnisse['Eigenverbrauch_Wh_pro_Stunde'], label='Eigenverbrauch (Wh)', marker='o')