buildingsync 0.2.0

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.
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
+ }