diff --git a/catalog_factories/data_models/usages/appliances.py b/catalog_factories/data_models/usages/appliances.py new file mode 100644 index 00000000..53f6539d --- /dev/null +++ b/catalog_factories/data_models/usages/appliances.py @@ -0,0 +1,63 @@ +""" +Usage catalog appliances +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Concordia CERC group +Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from typing import Union, List + +from catalog_factories.data_models.usages.schedule import Schedule + + +class Appliances: + """ + Appliances class + """ + def __init__(self, density, convective_fraction, radiative_fraction, latent_fraction, schedules): + self._density = density + self._convective_fraction = convective_fraction + self._radiative_fraction = radiative_fraction + self._latent_fraction = latent_fraction + self._schedules = schedules + + @property + def density(self) -> Union[None, float]: + """ + Get appliances density in Watts per m2 + :return: None or float + """ + return self._density + + @property + def convective_fraction(self) -> Union[None, float]: + """ + Get convective fraction + :return: None or float + """ + return self._convective_fraction + + @property + def radiative_fraction(self) -> Union[None, float]: + """ + Get radiant fraction + :return: None or float + """ + return self._radiative_fraction + + @property + def latent_fraction(self) -> Union[None, float]: + """ + Get latent fraction + :return: None or float + """ + return self._latent_fraction + + @property + def schedules(self) -> Union[None, List[Schedule]]: + """ + Get schedules + dataType = fraction + :return: None or [Schedule] + """ + return self._schedules diff --git a/catalog_factories/data_models/usages/content.py b/catalog_factories/data_models/usages/content.py index 1d6d86c0..eef5ddff 100644 --- a/catalog_factories/data_models/usages/content.py +++ b/catalog_factories/data_models/usages/content.py @@ -1,135 +1,20 @@ """ -Usage catalog content +Usage catalog usage SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2022 Concordia CERC group Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca """ -from typing import Union, List - -from catalog_factories.data_models.usages.internal_gain import InternalGain -from catalog_factories.data_models.usages.ocupancy import Occupancy +from catalog_factories.data_models.usages.usage import Usage class Content: - def __init__(self, usage, - hours_day, - days_year, - mechanical_air_change, - occupancy, - lighting, - appliances, - thermal_control): - self._usage = usage - self._hours_day = hours_day - self._days_year = days_year - self._mechanical_air_change = mechanical_air_change - # classes - self._occupancy = occupancy - self._lighting = lighting - self._appliances = appliances - self._thermal_control = thermal_control + def __init__(self, usages): + self._usages = usages @property - def usage(self) -> Union[None, str]: + def usages(self) -> [Usage]: """ - Get usage zone usage - :return: None or str + Get catalog usages """ - return self._usage + return self._usages - @property - def hours_day(self) -> Union[None, float]: - """ - Get usage zone usage hours per day - :return: None or float - """ - return self._hours_day - - @property - def days_year(self) -> Union[None, float]: - """ - Get usage zone usage days per year - :return: None or float - """ - return self._days_year - - @property - def mechanical_air_change(self) -> Union[None, float]: - """ - Get usage zone mechanical air change in air change per hour (ACH) - :return: None or 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 - """ - if value is not None: - self._mechanical_air_change = float(value) - - @property - def occupancy(self) -> Union[None, Occupancy]: - """ - Get occupancy in the usage zone - :return: None or Occupancy - """ - return self._occupancy - - @occupancy.setter - def occupancy(self, value): - """ - Set occupancy in the usage zone - :param value: Occupancy - """ - self._occupancy = value - - @property - def lighting(self) -> Union[None, Lighting]: - """ - Get lighting information - :return: None or Lighting - """ - return self._lighting - - @lighting.setter - def lighting(self, value): - """ - Set lighting information - :param value: Lighting - """ - self._lighting = value - - @property - def appliances(self) -> Union[None, Appliances]: - """ - Get appliances information - :return: None or Appliances - """ - return self._appliances - - @appliances.setter - def appliances(self, value): - """ - Set appliances information - :param value: Appliances - """ - self._appliances = value - - @property - def thermal_control(self) -> Union[None, ThermalControl]: - """ - Get thermal control of this thermal zone - :return: None or ThermalControl - """ - return self._thermal_control - - @thermal_control.setter - def thermal_control(self, value): - """ - Set thermal control for this thermal zone - :param value: ThermalControl - """ - self._thermal_control = value diff --git a/catalog_factories/data_models/usages/internal_gain.py b/catalog_factories/data_models/usages/internal_gain.py index 16a35119..ee7a0ec8 100644 --- a/catalog_factories/data_models/usages/internal_gain.py +++ b/catalog_factories/data_models/usages/internal_gain.py @@ -1,5 +1,5 @@ """ -InternalGain catalog module +Usage catalog internal gain SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2022 Concordia CERC group Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca @@ -17,3 +17,5 @@ class InternalGain: self._radiative_fraction = radiative_fraction self._latent_fraction = latent_fraction self._schedules = schedules + + diff --git a/catalog_factories/data_models/usages/lighting.py b/catalog_factories/data_models/usages/lighting.py new file mode 100644 index 00000000..b519ec73 --- /dev/null +++ b/catalog_factories/data_models/usages/lighting.py @@ -0,0 +1,60 @@ +""" +Usage catalog lighting +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Concordia CERC group +Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from typing import Union, List + +from catalog_factories.data_models.usages.schedule import Schedule + + +class Lighting: + def __init__(self, density, convective_fraction, radiative_fraction, latent_fraction, schedules): + self._density = density + self._convective_fraction = convective_fraction + self._radiative_fraction = radiative_fraction + self._latent_fraction = latent_fraction + self._schedules = schedules + + @property + def density(self) -> Union[None, float]: + """ + Get lighting density in Watts per m2 + :return: None or float + """ + return self._density + + @property + def convective_fraction(self) -> Union[None, float]: + """ + Get convective fraction + :return: None or float + """ + return self._convective_fraction + + @property + def radiative_fraction(self) -> Union[None, float]: + """ + Get radiant fraction + :return: None or float + """ + return self._radiative_fraction + + @property + def latent_fraction(self) -> Union[None, float]: + """ + Get latent fraction + :return: None or float + """ + return self._latent_fraction + + @property + def schedules(self) -> Union[None, List[Schedule]]: + """ + Get schedules + dataType = fraction + :return: None or [Schedule] + """ + return self._schedules diff --git a/catalog_factories/data_models/usages/ocupancy.py b/catalog_factories/data_models/usages/ocupancy.py index d36cac59..345903af 100644 --- a/catalog_factories/data_models/usages/ocupancy.py +++ b/catalog_factories/data_models/usages/ocupancy.py @@ -6,6 +6,9 @@ Project Coder Guille Gutierrez Morote Guillermo.GutierrezMorote@concordia.ca """ from typing import Union, List +from catalog_factories.data_models.usages.schedule import Schedule + + class Occupancy: """ Occupancy class diff --git a/catalog_factories/data_models/usages/schedule.py b/catalog_factories/data_models/usages/schedule.py new file mode 100644 index 00000000..d7787031 --- /dev/null +++ b/catalog_factories/data_models/usages/schedule.py @@ -0,0 +1,76 @@ +""" +Usage catalog schedule +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Concordia CERC group +Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from typing import Union, List + + +class Schedule: + """ + Schedule class + """ + + def __init__(self, schedule_type, values, data_type, time_step, time_range, day_types): + self._type = schedule_type + self._values = values + self._data_type = data_type + self._time_step = time_step + self._time_range = time_range + self._day_types = day_types + + @property + def type(self) -> Union[None, str]: + """ + Get schedule type + :return: None or str + """ + return self._type + + @property + def values(self): + """ + Get schedule values + :return: [Any] + """ + return self._values + + @property + def data_type(self) -> Union[None, str]: + """ + Get schedule data type from: + ['any_number', 'fraction', 'on_off', 'temperature', 'humidity', 'control_type'] + :return: None or str + """ + return self._data_type + + @property + def time_step(self) -> Union[None, str]: + """ + Get schedule time step from: + ['second', 'minute', 'hour', 'day', 'week', 'month'] + :return: None or str + """ + return self._time_step + + @property + def time_range(self) -> Union[None, str]: + """ + Get schedule time range from: + ['minute', 'hour', 'day', 'week', 'month', 'year'] + :return: None or str + """ + return self._time_range + + @property + def day_types(self) -> Union[None, List[str]]: + """ + Get schedule day types, as many as needed from: + ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'holiday', 'winter_design_day', + 'summer_design_day'] + :return: None or [str] + """ + return self._day_types + diff --git a/catalog_factories/data_models/usages/thermal_control.py b/catalog_factories/data_models/usages/thermal_control.py new file mode 100644 index 00000000..db209c7d --- /dev/null +++ b/catalog_factories/data_models/usages/thermal_control.py @@ -0,0 +1,77 @@ +""" +Usage catalog thermal control +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Concordia CERC group +Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" +from typing import Union, List +from catalog_factories.data_models.usages.schedule import Schedule + + +class ThermalControl: + """ + ThermalControl class + """ + def __init__(self, mean_heating_set_point, + heating_set_back, + mean_cooling_set_point, + hvac_availability_schedules, + heating_set_point_schedules, + cooling_set_point_schedules): + self._mean_heating_set_point = mean_heating_set_point + self._heating_set_back = heating_set_back + self._mean_cooling_set_point = mean_cooling_set_point + self._hvac_availability_schedules = hvac_availability_schedules + self._heating_set_point_schedules = heating_set_point_schedules + self._cooling_set_point_schedules = cooling_set_point_schedules + + @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 + """ + return self._mean_heating_set_point + + @property + def heating_set_back(self) -> Union[None, float]: + """ + Get heating set back defined for a thermal zone in Celsius + :return: None or float + """ + return self._heating_set_back + + @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 + """ + return self._mean_cooling_set_point + + @property + def hvac_availability_schedules(self) -> Union[None, List[Schedule]]: + """ + Get the availability of the conditioning system defined for a thermal zone + dataType = on/off + :return: None or [Schedule] + """ + return self._hvac_availability_schedules + + @property + def heating_set_point_schedules(self) -> Union[None, List[Schedule]]: + """ + Get heating set point schedule defined for a thermal zone in Celsius + dataType = temperature + :return: None or [Schedule] + """ + return self._heating_set_point_schedules + + @property + def cooling_set_point_schedules(self) -> Union[None, List[Schedule]]: + """ + Get cooling set point schedule defined for a thermal zone in Celsius + dataType = temperature + :return: None or [Schedule] + """ + return self._cooling_set_point_schedules diff --git a/catalog_factories/data_models/usages/usage.py b/catalog_factories/data_models/usages/usage.py new file mode 100644 index 00000000..5bc5a86e --- /dev/null +++ b/catalog_factories/data_models/usages/usage.py @@ -0,0 +1,106 @@ +""" +Usage catalog usage +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Concordia CERC group +Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" +from typing import Union, List + +from catalog_factories.data_models.usages.appliances import Appliances +from catalog_factories.data_models.usages.internal_gain import InternalGain +from catalog_factories.data_models.usages.lighting import Lighting +from catalog_factories.data_models.usages.ocupancy import Occupancy +from catalog_factories.data_models.usages.thermal_control import ThermalControl + + +class Usage: + def __init__(self, usage, + hours_day, + days_year, + mechanical_air_change, + occupancy, + lighting, + appliances, + thermal_control): + self._usage = usage + self._hours_day = hours_day + self._days_year = days_year + self._mechanical_air_change = mechanical_air_change + # classes + self._occupancy = occupancy + self._lighting = lighting + self._appliances = appliances + self._thermal_control = thermal_control + + @property + def usage(self) -> Union[None, str]: + """ + Get usage zone usage + :return: None or str + """ + return self._usage + + @property + def hours_day(self) -> Union[None, float]: + """ + Get usage zone usage hours per day + :return: None or float + """ + return self._hours_day + + @property + def days_year(self) -> Union[None, float]: + """ + Get usage zone usage days per year + :return: None or float + """ + return self._days_year + + @property + def mechanical_air_change(self) -> Union[None, float]: + """ + Get usage zone mechanical air change in air change per hour (ACH) + :return: None or float + """ + return self._mechanical_air_change + + @property + def occupancy(self) -> Union[None, Occupancy]: + """ + Get occupancy in the usage zone + :return: None or Occupancy + """ + return self._occupancy + + @property + def lighting(self) -> Union[None, Lighting]: + """ + Get lighting information + :return: None or Lighting + """ + return self._lighting + + @lighting.setter + def lighting(self, value): + """ + Set lighting information + :param value: Lighting + """ + self._lighting = value + + @property + def appliances(self) -> Union[None, Appliances]: + """ + Get appliances information + :return: None or Appliances + """ + return self._appliances + + @property + def thermal_control(self) -> Union[None, ThermalControl]: + """ + Get thermal control of this thermal zone + :return: None or ThermalControl + """ + return self._thermal_control +