buildingsync 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/continuous_integration.yml +146 -0
  3. data/.gitignore +33 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +10 -0
  6. data/CHANGELOG.md +50 -0
  7. data/Gemfile +31 -0
  8. data/Jenkinsfile +10 -0
  9. data/LICENSE.md +29 -0
  10. data/README.md +105 -0
  11. data/Rakefile +77 -0
  12. data/bin/console +15 -0
  13. data/bin/setup +8 -0
  14. data/buildingsync.gemspec +37 -0
  15. data/config.rb.in +26 -0
  16. data/doc_templates/LICENSE.md +29 -0
  17. data/doc_templates/README.md.erb +42 -0
  18. data/doc_templates/copyright_erb.txt +38 -0
  19. data/doc_templates/copyright_js.txt +5 -0
  20. data/doc_templates/copyright_ruby.txt +36 -0
  21. data/lib/buildingsync.rb +43 -0
  22. data/lib/buildingsync/all_resource_total.rb +54 -0
  23. data/lib/buildingsync/audit_date.rb +54 -0
  24. data/lib/buildingsync/constants.rb +49 -0
  25. data/lib/buildingsync/contact.rb +54 -0
  26. data/lib/buildingsync/extension.rb +57 -0
  27. data/lib/buildingsync/generator.rb +584 -0
  28. data/lib/buildingsync/get_bcl_weather_file.rb +326 -0
  29. data/lib/buildingsync/helpers/Model.hvac.rb +216 -0
  30. data/lib/buildingsync/helpers/helper.rb +494 -0
  31. data/lib/buildingsync/helpers/xml_get_set.rb +215 -0
  32. data/lib/buildingsync/makers/phase_zero_base.osw +178 -0
  33. data/lib/buildingsync/makers/workflow_maker.json +811 -0
  34. data/lib/buildingsync/makers/workflow_maker.rb +581 -0
  35. data/lib/buildingsync/makers/workflow_maker_base.rb +167 -0
  36. data/lib/buildingsync/model_articulation/building.rb +1119 -0
  37. data/lib/buildingsync/model_articulation/building_and_system_types.json +121 -0
  38. data/lib/buildingsync/model_articulation/building_section.rb +190 -0
  39. data/lib/buildingsync/model_articulation/building_system.rb +49 -0
  40. data/lib/buildingsync/model_articulation/envelope_system.rb +102 -0
  41. data/lib/buildingsync/model_articulation/exterior_floor_system_type.rb +64 -0
  42. data/lib/buildingsync/model_articulation/facility.rb +439 -0
  43. data/lib/buildingsync/model_articulation/foundation_system_type.rb +64 -0
  44. data/lib/buildingsync/model_articulation/hvac_system.rb +395 -0
  45. data/lib/buildingsync/model_articulation/lighting_system.rb +102 -0
  46. data/lib/buildingsync/model_articulation/loads_system.rb +287 -0
  47. data/lib/buildingsync/model_articulation/location_element.rb +129 -0
  48. data/lib/buildingsync/model_articulation/measure.rb +57 -0
  49. data/lib/buildingsync/model_articulation/roof_system_type.rb +64 -0
  50. data/lib/buildingsync/model_articulation/service_hot_water_system.rb +87 -0
  51. data/lib/buildingsync/model_articulation/site.rb +242 -0
  52. data/lib/buildingsync/model_articulation/spatial_element.rb +343 -0
  53. data/lib/buildingsync/model_articulation/wall_system_type.rb +64 -0
  54. data/lib/buildingsync/report.rb +217 -0
  55. data/lib/buildingsync/resource_use.rb +55 -0
  56. data/lib/buildingsync/scenario.rb +622 -0
  57. data/lib/buildingsync/selection_tool.rb +98 -0
  58. data/lib/buildingsync/time_series.rb +85 -0
  59. data/lib/buildingsync/translator.rb +167 -0
  60. data/lib/buildingsync/utility.rb +67 -0
  61. data/lib/buildingsync/version.rb +45 -0
  62. metadata +223 -0
@@ -0,0 +1,215 @@
1
+ # frozen_string_literal: true
2
+
3
+ # *******************************************************************************
4
+ # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
5
+ # BuildingSync(R), Copyright (c) 2015-2020, Alliance for Sustainable Energy, LLC.
6
+ # All rights reserved.
7
+ #
8
+ # Redistribution and use in source and binary forms, with or without
9
+ # modification, are permitted provided that the following conditions are met:
10
+ #
11
+ # (1) Redistributions of source code must retain the above copyright notice,
12
+ # this list of conditions and the following disclaimer.
13
+ #
14
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
15
+ # this list of conditions and the following disclaimer in the documentation
16
+ # and/or other materials provided with the distribution.
17
+ #
18
+ # (3) Neither the name of the copyright holder nor the names of any contributors
19
+ # may be used to endorse or promote products derived from this software without
20
+ # specific prior written permission from the respective party.
21
+ #
22
+ # (4) Other than as required in clauses (1) and (2), distributions in any form
23
+ # of modifications or other derivative works may not use the "OpenStudio"
24
+ # trademark, "OS", "os", or any other confusingly similar designation without
25
+ # specific prior written permission from Alliance for Sustainable Energy, LLC.
26
+ #
27
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
28
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
29
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
31
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
32
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
33
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
34
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
36
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
+ # *******************************************************************************
39
+ require 'rexml/document'
40
+
41
+ require 'buildingsync/helpers/helper'
42
+
43
+ module BuildingSync
44
+ # Used for getting, setting, and creating XML snippets
45
+ # for BuildingSync classes with an @base_xml attribute
46
+ module XmlGetSet
47
+ def get_prefix
48
+ if @ns == ''
49
+ return ''
50
+ else
51
+ return "#{@ns}:"
52
+ end
53
+ end
54
+
55
+ # Get the id attribute of the @base_xml
56
+ # @see help_get_attribute_value
57
+ def xget_id
58
+ return help_get_attribute_value(@base_xml, 'ID')
59
+ end
60
+
61
+ # Get the name of the element, based on the type of element
62
+ # @example scenario.get_name, returns text for ScenarioName element
63
+ # @example site.get_name, returns text for SiteName
64
+ # @return [String] name associated with the @base_xml
65
+ def xget_name
66
+ premises = ['Site', 'Building', 'Section', 'ThermalZone', 'Space']
67
+ if premises.include? @base_xml.name
68
+ return xget_text('PremisesName')
69
+ elsif @base_xml.name == 'Measure'
70
+ m = @base_xml.elements[".//#{get_prefix}MeasureName"]
71
+ return help_get_text_value(m)
72
+ else
73
+ return xget_text("#{@base_xml.name}Name")
74
+ end
75
+ end
76
+
77
+ def xget_attribute_for_element(element_name, attribute)
78
+ element = @base_xml.elements["./#{get_prefix}#{element_name}"]
79
+ return help_get_attribute_value(element, attribute)
80
+ end
81
+
82
+ # returns the first element with the specified element name
83
+ # @param element_name [String] non-namespaced element name, 'EnergyResource'
84
+ # @return [REXML::Element] if element exists
85
+ # @return [nil] if element doesnt exist
86
+ def xget_element(element_name)
87
+ return @base_xml.elements["./#{get_prefix}#{element_name}"]
88
+ end
89
+
90
+ # get or create a new element
91
+ # @param element_name [String] non-namespaced element name, 'EnergyResource'
92
+ # @see help_get_or_create
93
+ def xget_or_create(element_name)
94
+ return help_get_or_create(@base_xml, "#{get_prefix}#{element_name}")
95
+ end
96
+
97
+ # @param element_name [String] non-namespaced element name, 'EnergyResource'
98
+ # @see help_get_text_value
99
+ def xget_text(element_name)
100
+ return help_get_text_value(@base_xml.elements["./#{get_prefix}#{element_name}"])
101
+ end
102
+
103
+ # @param element_name [String] non-namespaced element name, 'YearOfConstruction'
104
+ # @see help_get_text_value_as_float
105
+ def xget_text_as_float(element_name)
106
+ return help_get_text_value_as_float(@base_xml.elements["./#{get_prefix}#{element_name}"])
107
+ end
108
+
109
+ # @param element_name [String] non-namespaced element name, 'YearOfConstruction'
110
+ # @see help_get_text_value_as_integer
111
+ def xget_text_as_integer(element_name)
112
+ return help_get_text_value_as_integer(@base_xml.elements["./#{get_prefix}#{element_name}"])
113
+ end
114
+
115
+ # @param element_name [String] non-namespaced element name, 'BuildingAutomationSystem'
116
+ # @see help_get_text_value_as_bool
117
+ def xget_text_as_bool(element_name)
118
+ return help_get_text_value_as_bool(@base_xml.elements["./#{get_prefix}#{element_name}"])
119
+ end
120
+
121
+ # @param element_name [String] non-namespaced element name, 'RetrocommissioningDate'
122
+ # @see help_get_text_value_as_date
123
+ def xget_text_as_date(element_name)
124
+ return help_get_text_value_as_date(@base_xml.elements["./#{get_prefix}#{element_name}"])
125
+ end
126
+
127
+ # @param element_name [String] non-namespaced element name, 'StartTimestamp'
128
+ # @see help_get_text_value_as_datetime
129
+ def xget_text_as_dt(element_name)
130
+ return help_get_text_value_as_datetime(@base_xml.elements["./#{get_prefix}#{element_name}"])
131
+ end
132
+
133
+ # Gets all of the IDref attributes of the element_name provided
134
+ # assumes there is a parent child containment downstream of the base_xml,
135
+ # where the parent is a plural version of the element_name provided
136
+ # @example xget_idrefs('Measure') #=> Searches for .//Measures/Measure
137
+ # @param element_name [String] name of the non-pluralized element, i.e. Measure
138
+ # @return [Array<String>] all associated IDs ['Measure-1', 'Measure-2', etc.]
139
+ def xget_idrefs(element_name)
140
+ id_elements = @base_xml.get_elements(".//#{get_prefix}#{element_name}s/#{get_prefix}#{element_name}")
141
+ to_return = []
142
+ id_elements.each do |id|
143
+ to_return << help_get_attribute_value(id, 'IDref')
144
+ end
145
+ return to_return
146
+ end
147
+
148
+ def xget_plurals_text_value(element_name)
149
+ plurals = @base_xml.get_elements(".//#{get_prefix}#{element_name}s/#{get_prefix}#{element_name}")
150
+ to_return = []
151
+ plurals.each do |p|
152
+ to_return << help_get_text_value(p)
153
+ end
154
+ return to_return
155
+ end
156
+
157
+ # Get the linked premises ids of the @base_xml element
158
+ # @return [Hash] where keys are premise types and values are an array of ids
159
+ # @example {'Building' => ['Building-1', 'Building-1'], 'Section' => ['Section-4']]}
160
+ def xget_linked_premises
161
+ map = {}
162
+ premises = @base_xml.get_elements(".//#{get_prefix}LinkedPremises").first
163
+ premises&.elements&.each do |premise_type|
164
+ map[premise_type.name] = []
165
+ idref_elements = premise_type.get_elements('.//*[@IDref]')
166
+ idref_elements&.each do |element|
167
+ map[premise_type.name] << element.attributes['IDref']
168
+ end
169
+ end
170
+ return map
171
+ end
172
+
173
+ # Only sets the text for an element if it exists
174
+ # @param element_name [String] non-namespaced element name, 'EnergyResource'
175
+ # @param new_value [String] new text value to use, 'Electricity'
176
+ # @return [REXML::Element] if element exists
177
+ # @return [nil] if element doesn't exist
178
+ def xset_text(element_name, new_value)
179
+ element = @base_xml.elements["./#{get_prefix}#{element_name}"]
180
+ if !element.nil?
181
+ element.text = new_value
182
+ end
183
+ return element
184
+ end
185
+
186
+ # Sets the text for an element if it exists, or creates the element then sets
187
+ # the text if it doesn't exist
188
+ # @param element_name [String] non-namespaced element name, 'EnergyResource'
189
+ # @param new_value [String] new text value to use, 'Electricity'
190
+ # @param override [Boolean] whether to override the text value if the element already has text
191
+ # @return [REXML::Element] the element
192
+ def xset_or_create(element_name, new_value, override = true)
193
+ element = @base_xml.elements["./#{get_prefix}#{element_name}"]
194
+ if !element.nil?
195
+ # if there is no value, we set it
196
+ if element.text.nil? || element.text.empty?
197
+ element.text = new_value
198
+ # if there is a value but we are overriding, we set it
199
+ elsif override
200
+ element.text = new_value
201
+ end
202
+ else
203
+ element = REXML::Element.new("#{get_prefix}#{element_name}", @base_xml)
204
+ element.text = new_value
205
+ end
206
+ if element.text.nil?
207
+ raise StandardError, "Unable to set #{element_name} to nil"
208
+ end
209
+ if element.text.empty?
210
+ raise StandardError, "Unable to set #{element_name} to be empty"
211
+ end
212
+ return element
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,178 @@
1
+ {
2
+ "seed_file": "../in.osm",
3
+ "weather_file": null,
4
+ "root_directory": null,
5
+ "run_directory": null,
6
+ "file_paths": null,
7
+ "measure_paths": null,
8
+ "steps": [{
9
+ "measure_dir_name": "SetLightingLoadsByLPD",
10
+ "arguments": {
11
+ "__SKIP__": true
12
+ }
13
+ }, {
14
+ "measure_dir_name": "AddDaylightSensors",
15
+ "arguments": {
16
+ "__SKIP__": true
17
+ }
18
+ }, {
19
+ "measure_dir_name": "ReduceLightingLoadsByPercentage",
20
+ "arguments": {
21
+ "__SKIP__": true
22
+ }
23
+ }, {
24
+ "measure_dir_name": "tenant_star_internal_loads",
25
+ "arguments": {
26
+ "__SKIP__": true
27
+ }
28
+ }, {
29
+ "measure_dir_name": "ReduceElectricEquipmentLoadsByPercentage",
30
+ "arguments": {
31
+ "__SKIP__": true
32
+ }
33
+ }, {
34
+ "measure_dir_name": "ReduceSpaceInfiltrationByPercentage",
35
+ "arguments": {
36
+ "__SKIP__": true
37
+ }
38
+ }, {
39
+ "measure_dir_name": "IncreaseInsulationRValueForExteriorWalls",
40
+ "arguments": {
41
+ "__SKIP__": true
42
+ }
43
+ }, {
44
+ "measure_dir_name": "IncreaseInsulationRValueForExteriorWallsByPercentage",
45
+ "arguments": {
46
+ "__SKIP__": true
47
+ }
48
+ }, {
49
+ "measure_dir_name": "IncreaseInsulationRValueForRoofs",
50
+ "arguments": {
51
+ "__SKIP__": true
52
+ }
53
+ }, {
54
+ "measure_dir_name": "IncreaseInsulationRValueForRoofsByPercentage",
55
+ "arguments": {
56
+ "__SKIP__": true
57
+ }
58
+ }, {
59
+ "measure_dir_name": "replace_simple_glazing",
60
+ "arguments": {
61
+ "__SKIP__": true
62
+ }
63
+ }, {
64
+ "measure_dir_name": "improve_simple_glazing_by_percentage",
65
+ "arguments": {
66
+ "__SKIP__": true
67
+ }
68
+ }, {
69
+ "measure_dir_name": "SetGasBurnerEfficiency",
70
+ "arguments": {
71
+ "__SKIP__": true
72
+ }
73
+ }, {
74
+ "measure_dir_name": "set_boiler_thermal_efficiency",
75
+ "arguments": {
76
+ "__SKIP__": true
77
+ }
78
+ },
79
+ {
80
+ "measure_dir_name": "SetCOPforSingleSpeedDXCoolingUnits",
81
+ "arguments": {
82
+ "__SKIP__": true
83
+ }
84
+ }, {
85
+ "measure_dir_name": "SetCOPforTwoSpeedDXCoolingUnits",
86
+ "arguments": {
87
+ "__SKIP__": true
88
+ }
89
+ }, {
90
+ "measure_dir_name": "replace_hvac_with_gshp_and_doas",
91
+ "arguments": {
92
+ "__SKIP__": true
93
+ }
94
+ }, {
95
+ "measure_dir_name": "vr_fwith_doas",
96
+ "arguments": {
97
+ "__SKIP__": true
98
+ }
99
+ }, {
100
+ "measure_dir_name": "add_apszhp_to_each_zone",
101
+ "arguments": {
102
+ "__SKIP__": true
103
+ }
104
+ }, {
105
+ "measure_dir_name": "AdjustThermostatSetpointsByDegrees",
106
+ "arguments": {
107
+ "__SKIP__": true
108
+ }
109
+ }, {
110
+ "measure_dir_name": "ReplaceFanTotalEfficiency",
111
+ "arguments": {
112
+ "__SKIP__": true
113
+ }
114
+ }, {
115
+ "measure_dir_name": "ImproveFanTotalEfficiencybyPercentage",
116
+ "arguments": {
117
+ "__SKIP__": true
118
+ }
119
+ }, {
120
+ "measure_dir_name": "EnableDemandControlledVentilation",
121
+ "arguments": {
122
+ "__SKIP__": true
123
+ }
124
+ }, {
125
+ "measure_dir_name": "EnableEconomizerControl",
126
+ "arguments": {
127
+ "__SKIP__": true
128
+ }
129
+ }, {
130
+ "measure_dir_name": "add_energy_recovery_ventilator",
131
+ "arguments": {
132
+ "__SKIP__": true
133
+ }
134
+ }, {
135
+ "measure_dir_name": "set_water_heater_efficiency_heat_lossand_peak_water_flow_rate",
136
+ "arguments": {
137
+ "__SKIP__": true
138
+ }
139
+ }, {
140
+ "measure_dir_name": "reduce_water_use_by_percentage",
141
+ "arguments": {
142
+ "__SKIP__": true
143
+ }
144
+ }, {
145
+ "measure_dir_name": "tariff_selection_generic",
146
+ "arguments": {
147
+ "__SKIP__": false
148
+ }
149
+ }, {
150
+ "measure_dir_name": "openstudio_results",
151
+ "arguments": {
152
+ "__SKIP__": false,
153
+ "building_summary_section": true,
154
+ "annual_overview_section": true,
155
+ "monthly_overview_section": true,
156
+ "utility_bills_rates_section": true,
157
+ "envelope_section_section": true,
158
+ "space_type_breakdown_section": true,
159
+ "space_type_details_section": true,
160
+ "interior_lighting_section": true,
161
+ "plug_loads_section": true,
162
+ "exterior_light_section": true,
163
+ "water_use_section": true,
164
+ "hvac_load_profile": true,
165
+ "zone_condition_section": true,
166
+ "zone_summary_section": true,
167
+ "zone_equipment_detail_section": true,
168
+ "air_loops_detail_section": true,
169
+ "plant_loops_detail_section": true,
170
+ "outdoor_air_section": true,
171
+ "cost_summary_section": true,
172
+ "source_energy_section": true,
173
+ "schedules_overview_section": true,
174
+ "reg_monthly_details": true
175
+ }
176
+ }
177
+ ]
178
+ }
@@ -0,0 +1,811 @@
1
+ {
2
+ "Lighting": [{
3
+ "Retrofit with light emitting diode technologies": {
4
+ "measure_dir_name": "SetLightingLoadsByLPD",
5
+ "arguments": [{
6
+ "name": "__SKIP__",
7
+ "value": false,
8
+ "condition": ""
9
+ },
10
+ {
11
+ "name": "lpd",
12
+ "value": 0.6,
13
+ "condition": ""
14
+ }
15
+ ]
16
+ }
17
+ },
18
+ {
19
+ "Add daylight controls": {
20
+ "measure_dir_name": "AddDaylightSensors",
21
+ "arguments": [{
22
+ "name": "__SKIP__",
23
+ "value": false,
24
+ "condition": ""
25
+ },
26
+ {
27
+ "name": "space_type",
28
+ "value": "Office WholeBuilding - Sm Office -",
29
+ "condition": "SmallOffice"
30
+ },
31
+ {
32
+ "name": "space_type",
33
+ "value": "Office WholeBuilding - Md Office -",
34
+ "condition": "MediumOffice"
35
+ },
36
+ {
37
+ "name": "space_type",
38
+ "value": "Retail Retail -",
39
+ "condition": "RetailStandalone"
40
+ }
41
+ ]
42
+ }
43
+ },
44
+ {
45
+ "Add occupancy sensors": {
46
+ "measure_dir_name": "ReduceLightingLoadsByPercentage",
47
+ "arguments": [{
48
+ "name": "__SKIP__",
49
+ "value": false,
50
+ "condition": ""
51
+ },
52
+ {
53
+ "name": "lighting_power_reduction_percent",
54
+ "value": 5,
55
+ "condition": ""
56
+ }
57
+ ]
58
+ }
59
+ }
60
+ ],
61
+ "Plug Load": [{
62
+ "Replace with ENERGY STAR rated": {
63
+ "measure_dir_name": "tenant_star_internal_loads",
64
+ "arguments": [{
65
+ "name": "__SKIP__",
66
+ "value": false,
67
+ "condition": ""
68
+ },
69
+ {
70
+ "name": "epd",
71
+ "value": 0.6,
72
+ "condition": ""
73
+ }
74
+ ]
75
+ }
76
+ },
77
+ {
78
+ "Install plug load controls": {
79
+ "measure_dir_name": "ReduceElectricEquipmentLoadsByPercentage",
80
+ "arguments": [{
81
+ "name": "__SKIP__",
82
+ "value": false,
83
+ "condition": ""
84
+ },
85
+ {
86
+ "name": "elecequip_power_reduction_percent",
87
+ "value": 20.0,
88
+ "condition": ""
89
+ }
90
+ ]
91
+ }
92
+ }
93
+ ],
94
+ "Refrigeration": [{
95
+ "Replace ice/refrigeration equipment with high efficiency units": {
96
+ "measure_dir_name": "ReduceElectricEquipmentLoadsByPercentage",
97
+ "arguments": [{
98
+ "name": "__SKIP__",
99
+ "value": false,
100
+ "condition": ""
101
+ },
102
+ {
103
+ "name": "elecequip_power_reduction_percent",
104
+ "value": 5,
105
+ "condition": ""
106
+ }
107
+ ]
108
+ }
109
+ }],
110
+ "Wall": [{
111
+ "Air seal envelope": {
112
+ "measure_dir_name": "ReduceSpaceInfiltrationByPercentage",
113
+ "arguments": [{
114
+ "name": "__SKIP__",
115
+ "value": false,
116
+ "condition": ""
117
+ },
118
+ {
119
+ "name": "space_infiltration_reduction_percent",
120
+ "value": 30.0,
121
+ "condition": ""
122
+ }
123
+ ]
124
+ }
125
+ },
126
+ {
127
+ "Increase wall insulation": {
128
+ "measure_dir_name": "IncreaseInsulationRValueForExteriorWalls",
129
+ "arguments": [{
130
+ "name": "__SKIP__",
131
+ "value": false,
132
+ "condition": ""
133
+ },
134
+ {
135
+ "name": "r_value",
136
+ "value": 25,
137
+ "condition": ""
138
+ }
139
+ ]
140
+ }
141
+ },
142
+ {
143
+ "Insulate thermal bypasses": {
144
+ "measure_dir_name": "IncreaseInsulationRValueForExteriorWallsByPercentage",
145
+ "arguments": [{
146
+ "name": "__SKIP__",
147
+ "value": false,
148
+ "condition": ""
149
+ },
150
+ {
151
+ "name": "r_value",
152
+ "value": 20,
153
+ "condition": ""
154
+ }
155
+ ]
156
+ }
157
+ }
158
+ ],
159
+ "Roof": [{
160
+ "Increase roof insulation": {
161
+ "measure_dir_name": "IncreaseInsulationRValueForRoofs",
162
+ "arguments": [{
163
+ "name": "__SKIP__",
164
+ "value": false,
165
+ "condition": ""
166
+ },
167
+ {
168
+ "name": "r_value",
169
+ "value": 30,
170
+ "condition": ""
171
+ }
172
+ ]
173
+ }
174
+ }],
175
+ "Ceiling": [{
176
+ "Increase ceiling insulation": {
177
+ "measure_dir_name": "IncreaseInsulationRValueForRoofsByPercentage",
178
+ "arguments": [{
179
+ "name": "__SKIP__",
180
+ "value": false,
181
+ "condition": ""
182
+ },
183
+ {
184
+ "name": "r_value",
185
+ "value": 20,
186
+ "condition": ""
187
+ }
188
+ ]
189
+ }
190
+ }],
191
+ "Fenestration": [{
192
+ "Replace windows": {
193
+ "measure_dir_name": "replace_simple_glazing",
194
+ "arguments": [{
195
+ "name": "__SKIP__",
196
+ "value": false,
197
+ "condition": ""
198
+ },
199
+ {
200
+ "name": "u_value",
201
+ "value": 1.65,
202
+ "condition": ""
203
+ },
204
+ {
205
+ "name": "shgc",
206
+ "value": 0.2,
207
+ "condition": ""
208
+ },
209
+ {
210
+ "name": "vt",
211
+ "value": 0.81,
212
+ "condition": ""
213
+ }
214
+ ]
215
+ }
216
+ },
217
+ {
218
+ "Add window films": {
219
+ "measure_dir_name": "improve_simple_glazing_by_percentage",
220
+ "arguments": [{
221
+ "name": "__SKIP__",
222
+ "value": false,
223
+ "condition": ""
224
+ },
225
+ {
226
+ "name": "u_value_improvement_percent",
227
+ "value": 10,
228
+ "condition": ""
229
+ },
230
+ {
231
+ "name": "shgc_improvement_percent",
232
+ "value": 30,
233
+ "condition": ""
234
+ }
235
+ ]
236
+ }
237
+ }
238
+ ],
239
+ "Heating System": [{
240
+ "Replace burner": {
241
+ "measure_dir_name": "SetGasBurnerEfficiency",
242
+ "arguments": [{
243
+ "name": "__SKIP__",
244
+ "value": false,
245
+ "condition": "PSZ-AC with gas coil heat"
246
+ },
247
+ {
248
+ "name": "eff",
249
+ "value": 0.93,
250
+ "condition": "PSZ-AC with gas coil heat"
251
+ }
252
+ ]
253
+ }
254
+ },
255
+ {
256
+ "Replace boiler": {
257
+ "measure_dir_name": "set_boiler_thermal_efficiency",
258
+ "arguments": [{
259
+ "name": "__SKIP__",
260
+ "value": false,
261
+ "condition": "PVAV with reheat"
262
+ },
263
+ {
264
+ "name": "input_option_manual",
265
+ "value": true,
266
+ "condition": "PVAV with reheat"
267
+ },
268
+ {
269
+ "name": "boiler_thermal_efficiency",
270
+ "value": 0.93,
271
+ "condition": "PVAV with reheat"
272
+ }
273
+ ]
274
+ }
275
+ }
276
+ ],
277
+ "Cooling System": [{
278
+ "Replace package units": {
279
+ "measure_dir_name": "SetCOPforSingleSpeedDXCoolingUnits",
280
+ "arguments": [
281
+ {
282
+ "name": "__SKIP__",
283
+ "value": false,
284
+ "condition": "PSZ-AC with gas coil heat"
285
+ },
286
+ {
287
+ "name": "cop",
288
+ "value": 4.1,
289
+ "condition": "PSZ-AC with gas coil heat"
290
+ }
291
+ ]
292
+ }
293
+ },
294
+ {
295
+ "Replace package units": {
296
+ "measure_dir_name": "SetCOPforTwoSpeedDXCoolingUnits",
297
+ "arguments": [
298
+ {
299
+ "name": "__SKIP__",
300
+ "value": false,
301
+ "condition": "PVAV with reheat"
302
+ },
303
+ {
304
+ "name": "cop_high",
305
+ "value": 4.1,
306
+ "condition": "PVAV with reheat"
307
+ },
308
+ {
309
+ "name": "cop_low",
310
+ "value": 4.1,
311
+ "condition": "PVAV with reheat"
312
+ }
313
+ ]
314
+ }
315
+ }],
316
+ "Other HVAC": [{
317
+ "Replace HVAC system type to VRF": {
318
+ "measure_dir_name": "vr_fwith_doas",
319
+ "arguments": [{
320
+ "name": "__SKIP__",
321
+ "value": false,
322
+ "condition": ""
323
+ },
324
+ {
325
+ "name": "Office WholeBuilding - Sm Office -",
326
+ "value": true,
327
+ "condition": "SmallOffice"
328
+ },
329
+ {
330
+ "name": "Office WholeBuilding - Md Office -",
331
+ "value": true,
332
+ "condition": "MediumOffice"
333
+ },
334
+ {
335
+ "name": "Retail Retail -",
336
+ "value": true,
337
+ "condition": "RetailStandalone"
338
+ },
339
+ {
340
+ "name": "Retail Point_of_Sale -",
341
+ "value": true,
342
+ "condition": "RetailStandalone"
343
+ },
344
+ {
345
+ "name": "Retail Entry -",
346
+ "value": true,
347
+ "condition": "RetailStandalone"
348
+ },
349
+ {
350
+ "name": "Retail Back_Space -",
351
+ "value": true,
352
+ "condition": "RetailStandalone"
353
+ },
354
+ {
355
+ "name": "vrfCoolCOP",
356
+ "value": 6.0,
357
+ "condition": ""
358
+ },
359
+ {
360
+ "name": "vrfHeatCOP",
361
+ "value": 6.0,
362
+ "condition": ""
363
+ },
364
+ {
365
+ "name": "doasDXEER",
366
+ "value": 14,
367
+ "condition": ""
368
+ }
369
+ ]
370
+ }
371
+ },
372
+ {
373
+ "VRF with DOAS": {
374
+ "measure_dir_name": "vr_fwith_doas",
375
+ "arguments": [{
376
+ "name": "__SKIP__",
377
+ "value": false,
378
+ "condition": ""
379
+ },
380
+ {
381
+ "name": "Office WholeBuilding - Sm Office -",
382
+ "value": true,
383
+ "condition": "SmallOffice"
384
+ },
385
+ {
386
+ "name": "Office WholeBuilding - Md Office -",
387
+ "value": true,
388
+ "condition": "MediumOffice"
389
+ },
390
+ {
391
+ "name": "Retail Retail -",
392
+ "value": true,
393
+ "condition": "RetailStandalone"
394
+ },
395
+ {
396
+ "name": "Retail Point_of_Sale -",
397
+ "value": true,
398
+ "condition": "RetailStandalone"
399
+ },
400
+ {
401
+ "name": "Retail Entry -",
402
+ "value": true,
403
+ "condition": "RetailStandalone"
404
+ },
405
+ {
406
+ "name": "Retail Back_Space -",
407
+ "value": true,
408
+ "condition": "RetailStandalone"
409
+ },
410
+ {
411
+ "name": "vrfCoolCOP",
412
+ "value": 6.0,
413
+ "condition": ""
414
+ },
415
+ {
416
+ "name": "vrfHeatCOP",
417
+ "value": 6.0,
418
+ "condition": ""
419
+ },
420
+ {
421
+ "name": "doasDXEER",
422
+ "value": 14,
423
+ "condition": ""
424
+ }
425
+ ]
426
+ }
427
+ },
428
+ {
429
+ "Replace HVAC with GSHP and DOAS": {
430
+ "measure_dir_name": "replace_hvac_with_gshp_and_doas",
431
+ "arguments": [{
432
+ "name": "__SKIP__",
433
+ "value": false,
434
+ "condition": ""
435
+ },
436
+ {
437
+ "name": "Office WholeBuilding - Sm Office -",
438
+ "value": true,
439
+ "condition": "SmallOffice"
440
+ },
441
+ {
442
+ "name": "Office WholeBuilding - Md Office -",
443
+ "value": true,
444
+ "condition": "MediumOffice"
445
+ },
446
+ {
447
+ "name": "Office WholeBuilding - Md Office -",
448
+ "value": true,
449
+ "condition": "MediumOffice"
450
+ },
451
+ {
452
+ "name": "Retail Retail -",
453
+ "value": true,
454
+ "condition": "RetailStandalone"
455
+ },
456
+ {
457
+ "name": "Retail Point_of_Sale -",
458
+ "value": true,
459
+ "condition": "RetailStandalone"
460
+ },
461
+ {
462
+ "name": "Retail Entry -",
463
+ "value": true,
464
+ "condition": "RetailStandalone"
465
+ },
466
+ {
467
+ "name": "Retail Back_Space -",
468
+ "value": true,
469
+ "condition": "RetailStandalone"
470
+ }
471
+ ]
472
+ }
473
+ },
474
+ {
475
+ "Replace AC and heating units with ground coupled heat pump systems": {
476
+ "measure_dir_name": "replace_hvac_with_gshp_and_doas",
477
+ "arguments": [{
478
+ "name": "__SKIP__",
479
+ "value": false,
480
+ "condition": ""
481
+ },
482
+ {
483
+ "name": "Office WholeBuilding - Sm Office -",
484
+ "value": true,
485
+ "condition": "SmallOffice"
486
+ },
487
+ {
488
+ "name": "Office WholeBuilding - Md Office -",
489
+ "value": true,
490
+ "condition": "MediumOffice"
491
+ },
492
+ {
493
+ "name": "Office WholeBuilding - Md Office -",
494
+ "value": true,
495
+ "condition": "MediumOffice"
496
+ },
497
+ {
498
+ "name": "Retail Retail -",
499
+ "value": true,
500
+ "condition": "RetailStandalone"
501
+ },
502
+ {
503
+ "name": "Retail Point_of_Sale -",
504
+ "value": true,
505
+ "condition": "RetailStandalone"
506
+ },
507
+ {
508
+ "name": "Retail Entry -",
509
+ "value": true,
510
+ "condition": "RetailStandalone"
511
+ },
512
+ {
513
+ "name": "Retail Back_Space -",
514
+ "value": true,
515
+ "condition": "RetailStandalone"
516
+ }
517
+ ]
518
+ }
519
+ },
520
+ {
521
+ "Replace HVAC system type to PZHP": {
522
+ "measure_dir_name": "add_apszhp_to_each_zone",
523
+ "arguments": [{
524
+ "name": "__SKIP__",
525
+ "value": false,
526
+ "condition": ""
527
+ },
528
+ {
529
+ "name": "delete_existing",
530
+ "value": true,
531
+ "condition": ""
532
+ },
533
+ {
534
+ "name": "cop_cooling",
535
+ "value": 3.1,
536
+ "condition": ""
537
+ },
538
+ {
539
+ "name": "cop_heating",
540
+ "value": 3.1,
541
+ "condition": ""
542
+ },
543
+ {
544
+ "name": "has_electric_coil",
545
+ "value": true,
546
+ "condition": ""
547
+ },
548
+ {
549
+ "name": "has_dcv",
550
+ "value": false,
551
+ "condition": ""
552
+ },
553
+ {
554
+ "name": "fan_type",
555
+ "value": "Constant Volume (default)",
556
+ "condition": ""
557
+ },
558
+ {
559
+ "name": "fan_pressure_rise",
560
+ "value": 0,
561
+ "condition": ""
562
+ },
563
+ {
564
+ "name": "filter_type",
565
+ "value": "By Space Type",
566
+ "condition": ""
567
+ },
568
+ {
569
+ "name": "space_type",
570
+ "value": "Office WholeBuilding - Sm Office -",
571
+ "condition": "SmallOffice"
572
+ },
573
+ {
574
+ "name": "system_type",
575
+ "value": "PSZ-AC with gas coil heat",
576
+ "condition": "MediumOffice"
577
+ },
578
+ {
579
+ "name": "space_type",
580
+ "value": "Office WholeBuilding - Md Office -",
581
+ "condition": "MediumOffice"
582
+ },
583
+ {
584
+ "name": "space_type",
585
+ "value": "Retail Retail -",
586
+ "condition": "RetailStandalone"
587
+ },
588
+ {
589
+ "name": "space_type",
590
+ "value": "Retail Point_of_Sale -",
591
+ "condition": "RetailStandalone"
592
+ },
593
+ {
594
+ "name": "space_type",
595
+ "value": "Retail Entry -",
596
+ "condition": "RetailStandalone"
597
+ },
598
+ {
599
+ "name": "space_type",
600
+ "value": "Retail Back_Space -",
601
+ "condition": "RetailStandalone"
602
+ }
603
+ ]
604
+ }
605
+ }
606
+ ],
607
+ "General Controls and Operations": [{
608
+ "Upgrade operating protocols, calibration, and/or sequencing": {
609
+ "measure_dir_name": "AdjustThermostatSetpointsByDegrees",
610
+ "arguments": [{
611
+ "name": "__SKIP__",
612
+ "value": false,
613
+ "condition": ""
614
+ },
615
+ {
616
+ "name": "cooling_adjustment",
617
+ "value": 1.0,
618
+ "condition": ""
619
+ },
620
+ {
621
+ "name": "heating_adjustment",
622
+ "value": -1.0,
623
+ "condition": ""
624
+ }
625
+ ]
626
+ }
627
+ }],
628
+ "Fan": [{
629
+ "Replace with higher efficiency": {
630
+ "measure_dir_name": "ReplaceFanTotalEfficiency",
631
+ "arguments": [{
632
+ "name": "__SKIP__",
633
+ "value": false,
634
+ "condition": ""
635
+ },
636
+ {
637
+ "name": "motor_eff",
638
+ "value": 80.0,
639
+ "condition": ""
640
+ }
641
+ ]
642
+ }
643
+ }],
644
+ "Air Distribution": [{
645
+ "Improve ventilation fans": {
646
+ "measure_dir_name": "ImproveFanTotalEfficiencybyPercentage",
647
+ "arguments": [{
648
+ "name": "__SKIP__",
649
+ "value": false,
650
+ "condition": ""
651
+ },
652
+ {
653
+ "name": "motor_eff",
654
+ "value": 10.0,
655
+ "condition": ""
656
+ }
657
+ ]
658
+ }
659
+ },
660
+ {
661
+ "Install demand control ventilation": {
662
+ "measure_dir_name": "EnableDemandControlledVentilation",
663
+ "arguments": [{
664
+ "name": "__SKIP__",
665
+ "value": false,
666
+ "condition": ""
667
+ },
668
+ {
669
+ "name": "dcv_type",
670
+ "value": "EnableDCV",
671
+ "condition": ""
672
+ }
673
+ ]
674
+ }
675
+ },
676
+ {
677
+ "Add or repair economizer": {
678
+ "measure_dir_name": "EnableEconomizerControl",
679
+ "arguments": [{
680
+ "name": "__SKIP__",
681
+ "value": false,
682
+ "condition": ""
683
+ },
684
+ {
685
+ "name": "economizer_type",
686
+ "value": "FixedDryBulb",
687
+ "condition": ""
688
+ }
689
+ ]
690
+ }
691
+ }
692
+ ],
693
+ "Heat Recovery": [{
694
+ "Add energy recovery": {
695
+ "measure_dir_name": "add_energy_recovery_ventilator",
696
+ "arguments": [{
697
+ "name": "__SKIP__",
698
+ "value": false,
699
+ "condition": ""
700
+ },
701
+ {
702
+ "name": "sensible_eff_at_100_heating",
703
+ "value": 0,
704
+ "condition": ""
705
+ },
706
+ {
707
+ "name": "latent_eff_at_100_heating",
708
+ "value": 0,
709
+ "condition": ""
710
+ },
711
+ {
712
+ "name": "sensible_eff_at_75_heating",
713
+ "value": 0,
714
+ "condition": ""
715
+ },
716
+ {
717
+ "name": "latent_eff_at_75_heating",
718
+ "value": 0,
719
+ "condition": ""
720
+ },
721
+ {
722
+ "name": "sensible_eff_at_100_cooling",
723
+ "value": 1,
724
+ "condition": ""
725
+ },
726
+ {
727
+ "name": "latent_eff_at_100_cooling",
728
+ "value": 1,
729
+ "condition": ""
730
+ },
731
+ {
732
+ "name": "sensible_eff_at_75_cooling",
733
+ "value": 1,
734
+ "condition": ""
735
+ },
736
+ {
737
+ "name": "latent_eff_at_75_cooling",
738
+ "value": 1,
739
+ "condition": ""
740
+ }
741
+ ]
742
+ }
743
+ }],
744
+ "Domestic Hot Water": [{
745
+ "Replace or upgrade water heater": {
746
+ "measure_dir_name": "set_water_heater_efficiency_heat_lossand_peak_water_flow_rate",
747
+ "arguments": [{
748
+ "name": "__SKIP__",
749
+ "value": false,
750
+ "condition": ""
751
+ },
752
+ {
753
+ "name": "heater_fuel_type_widget",
754
+ "value": "NaturalGas",
755
+ "condition": ""
756
+ },
757
+ {
758
+ "name": "heater_thermal_efficiency",
759
+ "value": 0.88,
760
+ "condition": ""
761
+ }
762
+ ]
763
+ }
764
+ }, {
765
+ "Add pipe insulation": {
766
+ "measure_dir_name": "set_water_heater_efficiency_heat_lossand_peak_water_flow_rate",
767
+ "arguments": [{
768
+ "name": "__SKIP__",
769
+ "value": false,
770
+ "condition": ""
771
+ },
772
+ {
773
+ "name": "onoff_cycle_loss_coefficient_to_ambient_temperature",
774
+ "value": 0.25,
775
+ "condition": ""
776
+ }
777
+ ]
778
+ }
779
+ }, {
780
+ "Add recirculating pumps": {
781
+ "measure_dir_name": "set_water_heater_efficiency_heat_lossand_peak_water_flow_rate",
782
+ "arguments": [{
783
+ "name": "__SKIP__",
784
+ "value": false,
785
+ "condition": ""
786
+ },
787
+ {
788
+ "name": "onoff_cycle_loss_coefficient_to_ambient_temperature",
789
+ "value": 0.1,
790
+ "condition": ""
791
+ }
792
+ ]
793
+ }
794
+ }],
795
+ "Water Use": [{
796
+ "Install low-flow faucets and showerheads": {
797
+ "measure_dir_name": "reduce_water_use_by_percentage",
798
+ "arguments": [{
799
+ "name": "__SKIP__",
800
+ "value": false,
801
+ "condition": ""
802
+ },
803
+ {
804
+ "name": "water_use_reduction_percent",
805
+ "value": 50.0,
806
+ "condition": ""
807
+ }
808
+ ]
809
+ }
810
+ }]
811
+ }