hub/city_model_structure/building_demand/thermal_control.py

145 lines
4.3 KiB
Python

"""
ThermalControl module
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2022 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
"""
from typing import Union, List
from city_model_structure.attributes.schedule import Schedule
class ThermalControl:
"""
ThermalControl class
"""
def __init__(self):
self._mean_heating_set_point = None
self._heating_set_back = None
self._mean_cooling_set_point = None
self._hvac_availability_schedules = None
self._heating_set_point_schedules = None
self._cooling_set_point_schedules = None
@staticmethod
def _maximum_value(schedules):
maximum = -1000
for schedule in schedules:
for value in schedule.values:
if value > maximum:
maximum = value
return maximum
@staticmethod
def _minimum_value(schedules):
minimum = 1000
for schedule in schedules:
for value in schedule.values:
if value < minimum:
minimum = value
return minimum
@property
def mean_heating_set_point(self) -> Union[None, float]:
"""
Get heating set point defined for a thermal zone in Celsius
:return: None or float
"""
if self._mean_heating_set_point is None:
if self.heating_set_point_schedules is not None:
self._mean_heating_set_point = self._maximum_value(self.heating_set_point_schedules)
return self._mean_heating_set_point
@mean_heating_set_point.setter
def mean_heating_set_point(self, value):
"""
Set heating set point defined for a thermal zone in Celsius
:param value: float
"""
self._mean_heating_set_point = value
@property
def heating_set_back(self) -> Union[None, float]:
"""
Get heating set back defined for a thermal zone in Celsius
:return: None or float
"""
if self._heating_set_back is None:
if self.heating_set_point_schedules is not None:
self._heating_set_back = self._minimum_value(self.heating_set_point_schedules)
return self._heating_set_back
@heating_set_back.setter
def heating_set_back(self, value):
"""
Set heating set back defined for a thermal zone in Celsius
:param value: float
"""
if value is not None:
self._heating_set_back = float(value)
@property
def mean_cooling_set_point(self) -> Union[None, float]:
"""
Get cooling set point defined for a thermal zone in Celsius
:return: None or float
"""
if self._mean_cooling_set_point is None:
if self.cooling_set_point_schedules is not None:
self._mean_cooling_set_point = self._minimum_value(self.cooling_set_point_schedules)
return self._mean_cooling_set_point
@mean_cooling_set_point.setter
def mean_cooling_set_point(self, value):
"""
Set cooling set point defined for a thermal zone in Celsius
:param value: float
"""
self._mean_cooling_set_point = value
@property
def hvac_availability_schedules(self) -> Union[None, List[Schedule]]:
"""
Get the availability of the conditioning system defined for a thermal zone
:return: None or [Schedule]
"""
return self._hvac_availability_schedules
@hvac_availability_schedules.setter
def hvac_availability_schedules(self, value):
"""
Set the availability of the conditioning system defined for a thermal zone
:param value: [Schedule]
"""
self._hvac_availability_schedules = value
@property
def heating_set_point_schedules(self) -> Union[None, List[Schedule]]:
"""
Get heating set point schedule defined for a thermal zone in Celsius
:return: None or [Schedule]
"""
return self._heating_set_point_schedules
@heating_set_point_schedules.setter
def heating_set_point_schedules(self, value):
"""
Set heating set point schedule defined for a thermal zone in Celsius
:param value: [Schedule]
"""
self._heating_set_point_schedules = value
@property
def cooling_set_point_schedules(self) -> Union[None, List[Schedule]]:
"""
Get cooling set point schedule defined for a thermal zone in Celsius
:return: None or [Schedule]
"""
return self._cooling_set_point_schedules
@cooling_set_point_schedules.setter
def cooling_set_point_schedules(self, value):
"""
Set cooling set point schedule defined for a thermal zone in Celsius
:param value: [Schedule]
"""
self._cooling_set_point_schedules = value