diff --git a/modules/class_optimizable_load.py b/modules/class_optimizable_load.py new file mode 100644 index 0000000..8ac6f2c --- /dev/null +++ b/modules/class_optimizable_load.py @@ -0,0 +1,61 @@ +import numpy as np +class OptimizableLoad: + def __init__(self, name=None, power=0, duration=0, schedule=None): + """ + Initialisiert eine neue optimierbare Last. + + :param name: Eindeutiger Name der Last + :param power: Leistung der Last in kW + :param duration: Dauer, für die die Last aktiv ist, in Stunden + :param schedule: Ein 24-Stunden-Array (0/1), das angibt, wann die Last gestartet werden kann + """ + self.name = name + self.power = power + self.duration = duration + self.optimal_start_time = None + if schedule is None: + self.schedule = [1] * 24 + else: + self.schedule = schedule + + def set_schedule(self, new_schedule): + """ + Aktualisiert den Zeitplan, wann die Last gestartet werden kann. + + :param new_schedule: Ein 24-Stunden-Array (0/1) + """ + self.schedule = new_schedule + + def set_optimal_start_time(self, start_time): + """ + Setzt die optimale Startzeit für die Last. + + :param start_time: Die Stunde des Tages (0-23), zu der die Last starten soll + """ + if 0 <= start_time < 24 and self.is_activatable(start_time): + self.optimal_start_time = start_time + + def is_active_at_hour(self, hour): + """ + Überprüft, ob die Last zu einer bestimmten Stunde aktiv ist, basierend auf ihrem Startzeitpunkt und der Dauer. + + :param hour: Stunde des Tages (0-23) + :return: True, wenn die Last aktiv ist, sonst False + """ + if self.optimal_start_time is None: + return False + return self.optimal_start_time <= hour < self.optimal_start_time + self.duration + + def power_at_hour(self, hour): + """ + Gibt die Leistung der Last zu einer bestimmten Stunde zurück. + + :param hour: Stunde des Tages (0-23) + :return: Leistung der Last in kW, wenn sie aktiv ist, sonst 0 + """ + if self.is_active_at_hour(hour): + return self.power + return 0 + + def __str__(self): + return f"OptimizableLoad(Name: {self.name}, Power: {self.power}kW, Duration: {self.duration}h, Schedule: {self.schedule})"