honeybee-openstudio 1.8.1 → 1.8.2

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 (70) hide show
  1. checksums.yaml +5 -5
  2. data/.coveralls.yml +1 -1
  3. data/.gitignore +32 -32
  4. data/.releaserc.json +7 -7
  5. data/.travis.yml +42 -41
  6. data/Gemfile +18 -18
  7. data/LICENSE.md +23 -23
  8. data/README.md +95 -95
  9. data/Rakefile +20 -20
  10. data/doc_templates/LICENSE.md +23 -23
  11. data/doc_templates/copyright_erb.txt +31 -31
  12. data/doc_templates/copyright_js.txt +4 -4
  13. data/doc_templates/copyright_ruby.txt +29 -29
  14. data/honeybee-openstudio.gemspec +35 -35
  15. data/lib/files/Honeybee.rb +112 -112
  16. data/lib/files/honeybee_workflow.osw +47 -47
  17. data/lib/files/urbanopt_Gemfile +32 -32
  18. data/lib/from_honeybee.rb +86 -86
  19. data/lib/from_honeybee/_openapi/model.json +8126 -8126
  20. data/lib/from_honeybee/_openapi/simulation-parameter.json +842 -842
  21. data/lib/from_honeybee/construction/air.rb +64 -64
  22. data/lib/from_honeybee/construction/opaque.rb +76 -76
  23. data/lib/from_honeybee/construction/shade.rb +107 -107
  24. data/lib/from_honeybee/construction/window.rb +80 -80
  25. data/lib/from_honeybee/construction_set.rb +278 -278
  26. data/lib/from_honeybee/extension.rb +109 -109
  27. data/lib/from_honeybee/geometry/aperture.rb +167 -167
  28. data/lib/from_honeybee/geometry/door.rb +160 -160
  29. data/lib/from_honeybee/geometry/face.rb +163 -163
  30. data/lib/from_honeybee/geometry/room.rb +392 -392
  31. data/lib/from_honeybee/geometry/shade.rb +89 -89
  32. data/lib/from_honeybee/hvac/ideal_air.rb +150 -150
  33. data/lib/from_honeybee/load/electric_equipment.rb +95 -95
  34. data/lib/from_honeybee/load/gas_equipment.rb +97 -97
  35. data/lib/from_honeybee/load/infiltration.rb +94 -94
  36. data/lib/from_honeybee/load/lighting.rb +98 -98
  37. data/lib/from_honeybee/load/people.rb +99 -99
  38. data/lib/from_honeybee/load/setpoint_humidistat.rb +74 -74
  39. data/lib/from_honeybee/load/setpoint_thermostat.rb +71 -71
  40. data/lib/from_honeybee/load/ventilation.rb +95 -95
  41. data/lib/from_honeybee/material/opaque.rb +94 -94
  42. data/lib/from_honeybee/material/opaque_no_mass.rb +94 -94
  43. data/lib/from_honeybee/material/window_blind.rb +238 -238
  44. data/lib/from_honeybee/material/window_gas.rb +76 -76
  45. data/lib/from_honeybee/material/window_gas_custom.rb +118 -118
  46. data/lib/from_honeybee/material/window_gas_mixture.rb +79 -79
  47. data/lib/from_honeybee/material/window_glazing.rb +166 -166
  48. data/lib/from_honeybee/material/window_shade.rb +160 -160
  49. data/lib/from_honeybee/material/window_simpleglazsys.rb +73 -73
  50. data/lib/from_honeybee/model.rb +434 -434
  51. data/lib/from_honeybee/model_object.rb +110 -110
  52. data/lib/from_honeybee/program_type.rb +124 -124
  53. data/lib/from_honeybee/schedule/fixed_interval.rb +115 -115
  54. data/lib/from_honeybee/schedule/ruleset.rb +164 -164
  55. data/lib/from_honeybee/schedule/type_limit.rb +88 -88
  56. data/lib/from_honeybee/simulation/designday.rb +105 -105
  57. data/lib/from_honeybee/simulation/extension.rb +46 -46
  58. data/lib/from_honeybee/simulation/parameter.rb +277 -277
  59. data/lib/from_honeybee/version.rb +34 -34
  60. data/lib/measures/from_honeybee_model/LICENSE.md +26 -26
  61. data/lib/measures/from_honeybee_model/README.md +32 -32
  62. data/lib/measures/from_honeybee_model/measure.rb +91 -91
  63. data/lib/measures/from_honeybee_model/measure.xml +103 -103
  64. data/lib/measures/from_honeybee_model/tests/from_honeybee_model_test.rb +126 -126
  65. data/lib/measures/from_honeybee_simulation_parameter/LICENSE.md +26 -26
  66. data/lib/measures/from_honeybee_simulation_parameter/README.md +32 -32
  67. data/lib/measures/from_honeybee_simulation_parameter/measure.rb +95 -95
  68. data/lib/measures/from_honeybee_simulation_parameter/measure.xml +91 -91
  69. data/lib/measures/from_honeybee_simulation_parameter/tests/from_honeybee_simulation_parameter_test.rb +109 -109
  70. metadata +2 -2
@@ -1,110 +1,110 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- require 'openstudio'
33
-
34
- module FromHoneybee
35
- class ModelObject
36
- # Base class from which all other ojbects in this module inherit.
37
- # Attributes and methods of this class should be overwritten in each inheriting object.
38
-
39
- attr_reader :errors, :warnings
40
-
41
- def method_missing(sym, *args)
42
- name = sym.to_s
43
- aname = name.sub('=', '')
44
- asym = aname.to_sym
45
- is_getter = args.empty? && @hash.key?(asym)
46
- is_setter = (name != aname) && (args.size == 1) && @hash.key?(asym)
47
-
48
- if is_getter
49
- return @hash[asym]
50
- elsif is_setter
51
- return @hash[asym] = args[0]
52
- end
53
-
54
- # do the regular thing
55
- super
56
- end
57
-
58
- # Read ModelObject JSON from disk
59
- def self.read_from_disk(file)
60
- hash = nil
61
- File.open(File.join(file), 'r') do |f|
62
- hash = JSON.parse(f.read, symbolize_names: true)
63
- end
64
- new(hash)
65
- end
66
-
67
- # Load ModelObject from symbolized hash
68
- def initialize(hash)
69
- # initialize class variable @@extension only once
70
- @@extension ||= Extension.new
71
- @@schema ||= @@extension.schema
72
-
73
- @hash = hash
74
- @type = @hash[:type]
75
- raise 'Unknown type' if @type.nil?
76
- raise "Incorrect model type '#{@type}'" unless @type == @hash[:type]
77
- @openstudio_object = nil
78
- end
79
-
80
- # hash containing the object defaults taken from the open API schema
81
- def defaults
82
- raise 'defaults not implemented for ModelObject, override in your class'
83
- end
84
-
85
- # check if the ModelObject is valid
86
- def valid?
87
- return validation_errors.empty?
88
- end
89
-
90
- # return detailed model validation errors
91
- def validation_errors
92
- if Gem.loaded_specs.has_key?("json-schema")
93
- require 'json-schema'
94
- # if this raises a 'Invalid fragment resolution for :fragment option' it is because @type
95
- # does not correspond to a definition in the schema
96
- JSON::Validator.fully_validate(@@schema, @hash, :fragment => "#/definitions/#{@type}")
97
- end
98
- end
99
-
100
- # find an equivalent existing object in the openstudio model, return nil if not found
101
- def find_existing_openstudio_object(openstudio_model)
102
- raise 'find_existing_openstudio_object is not yet implemented for this ModelObject.'
103
- end
104
-
105
- # create a new object in the openstudio model and return it
106
- def to_openstudio(openstudio_model)
107
- raise 'to_openstudio is not yet implemented for this ModelObject.'
108
- end
109
- end # ModelObject
110
- end # FromHoneybee
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'openstudio'
33
+
34
+ module FromHoneybee
35
+ class ModelObject
36
+ # Base class from which all other ojbects in this module inherit.
37
+ # Attributes and methods of this class should be overwritten in each inheriting object.
38
+
39
+ attr_reader :errors, :warnings
40
+
41
+ def method_missing(sym, *args)
42
+ name = sym.to_s
43
+ aname = name.sub('=', '')
44
+ asym = aname.to_sym
45
+ is_getter = args.empty? && @hash.key?(asym)
46
+ is_setter = (name != aname) && (args.size == 1) && @hash.key?(asym)
47
+
48
+ if is_getter
49
+ return @hash[asym]
50
+ elsif is_setter
51
+ return @hash[asym] = args[0]
52
+ end
53
+
54
+ # do the regular thing
55
+ super
56
+ end
57
+
58
+ # Read ModelObject JSON from disk
59
+ def self.read_from_disk(file)
60
+ hash = nil
61
+ File.open(File.join(file), 'r') do |f|
62
+ hash = JSON.parse(f.read, symbolize_names: true)
63
+ end
64
+ new(hash)
65
+ end
66
+
67
+ # Load ModelObject from symbolized hash
68
+ def initialize(hash)
69
+ # initialize class variable @@extension only once
70
+ @@extension ||= Extension.new
71
+ @@schema ||= @@extension.schema
72
+
73
+ @hash = hash
74
+ @type = @hash[:type]
75
+ raise 'Unknown type' if @type.nil?
76
+ raise "Incorrect model type '#{@type}'" unless @type == @hash[:type]
77
+ @openstudio_object = nil
78
+ end
79
+
80
+ # hash containing the object defaults taken from the open API schema
81
+ def defaults
82
+ raise 'defaults not implemented for ModelObject, override in your class'
83
+ end
84
+
85
+ # check if the ModelObject is valid
86
+ def valid?
87
+ return validation_errors.empty?
88
+ end
89
+
90
+ # return detailed model validation errors
91
+ def validation_errors
92
+ if Gem.loaded_specs.has_key?("json-schema")
93
+ require 'json-schema'
94
+ # if this raises a 'Invalid fragment resolution for :fragment option' it is because @type
95
+ # does not correspond to a definition in the schema
96
+ JSON::Validator.fully_validate(@@schema, @hash, :fragment => "#/definitions/#{@type}")
97
+ end
98
+ end
99
+
100
+ # find an equivalent existing object in the openstudio model, return nil if not found
101
+ def find_existing_openstudio_object(openstudio_model)
102
+ raise 'find_existing_openstudio_object is not yet implemented for this ModelObject.'
103
+ end
104
+
105
+ # create a new object in the openstudio model and return it
106
+ def to_openstudio(openstudio_model)
107
+ raise 'to_openstudio is not yet implemented for this ModelObject.'
108
+ end
109
+ end # ModelObject
110
+ end # FromHoneybee
@@ -1,124 +1,124 @@
1
- # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
- # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # (1) Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- #
11
- # (2) Redistributions in binary form must reproduce the above copyright notice,
12
- # this list of conditions and the following disclaimer in the documentation
13
- # and/or other materials provided with the distribution.
14
- #
15
- # (3) Neither the name of the copyright holder nor the names of any contributors
16
- # may be used to endorse or promote products derived from this software without
17
- # specific prior written permission from the respective party.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- # *******************************************************************************
31
-
32
- require 'from_honeybee/extension'
33
- require 'from_honeybee/model_object'
34
- require 'from_honeybee/load/people'
35
- require 'from_honeybee/load/lighting'
36
- require 'from_honeybee/load/electric_equipment'
37
- require 'from_honeybee/load/gas_equipment'
38
- require 'from_honeybee/load/infiltration'
39
- require 'from_honeybee/load/ventilation'
40
- require 'from_honeybee/load/setpoint_thermostat'
41
- require 'from_honeybee/load/setpoint_humidistat'
42
-
43
- require 'openstudio'
44
-
45
- module FromHoneybee
46
- class ProgramTypeAbridged < ModelObject
47
- attr_reader :errors, :warnings
48
-
49
- def initialize(hash = {})
50
- super(hash)
51
-
52
- raise "Incorrect model type '#{@type}'" unless @type == 'ProgramTypeAbridged'
53
- end
54
-
55
- def defaults
56
- @@schema[:components][:schemas][:ProgramTypeAbridged][:properties]
57
- end
58
-
59
- def find_existing_openstudio_object(openstudio_model)
60
- model_space_type = openstudio_model.getSpaceTypeByName(@hash[:identifier])
61
- return model_space_type.get unless model_space_type.empty?
62
- nil
63
- end
64
-
65
- def to_openstudio(openstudio_model)
66
- # create openstudio space type object
67
- os_space_type = OpenStudio::Model::SpaceType.new(openstudio_model)
68
- os_space_type.setName(@hash[:identifier])
69
-
70
- # assign people
71
- if @hash[:people]
72
- people = PeopleAbridged.new(@hash[:people])
73
- os_people = people.to_openstudio(openstudio_model)
74
- os_people.setSpaceType(os_space_type)
75
- end
76
-
77
- # assign lighting
78
- if @hash[:lighting]
79
- lights = LightingAbridged.new(@hash[:lighting])
80
- os_lights = lights.to_openstudio(openstudio_model)
81
- os_lights.setSpaceType(os_space_type)
82
- end
83
-
84
- # assign electric equipment
85
- if @hash[:electric_equipment]
86
- electric_equipment = ElectricEquipmentAbridged.new(@hash[:electric_equipment])
87
- os_electric_equipment = electric_equipment.to_openstudio(openstudio_model)
88
- os_electric_equipment.setSpaceType(os_space_type)
89
- end
90
-
91
- # assign gas equipment
92
- if @hash[:gas_equipment]
93
- gas_equipment = GasEquipmentAbridged.new(@hash[:gas_equipment])
94
- os_gas_equipment = gas_equipment.to_openstudio(openstudio_model)
95
- os_gas_equipment.setSpaceType(os_space_type)
96
- end
97
-
98
- # assign infiltration
99
- if @hash[:infiltration]
100
- infiltration = InfiltrationAbridged.new(@hash[:infiltration])
101
- os_infiltration = infiltration.to_openstudio(openstudio_model)
102
- os_infiltration.setSpaceType(os_space_type)
103
- end
104
-
105
- # assign ventilation
106
- if @hash[:ventilation]
107
- ventilation = VentilationAbridged.new(@hash[:ventilation])
108
- os_ventilation = ventilation.to_openstudio(openstudio_model)
109
- os_space_type.setDesignSpecificationOutdoorAir(os_ventilation)
110
- end
111
-
112
- # add setpoints from to a global hash that will be used to assign them to rooms
113
- if @hash[:setpoint]
114
- $programtype_setpoint_hash[@hash[:identifier]] = @hash[:setpoint]
115
- end
116
-
117
- os_space_type
118
- end
119
-
120
- end #ProgramTypeAbridged
121
- end #FromHoneybee
122
-
123
-
124
-
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'from_honeybee/extension'
33
+ require 'from_honeybee/model_object'
34
+ require 'from_honeybee/load/people'
35
+ require 'from_honeybee/load/lighting'
36
+ require 'from_honeybee/load/electric_equipment'
37
+ require 'from_honeybee/load/gas_equipment'
38
+ require 'from_honeybee/load/infiltration'
39
+ require 'from_honeybee/load/ventilation'
40
+ require 'from_honeybee/load/setpoint_thermostat'
41
+ require 'from_honeybee/load/setpoint_humidistat'
42
+
43
+ require 'openstudio'
44
+
45
+ module FromHoneybee
46
+ class ProgramTypeAbridged < ModelObject
47
+ attr_reader :errors, :warnings
48
+
49
+ def initialize(hash = {})
50
+ super(hash)
51
+
52
+ raise "Incorrect model type '#{@type}'" unless @type == 'ProgramTypeAbridged'
53
+ end
54
+
55
+ def defaults
56
+ @@schema[:components][:schemas][:ProgramTypeAbridged][:properties]
57
+ end
58
+
59
+ def find_existing_openstudio_object(openstudio_model)
60
+ model_space_type = openstudio_model.getSpaceTypeByName(@hash[:identifier])
61
+ return model_space_type.get unless model_space_type.empty?
62
+ nil
63
+ end
64
+
65
+ def to_openstudio(openstudio_model)
66
+ # create openstudio space type object
67
+ os_space_type = OpenStudio::Model::SpaceType.new(openstudio_model)
68
+ os_space_type.setName(@hash[:identifier])
69
+
70
+ # assign people
71
+ if @hash[:people]
72
+ people = PeopleAbridged.new(@hash[:people])
73
+ os_people = people.to_openstudio(openstudio_model)
74
+ os_people.setSpaceType(os_space_type)
75
+ end
76
+
77
+ # assign lighting
78
+ if @hash[:lighting]
79
+ lights = LightingAbridged.new(@hash[:lighting])
80
+ os_lights = lights.to_openstudio(openstudio_model)
81
+ os_lights.setSpaceType(os_space_type)
82
+ end
83
+
84
+ # assign electric equipment
85
+ if @hash[:electric_equipment]
86
+ electric_equipment = ElectricEquipmentAbridged.new(@hash[:electric_equipment])
87
+ os_electric_equipment = electric_equipment.to_openstudio(openstudio_model)
88
+ os_electric_equipment.setSpaceType(os_space_type)
89
+ end
90
+
91
+ # assign gas equipment
92
+ if @hash[:gas_equipment]
93
+ gas_equipment = GasEquipmentAbridged.new(@hash[:gas_equipment])
94
+ os_gas_equipment = gas_equipment.to_openstudio(openstudio_model)
95
+ os_gas_equipment.setSpaceType(os_space_type)
96
+ end
97
+
98
+ # assign infiltration
99
+ if @hash[:infiltration]
100
+ infiltration = InfiltrationAbridged.new(@hash[:infiltration])
101
+ os_infiltration = infiltration.to_openstudio(openstudio_model)
102
+ os_infiltration.setSpaceType(os_space_type)
103
+ end
104
+
105
+ # assign ventilation
106
+ if @hash[:ventilation]
107
+ ventilation = VentilationAbridged.new(@hash[:ventilation])
108
+ os_ventilation = ventilation.to_openstudio(openstudio_model)
109
+ os_space_type.setDesignSpecificationOutdoorAir(os_ventilation)
110
+ end
111
+
112
+ # add setpoints from to a global hash that will be used to assign them to rooms
113
+ if @hash[:setpoint]
114
+ $programtype_setpoint_hash[@hash[:identifier]] = @hash[:setpoint]
115
+ end
116
+
117
+ os_space_type
118
+ end
119
+
120
+ end #ProgramTypeAbridged
121
+ end #FromHoneybee
122
+
123
+
124
+