mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2025-04-19 08:55:15 +00:00
62 lines
2.1 KiB
Python
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})"
|