hub/city_model_structure/building_demand/usage_zone.py

345 lines
8.1 KiB
Python
Raw Normal View History

2020-10-28 13:42:58 -04:00
"""
UsageZone module
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
2020-11-26 09:26:55 -05:00
Contributors Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
2020-10-28 13:42:58 -04:00
"""
import uuid
2021-09-14 13:46:48 -04:00
from typing import List, TypeVar, Union
import ast
InternalGains = TypeVar('InternalGains')
Occupants = TypeVar('Occupants')
Polyhedron = TypeVar('Polyhedron')
Schedule = TypeVar('Schedule')
2020-10-28 13:42:58 -04:00
class UsageZone:
"""
UsageZone class
"""
def __init__(self):
self._id = None
2020-10-28 13:42:58 -04:00
self._usage = None
self._internal_gains = None
self._heating_setpoint = None
self._heating_setback = None
self._cooling_setpoint = None
2021-09-14 13:46:48 -04:00
self._occupancy_density = None
2020-10-28 13:42:58 -04:00
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
2021-03-16 12:19:35 -04:00
self._occupants = None
self._schedules = None
self._volume = None
self._volume_geometry = None
self._is_heated = False
self._is_cooled = False
2020-12-15 11:05:02 -05:00
@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
2020-10-28 13:42:58 -04:00
@property
def internal_gains(self) -> List[InternalGains]:
"""
Get usage zone internal gains
2020-10-28 13:42:58 -04:00
:return: [InternalGains]
"""
return self._internal_gains
@internal_gains.setter
def internal_gains(self, value):
"""
Set usage zone internal gains
2020-10-28 13:42:58 -04:00
:param value: [InternalGains]
"""
self._internal_gains = value
@property
2021-09-14 13:46:48 -04:00
def heating_setpoint(self) -> Union[None, float]:
2020-10-28 13:42:58 -04:00
"""
Get usage zone heating set point in Celsius
2021-09-14 13:46:48 -04:00
:return: None or float
2020-10-28 13:42:58 -04:00
"""
return self._heating_setpoint
@heating_setpoint.setter
def heating_setpoint(self, value):
"""
Set usage zone heating set point in Celsius
2020-10-28 13:42:58 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._heating_setpoint = float(value)
2020-10-28 13:42:58 -04:00
@property
2021-09-14 13:46:48 -04:00
def heating_setback(self) -> Union[None, float]:
2020-10-28 13:42:58 -04:00
"""
Get usage zone heating setback in Celsius
2021-09-14 13:46:48 -04:00
:return: None or float
2020-10-28 13:42:58 -04:00
"""
return self._heating_setback
@heating_setback.setter
def heating_setback(self, value):
"""
Set usage zone heating setback in Celsius
2020-10-28 13:42:58 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._heating_setback = float(value)
2020-10-28 13:42:58 -04:00
@property
2021-09-14 13:46:48 -04:00
def cooling_setpoint(self) -> Union[None, float]:
2020-10-28 13:42:58 -04:00
"""
Get usage zone cooling setpoint in Celsius
2021-09-14 13:46:48 -04:00
:return: None or float
2020-10-28 13:42:58 -04:00
"""
return self._cooling_setpoint
@cooling_setpoint.setter
def cooling_setpoint(self, value):
"""
Set usage zone cooling setpoint in Celsius
2020-10-28 13:42:58 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._cooling_setpoint = float(value)
2020-10-28 13:42:58 -04:00
@property
2021-09-14 13:46:48 -04:00
def hours_day(self) -> Union[None, float]:
2020-10-28 13:42:58 -04:00
"""
Get usage zone usage hours per day
2021-09-14 13:46:48 -04:00
:return: None or float
2020-10-28 13:42:58 -04:00
"""
return self._hours_day
@hours_day.setter
def hours_day(self, value):
"""
Set usage zone usage hours per day
2020-10-28 13:42:58 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._hours_day = float(value)
2020-10-28 13:42:58 -04:00
@property
2021-09-14 13:46:48 -04:00
def days_year(self) -> Union[None, float]:
2020-10-28 13:42:58 -04:00
"""
Get usage zone usage days per year
2021-09-14 13:46:48 -04:00
:return: None or float
2020-10-28 13:42:58 -04:00
"""
return self._days_year
@days_year.setter
def days_year(self, value):
"""
Set usage zone usage days per year
2020-10-28 13:42:58 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._days_year = float(value)
2020-10-28 13:42:58 -04:00
@property
2021-09-14 13:46:48 -04:00
def mechanical_air_change(self) -> Union[None, float]:
2020-10-28 13:42:58 -04:00
"""
Get usage zone mechanical air change in air change per hour (ACH)
2021-09-14 13:46:48 -04:00
:return: None or float
2020-10-28 13:42:58 -04:00
"""
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)
2020-10-28 13:42:58 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._mechanical_air_change = float(value)
2020-10-28 13:42:58 -04:00
@property
2021-09-14 13:46:48 -04:00
def usage(self) -> Union[None, str]:
2020-10-28 13:42:58 -04:00
"""
Get usage zone usage
2021-09-14 13:46:48 -04:00
:return: None or str
2020-10-28 13:42:58 -04:00
"""
return self._usage
@usage.setter
def usage(self, value):
"""
Set usage zone usage
2020-10-28 13:42:58 -04:00
:param value: str
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._usage = str(value)
2020-10-28 13:42:58 -04:00
@property
def occupants(self) -> List[Occupants]:
2020-10-28 13:42:58 -04:00
"""
Get occupants data
:return: [Occupants]
2020-10-28 13:42:58 -04:00
"""
2021-03-16 12:19:35 -04:00
return self._occupants
2020-10-28 13:42:58 -04:00
2021-03-16 12:19:35 -04:00
@occupants.setter
def occupants(self, values):
2020-10-28 13:42:58 -04:00
"""
Set occupants data
:param values: [Occupants]
2020-10-28 13:42:58 -04:00
"""
2021-03-16 12:19:35 -04:00
self._occupants = values
2020-10-28 13:42:58 -04:00
@property
def schedules(self) -> List[Schedule]:
2020-10-28 13:42:58 -04:00
"""
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
2021-09-14 13:46:48 -04:00
def occupancy_density(self) -> Union[None, float]:
"""
Get density in persons per m2
:return: None or float
"""
return self._occupancy_density
@occupancy_density.setter
def occupancy_density(self, value):
"""
Set density in persons per m2
:param value: float
"""
if value is not None:
self._occupancy_density = float(value)
@property
def dhw_average_volume_pers_day(self) -> Union[None, float]:
"""
Get average DHW consumption in cubic meters per person per day
2021-09-14 13:46:48 -04:00
:return: None or float
"""
return self._dhw_average_volume_pers_day
@dhw_average_volume_pers_day.setter
2021-09-14 13:46:48 -04:00
def dhw_average_volume_pers_day(self, value):
"""
Set average DHW consumption in cubic meters per person per day
2021-09-14 13:46:48 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._dhw_average_volume_pers_day = float(value)
@property
2021-09-14 13:46:48 -04:00
def dhw_preparation_temperature(self) -> Union[None, float]:
"""
Get preparation temperature of the DHW in Celsius
2021-09-14 13:46:48 -04:00
:return: None or float
"""
return self._dhw_preparation_temperature
@dhw_preparation_temperature.setter
2021-09-13 15:14:54 -04:00
def dhw_preparation_temperature(self, value):
"""
Set preparation temperature of the DHW in Celsius
2021-09-13 15:14:54 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._dhw_preparation_temperature = float(value)
@property
2021-09-14 13:46:48 -04:00
def electrical_app_average_consumption_sqm_year(self) -> Union[None, float]:
"""
Get average consumption of electrical appliances in Joules hour per square meter and year (J/m2yr)
2021-09-14 13:46:48 -04:00
:return: None or float
"""
return self._electrical_app_average_consumption_sqm_year
@electrical_app_average_consumption_sqm_year.setter
2021-09-13 15:14:54 -04:00
def electrical_app_average_consumption_sqm_year(self, value):
"""
Set average consumption of electrical appliances in Joules per square meter and year (J/m2yr)
2021-09-13 15:14:54 -04:00
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._electrical_app_average_consumption_sqm_year = float(value)
@property
def volume_geometry(self) -> Polyhedron:
"""
Get the polyhedron defined by the usage zone
:return: Polyhedron
"""
return self._volume_geometry
@property
2021-09-14 13:46:48 -04:00
def volume(self) -> Union[None, float]:
"""
Get the volume in cubic meters
2021-09-14 13:46:48 -04:00
:return: None or float
"""
return self._volume
@volume.setter
def volume(self, value):
"""
Set volume in cubic meters
:param value: float
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._volume = float(value)
@property
2021-09-14 13:46:48 -04:00
def is_heated(self) -> Union[None, bool]:
"""
Get thermal zone heated flag
2021-09-14 13:46:48 -04:00
:return: None or Boolean
"""
return self._is_heated
@is_heated.setter
def is_heated(self, value):
"""
Set thermal zone heated flag
:param value: Boolean
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._is_heated = ast.literal_eval(value)
@property
2021-09-14 13:46:48 -04:00
def is_cooled(self) -> Union[None, bool]:
"""
Get thermal zone cooled flag
2021-09-14 13:46:48 -04:00
:return: None or Boolean
"""
return self._is_cooled
@is_cooled.setter
def is_cooled(self, value):
"""
Set thermal zone cooled flag
:param value: Boolean
"""
2021-09-14 13:46:48 -04:00
if value is not None:
self._is_cooled = ast.literal_eval(value)