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,98 @@
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 'uri'
40
+ require 'net/http'
41
+ require 'net/http/post/multipart'
42
+
43
+ module BuildingSync
44
+ # Class for communicating with SelectionTool
45
+ class SelectionTool
46
+ # initialize the selection tools class
47
+ # @note See documentation here: https://github.com/buildingsync/selection-tool#validator
48
+ # @note Use core Net::HTTPS
49
+ # @param xml_path [String]
50
+ def initialize(xml_path, version = '2.0.0')
51
+ @hash_response = nil
52
+ version = '2.0.0' if version.nil?
53
+ url = URI.parse('https://selectiontool.buildingsync.net/api/validate')
54
+
55
+ params = { 'schema_version' => version }
56
+ params[:file] = UploadIO.new(xml_path, 'text/xml', File.basename(xml_path))
57
+
58
+ request = Net::HTTP::Post::Multipart.new(url.path, params)
59
+ http = Net::HTTP.new(url.host, url.port)
60
+ http.use_ssl = true
61
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
62
+ response = http.request(request)
63
+
64
+ @hash_response = JSON.parse(response.read_body)
65
+ end
66
+
67
+ # validate use case
68
+ # @param use_case [String]
69
+ # @return boolean
70
+ def validate_use_case(use_case)
71
+ use_cases = @hash_response['validation_results']['use_cases']
72
+ if use_cases.key?(use_case)
73
+ if !use_cases[use_case]['valid']
74
+ use_cases[use_case]['errors'].each do |error|
75
+ puts error
76
+ end
77
+ end
78
+ return use_cases[use_case]['valid']
79
+ else
80
+ puts "BuildingSync::SelectionTool.validate_use_case, Use Case #{use_case} is not an option. The available use cases to validate against are: #{use_cases}"
81
+ return false
82
+ end
83
+ end
84
+
85
+ # validate schema
86
+ # @return boolean
87
+ def validate_schema
88
+ if !@hash_response['validation_results']['schema']['valid']
89
+ @hash_response['validation_results']['schema']['errors'].each do |error|
90
+ puts error
91
+ end
92
+ end
93
+ return @hash_response['validation_results']['schema']['valid']
94
+ end
95
+
96
+ attr_reader :hash_response
97
+ end
98
+ end
@@ -0,0 +1,85 @@
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
+ module BuildingSync
40
+ # TimeSeries class
41
+ class TimeSeries
42
+ include BuildingSync::Helper
43
+ include BuildingSync::XmlGetSet
44
+ # initialize
45
+ # @param @base_xml [REXML::Element]
46
+ # @param ns [String]
47
+ def initialize(base_xml, ns)
48
+ @base_xml = base_xml
49
+ @ns = ns
50
+ help_element_class_type_check(base_xml, 'TimeSeries')
51
+
52
+ # translates to: 2020-01-01T00:00:00
53
+ @timestamp_format = '%FT%T'
54
+ end
55
+
56
+ # Creates monthly start and end times for the element.
57
+ # @param start_date_time [DateTime] should be the zeroth second of the month, i.e. 2020-01-01T00:00:00
58
+ def set_start_and_end_timestamps_monthly(start_date_time)
59
+ xset_or_create('StartTimestamp', start_date_time.strftime(@timestamp_format))
60
+
61
+ # >>= shifts a datetime by 1 month
62
+ end_date = start_date_time >>= 1
63
+
64
+ # += shifts a datetime by 1 day. the following shifts it by negative 1 minute
65
+ end_date += - Rational(1, 24.0 * 60)
66
+
67
+ # Always sets to last minute of the month:
68
+ # 2020-01-31T23:59:00
69
+ xset_or_create('EndTimestamp', end_date.strftime(@timestamp_format))
70
+ end
71
+
72
+ # @param start_date_time [DateTime] should be the zeroth second of the month, i.e. 2020-01-01T00:00:00
73
+ # @param interval_reading_value [Numeric] the value to use for IntervalReading
74
+ # @param resource_use_id [String] the ID of the ResourceUse to point to
75
+ def set_monthly_energy_reading(start_date_time, interval_reading_value, resource_use_id)
76
+ xset_or_create('ReadingType', 'Total')
77
+ xset_or_create('TimeSeriesReadingQuantity', 'Energy')
78
+ set_start_and_end_timestamps_monthly(start_date_time)
79
+ xset_or_create('IntervalFrequency', 'Month')
80
+ xset_or_create('IntervalReading', interval_reading_value)
81
+ ru_id_element = xget_or_create('ResourceUseID')
82
+ ru_id_element.add_attribute('IDref', resource_use_id)
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,167 @@
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
+ require 'buildingsync/constants'
41
+
42
+ require_relative 'model_articulation/spatial_element'
43
+ require_relative 'makers/workflow_maker'
44
+ require_relative 'selection_tool'
45
+ require_relative 'extension'
46
+
47
+ module BuildingSync
48
+ # Translator class
49
+ class Translator < WorkflowMaker
50
+ include BuildingSync::Helper
51
+ # load the building sync file
52
+ # @param xml_file_path [String]
53
+ # @param output_dir [String]
54
+ # @param epw_file_path [String] if provided, full/path/to/my.epw
55
+ # @param standard_to_be_used [String]
56
+ # @param validate_xml_file_against_schema [Boolean]
57
+ def initialize(xml_file_path, output_dir, epw_file_path = nil, standard_to_be_used = ASHRAE90_1, validate_xml_file_against_schema = true)
58
+ @schema_version = nil
59
+ @xml_file_path = xml_file_path
60
+ @output_dir = output_dir
61
+ @standard_to_be_used = standard_to_be_used
62
+ @epw_path = epw_file_path
63
+
64
+ @results_gathered = false
65
+ @final_xml_prepared = false
66
+
67
+ # to further reduce the log messages we can change the log level with this command
68
+ # OpenStudio::Logger.instance.standardOutLogger.setLogLevel(OpenStudio::Error)
69
+ # Open a log for the library
70
+ log_file = OpenStudio::FileLogSink.new(OpenStudio::Path.new("#{output_dir}/in.log"))
71
+ log_file.setLogLevel(OpenStudio::Info)
72
+
73
+ # parse the xml
74
+ if !File.exist?(xml_file_path)
75
+ OpenStudio.logFree(OpenStudio::Error, 'BuildingSync.Translator.initialize', "File '#{xml_file_path}' does not exist")
76
+ raise "File '#{xml_file_path}' does not exist" unless File.exist?(xml_file_path)
77
+ end
78
+
79
+ doc = help_load_doc(xml_file_path)
80
+
81
+ @schema_version = doc.root.attributes['version']
82
+ if @schema_version.nil?
83
+ @schema_version = '2.0.0'
84
+ end
85
+
86
+ # test for the namespace
87
+ ns = 'auc'
88
+ doc.root.namespaces.each_pair do |k, v|
89
+ ns = k if /bedes-auc/.match(v)
90
+ end
91
+
92
+ if validate_xml_file_against_schema
93
+ validate_xml
94
+ else
95
+ OpenStudio.logFree(OpenStudio::Info, 'BuildingSync.Translator.initialize', "File '#{xml_file_path}' was not validated against the BuildingSync schema")
96
+ puts "File '#{xml_file_path}' was not validated against the BuildingSync schema"
97
+ end
98
+
99
+ super(doc, ns)
100
+ end
101
+
102
+ # Validate the xml file against the schema
103
+ # using the SelectionTool
104
+ def validate_xml
105
+ # we wil try to validate the file, but if it fails, we will not cancel the process, but log an error
106
+
107
+ selection_tool = BuildingSync::SelectionTool.new(@xml_file_path, @schema_version)
108
+ if !selection_tool.validate_schema
109
+ raise "File '#{@xml_file_path}' does not valid against the BuildingSync schema"
110
+ else
111
+ OpenStudio.logFree(OpenStudio::Info, 'BuildingSync.Translator.initialize', "File '#{@xml_file_path}' is valid against the BuildingSync schema")
112
+ puts "File '#{@xml_file_path}' is valid against the BuildingSync schema"
113
+ end
114
+ rescue StandardError
115
+ OpenStudio.logFree(OpenStudio::Error, 'BuildingSync.Translator.initialize', "File '#{@xml_file_path}' does not valid against the BuildingSync schema")
116
+ end
117
+
118
+ # @see WorkflowMaker.setup_and_sizing_run
119
+ # @param ddy_file [String]
120
+ def setup_and_sizing_run(ddy_file = nil)
121
+ super(@output_dir, @epw_path, @standard_to_be_used, ddy_file)
122
+ end
123
+
124
+ # write osws - write all workflows into osw files
125
+ def write_osws(only_cb_modeled = false)
126
+ super(@output_dir, only_cb_modeled)
127
+ end
128
+
129
+ # gather results from simulated scenarios, for all or just the baseline scenario
130
+ # @param year_val [Integer] year to use when processing monthly results as TimeSeries elements
131
+ # @param baseline_only [Boolean] whether to only process the Baseline (or current building modeled) Scenario
132
+ def gather_results(year_val = Date.today.year, baseline_only = false)
133
+ @results_gathered = true
134
+ return super(year_val, baseline_only)
135
+ end
136
+
137
+ # run osws - running all scenario simulations
138
+ # @param runner_options [hash]
139
+ def run_osws(only_cb_modeled = false, runner_options = { run_simulations: true, verbose: false, num_parallel: 7, max_to_run: Float::INFINITY })
140
+ super(@output_dir, only_cb_modeled, runner_options)
141
+ end
142
+
143
+ # write parameters to xml file
144
+ def prepare_final_xml
145
+ if @results_gathered
146
+ super
147
+ else
148
+ OpenStudio.logFree(OpenStudio::Info, 'BuildingSync.Translator.prepare_final_xml', 'All results have not yet been gathered.')
149
+ super
150
+ end
151
+ @final_xml_prepared = true
152
+ end
153
+
154
+ # save xml that includes the results
155
+ # @param file_name [String]
156
+ def save_xml(file_name = 'results.xml')
157
+ output_file = File.join(@output_dir, file_name)
158
+ if @final_xml_prepared
159
+ super(output_file)
160
+ else
161
+ puts 'Prepare final file before attempting to save (translator.prepare_final_xml)'
162
+ end
163
+ end
164
+
165
+ attr_accessor :doc, :results_gathered, :final_xml_prepared, :ns
166
+ end
167
+ end
@@ -0,0 +1,67 @@
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
+
40
+ module BuildingSync
41
+ # Utility class
42
+ class Utility
43
+ include BuildingSync::Helper
44
+ include BuildingSync::XmlGetSet
45
+ # @param base_xml [REXML::Element]
46
+ # @param ns [String]
47
+ def initialize(base_xml, ns)
48
+ @base_xml = base_xml
49
+ @ns = ns
50
+ help_element_class_type_check(base_xml, 'Utility')
51
+ end
52
+
53
+ # @return [Array<REXML::Element>]
54
+ def get_rate_schedules
55
+ rs = []
56
+ @base_xml.elements.each("#{@ns}:RateSchedules/#{@ns}:RateSchedule") do |rate_schedule|
57
+ rs << rate_schedule
58
+ end
59
+ return rs
60
+ end
61
+
62
+ # @return [Array<String>]
63
+ def get_utility_meter_numbers
64
+ return xget_plurals_text_value('UtilityMeterNumber')
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,45 @@
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
+
40
+ # BuildingSync module
41
+ # provides features for reading BldgSync XML files, generating baseline models, creating scenario workflows, running simulations and adding simulation results to the BldgSync file
42
+ module BuildingSync
43
+ # version of the BuildingSync gem
44
+ VERSION = '0.2.0'
45
+ end