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,168 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
"""Forced Air Furnace HVAC system."""
|
|
3
|
+
from __future__ import division
|
|
4
|
+
|
|
5
|
+
from ._base import _AllAirBase
|
|
6
|
+
|
|
7
|
+
from honeybee._lockable import lockable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@lockable
|
|
11
|
+
class ForcedAirFurnace(_AllAirBase):
|
|
12
|
+
"""Forced Air Furnace HVAC system (aka. System 9 or 10).
|
|
13
|
+
|
|
14
|
+
Forced air furnaces are intended only for spaces only requiring heating and
|
|
15
|
+
ventilation. Each room/zone receives its own air loop with its own gas heating
|
|
16
|
+
coil, which will supply air at a temperature up to 50C (122F) to meet the
|
|
17
|
+
heating needs of the room/zone. Fans are constant volume.
|
|
18
|
+
|
|
19
|
+
ForcedAirFurnace systems are the traditional baseline system for storage
|
|
20
|
+
spaces that only require heating.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
identifier: Text string for system identifier. Must be < 100 characters
|
|
24
|
+
and not contain any EnergyPlus special characters. This will be used to
|
|
25
|
+
identify the object across a model and in the exported IDF.
|
|
26
|
+
vintage: Text for the vintage of the template system. This will be used
|
|
27
|
+
to set efficiencies for various pieces of equipment within the system.
|
|
28
|
+
Choose from the following.
|
|
29
|
+
|
|
30
|
+
* DOE_Ref_Pre_1980
|
|
31
|
+
* DOE_Ref_1980_2004
|
|
32
|
+
* ASHRAE_2004
|
|
33
|
+
* ASHRAE_2007
|
|
34
|
+
* ASHRAE_2010
|
|
35
|
+
* ASHRAE_2013
|
|
36
|
+
* ASHRAE_2016
|
|
37
|
+
* ASHRAE_2019
|
|
38
|
+
|
|
39
|
+
equipment_type: Text for the specific type of the system and equipment. (Default:
|
|
40
|
+
the first option below) Choose from.
|
|
41
|
+
|
|
42
|
+
* Furnace
|
|
43
|
+
* Furnace_Electric
|
|
44
|
+
|
|
45
|
+
economizer_type: Text to indicate the type of air-side economizer used on
|
|
46
|
+
the system. (Default: NoEconomizer). Choose from the following.
|
|
47
|
+
|
|
48
|
+
* NoEconomizer
|
|
49
|
+
* DifferentialDryBulb
|
|
50
|
+
* DifferentialEnthalpy
|
|
51
|
+
* DifferentialDryBulbAndEnthalpy
|
|
52
|
+
* FixedDryBulb
|
|
53
|
+
* FixedEnthalpy
|
|
54
|
+
* ElectronicEnthalpy
|
|
55
|
+
|
|
56
|
+
sensible_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
57
|
+
of sensible heat recovery within the system. (Default: 0).
|
|
58
|
+
latent_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
59
|
+
of latent heat recovery within the system. (Default: 0).
|
|
60
|
+
demand_controlled_ventilation: Boolean to note whether demand controlled
|
|
61
|
+
ventilation should be used on the system, which will vary the amount
|
|
62
|
+
of ventilation air according to the occupancy schedule of the
|
|
63
|
+
Rooms. (Default: False).
|
|
64
|
+
|
|
65
|
+
Properties:
|
|
66
|
+
* identifier
|
|
67
|
+
* display_name
|
|
68
|
+
* vintage
|
|
69
|
+
* equipment_type
|
|
70
|
+
* economizer_type
|
|
71
|
+
* sensible_heat_recovery
|
|
72
|
+
* latent_heat_recovery
|
|
73
|
+
* demand_controlled_ventilation
|
|
74
|
+
* schedules
|
|
75
|
+
* has_district_heating
|
|
76
|
+
* has_district_cooling
|
|
77
|
+
* user_data
|
|
78
|
+
* properties
|
|
79
|
+
|
|
80
|
+
Note:
|
|
81
|
+
[1] American Society of Heating, Refrigerating and Air-Conditioning Engineers,
|
|
82
|
+
Inc. (2007). Ashrae standard 90.1. Atlanta, GA. https://www.ashrae.org/\
|
|
83
|
+
technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards
|
|
84
|
+
"""
|
|
85
|
+
__slots__ = ()
|
|
86
|
+
|
|
87
|
+
EQUIPMENT_TYPES = ('Furnace', 'Furnace_Electric')
|
|
88
|
+
|
|
89
|
+
_has_air_loop = False
|
|
90
|
+
|
|
91
|
+
def __init__(self, identifier, vintage='ASHRAE_2019', equipment_type=None):
|
|
92
|
+
"""Initialize HVACSystem."""
|
|
93
|
+
# initialize base HVAC system properties
|
|
94
|
+
_AllAirBase.__init__(self, identifier, vintage, equipment_type)
|
|
95
|
+
|
|
96
|
+
@classmethod
|
|
97
|
+
def from_dict(cls, data):
|
|
98
|
+
"""Create a HVAC object from a dictionary.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
data: A HVAC dictionary in following the format below.
|
|
102
|
+
|
|
103
|
+
.. code-block:: python
|
|
104
|
+
|
|
105
|
+
{
|
|
106
|
+
"type": "", # text for the class name of the HVAC
|
|
107
|
+
"identifier": "Classroom1_System", # identifier for the HVAC
|
|
108
|
+
"display_name": "Standard System", # name for the HVAC
|
|
109
|
+
"vintage": "ASHRAE_2019", # text for the vintage of the template
|
|
110
|
+
"equipment_type": "" # text for the HVAC equipment type
|
|
111
|
+
}
|
|
112
|
+
"""
|
|
113
|
+
assert cls.__name__ in data['type'], \
|
|
114
|
+
'Expected {} dictionary. Got {}.'.format(cls.__name__, data['type'])
|
|
115
|
+
new_obj = cls(data['identifier'], data['vintage'], data['equipment_type'])
|
|
116
|
+
if 'display_name' in data and data['display_name'] is not None:
|
|
117
|
+
new_obj.display_name = data['display_name']
|
|
118
|
+
return new_obj
|
|
119
|
+
|
|
120
|
+
@classmethod
|
|
121
|
+
def from_dict_abridged(cls, data, schedule_dict):
|
|
122
|
+
"""Create a HVAC object from an abridged dictionary.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
data: An abridged dictionary in following the format below.
|
|
126
|
+
schedule_dict: A dictionary with schedule identifiers as keys and honeybee
|
|
127
|
+
schedule objects as values (either ScheduleRuleset or
|
|
128
|
+
ScheduleFixedInterval). These will be used to assign the schedules
|
|
129
|
+
to the Setpoint object.
|
|
130
|
+
|
|
131
|
+
.. code-block:: python
|
|
132
|
+
|
|
133
|
+
{
|
|
134
|
+
"type": "", # text for the class name of the HVAC
|
|
135
|
+
"identifier": "Classroom1_System", # identifier for the HVAC
|
|
136
|
+
"display_name": "Standard System", # name for the HVAC
|
|
137
|
+
"vintage": "ASHRAE_2019", # text for the vintage of the template
|
|
138
|
+
"equipment_type": "" # text for the HVAC equipment type
|
|
139
|
+
}
|
|
140
|
+
"""
|
|
141
|
+
# this is the same as the from_dict method for as long as there are not schedules
|
|
142
|
+
return cls.from_dict(data)
|
|
143
|
+
|
|
144
|
+
def to_dict(self, abridged=False):
|
|
145
|
+
"""All air system dictionary representation.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
abridged: Boolean to note whether the full dictionary describing the
|
|
149
|
+
object should be returned (False) or just an abridged version (True).
|
|
150
|
+
This input currently has no effect but may eventually have one if
|
|
151
|
+
schedule-type properties are exposed on this template.
|
|
152
|
+
"""
|
|
153
|
+
base = {'type': self.__class__.__name__}
|
|
154
|
+
base['identifier'] = self.identifier
|
|
155
|
+
if self._display_name is not None:
|
|
156
|
+
base['display_name'] = self.display_name
|
|
157
|
+
base['vintage'] = self.vintage
|
|
158
|
+
base['equipment_type'] = self.equipment_type
|
|
159
|
+
return base
|
|
160
|
+
|
|
161
|
+
def __copy__(self):
|
|
162
|
+
new_obj = self.__class__(self.identifier, self.vintage, self.equipment_type)
|
|
163
|
+
new_obj._display_name = self._display_name
|
|
164
|
+
return new_obj
|
|
165
|
+
|
|
166
|
+
def __key(self):
|
|
167
|
+
"""A tuple based on the object properties, useful for hashing."""
|
|
168
|
+
return (self._identifier, self._vintage, self._equipment_type)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
"""Packaged Single-Zone (PSZ) HVAC system."""
|
|
3
|
+
from __future__ import division
|
|
4
|
+
|
|
5
|
+
from ._base import _AllAirBase
|
|
6
|
+
|
|
7
|
+
from honeybee._lockable import lockable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@lockable
|
|
11
|
+
class PSZ(_AllAirBase):
|
|
12
|
+
"""Packaged Single-Zone (PSZ) HVAC system (aka. System 3 or 4).
|
|
13
|
+
|
|
14
|
+
Each room/zone receives its own air loop with its own single-speed direct expansion
|
|
15
|
+
(DX) cooling coil, which will condition the supply air to a value in between
|
|
16
|
+
12.8C (55F) and 50C (122F) depending on the heating/cooling needs of the room/zone.
|
|
17
|
+
As long as a Baseboard equipment_type is NOT selected, heating will be supplied
|
|
18
|
+
by a heating coil in the air loop. Otherwise, heating is accomplished with
|
|
19
|
+
baseboards and the air loop only supplies cooling and ventilation air.
|
|
20
|
+
Fans are constant volume.
|
|
21
|
+
|
|
22
|
+
PSZ systems are the traditional baseline system for commercial buildings
|
|
23
|
+
with less than 4 stories or less than 2,300 m2 (25,000 ft2) of floor area.
|
|
24
|
+
They are also the default for all retail with less than 3 stories and all public
|
|
25
|
+
assembly spaces.
|
|
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
|
+
* PSZAC_ElectricBaseboard
|
|
48
|
+
* PSZAC_BoilerBaseboard
|
|
49
|
+
* PSZAC_DHWBaseboard
|
|
50
|
+
* PSZAC_GasHeaters
|
|
51
|
+
* PSZAC_ElectricCoil
|
|
52
|
+
* PSZAC_GasCoil
|
|
53
|
+
* PSZAC_Boiler
|
|
54
|
+
* PSZAC_ASHP
|
|
55
|
+
* PSZAC_DHW
|
|
56
|
+
* PSZAC
|
|
57
|
+
* PSZAC_DCW_ElectricBaseboard
|
|
58
|
+
* PSZAC_DCW_BoilerBaseboard
|
|
59
|
+
* PSZAC_DCW_GasHeaters
|
|
60
|
+
* PSZAC_DCW_ElectricCoil
|
|
61
|
+
* PSZAC_DCW_GasCoil
|
|
62
|
+
* PSZAC_DCW_Boiler
|
|
63
|
+
* PSZAC_DCW_ASHP
|
|
64
|
+
* PSZAC_DCW_DHW
|
|
65
|
+
* PSZAC_DCW
|
|
66
|
+
* PSZHP
|
|
67
|
+
|
|
68
|
+
economizer_type: Text to indicate the type of air-side economizer used on
|
|
69
|
+
the system. (Default: NoEconomizer). Choose from the following.
|
|
70
|
+
|
|
71
|
+
* NoEconomizer
|
|
72
|
+
* DifferentialDryBulb
|
|
73
|
+
* DifferentialEnthalpy
|
|
74
|
+
* DifferentialDryBulbAndEnthalpy
|
|
75
|
+
* FixedDryBulb
|
|
76
|
+
* FixedEnthalpy
|
|
77
|
+
* ElectronicEnthalpy
|
|
78
|
+
|
|
79
|
+
sensible_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
80
|
+
of sensible heat recovery within the system. (Default: 0).
|
|
81
|
+
latent_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
82
|
+
of latent heat recovery within the system. (Default: 0).
|
|
83
|
+
demand_controlled_ventilation: Boolean to note whether demand controlled
|
|
84
|
+
ventilation should be used on the system, which will vary the amount
|
|
85
|
+
of ventilation air according to the occupancy schedule of the
|
|
86
|
+
Rooms. (Default: False).
|
|
87
|
+
|
|
88
|
+
Properties:
|
|
89
|
+
* identifier
|
|
90
|
+
* display_name
|
|
91
|
+
* vintage
|
|
92
|
+
* equipment_type
|
|
93
|
+
* economizer_type
|
|
94
|
+
* sensible_heat_recovery
|
|
95
|
+
* latent_heat_recovery
|
|
96
|
+
* demand_controlled_ventilation
|
|
97
|
+
* schedules
|
|
98
|
+
* has_district_heating
|
|
99
|
+
* has_district_cooling
|
|
100
|
+
* user_data
|
|
101
|
+
* properties
|
|
102
|
+
|
|
103
|
+
Note:
|
|
104
|
+
[1] American Society of Heating, Refrigerating and Air-Conditioning Engineers,
|
|
105
|
+
Inc. (2007). Ashrae standard 90.1. Atlanta, GA. https://www.ashrae.org/\
|
|
106
|
+
technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards
|
|
107
|
+
"""
|
|
108
|
+
__slots__ = ()
|
|
109
|
+
|
|
110
|
+
EQUIPMENT_TYPES = (
|
|
111
|
+
'PSZAC_ElectricBaseboard',
|
|
112
|
+
'PSZAC_BoilerBaseboard',
|
|
113
|
+
'PSZAC_DHWBaseboard',
|
|
114
|
+
'PSZAC_GasHeaters',
|
|
115
|
+
'PSZAC_ElectricCoil',
|
|
116
|
+
'PSZAC_GasCoil',
|
|
117
|
+
'PSZAC_Boiler',
|
|
118
|
+
'PSZAC_ASHP',
|
|
119
|
+
'PSZAC_DHW',
|
|
120
|
+
'PSZAC',
|
|
121
|
+
'PSZAC_DCW_ElectricBaseboard',
|
|
122
|
+
'PSZAC_DCW_BoilerBaseboard',
|
|
123
|
+
'PSZAC_DCW_GasHeaters',
|
|
124
|
+
'PSZAC_DCW_ElectricCoil',
|
|
125
|
+
'PSZAC_DCW_GasCoil',
|
|
126
|
+
'PSZAC_DCW_Boiler',
|
|
127
|
+
'PSZAC_DCW_ASHP',
|
|
128
|
+
'PSZAC_DCW_DHW',
|
|
129
|
+
'PSZAC_DCW',
|
|
130
|
+
'PSZHP'
|
|
131
|
+
)
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
"""Packaged Terminal Air Conditioning (PTAC) or Heat Pump (PTHP) HVAC system."""
|
|
3
|
+
from __future__ import division
|
|
4
|
+
|
|
5
|
+
from ._base import _AllAirBase
|
|
6
|
+
|
|
7
|
+
from honeybee._lockable import lockable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@lockable
|
|
11
|
+
class PTAC(_AllAirBase):
|
|
12
|
+
"""Packaged Terminal Air Conditioning (PTAC/HP) HVAC system. (aka. System 1 or 2).
|
|
13
|
+
|
|
14
|
+
Each room/zone receives its own packaged unit that supplies heating, cooling
|
|
15
|
+
and ventilation. Cooling is always done via a single-speed direct expansion (DX)
|
|
16
|
+
cooling coil. Heating can be done via a heating coil in the unit or via an
|
|
17
|
+
external baseboard. Fans are constant volume.
|
|
18
|
+
|
|
19
|
+
PTAC/HP systems are the traditional baseline system for residential buildings.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
identifier: Text string for system identifier. Must be < 100 characters
|
|
23
|
+
and not contain any EnergyPlus special characters. This will be used to
|
|
24
|
+
identify the object across a model and in the exported IDF.
|
|
25
|
+
vintage: Text for the vintage of the template system. This will be used
|
|
26
|
+
to set efficiencies for various pieces of equipment within the system.
|
|
27
|
+
Choose from the following.
|
|
28
|
+
|
|
29
|
+
* DOE_Ref_Pre_1980
|
|
30
|
+
* DOE_Ref_1980_2004
|
|
31
|
+
* ASHRAE_2004
|
|
32
|
+
* ASHRAE_2007
|
|
33
|
+
* ASHRAE_2010
|
|
34
|
+
* ASHRAE_2013
|
|
35
|
+
* ASHRAE_2016
|
|
36
|
+
* ASHRAE_2019
|
|
37
|
+
|
|
38
|
+
equipment_type: Text for the specific type of the system and equipment. (Default:
|
|
39
|
+
the first option below) Choose from.
|
|
40
|
+
|
|
41
|
+
* PTAC_ElectricBaseboard
|
|
42
|
+
* PTAC_BoilerBaseboard
|
|
43
|
+
* PTAC_DHWBaseboard
|
|
44
|
+
* PTAC_GasHeaters
|
|
45
|
+
* PTAC_ElectricCoil
|
|
46
|
+
* PTAC_GasCoil
|
|
47
|
+
* PTAC_Boiler
|
|
48
|
+
* PTAC_ASHP
|
|
49
|
+
* PTAC_DHW
|
|
50
|
+
* PTAC
|
|
51
|
+
* PTHP
|
|
52
|
+
|
|
53
|
+
Properties:
|
|
54
|
+
* identifier
|
|
55
|
+
* display_name
|
|
56
|
+
* vintage
|
|
57
|
+
* equipment_type
|
|
58
|
+
* schedules
|
|
59
|
+
* has_district_heating
|
|
60
|
+
* has_district_cooling
|
|
61
|
+
* user_data
|
|
62
|
+
* properties
|
|
63
|
+
|
|
64
|
+
Note:
|
|
65
|
+
[1] American Society of Heating, Refrigerating and Air-Conditioning Engineers,
|
|
66
|
+
Inc. (2007). Ashrae standard 90.1. Atlanta, GA. https://www.ashrae.org/\
|
|
67
|
+
technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards
|
|
68
|
+
"""
|
|
69
|
+
__slots__ = ()
|
|
70
|
+
|
|
71
|
+
EQUIPMENT_TYPES = (
|
|
72
|
+
'PTAC_ElectricBaseboard',
|
|
73
|
+
'PTAC_BoilerBaseboard',
|
|
74
|
+
'PTAC_DHWBaseboard',
|
|
75
|
+
'PTAC_GasHeaters',
|
|
76
|
+
'PTAC_ElectricCoil',
|
|
77
|
+
'PTAC_GasCoil',
|
|
78
|
+
'PTAC_Boiler',
|
|
79
|
+
'PTAC_ASHP',
|
|
80
|
+
'PTAC_DHW',
|
|
81
|
+
'PTAC',
|
|
82
|
+
'PTHP'
|
|
83
|
+
)
|
|
84
|
+
_has_air_loop = False
|
|
85
|
+
|
|
86
|
+
def __init__(self, identifier, vintage='ASHRAE_2019', equipment_type=None):
|
|
87
|
+
"""Initialize HVACSystem."""
|
|
88
|
+
# initialize base HVAC system properties
|
|
89
|
+
_AllAirBase.__init__(self, identifier, vintage, equipment_type)
|
|
90
|
+
|
|
91
|
+
@classmethod
|
|
92
|
+
def from_dict(cls, data):
|
|
93
|
+
"""Create a HVAC object from a dictionary.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
data: A HVAC dictionary in following the format below.
|
|
97
|
+
|
|
98
|
+
.. code-block:: python
|
|
99
|
+
|
|
100
|
+
{
|
|
101
|
+
"type": "", # text for the class name of the HVAC
|
|
102
|
+
"identifier": "Classroom1_System", # identifier for the HVAC
|
|
103
|
+
"display_name": "Standard System", # name for the HVAC
|
|
104
|
+
"vintage": "ASHRAE_2019", # text for the vintage of the template
|
|
105
|
+
"equipment_type": "" # text for the HVAC equipment type
|
|
106
|
+
}
|
|
107
|
+
"""
|
|
108
|
+
assert cls.__name__ in data['type'], \
|
|
109
|
+
'Expected {} dictionary. Got {}.'.format(cls.__name__, data['type'])
|
|
110
|
+
new_obj = cls(data['identifier'], data['vintage'], data['equipment_type'])
|
|
111
|
+
if 'display_name' in data and data['display_name'] is not None:
|
|
112
|
+
new_obj.display_name = data['display_name']
|
|
113
|
+
return new_obj
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def from_dict_abridged(cls, data, schedule_dict):
|
|
117
|
+
"""Create a HVAC object from an abridged dictionary.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
data: An abridged dictionary in following the format below.
|
|
121
|
+
schedule_dict: A dictionary with schedule identifiers as keys and honeybee
|
|
122
|
+
schedule objects as values (either ScheduleRuleset or
|
|
123
|
+
ScheduleFixedInterval). These will be used to assign the schedules
|
|
124
|
+
to the Setpoint object.
|
|
125
|
+
|
|
126
|
+
.. code-block:: python
|
|
127
|
+
|
|
128
|
+
{
|
|
129
|
+
"type": "", # text for the class name of the HVAC
|
|
130
|
+
"identifier": "Classroom1_System", # identifier for the HVAC
|
|
131
|
+
"display_name": "Standard System", # name for the HVAC
|
|
132
|
+
"vintage": "ASHRAE_2019", # text for the vintage of the template
|
|
133
|
+
"equipment_type": "" # text for the HVAC equipment type
|
|
134
|
+
}
|
|
135
|
+
"""
|
|
136
|
+
# this is the same as the from_dict method for as long as there are not schedules
|
|
137
|
+
return cls.from_dict(data)
|
|
138
|
+
|
|
139
|
+
def to_dict(self, abridged=False):
|
|
140
|
+
"""All air system dictionary representation.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
abridged: Boolean to note whether the full dictionary describing the
|
|
144
|
+
object should be returned (False) or just an abridged version (True).
|
|
145
|
+
This input currently has no effect but may eventually have one if
|
|
146
|
+
schedule-type properties are exposed on this template.
|
|
147
|
+
"""
|
|
148
|
+
base = {'type': self.__class__.__name__}
|
|
149
|
+
base['identifier'] = self.identifier
|
|
150
|
+
if self._display_name is not None:
|
|
151
|
+
base['display_name'] = self.display_name
|
|
152
|
+
base['vintage'] = self.vintage
|
|
153
|
+
base['equipment_type'] = self.equipment_type
|
|
154
|
+
return base
|
|
155
|
+
|
|
156
|
+
def __copy__(self):
|
|
157
|
+
new_obj = self.__class__(self.identifier, self.vintage, self.equipment_type)
|
|
158
|
+
new_obj._display_name = self._display_name
|
|
159
|
+
return new_obj
|
|
160
|
+
|
|
161
|
+
def __key(self):
|
|
162
|
+
"""A tuple based on the object properties, useful for hashing."""
|
|
163
|
+
return (self._identifier, self._vintage, self._equipment_type)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
"""Packaged Variable Air Volume (PVAV) HVAC system."""
|
|
3
|
+
from __future__ import division
|
|
4
|
+
|
|
5
|
+
from ._base import _AllAirBase
|
|
6
|
+
|
|
7
|
+
from honeybee._lockable import lockable
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@lockable
|
|
11
|
+
class PVAV(_AllAirBase):
|
|
12
|
+
"""Packaged Variable Air Volume (PVAV) HVAC system (aka. System 5 or 6).
|
|
13
|
+
|
|
14
|
+
All rooms/zones are connected to a central air loop that is kept at a constant
|
|
15
|
+
central temperature of 12.8C (55F). The central temperature is maintained by a
|
|
16
|
+
cooling coil, which runs whenever the combination of return air and fresh outdoor
|
|
17
|
+
air is greater than 12.8C, as well as a heating coil, which runs whenever
|
|
18
|
+
the combination of return air and fresh outdoor air is less than 12.8C.
|
|
19
|
+
|
|
20
|
+
Each air terminal for the connected rooms/zones contains its own reheat coil,
|
|
21
|
+
which runs whenever the room is not in need of the cooling supplied by the 12.8C
|
|
22
|
+
central air.
|
|
23
|
+
|
|
24
|
+
The central cooling coil is always a two-speed direct expansion (DX) coil.
|
|
25
|
+
All heating coils are hot water coils except when Gas Coil equipment_type is
|
|
26
|
+
used (in which case the central coil is gas and all others are electric)
|
|
27
|
+
or when Parallel Fan-Powered (PFP) boxes equipment_type is used (in which case
|
|
28
|
+
coils are electric resistance). Hot water temperature is 82C (180F) for
|
|
29
|
+
boiler/district heating and 49C (120F) when ASHP is used.
|
|
30
|
+
|
|
31
|
+
PVAV systems are the traditional baseline system for commercial buildings
|
|
32
|
+
with than 4-5 stories or between 2,300 m2 and 14,000 m2 (25,000 ft2 and
|
|
33
|
+
150,000 ft2) of floor area.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
identifier: Text string for system identifier. Must be < 100 characters
|
|
37
|
+
and not contain any EnergyPlus special characters. This will be used to
|
|
38
|
+
identify the object across a model and in the exported IDF.
|
|
39
|
+
vintage: Text for the vintage of the template system. This will be used
|
|
40
|
+
to set efficiencies for various pieces of equipment within the system.
|
|
41
|
+
Choose from the following.
|
|
42
|
+
|
|
43
|
+
* DOE_Ref_Pre_1980
|
|
44
|
+
* DOE_Ref_1980_2004
|
|
45
|
+
* ASHRAE_2004
|
|
46
|
+
* ASHRAE_2007
|
|
47
|
+
* ASHRAE_2010
|
|
48
|
+
* ASHRAE_2013
|
|
49
|
+
* ASHRAE_2016
|
|
50
|
+
* ASHRAE_2019
|
|
51
|
+
|
|
52
|
+
equipment_type: Text for the specific type of the system and equipment. (Default:
|
|
53
|
+
the first option below) Choose from.
|
|
54
|
+
|
|
55
|
+
* PVAV_Boiler
|
|
56
|
+
* PVAV_ASHP
|
|
57
|
+
* PVAV_DHW
|
|
58
|
+
* PVAV_PFP
|
|
59
|
+
* PVAV_BoilerElectricReheat
|
|
60
|
+
|
|
61
|
+
economizer_type: Text to indicate the type of air-side economizer used on
|
|
62
|
+
the system. (Default: NoEconomizer). Choose from the following.
|
|
63
|
+
|
|
64
|
+
* NoEconomizer
|
|
65
|
+
* DifferentialDryBulb
|
|
66
|
+
* DifferentialEnthalpy
|
|
67
|
+
* DifferentialDryBulbAndEnthalpy
|
|
68
|
+
* FixedDryBulb
|
|
69
|
+
* FixedEnthalpy
|
|
70
|
+
* ElectronicEnthalpy
|
|
71
|
+
|
|
72
|
+
sensible_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
73
|
+
of sensible heat recovery within the system. (Default: 0).
|
|
74
|
+
latent_heat_recovery: A number between 0 and 1 for the effectiveness
|
|
75
|
+
of latent heat recovery within the system. (Default: 0).
|
|
76
|
+
demand_controlled_ventilation: Boolean to note whether demand controlled
|
|
77
|
+
ventilation should be used on the system, which will vary the amount
|
|
78
|
+
of ventilation air according to the occupancy schedule of the
|
|
79
|
+
Rooms. (Default: False).
|
|
80
|
+
|
|
81
|
+
Properties:
|
|
82
|
+
* identifier
|
|
83
|
+
* display_name
|
|
84
|
+
* vintage
|
|
85
|
+
* equipment_type
|
|
86
|
+
* economizer_type
|
|
87
|
+
* sensible_heat_recovery
|
|
88
|
+
* latent_heat_recovery
|
|
89
|
+
* demand_controlled_ventilation
|
|
90
|
+
* schedules
|
|
91
|
+
* has_district_heating
|
|
92
|
+
* has_district_cooling
|
|
93
|
+
* user_data
|
|
94
|
+
* properties
|
|
95
|
+
|
|
96
|
+
Note:
|
|
97
|
+
[1] American Society of Heating, Refrigerating and Air-Conditioning Engineers,
|
|
98
|
+
Inc. (2007). Ashrae standard 90.1. Atlanta, GA. https://www.ashrae.org/\
|
|
99
|
+
technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards
|
|
100
|
+
"""
|
|
101
|
+
__slots__ = ()
|
|
102
|
+
|
|
103
|
+
EQUIPMENT_TYPES = (
|
|
104
|
+
'PVAV_Boiler',
|
|
105
|
+
'PVAV_ASHP',
|
|
106
|
+
'PVAV_DHW',
|
|
107
|
+
'PVAV_PFP',
|
|
108
|
+
'PVAV_BoilerElectricReheat'
|
|
109
|
+
)
|