EOS/modules/class_optimizable_load.py
2024-03-29 19:57:05 +01:00

62 lines
2.1 KiB
Python

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})"