""" UsageZone module SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributors Guille Gutierrez guillermo.gutierrezmorote@concordia.ca """ import uuid from typing import List, TypeVar InternalGains = TypeVar('InternalGains') Occupants = TypeVar('Occupants') Polyhedron = TypeVar('Polyhedron') Schedule = TypeVar('Schedule') class UsageZone: """ UsageZone class """ def __init__(self): self._id = None self._usage = None self._internal_gains = None self._heating_setpoint = None self._heating_setback = None self._cooling_setpoint = None self._hours_day = None self._days_year = None self._dhw_average_volume_pers_day = None self._dhw_preparation_temperature = None self._electrical_app_average_consumption_sqm_year = None self._mechanical_air_change = None self._occupants = None self._schedules = None self._volume = None self._volume_geometry = None self._is_heated = False self._is_cooled = False @property def id(self): """ Get usage zone id, an universally unique identifier randomly generated :return: str """ if self._id is None: self._id = uuid.uuid4() return self._id @property def internal_gains(self) -> List[InternalGains]: """ Get usage zone internal gains :return: [InternalGains] """ return self._internal_gains @internal_gains.setter def internal_gains(self, value): """ Set usage zone internal gains :param value: [InternalGains] """ self._internal_gains = value @property def heating_setpoint(self): """ Get usage zone heating set point in Celsius :return: float """ return self._heating_setpoint @heating_setpoint.setter def heating_setpoint(self, value): """ Set usage zone heating set point in Celsius :param value: float """ self._heating_setpoint = value @property def heating_setback(self): """ Get usage zone heating setback in Celsius :return: float """ return self._heating_setback @heating_setback.setter def heating_setback(self, value): """ Set usage zone heating setback in Celsius :param value: float """ self._heating_setback = value @property def cooling_setpoint(self): """ Get usage zone cooling setpoint in Celsius :return: float """ return self._cooling_setpoint @cooling_setpoint.setter def cooling_setpoint(self, value): """ Set usage zone cooling setpoint in Celsius :param value: float """ self._cooling_setpoint = value @property def hours_day(self): """ Get usage zone usage hours per day :return: float """ return self._hours_day @hours_day.setter def hours_day(self, value): """ Set usage zone usage hours per day :param value: float """ self._hours_day = value @property def days_year(self): """ Get usage zone usage days per year :return: float """ return self._days_year @days_year.setter def days_year(self, value): """ Set usage zone usage days per year :param value: float """ self._days_year = value @property def mechanical_air_change(self): """ Get usage zone mechanical air change in air change per hour (ACH) :return: float """ return self._mechanical_air_change @mechanical_air_change.setter def mechanical_air_change(self, value): """ Set usage zone mechanical air change in air change per hour (ACH) :param value: float """ self._mechanical_air_change = value @property def usage(self): """ Get usage zone usage :return: str """ return self._usage @usage.setter def usage(self, value): """ Set usage zone usage :param value: str """ self._usage = value @property def occupants(self) -> List[Occupants]: """ Get occupants data :return: [Occupants] """ return self._occupants @occupants.setter def occupants(self, values): """ Set occupants data :param values: [Occupants] """ self._occupants = values @property def schedules(self) -> List[Schedule]: """ Get usage zone schedules :return: List[Schedule] """ return self._schedules @schedules.setter def schedules(self, values): """ Set usage zone schedules :param values: List[Schedule] """ self._schedules = values @property def dhw_average_volume_pers_day(self): """ Get average DHW consumption in cubic meters per person per day :return: float """ return self._dhw_average_volume_pers_day @dhw_average_volume_pers_day.setter def dhw_average_volume_pers_day(self, values): """ Set average DHW consumption in cubic meters per person per day :param values: float """ self._dhw_average_volume_pers_day = values @property def dhw_preparation_temperature(self): """ Get preparation temperature of the DHW in Celsius :return: float """ return self._dhw_preparation_temperature @dhw_preparation_temperature.setter def dhw_preparation_temperature(self, values): """ Set preparation temperature of the DHW in Celsius :param values: float """ self._dhw_preparation_temperature = values @property def electrical_app_average_consumption_sqm_year(self): """ Get average consumption of electrical appliances in Joules hour per square meter and year (J/m2yr) :return: float """ return self._electrical_app_average_consumption_sqm_year @electrical_app_average_consumption_sqm_year.setter def electrical_app_average_consumption_sqm_year(self, values): """ Set average consumption of electrical appliances in Joules per square meter and year (J/m2yr) :param values: float """ self._electrical_app_average_consumption_sqm_year = values @property def volume_geometry(self) -> Polyhedron: """ Get the polyhedron defined by the usage zone :return: Polyhedron """ return self._volume_geometry @property def volume(self): """ Get the volume in cubic meters :return: float """ return self._volume @volume.setter def volume(self, value): """ Set volume in cubic meters :param value: float """ self._volume = value @property def is_heated(self): """ Get thermal zone heated flag :return: Boolean """ return self._is_heated @is_heated.setter def is_heated(self, value): """ Set thermal zone heated flag :param value: Boolean """ self._is_heated = value @property def is_cooled(self): """ Get thermal zone cooled flag :return: Boolean """ return self._is_cooled @is_cooled.setter def is_cooled(self, value): """ Set thermal zone cooled flag :param value: Boolean """ self._is_cooled = value