honeybee-energy 1.116.106__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- honeybee_energy/__init__.py +24 -0
- honeybee_energy/__main__.py +4 -0
- honeybee_energy/_extend_honeybee.py +145 -0
- honeybee_energy/altnumber.py +21 -0
- honeybee_energy/baseline/__init__.py +2 -0
- honeybee_energy/baseline/create.py +608 -0
- honeybee_energy/baseline/data/__init__.py +1 -0
- honeybee_energy/baseline/data/constructions.csv +64 -0
- honeybee_energy/baseline/data/fen_ratios.csv +15 -0
- honeybee_energy/baseline/data/lpd_building.csv +21 -0
- honeybee_energy/baseline/data/pci_2016.csv +22 -0
- honeybee_energy/baseline/data/pci_2019.csv +22 -0
- honeybee_energy/baseline/data/pci_2022.csv +22 -0
- honeybee_energy/baseline/data/shw.csv +21 -0
- honeybee_energy/baseline/pci.py +512 -0
- honeybee_energy/baseline/result.py +371 -0
- honeybee_energy/boundarycondition.py +128 -0
- honeybee_energy/cli/__init__.py +69 -0
- honeybee_energy/cli/baseline.py +475 -0
- honeybee_energy/cli/edit.py +327 -0
- honeybee_energy/cli/lib.py +1154 -0
- honeybee_energy/cli/result.py +810 -0
- honeybee_energy/cli/setconfig.py +124 -0
- honeybee_energy/cli/settings.py +569 -0
- honeybee_energy/cli/simulate.py +380 -0
- honeybee_energy/cli/translate.py +1714 -0
- honeybee_energy/cli/validate.py +224 -0
- honeybee_energy/config.json +11 -0
- honeybee_energy/config.py +842 -0
- honeybee_energy/construction/__init__.py +1 -0
- honeybee_energy/construction/_base.py +374 -0
- honeybee_energy/construction/air.py +325 -0
- honeybee_energy/construction/dictutil.py +89 -0
- honeybee_energy/construction/dynamic.py +607 -0
- honeybee_energy/construction/opaque.py +460 -0
- honeybee_energy/construction/shade.py +319 -0
- honeybee_energy/construction/window.py +1096 -0
- honeybee_energy/construction/windowshade.py +847 -0
- honeybee_energy/constructionset.py +1655 -0
- honeybee_energy/dictutil.py +56 -0
- honeybee_energy/generator/__init__.py +5 -0
- honeybee_energy/generator/loadcenter.py +204 -0
- honeybee_energy/generator/pv.py +535 -0
- honeybee_energy/hvac/__init__.py +21 -0
- honeybee_energy/hvac/_base.py +124 -0
- honeybee_energy/hvac/_template.py +270 -0
- honeybee_energy/hvac/allair/__init__.py +22 -0
- honeybee_energy/hvac/allair/_base.py +349 -0
- honeybee_energy/hvac/allair/furnace.py +168 -0
- honeybee_energy/hvac/allair/psz.py +131 -0
- honeybee_energy/hvac/allair/ptac.py +163 -0
- honeybee_energy/hvac/allair/pvav.py +109 -0
- honeybee_energy/hvac/allair/vav.py +128 -0
- honeybee_energy/hvac/detailed.py +337 -0
- honeybee_energy/hvac/doas/__init__.py +28 -0
- honeybee_energy/hvac/doas/_base.py +345 -0
- honeybee_energy/hvac/doas/fcu.py +127 -0
- honeybee_energy/hvac/doas/radiant.py +329 -0
- honeybee_energy/hvac/doas/vrf.py +81 -0
- honeybee_energy/hvac/doas/wshp.py +91 -0
- honeybee_energy/hvac/heatcool/__init__.py +23 -0
- honeybee_energy/hvac/heatcool/_base.py +177 -0
- honeybee_energy/hvac/heatcool/baseboard.py +61 -0
- honeybee_energy/hvac/heatcool/evapcool.py +72 -0
- honeybee_energy/hvac/heatcool/fcu.py +92 -0
- honeybee_energy/hvac/heatcool/gasunit.py +53 -0
- honeybee_energy/hvac/heatcool/radiant.py +269 -0
- honeybee_energy/hvac/heatcool/residential.py +77 -0
- honeybee_energy/hvac/heatcool/vrf.py +54 -0
- honeybee_energy/hvac/heatcool/windowac.py +70 -0
- honeybee_energy/hvac/heatcool/wshp.py +62 -0
- honeybee_energy/hvac/idealair.py +699 -0
- honeybee_energy/internalmass.py +310 -0
- honeybee_energy/lib/__init__.py +1 -0
- honeybee_energy/lib/_loadconstructions.py +194 -0
- honeybee_energy/lib/_loadconstructionsets.py +117 -0
- honeybee_energy/lib/_loadmaterials.py +83 -0
- honeybee_energy/lib/_loadprogramtypes.py +125 -0
- honeybee_energy/lib/_loadschedules.py +87 -0
- honeybee_energy/lib/_loadtypelimits.py +64 -0
- honeybee_energy/lib/constructions.py +207 -0
- honeybee_energy/lib/constructionsets.py +95 -0
- honeybee_energy/lib/materials.py +67 -0
- honeybee_energy/lib/programtypes.py +125 -0
- honeybee_energy/lib/schedules.py +61 -0
- honeybee_energy/lib/scheduletypelimits.py +31 -0
- honeybee_energy/load/__init__.py +1 -0
- honeybee_energy/load/_base.py +190 -0
- honeybee_energy/load/daylight.py +397 -0
- honeybee_energy/load/dictutil.py +47 -0
- honeybee_energy/load/equipment.py +771 -0
- honeybee_energy/load/hotwater.py +543 -0
- honeybee_energy/load/infiltration.py +460 -0
- honeybee_energy/load/lighting.py +480 -0
- honeybee_energy/load/people.py +497 -0
- honeybee_energy/load/process.py +472 -0
- honeybee_energy/load/setpoint.py +816 -0
- honeybee_energy/load/ventilation.py +550 -0
- honeybee_energy/material/__init__.py +1 -0
- honeybee_energy/material/_base.py +166 -0
- honeybee_energy/material/dictutil.py +59 -0
- honeybee_energy/material/frame.py +367 -0
- honeybee_energy/material/gas.py +1087 -0
- honeybee_energy/material/glazing.py +854 -0
- honeybee_energy/material/opaque.py +1351 -0
- honeybee_energy/material/shade.py +1360 -0
- honeybee_energy/measure.py +472 -0
- honeybee_energy/programtype.py +723 -0
- honeybee_energy/properties/__init__.py +1 -0
- honeybee_energy/properties/aperture.py +333 -0
- honeybee_energy/properties/door.py +342 -0
- honeybee_energy/properties/extension.py +244 -0
- honeybee_energy/properties/face.py +274 -0
- honeybee_energy/properties/model.py +2640 -0
- honeybee_energy/properties/room.py +1747 -0
- honeybee_energy/properties/shade.py +314 -0
- honeybee_energy/properties/shademesh.py +262 -0
- honeybee_energy/reader.py +48 -0
- honeybee_energy/result/__init__.py +1 -0
- honeybee_energy/result/colorobj.py +648 -0
- honeybee_energy/result/emissions.py +290 -0
- honeybee_energy/result/err.py +101 -0
- honeybee_energy/result/eui.py +100 -0
- honeybee_energy/result/generation.py +160 -0
- honeybee_energy/result/loadbalance.py +890 -0
- honeybee_energy/result/match.py +202 -0
- honeybee_energy/result/osw.py +90 -0
- honeybee_energy/result/rdd.py +59 -0
- honeybee_energy/result/zsz.py +190 -0
- honeybee_energy/run.py +1577 -0
- honeybee_energy/schedule/__init__.py +1 -0
- honeybee_energy/schedule/day.py +626 -0
- honeybee_energy/schedule/dictutil.py +59 -0
- honeybee_energy/schedule/fixedinterval.py +1012 -0
- honeybee_energy/schedule/rule.py +619 -0
- honeybee_energy/schedule/ruleset.py +1867 -0
- honeybee_energy/schedule/typelimit.py +310 -0
- honeybee_energy/shw.py +315 -0
- honeybee_energy/simulation/__init__.py +1 -0
- honeybee_energy/simulation/control.py +214 -0
- honeybee_energy/simulation/daylightsaving.py +185 -0
- honeybee_energy/simulation/dictutil.py +51 -0
- honeybee_energy/simulation/output.py +646 -0
- honeybee_energy/simulation/parameter.py +606 -0
- honeybee_energy/simulation/runperiod.py +443 -0
- honeybee_energy/simulation/shadowcalculation.py +295 -0
- honeybee_energy/simulation/sizing.py +546 -0
- honeybee_energy/ventcool/__init__.py +5 -0
- honeybee_energy/ventcool/_crack_data.py +91 -0
- honeybee_energy/ventcool/afn.py +289 -0
- honeybee_energy/ventcool/control.py +269 -0
- honeybee_energy/ventcool/crack.py +126 -0
- honeybee_energy/ventcool/fan.py +493 -0
- honeybee_energy/ventcool/opening.py +365 -0
- honeybee_energy/ventcool/simulation.py +314 -0
- honeybee_energy/writer.py +1078 -0
- honeybee_energy-1.116.106.dist-info/METADATA +113 -0
- honeybee_energy-1.116.106.dist-info/RECORD +162 -0
- honeybee_energy-1.116.106.dist-info/WHEEL +5 -0
- honeybee_energy-1.116.106.dist-info/entry_points.txt +2 -0
- honeybee_energy-1.116.106.dist-info/licenses/LICENSE +661 -0
- honeybee_energy-1.116.106.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
"""Low temperature radiant with DOAS HVAC system."""
|
|
3
|
+
from __future__ import division
|
|
4
|
+
|
|
5
|
+
from ._base import _DOASBase
|
|
6
|
+
|
|
7
|
+
from honeybee._lockable import lockable
|
|
8
|
+
from honeybee.typing import float_positive, valid_string
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@lockable
|
|
12
|
+
class RadiantwithDOAS(_DOASBase):
|
|
13
|
+
"""Low temperature radiant with DOAS HVAC system.
|
|
14
|
+
|
|
15
|
+
This HVAC template will change the floor and/or ceiling constructions
|
|
16
|
+
of the Rooms that it is applied to, replacing them with a construction that
|
|
17
|
+
aligns with the radiant_type property (eg. CeilingMetalPanel).
|
|
18
|
+
|
|
19
|
+
All rooms/zones in the system are connected to a Dedicated Outdoor Air System
|
|
20
|
+
(DOAS) that supplies a constant volume of ventilation air at the same temperature
|
|
21
|
+
to all rooms/zones. The ventilation air temperature will vary from 21.1C (70F)
|
|
22
|
+
to 15.5C (60F) depending on the outdoor air temperature (the DOAS supplies cooler air
|
|
23
|
+
when outdoor conditions are warmer). The ventilation air temperature is maintained
|
|
24
|
+
by a two-speed direct expansion (DX) cooling coil and a single-speed DX
|
|
25
|
+
heating coil with backup electrical resistance heat.
|
|
26
|
+
|
|
27
|
+
The heating and cooling needs of the space are met with the radiant constructions,
|
|
28
|
+
which use chilled water at 12.8C (55F) and a hot water temperature somewhere
|
|
29
|
+
between 32.2C (90F) and 49C (120F) (warmer temperatures are used in colder
|
|
30
|
+
climate zones).
|
|
31
|
+
|
|
32
|
+
Note that radiant systems are particularly limited in cooling capacity and
|
|
33
|
+
using them may result in many unmet hours. To reduce unmet hours, one can
|
|
34
|
+
remove carpets, reduce internal loads, reduce solar and envelope gains during
|
|
35
|
+
peak times, add thermal mass, and use an expanded comfort range.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
identifier: Text string for system identifier. Must be < 100 characters
|
|
39
|
+
and not contain any EnergyPlus special characters. This will be used to
|
|
40
|
+
identify the object across a model and in the exported IDF.
|
|
41
|
+
vintage: Text for the vintage of the template system. This will be used
|
|
42
|
+
to set efficiencies for various pieces of equipment within the system.
|
|
43
|
+
Choose from the following.
|
|
44
|
+
|
|
45
|
+
* DOE_Ref_Pre_1980
|
|
46
|
+
* DOE_Ref_1980_2004
|
|
47
|
+
* ASHRAE_2004
|
|
48
|
+
* ASHRAE_2007
|
|
49
|
+
* ASHRAE_2010
|
|
50
|
+
* ASHRAE_2013
|
|
51
|
+
* ASHRAE_2016
|
|
52
|
+
* ASHRAE_2019
|
|
53
|
+
|
|
54
|
+
equipment_type: Text for the specific type of the system and equipment. (Default:
|
|
55
|
+
the first option below) Choose from.
|
|
56
|
+
|
|
57
|
+
* DOAS_Radiant_Chiller_Boiler
|
|
58
|
+
* DOAS_Radiant_Chiller_ASHP
|
|
59
|
+
* DOAS_Radiant_Chiller_DHW
|
|
60
|
+
* DOAS_Radiant_ACChiller_Boiler
|
|
61
|
+
* DOAS_Radiant_ACChiller_ASHP
|
|
62
|
+
* DOAS_Radiant_ACChiller_DHW
|
|
63
|
+
* DOAS_Radiant_DCW_Boiler
|
|
64
|
+
* DOAS_Radiant_DCW_ASHP
|
|
65
|
+
* DOAS_Radiant_DCW_DHW
|
|
66
|
+
|
|
67
|
+
sensible_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
68
|
+
of sensible heat recovery within the system. (Default: 0).
|
|
69
|
+
latent_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
70
|
+
of latent heat recovery within the system. (Default: 0).
|
|
71
|
+
demand_controlled_ventilation: Boolean to note whether demand controlled
|
|
72
|
+
ventilation should be used on the system, which will vary the amount
|
|
73
|
+
of ventilation air according to the occupancy schedule of the
|
|
74
|
+
Rooms. (Default: False).
|
|
75
|
+
doas_availability_schedule: An optional On/Off discrete schedule to set when
|
|
76
|
+
the dedicated outdoor air system (DOAS) shuts off. This will not only
|
|
77
|
+
prevent any outdoor air from flowing thorough the system but will also
|
|
78
|
+
shut off the fans, which can result in more energy savings when spaces
|
|
79
|
+
served by the DOAS are completely unoccupied. If None, the DOAS will be
|
|
80
|
+
always on. (Default: None).
|
|
81
|
+
radiant_type: Text to indicate which faces are thermally active. Note
|
|
82
|
+
that systems are assumed to be embedded in concrete slabs unless
|
|
83
|
+
CeilingMetalPanel or FloorWithHardwood is specified. Choose from the
|
|
84
|
+
following. (Default: Floor).
|
|
85
|
+
|
|
86
|
+
* Floor
|
|
87
|
+
* Ceiling
|
|
88
|
+
* FloorWithCarpet
|
|
89
|
+
* CeilingMetalPanel
|
|
90
|
+
* FloorWithHardwood
|
|
91
|
+
|
|
92
|
+
minimum_operation_time: A number for the minimum number of hours of operation
|
|
93
|
+
for the radiant system before it shuts off. Note that this has no effect
|
|
94
|
+
if the radiant_type is not in a slab. (Default: 1).
|
|
95
|
+
switch_over_time: A number for the minimum number of hours for when the system
|
|
96
|
+
can switch between heating and cooling. Note that this has no effect
|
|
97
|
+
if the radiant_type is not in a slab. (Default: 24).
|
|
98
|
+
|
|
99
|
+
Properties:
|
|
100
|
+
* identifier
|
|
101
|
+
* display_name
|
|
102
|
+
* vintage
|
|
103
|
+
* equipment_type
|
|
104
|
+
* sensible_heat_recovery
|
|
105
|
+
* latent_heat_recovery
|
|
106
|
+
* demand_controlled_ventilation
|
|
107
|
+
* doas_availability_schedule
|
|
108
|
+
* minimum_operation_time
|
|
109
|
+
* switch_over_time
|
|
110
|
+
* radiant_type
|
|
111
|
+
* schedules
|
|
112
|
+
* has_district_heating
|
|
113
|
+
* has_district_cooling
|
|
114
|
+
* user_data
|
|
115
|
+
* properties
|
|
116
|
+
"""
|
|
117
|
+
__slots__ = ('_radiant_type', '_minimum_operation_time', '_switch_over_time')
|
|
118
|
+
|
|
119
|
+
EQUIPMENT_TYPES = (
|
|
120
|
+
'DOAS_Radiant_Chiller_Boiler',
|
|
121
|
+
'DOAS_Radiant_Chiller_ASHP',
|
|
122
|
+
'DOAS_Radiant_Chiller_DHW',
|
|
123
|
+
'DOAS_Radiant_ACChiller_Boiler',
|
|
124
|
+
'DOAS_Radiant_ACChiller_ASHP',
|
|
125
|
+
'DOAS_Radiant_ACChiller_DHW',
|
|
126
|
+
'DOAS_Radiant_DCW_Boiler',
|
|
127
|
+
'DOAS_Radiant_DCW_ASHP',
|
|
128
|
+
'DOAS_Radiant_DCW_DHW'
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
radiant_typeS = ('Floor', 'Ceiling', 'FloorWithCarpet',
|
|
132
|
+
'CeilingMetalPanel', 'FloorWithHardwood')
|
|
133
|
+
|
|
134
|
+
def __init__(self, identifier, vintage='ASHRAE_2019', equipment_type=None,
|
|
135
|
+
sensible_heat_recovery=0, latent_heat_recovery=0,
|
|
136
|
+
demand_controlled_ventilation=False, doas_availability_schedule=None,
|
|
137
|
+
radiant_type='Floor', minimum_operation_time=1, switch_over_time=24):
|
|
138
|
+
"""Initialize HVACSystem."""
|
|
139
|
+
# initialize base HVAC system properties
|
|
140
|
+
_DOASBase.__init__(
|
|
141
|
+
self, identifier, vintage, equipment_type, sensible_heat_recovery,
|
|
142
|
+
latent_heat_recovery, demand_controlled_ventilation,
|
|
143
|
+
doas_availability_schedule
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
# set the main features of the HVAC system
|
|
147
|
+
self.radiant_type = radiant_type
|
|
148
|
+
self.minimum_operation_time = minimum_operation_time
|
|
149
|
+
self.switch_over_time = switch_over_time
|
|
150
|
+
|
|
151
|
+
@property
|
|
152
|
+
def radiant_type(self):
|
|
153
|
+
"""Get or set text to indicate the type of radiant system."""
|
|
154
|
+
return self._radiant_type
|
|
155
|
+
|
|
156
|
+
@radiant_type.setter
|
|
157
|
+
def radiant_type(self, value):
|
|
158
|
+
clean_input = valid_string(value).lower()
|
|
159
|
+
for key in self.radiant_typeS:
|
|
160
|
+
if key.lower() == clean_input:
|
|
161
|
+
value = key
|
|
162
|
+
break
|
|
163
|
+
else:
|
|
164
|
+
raise ValueError(
|
|
165
|
+
'radiant_type {} is not recognized.\nChoose from the '
|
|
166
|
+
'following:\n{}'.format(value, self.radiant_typeS))
|
|
167
|
+
self._radiant_type = value
|
|
168
|
+
|
|
169
|
+
@property
|
|
170
|
+
def minimum_operation_time(self):
|
|
171
|
+
"""Get or set a the minimum hours of operation before the system shuts off."""
|
|
172
|
+
return self._minimum_operation_time
|
|
173
|
+
|
|
174
|
+
@minimum_operation_time.setter
|
|
175
|
+
def minimum_operation_time(self, value):
|
|
176
|
+
self._minimum_operation_time = \
|
|
177
|
+
float_positive(value, 'hvac minimum operation time')
|
|
178
|
+
|
|
179
|
+
@property
|
|
180
|
+
def switch_over_time(self):
|
|
181
|
+
"""Get or set the minimum hours the system can switch between heating/cooling."""
|
|
182
|
+
return self._switch_over_time
|
|
183
|
+
|
|
184
|
+
@switch_over_time.setter
|
|
185
|
+
def switch_over_time(self, value):
|
|
186
|
+
self._switch_over_time = float_positive(value, 'hvac switch over time')
|
|
187
|
+
|
|
188
|
+
@classmethod
|
|
189
|
+
def from_dict(cls, data):
|
|
190
|
+
"""Create a HVAC object from a dictionary.
|
|
191
|
+
|
|
192
|
+
Args:
|
|
193
|
+
data: A DOAS dictionary in following the format below.
|
|
194
|
+
|
|
195
|
+
.. code-block:: python
|
|
196
|
+
|
|
197
|
+
{
|
|
198
|
+
"type": "", # text for the class name of the HVAC
|
|
199
|
+
"identifier": "Classroom1_System", # identifier for the HVAC
|
|
200
|
+
"display_name": "Standard System", # name for the HVAC
|
|
201
|
+
"vintage": "ASHRAE_2019", # text for the vintage of the template
|
|
202
|
+
"equipment_type": "", # text for the HVAC equipment type
|
|
203
|
+
"sensible_heat_recovery": 0.75, # Sensible heat recovery effectiveness
|
|
204
|
+
"latent_heat_recovery": 0.7, # Latent heat recovery effectiveness
|
|
205
|
+
"demand_controlled_ventilation": False # Boolean for DCV
|
|
206
|
+
"doas_availability_schedule": {}, # Schedule for DOAS availability or None
|
|
207
|
+
"radiant_type": "Ceiling",
|
|
208
|
+
"minimum_operation_time": 1,
|
|
209
|
+
"switch_over_time": 24
|
|
210
|
+
}
|
|
211
|
+
"""
|
|
212
|
+
assert data['type'] == cls.__name__, \
|
|
213
|
+
'Expected {} dictionary. Got {}.'.format(cls.__name__, data['type'])
|
|
214
|
+
# extract the key features and properties of the HVAC
|
|
215
|
+
sensible, latent, dcv = cls._properties_from_dict(data)
|
|
216
|
+
f_type, mot, sot = cls._radiant_properties_from_dict(data)
|
|
217
|
+
# extract the schedule
|
|
218
|
+
doas_avail = cls._get_schedule_from_dict(data['doas_availability_schedule']) if \
|
|
219
|
+
'doas_availability_schedule' in data and \
|
|
220
|
+
data['doas_availability_schedule'] is not None else None
|
|
221
|
+
|
|
222
|
+
new_obj = cls(data['identifier'], data['vintage'], data['equipment_type'],
|
|
223
|
+
sensible, latent, dcv, doas_avail, f_type, mot, sot)
|
|
224
|
+
if 'display_name' in data and data['display_name'] is not None:
|
|
225
|
+
new_obj.display_name = data['display_name']
|
|
226
|
+
if 'user_data' in data and data['user_data'] is not None:
|
|
227
|
+
new_obj.user_data = data['user_data']
|
|
228
|
+
return new_obj
|
|
229
|
+
|
|
230
|
+
@classmethod
|
|
231
|
+
def from_dict_abridged(cls, data, schedule_dict):
|
|
232
|
+
"""Create a HVAC object from an abridged dictionary.
|
|
233
|
+
|
|
234
|
+
Args:
|
|
235
|
+
data: A DOAS abridged dictionary in following the format below.
|
|
236
|
+
schedule_dict: A dictionary with schedule identifiers as keys and honeybee
|
|
237
|
+
schedule objects as values (either ScheduleRuleset or
|
|
238
|
+
ScheduleFixedInterval). These will be used to assign the schedules
|
|
239
|
+
to the Setpoint object.
|
|
240
|
+
|
|
241
|
+
.. code-block:: python
|
|
242
|
+
|
|
243
|
+
{
|
|
244
|
+
"type": "", # text for the class name of the HVAC
|
|
245
|
+
"identifier": "Classroom1_System", # identifier for the HVAC
|
|
246
|
+
"display_name": "Standard System", # name for the HVAC
|
|
247
|
+
"vintage": "ASHRAE_2019", # text for the vintage of the template
|
|
248
|
+
"equipment_type": "", # text for the HVAC equipment type
|
|
249
|
+
"sensible_heat_recovery": 0.75, # Sensible heat recovery effectiveness
|
|
250
|
+
"latent_heat_recovery": 0.7, # Latent heat recovery effectiveness
|
|
251
|
+
"demand_controlled_ventilation": False # Boolean for DCV
|
|
252
|
+
"doas_availability_schedule": "", # Schedule id for DOAS availability
|
|
253
|
+
"radiant_type": "Ceiling",
|
|
254
|
+
"minimum_operation_time": 1,
|
|
255
|
+
"switch_over_time": 24
|
|
256
|
+
}
|
|
257
|
+
"""
|
|
258
|
+
assert cls.__name__ in data['type'], \
|
|
259
|
+
'Expected {} dictionary. Got {}.'.format(cls.__name__, data['type'])
|
|
260
|
+
# extract the key features and properties of the HVAC
|
|
261
|
+
sensible, latent, dcv = cls._properties_from_dict(data)
|
|
262
|
+
f_type, mot, sot = cls._radiant_properties_from_dict(data)
|
|
263
|
+
# extract the schedule
|
|
264
|
+
doas_avail = None
|
|
265
|
+
if 'doas_availability_schedule' in data and \
|
|
266
|
+
data['doas_availability_schedule'] is not None:
|
|
267
|
+
try:
|
|
268
|
+
doas_avail = schedule_dict[data['doas_availability_schedule']]
|
|
269
|
+
except KeyError as e:
|
|
270
|
+
raise ValueError('Failed to find {} in the schedule_dict.'.format(e))
|
|
271
|
+
new_obj = cls(data['identifier'], data['vintage'], data['equipment_type'],
|
|
272
|
+
sensible, latent, dcv, doas_avail, f_type, mot, sot)
|
|
273
|
+
if 'display_name' in data and data['display_name'] is not None:
|
|
274
|
+
new_obj.display_name = data['display_name']
|
|
275
|
+
if 'user_data' in data and data['user_data'] is not None:
|
|
276
|
+
new_obj.user_data = data['user_data']
|
|
277
|
+
return new_obj
|
|
278
|
+
|
|
279
|
+
def to_dict(self, abridged=False):
|
|
280
|
+
"""DOAS system dictionary representation.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
abridged: Boolean to note whether the full dictionary describing the
|
|
284
|
+
object should be returned (False) or just an abridged version (True).
|
|
285
|
+
This input currently has no effect but may eventually have one if
|
|
286
|
+
schedule-type properties are exposed on this template.
|
|
287
|
+
"""
|
|
288
|
+
base = self._base_dict(abridged)
|
|
289
|
+
base['radiant_type'] = self.radiant_type
|
|
290
|
+
base['minimum_operation_time'] = self.minimum_operation_time
|
|
291
|
+
base['switch_over_time'] = self.switch_over_time
|
|
292
|
+
return base
|
|
293
|
+
|
|
294
|
+
@staticmethod
|
|
295
|
+
def _radiant_properties_from_dict(data):
|
|
296
|
+
"""Extract basic radiant properties from a dictionary and assign defaults."""
|
|
297
|
+
mot = data['minimum_operation_time'] if 'minimum_operation_time' in data else 1
|
|
298
|
+
sot = data['switch_over_time'] if 'switch_over_time' in data else 24
|
|
299
|
+
rad_type = data['radiant_type'] if 'radiant_type' in data and \
|
|
300
|
+
data['radiant_type'] is not None else 'Floor'
|
|
301
|
+
return rad_type, mot, sot
|
|
302
|
+
|
|
303
|
+
def __copy__(self):
|
|
304
|
+
new_obj = self.__class__(
|
|
305
|
+
self._identifier, self._vintage, self._equipment_type,
|
|
306
|
+
self._sensible_heat_recovery, self._latent_heat_recovery,
|
|
307
|
+
self._demand_controlled_ventilation, self._doas_availability_schedule,
|
|
308
|
+
self._radiant_type, self._minimum_operation_time,
|
|
309
|
+
self._switch_over_time)
|
|
310
|
+
new_obj._display_name = self._display_name
|
|
311
|
+
new_obj._user_data = None if self._user_data is None else self._user_data.copy()
|
|
312
|
+
return new_obj
|
|
313
|
+
|
|
314
|
+
def __key(self):
|
|
315
|
+
"""A tuple based on the object properties, useful for hashing."""
|
|
316
|
+
return (self._identifier, self._vintage, self._equipment_type,
|
|
317
|
+
self._sensible_heat_recovery, self._latent_heat_recovery,
|
|
318
|
+
self._demand_controlled_ventilation,
|
|
319
|
+
hash(self._doas_availability_schedule),
|
|
320
|
+
self._radiant_type, self._minimum_operation_time, self._switch_over_time)
|
|
321
|
+
|
|
322
|
+
def __hash__(self):
|
|
323
|
+
return hash(self.__key())
|
|
324
|
+
|
|
325
|
+
def __eq__(self, other):
|
|
326
|
+
return isinstance(other, self.__class__) and self.__key() == other.__key()
|
|
327
|
+
|
|
328
|
+
def __ne__(self, other):
|
|
329
|
+
return not self.__eq__(other)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
"""Variable Refrigerant Flow (VRF) with DOAS HVAC system."""
|
|
3
|
+
from __future__ import division
|
|
4
|
+
|
|
5
|
+
from ._base import _DOASBase
|
|
6
|
+
|
|
7
|
+
from honeybee._lockable import lockable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@lockable
|
|
11
|
+
class VRFwithDOAS(_DOASBase):
|
|
12
|
+
"""Variable Refrigerant Flow (VRF) with DOAS HVAC system.
|
|
13
|
+
|
|
14
|
+
All rooms/zones in the system are connected to a Dedicated Outdoor Air System
|
|
15
|
+
(DOAS) that supplies a constant volume of ventilation air at the same temperature
|
|
16
|
+
to all rooms/zones. The ventilation air temperature will vary from 21.1C (70F)
|
|
17
|
+
to 15.5C (60F) depending on the outdoor air temperature (the DOAS supplies cooler air
|
|
18
|
+
when outdoor conditions are warmer). The ventilation air temperature is maintained
|
|
19
|
+
by a single speed direct expansion (DX) cooling coil along with a single-speed
|
|
20
|
+
direct expansion (DX) heat pump with a backup electrical resistance coil.
|
|
21
|
+
|
|
22
|
+
Each room/zone also receives its own Variable Refrigerant Flow (VRF) terminal,
|
|
23
|
+
which meets the heating and cooling loads of the space. All room/zone terminals
|
|
24
|
+
are connected to the same outdoor unit, meaning that either all rooms must be
|
|
25
|
+
in cooling or heating mode together.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
identifier: Text string for system identifier. Must be < 100 characters
|
|
29
|
+
and not contain any EnergyPlus special characters. This will be used to
|
|
30
|
+
identify the object across a model and in the exported IDF.
|
|
31
|
+
vintage: Text for the vintage of the template system. This will be used
|
|
32
|
+
to set efficiencies for various pieces of equipment within the system.
|
|
33
|
+
Choose from the following.
|
|
34
|
+
|
|
35
|
+
* DOE_Ref_Pre_1980
|
|
36
|
+
* DOE_Ref_1980_2004
|
|
37
|
+
* ASHRAE_2004
|
|
38
|
+
* ASHRAE_2007
|
|
39
|
+
* ASHRAE_2010
|
|
40
|
+
* ASHRAE_2013
|
|
41
|
+
* ASHRAE_2016
|
|
42
|
+
* ASHRAE_2019
|
|
43
|
+
|
|
44
|
+
equipment_type: Text for the specific type of the system and equipment. (Default:
|
|
45
|
+
the first option below) Choose from.
|
|
46
|
+
|
|
47
|
+
* DOAS_VRF
|
|
48
|
+
|
|
49
|
+
sensible_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
50
|
+
of sensible heat recovery within the system. (Default: 0).
|
|
51
|
+
latent_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
52
|
+
of latent heat recovery within the system. (Default: 0).
|
|
53
|
+
demand_controlled_ventilation: Boolean to note whether demand controlled
|
|
54
|
+
ventilation should be used on the system, which will vary the amount
|
|
55
|
+
of ventilation air according to the occupancy schedule of the
|
|
56
|
+
Rooms. (Default: False).
|
|
57
|
+
doas_availability_schedule: An optional On/Off discrete schedule to set when
|
|
58
|
+
the dedicated outdoor air system (DOAS) shuts off. This will not only
|
|
59
|
+
prevent any outdoor air from flowing thorough the system but will also
|
|
60
|
+
shut off the fans, which can result in more energy savings when spaces
|
|
61
|
+
served by the DOAS are completely unoccupied. If None, the DOAS will be
|
|
62
|
+
always on. (Default: None).
|
|
63
|
+
|
|
64
|
+
Properties:
|
|
65
|
+
* identifier
|
|
66
|
+
* display_name
|
|
67
|
+
* vintage
|
|
68
|
+
* equipment_type
|
|
69
|
+
* sensible_heat_recovery
|
|
70
|
+
* latent_heat_recovery
|
|
71
|
+
* demand_controlled_ventilation
|
|
72
|
+
* doas_availability_schedule
|
|
73
|
+
* schedules
|
|
74
|
+
* has_district_heating
|
|
75
|
+
* has_district_cooling
|
|
76
|
+
* user_data
|
|
77
|
+
* properties
|
|
78
|
+
"""
|
|
79
|
+
__slots__ = ()
|
|
80
|
+
|
|
81
|
+
EQUIPMENT_TYPES = ('DOAS_VRF',)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
"""Water Source Heat Pump (WSHP) with DOAS HVAC system."""
|
|
3
|
+
from __future__ import division
|
|
4
|
+
|
|
5
|
+
from ._base import _DOASBase
|
|
6
|
+
|
|
7
|
+
from honeybee._lockable import lockable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@lockable
|
|
11
|
+
class WSHPwithDOAS(_DOASBase):
|
|
12
|
+
"""Water Source Heat Pump (WSHP) with DOAS HVAC system.
|
|
13
|
+
|
|
14
|
+
All rooms/zones in the system are connected to a Dedicated Outdoor Air System
|
|
15
|
+
(DOAS) that supplies a constant volume of ventilation air at the same temperature
|
|
16
|
+
to all rooms/zones. The ventilation air temperature will vary from 21.1C (70F)
|
|
17
|
+
to 15.5C (60F) depending on the outdoor air temperature (the DOAS supplies cooler air
|
|
18
|
+
when outdoor conditions are warmer). The ventilation air temperature is maintained
|
|
19
|
+
by a chilled water cooling coil and a hot water heating coil except when the
|
|
20
|
+
ground source heat pump (GSHP) option is selected. In this case, the ventilation
|
|
21
|
+
air temperature is maintained by a two-speed direct expansion (DX) cooling coil
|
|
22
|
+
and a single-speed DX heating coil with backup electrical resistance heat.
|
|
23
|
+
|
|
24
|
+
Each room/zone also receives its own Water Source Heat Pump (WSHP), which meets
|
|
25
|
+
the heating and cooling loads of the space. All WSHPs are connected to the
|
|
26
|
+
same water condenser loop, which has its temperature maintained by the
|
|
27
|
+
equipment_type (eg. Boiler with Cooling Tower).
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
identifier: Text string for system identifier. Must be < 100 characters
|
|
31
|
+
and not contain any EnergyPlus special characters. This will be used to
|
|
32
|
+
identify the object across a model and in the exported IDF.
|
|
33
|
+
vintage: Text for the vintage of the template system. This will be used
|
|
34
|
+
to set efficiencies for various pieces of equipment within the system.
|
|
35
|
+
Choose from the following.
|
|
36
|
+
|
|
37
|
+
* DOE_Ref_Pre_1980
|
|
38
|
+
* DOE_Ref_1980_2004
|
|
39
|
+
* ASHRAE_2004
|
|
40
|
+
* ASHRAE_2007
|
|
41
|
+
* ASHRAE_2010
|
|
42
|
+
* ASHRAE_2013
|
|
43
|
+
* ASHRAE_2016
|
|
44
|
+
* ASHRAE_2019
|
|
45
|
+
|
|
46
|
+
equipment_type: Text for the specific type of the system and equipment. (Default:
|
|
47
|
+
the first option below) Choose from.
|
|
48
|
+
|
|
49
|
+
* DOAS_WSHP_FluidCooler_Boiler
|
|
50
|
+
* DOAS_WSHP_CoolingTower_Boiler
|
|
51
|
+
* DOAS_WSHP_GSHP
|
|
52
|
+
* DOAS_WSHP_DCW_DHW
|
|
53
|
+
|
|
54
|
+
sensible_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
55
|
+
of sensible heat recovery within the system. (Default: 0).
|
|
56
|
+
latent_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
57
|
+
of latent heat recovery within the system. (Default: 0).
|
|
58
|
+
demand_controlled_ventilation: Boolean to note whether demand controlled
|
|
59
|
+
ventilation should be used on the system, which will vary the amount
|
|
60
|
+
of ventilation air according to the occupancy schedule of the
|
|
61
|
+
Rooms. (Default: False).
|
|
62
|
+
doas_availability_schedule: An optional On/Off discrete schedule to set when
|
|
63
|
+
the dedicated outdoor air system (DOAS) shuts off. This will not only
|
|
64
|
+
prevent any outdoor air from flowing thorough the system but will also
|
|
65
|
+
shut off the fans, which can result in more energy savings when spaces
|
|
66
|
+
served by the DOAS are completely unoccupied. If None, the DOAS will be
|
|
67
|
+
always on. (Default: None).
|
|
68
|
+
|
|
69
|
+
Properties:
|
|
70
|
+
* identifier
|
|
71
|
+
* display_name
|
|
72
|
+
* vintage
|
|
73
|
+
* equipment_type
|
|
74
|
+
* sensible_heat_recovery
|
|
75
|
+
* latent_heat_recovery
|
|
76
|
+
* demand_controlled_ventilation
|
|
77
|
+
* doas_availability_schedule
|
|
78
|
+
* schedules
|
|
79
|
+
* has_district_heating
|
|
80
|
+
* has_district_cooling
|
|
81
|
+
* user_data
|
|
82
|
+
* properties
|
|
83
|
+
"""
|
|
84
|
+
__slots__ = ()
|
|
85
|
+
|
|
86
|
+
EQUIPMENT_TYPES = (
|
|
87
|
+
'DOAS_WSHP_FluidCooler_Boiler',
|
|
88
|
+
'DOAS_WSHP_CoolingTower_Boiler',
|
|
89
|
+
'DOAS_WSHP_GSHP',
|
|
90
|
+
'DOAS_WSHP_DCW_DHW'
|
|
91
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Template HVAC definitions that only supply heating + cooling (no ventilation).
|
|
2
|
+
|
|
3
|
+
These systems are only designed to satisfy heating + cooling demand and they
|
|
4
|
+
cannot meet any minimum ventilation requirements.
|
|
5
|
+
|
|
6
|
+
As such, these systems tend to be used in residential or storage settings where
|
|
7
|
+
meeting minimum ventilation requirements may not be required or the density
|
|
8
|
+
of occupancy is so low that infiltration is enough to meet fresh air demand.
|
|
9
|
+
|
|
10
|
+
Properties:
|
|
11
|
+
* HVAC_TYPES_DICT: A dictionary containing pointers to the classes of each
|
|
12
|
+
HVAC system. The keys of this dictionary are the names of the HVAC
|
|
13
|
+
classes (eg. 'Baseboard').
|
|
14
|
+
* EQUIPMENT_TYPES_DICT: A dictionary containing pointers to the classes of
|
|
15
|
+
the HVAC systems. The keys of this dictionary are the names of the HVAC
|
|
16
|
+
systems as they appear in the OpenStudio standards gem and include the
|
|
17
|
+
specific equipment in the system (eg. 'Baseboard gas boiler').
|
|
18
|
+
"""
|
|
19
|
+
from ._base import _HeatCoolEnumeration
|
|
20
|
+
|
|
21
|
+
_heat_cool_types = _HeatCoolEnumeration(import_modules=True)
|
|
22
|
+
HVAC_TYPES_DICT = _heat_cool_types.types_dict
|
|
23
|
+
EQUIPMENT_TYPES_DICT = _heat_cool_types.equipment_types_dict
|