honeybee-openstudio 2.6.6 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/pull_request.yaml +25 -0
  3. data/.gitignore +1 -0
  4. data/README.md +5 -5
  5. data/Rakefile +2 -7
  6. data/doc_templates/README.md.erb +42 -0
  7. data/doc_templates/copyright_erb.txt +2 -2
  8. data/doc_templates/copyright_ruby.txt +2 -2
  9. data/honeybee-openstudio.gemspec +11 -7
  10. data/lib/files/Honeybee.rb +7 -7
  11. data/lib/from_openstudio.rb +49 -0
  12. data/lib/from_openstudio/geometry/aperture.rb +136 -0
  13. data/lib/from_openstudio/geometry/door.rb +136 -0
  14. data/lib/from_openstudio/geometry/face.rb +174 -0
  15. data/lib/from_openstudio/geometry/room.rb +121 -0
  16. data/lib/from_openstudio/geometry/shade.rb +87 -0
  17. data/lib/from_openstudio/model.rb +123 -0
  18. data/lib/from_openstudio/model_object.rb +43 -0
  19. data/lib/from_openstudio/simulation/design_day.rb +123 -0
  20. data/lib/from_openstudio/simulation/parameter_model.rb +93 -0
  21. data/lib/from_openstudio/simulation/simulation_output.rb +67 -0
  22. data/lib/{from_honeybee.rb → honeybee.rb} +47 -40
  23. data/lib/{from_honeybee → honeybee}/_defaults/energy_default.json +0 -0
  24. data/lib/{from_honeybee → honeybee}/_defaults/model.json +0 -0
  25. data/lib/{from_honeybee → honeybee}/_defaults/simulation-parameter.json +1 -0
  26. data/lib/honeybee/construction/air.rb +42 -0
  27. data/lib/honeybee/construction/opaque.rb +42 -0
  28. data/lib/honeybee/construction/shade.rb +42 -0
  29. data/lib/honeybee/construction/window.rb +51 -0
  30. data/lib/honeybee/construction/windowshade.rb +43 -0
  31. data/lib/honeybee/construction_set.rb +42 -0
  32. data/lib/{from_honeybee → honeybee}/extension.rb +5 -5
  33. data/lib/honeybee/geometry/aperture.rb +42 -0
  34. data/lib/honeybee/geometry/door.rb +42 -0
  35. data/lib/honeybee/geometry/face.rb +48 -0
  36. data/lib/honeybee/geometry/room.rb +56 -0
  37. data/lib/honeybee/geometry/shade.rb +42 -0
  38. data/lib/honeybee/hvac/ideal_air.rb +42 -0
  39. data/lib/honeybee/hvac/template.rb +73 -0
  40. data/lib/honeybee/load/electric_equipment.rb +42 -0
  41. data/lib/honeybee/load/gas_equipment.rb +42 -0
  42. data/lib/honeybee/load/infiltration.rb +42 -0
  43. data/lib/{from_honeybee/simulation/extension.rb → honeybee/load/lighting.rb} +10 -13
  44. data/lib/honeybee/load/people.rb +42 -0
  45. data/lib/honeybee/load/setpoint_humidistat.rb +46 -0
  46. data/lib/honeybee/load/setpoint_thermostat.rb +46 -0
  47. data/lib/honeybee/load/ventilation.rb +42 -0
  48. data/lib/honeybee/material/opaque.rb +42 -0
  49. data/lib/honeybee/material/opaque_no_mass.rb +42 -0
  50. data/lib/honeybee/material/window_blind.rb +42 -0
  51. data/lib/honeybee/material/window_gas.rb +42 -0
  52. data/lib/honeybee/material/window_gas_custom.rb +42 -0
  53. data/lib/honeybee/material/window_gas_mixture.rb +42 -0
  54. data/lib/honeybee/material/window_glazing.rb +42 -0
  55. data/lib/honeybee/material/window_shade.rb +42 -0
  56. data/lib/honeybee/material/window_simpleglazsys.rb +42 -0
  57. data/lib/honeybee/model.rb +87 -0
  58. data/lib/{from_honeybee → honeybee}/model_object.rb +16 -18
  59. data/lib/honeybee/program_type.rb +56 -0
  60. data/lib/honeybee/schedule/fixed_interval.rb +42 -0
  61. data/lib/honeybee/schedule/ruleset.rb +42 -0
  62. data/lib/honeybee/schedule/type_limit.rb +42 -0
  63. data/lib/honeybee/simulation/design_day.rb +42 -0
  64. data/lib/honeybee/simulation/parameter_model.rb +86 -0
  65. data/lib/honeybee/simulation/simulation_output.rb +42 -0
  66. data/lib/honeybee/ventcool/control.rb +42 -0
  67. data/lib/honeybee/ventcool/opening.rb +46 -0
  68. data/lib/honeybee/ventcool/simulation.rb +42 -0
  69. data/lib/measures/from_honeybee_model/LICENSE.md +18 -22
  70. data/lib/measures/from_honeybee_model/measure.rb +4 -4
  71. data/lib/measures/from_honeybee_model/measure.xml +14 -37
  72. data/lib/measures/from_honeybee_model/tests/from_honeybee_model_test.rb +2 -2
  73. data/lib/measures/from_honeybee_simulation_parameter/LICENSE.md +18 -22
  74. data/lib/measures/from_honeybee_simulation_parameter/measure.rb +4 -4
  75. data/lib/measures/from_honeybee_simulation_parameter/measure.xml +15 -20
  76. data/lib/measures/from_honeybee_simulation_parameter/tests/from_honeybee_simulation_parameter_test.rb +3 -3
  77. data/lib/to_openstudio.rb +92 -0
  78. data/lib/{from_honeybee → to_openstudio}/construction/air.rb +7 -16
  79. data/lib/{from_honeybee → to_openstudio}/construction/opaque.rb +9 -19
  80. data/lib/{from_honeybee → to_openstudio}/construction/shade.rb +17 -26
  81. data/lib/{from_honeybee → to_openstudio}/construction/window.rb +12 -21
  82. data/lib/{from_honeybee → to_openstudio}/construction/windowshade.rb +8 -23
  83. data/lib/{from_honeybee → to_openstudio}/construction_set.rb +11 -23
  84. data/lib/{from_honeybee → to_openstudio}/geometry/aperture.rb +22 -32
  85. data/lib/{from_honeybee → to_openstudio}/geometry/door.rb +21 -31
  86. data/lib/{from_honeybee → to_openstudio}/geometry/face.rb +11 -28
  87. data/lib/{from_honeybee → to_openstudio}/geometry/room.rb +84 -91
  88. data/lib/{from_honeybee → to_openstudio}/geometry/shade.rb +8 -18
  89. data/lib/{from_honeybee → to_openstudio}/hvac/Model.hvac.rb +17 -11
  90. data/lib/{from_honeybee → to_openstudio}/hvac/ideal_air.rb +10 -19
  91. data/lib/{from_honeybee → to_openstudio}/hvac/template.rb +9 -43
  92. data/lib/{from_honeybee → to_openstudio}/load/electric_equipment.rb +12 -21
  93. data/lib/{from_honeybee → to_openstudio}/load/gas_equipment.rb +13 -22
  94. data/lib/{from_honeybee → to_openstudio}/load/infiltration.rb +14 -23
  95. data/lib/{from_honeybee → to_openstudio}/load/lighting.rb +10 -19
  96. data/lib/{from_honeybee → to_openstudio}/load/people.rb +9 -18
  97. data/lib/{from_honeybee → to_openstudio}/load/setpoint_humidistat.rb +8 -17
  98. data/lib/{from_honeybee → to_openstudio}/load/setpoint_thermostat.rb +8 -17
  99. data/lib/{from_honeybee → to_openstudio}/load/ventilation.rb +11 -20
  100. data/lib/{from_honeybee → to_openstudio}/material/opaque.rb +7 -16
  101. data/lib/{from_honeybee → to_openstudio}/material/opaque_no_mass.rb +8 -17
  102. data/lib/{from_honeybee → to_openstudio}/material/window_blind.rb +27 -36
  103. data/lib/{from_honeybee → to_openstudio}/material/window_gas.rb +8 -17
  104. data/lib/{from_honeybee → to_openstudio}/material/window_gas_custom.rb +10 -20
  105. data/lib/{from_honeybee → to_openstudio}/material/window_gas_mixture.rb +9 -18
  106. data/lib/{from_honeybee → to_openstudio}/material/window_glazing.rb +21 -30
  107. data/lib/{from_honeybee → to_openstudio}/material/window_shade.rb +17 -26
  108. data/lib/{from_honeybee → to_openstudio}/material/window_simpleglazsys.rb +7 -16
  109. data/lib/{from_honeybee → to_openstudio}/model.rb +23 -113
  110. data/lib/to_openstudio/model_object.rb +52 -0
  111. data/lib/{from_honeybee → to_openstudio}/program_type.rb +14 -34
  112. data/lib/{from_honeybee → to_openstudio}/schedule/fixed_interval.rb +11 -21
  113. data/lib/{from_honeybee → to_openstudio}/schedule/ruleset.rb +43 -44
  114. data/lib/{from_honeybee → to_openstudio}/schedule/type_limit.rb +9 -21
  115. data/lib/{from_honeybee/simulation/designday.rb → to_openstudio/simulation/design_day.rb} +7 -16
  116. data/lib/{from_honeybee/simulation/parameter.rb → to_openstudio/simulation/parameter_model.rb} +8 -57
  117. data/lib/{from_honeybee → to_openstudio}/ventcool/control.rb +8 -17
  118. data/lib/{from_honeybee → to_openstudio}/ventcool/opening.rb +8 -22
  119. data/lib/{from_honeybee → to_openstudio}/ventcool/simulation.rb +7 -16
  120. metadata +105 -134
@@ -1,7 +1,7 @@
1
1
  # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
3
  # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions are met:
7
7
  #
@@ -29,105 +29,15 @@
29
29
  # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
30
  # *******************************************************************************
31
31
 
32
- # import the core objects from which everything inherits
33
- require 'from_honeybee/extension'
34
- require 'from_honeybee/model_object'
35
-
36
- # import the compound objects that house the other objects
37
- require 'from_honeybee/construction_set'
38
- require 'from_honeybee/program_type'
39
-
40
- # import the geometry objects
41
- require 'from_honeybee/geometry/shade'
42
- require 'from_honeybee/geometry/door'
43
- require 'from_honeybee/geometry/aperture'
44
- require 'from_honeybee/geometry/face'
45
- require 'from_honeybee/geometry/room'
46
-
47
- # import the HVAC objects
48
- require 'from_honeybee/hvac/ideal_air'
49
- require 'from_honeybee/hvac/template'
50
-
51
- # import the construction objects
52
- require 'from_honeybee/construction/opaque'
53
- require 'from_honeybee/construction/window'
54
- require 'from_honeybee/construction/windowshade'
55
- require 'from_honeybee/construction/shade'
56
- require 'from_honeybee/construction/air'
57
-
58
- # import the material objects
59
- require 'from_honeybee/material/opaque'
60
- require 'from_honeybee/material/opaque_no_mass'
61
- require 'from_honeybee/material/window_gas'
62
- require 'from_honeybee/material/window_gas_mixture'
63
- require 'from_honeybee/material/window_gas_custom'
64
- require 'from_honeybee/material/window_blind'
65
- require 'from_honeybee/material/window_glazing'
66
- require 'from_honeybee/material/window_shade'
67
- require 'from_honeybee/material/window_simpleglazsys'
68
-
69
- # import the schedule objects
70
- require 'from_honeybee/schedule/type_limit'
71
- require 'from_honeybee/schedule/fixed_interval'
72
- require 'from_honeybee/schedule/ruleset'
73
-
74
- # import the load objects
75
- require 'from_honeybee/load/setpoint_thermostat'
76
- require 'from_honeybee/load/setpoint_humidistat'
77
-
78
- # import the ventilative cooling objects
79
- require 'from_honeybee/ventcool/simulation'
32
+ require 'honeybee/model'
80
33
 
81
34
  require 'openstudio'
82
35
 
83
-
84
- module FromHoneybee
36
+ module Honeybee
85
37
  class Model
86
- attr_reader :errors, :warnings
87
-
88
- # Read Ladybug Energy Model JSON from disk
89
- def self.read_from_disk(file)
90
- hash = nil
91
- File.open(File.join(file), 'r') do |f|
92
- hash = JSON.parse(f.read, symbolize_names: true)
93
- end
94
- Model.new(hash)
95
- end
96
38
 
97
- # Load ModelObject from symbolized hash
98
- def initialize(hash)
99
- # initialize class variable @@extension only once
100
- @@extension ||= Extension.new
101
- @@schema ||= @@extension.schema
102
- @@standards ||= @@extension.standards
103
-
104
- @hash = hash
105
- @type = @hash[:type]
106
- raise 'Unknown model type' if @type.nil?
107
- raise "Incorrect model type '#{@type}'" unless @type == 'Model'
108
- end
39
+ attr_reader :openstudio_model
109
40
 
110
- # check if the model is valid
111
- def valid?
112
- if Gem.loaded_specs.has_key?("json-schema")
113
- return validation_errors.empty?
114
- else
115
- return true
116
- end
117
- end
118
-
119
- # return detailed model validation errors
120
- def validation_errors
121
- if Gem.loaded_specs.has_key?("json-schema")
122
- require 'json-schema'
123
- JSON::Validator.fully_validate(@@schema, @hash)
124
- end
125
- end
126
-
127
- def defaults
128
- @@schema[:components][:schemas][:ModelEnergyProperties][:properties]
129
- end
130
-
131
41
  # convert to openstudio model, clears errors and warnings
132
42
  def to_openstudio_model(openstudio_model=nil, log_report=true)
133
43
  @errors = []
@@ -180,6 +90,16 @@ module FromHoneybee
180
90
  $interior_afn_srf_hash = Hash.new # track whether an adjacent surface is already in the AFN
181
91
 
182
92
  # create all of the non-geometric model elements
93
+ if log_report # schedules are used by all other objects and come first
94
+ puts 'Translating Schedules'
95
+ end
96
+ if @hash[:properties][:energy][:schedule_type_limits]
97
+ create_schedule_type_limits(@hash[:properties][:energy][:schedule_type_limits])
98
+ end
99
+ if @hash[:properties][:energy][:schedules]
100
+ create_schedules(@hash[:properties][:energy][:schedules])
101
+ end
102
+
183
103
  if log_report
184
104
  puts 'Translating Materials'
185
105
  end
@@ -193,7 +113,7 @@ module FromHoneybee
193
113
  if @hash[:properties][:energy][:constructions]
194
114
  create_constructions(@hash[:properties][:energy][:constructions])
195
115
  end
196
-
116
+
197
117
  if log_report
198
118
  puts 'Translating ConstructionSets'
199
119
  end
@@ -201,16 +121,6 @@ module FromHoneybee
201
121
  create_construction_sets(@hash[:properties][:energy][:construction_sets])
202
122
  end
203
123
 
204
- if log_report
205
- puts 'Translating Schedules'
206
- end
207
- if @hash[:properties][:energy][:schedule_type_limits]
208
- create_schedule_type_limits(@hash[:properties][:energy][:schedule_type_limits])
209
- end
210
- if @hash[:properties][:energy][:schedules]
211
- create_schedules(@hash[:properties][:energy][:schedules])
212
- end
213
-
214
124
  if log_report
215
125
  puts 'Translating ProgramTypes'
216
126
  end
@@ -450,7 +360,7 @@ module FromHoneybee
450
360
  @hash[:rooms].each do |room|
451
361
  room_object = Room.new(room)
452
362
  openstudio_room = room_object.to_openstudio(@openstudio_model)
453
-
363
+
454
364
  # for rooms with setpoint objects definied in the ProgramType, make a new thermostat
455
365
  if room[:properties][:energy][:program_type] && !room[:properties][:energy][:setpoint]
456
366
  thermal_zone = openstudio_room.thermalZone()
@@ -471,7 +381,7 @@ module FromHoneybee
471
381
  end
472
382
  end
473
383
  end
474
-
384
+
475
385
  # create mixing objects between Rooms
476
386
  $air_mxing_array.each do |air_mix_props|
477
387
  zone_mixing = OpenStudio::Model::ZoneMixing.new(air_mix_props[0])
@@ -549,7 +459,7 @@ module FromHoneybee
549
459
  end
550
460
  end
551
461
  end
552
- end
462
+ end
553
463
 
554
464
  def create_orphaned_shades
555
465
  if @hash[:orphaned_shades]
@@ -574,14 +484,14 @@ module FromHoneybee
574
484
  raise "Orphaned Apertures are not translatable to OpenStudio."
575
485
  end
576
486
  end
577
-
487
+
578
488
  def create_orphaned_doors
579
489
  if @hash[:orphaned_doors]
580
490
  raise "Orphaned Doors are not translatable to OpenStudio."
581
491
  end
582
492
  end
583
493
 
584
- #TODO: create runlog for errors.
585
-
494
+ #TODO: create runlog for errors.
495
+
586
496
  end # Model
587
- end # FromHoneybee
497
+ end # Honeybee
@@ -0,0 +1,52 @@
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 'honeybee/model_object'
33
+
34
+ require 'openstudio'
35
+
36
+ module Honeybee
37
+ class ModelObject
38
+
39
+ attr_reader :openstudio_object
40
+
41
+ # find an equivalent existing object in the openstudio model, return nil if not found
42
+ def find_existing_openstudio_object(openstudio_model)
43
+ raise 'find_existing_openstudio_object is not yet implemented for this ModelObject.'
44
+ end
45
+
46
+ # create a new object in the openstudio model and return it
47
+ def to_openstudio(openstudio_model)
48
+ raise 'to_openstudio is not yet implemented for this ModelObject.'
49
+ end
50
+
51
+ end # ModelObject
52
+ end # Honeybee
@@ -1,7 +1,7 @@
1
1
  # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
3
  # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions are met:
7
7
  #
@@ -29,45 +29,25 @@
29
29
  # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
30
  # *******************************************************************************
31
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
-
32
+ require 'honeybee/program_type'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class ProgramTypeAbridged
38
+
59
39
  def find_existing_openstudio_object(openstudio_model)
60
40
  model_space_type = openstudio_model.getSpaceTypeByName(@hash[:identifier])
61
41
  return model_space_type.get unless model_space_type.empty?
62
42
  nil
63
43
  end
64
-
65
- def to_openstudio(openstudio_model)
44
+
45
+ def to_openstudio(openstudio_model)
66
46
  # create openstudio space type object
67
47
  os_space_type = OpenStudio::Model::SpaceType.new(openstudio_model)
68
48
  os_space_type.setName(@hash[:identifier])
69
49
 
70
- # assign people
50
+ # assign people
71
51
  if @hash[:people]
72
52
  people = PeopleAbridged.new(@hash[:people])
73
53
  os_people = people.to_openstudio(openstudio_model)
@@ -117,8 +97,8 @@ module FromHoneybee
117
97
  os_space_type
118
98
  end
119
99
 
120
- end #ProgramTypeAbridged
121
- end #FromHoneybee
100
+ end #ProgramTypeAbridged
101
+ end #Honeybee
122
102
 
123
103
 
124
104
 
@@ -1,7 +1,7 @@
1
1
  # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
3
  # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions are met:
7
7
  #
@@ -29,29 +29,19 @@
29
29
  # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
30
  # *******************************************************************************
31
31
 
32
- require 'from_honeybee/extension'
33
- require 'from_honeybee/model_object'
34
-
35
- module FromHoneybee
36
- class ScheduleFixedIntervalAbridged < ModelObject
37
- attr_reader :errors, :warnings
32
+ require 'honeybee/schedule/fixed_interval'
38
33
 
39
- def initialize(hash = {})
40
- super(hash)
34
+ require 'to_openstudio/model_object'
41
35
 
42
- raise "Incorrect model type '#{@type}'" unless @type == 'ScheduleFixedIntervalAbridged'
43
- end
44
-
45
- def defaults
46
- @@schema[:components][:schemas][:ScheduleFixedIntervalAbridged][:properties]
47
- end
36
+ module Honeybee
37
+ class ScheduleFixedIntervalAbridged
48
38
 
49
39
  def find_existing_openstudio_object(openstudio_model)
50
40
  model_schedule = openstudio_model.getScheduleFixedIntervalByName(@hash[:identifier])
51
41
  return model_schedule.get unless model_schedule.empty?
52
42
  nil
53
43
  end
54
-
44
+
55
45
  def to_openstudio(openstudio_model)
56
46
  # create the new schedule
57
47
  os_fi_schedule = OpenStudio::Model::ScheduleFixedInterval.new(openstudio_model)
@@ -92,13 +82,13 @@ module FromHoneybee
92
82
  interval_length = 60 / timestep
93
83
  os_fi_schedule.setIntervalLength(interval_length)
94
84
  end
95
- openstudio_interval_length = OpenStudio::Time.new(0, 0, interval_length)
85
+ openstudio_interval_length = OpenStudio::Time.new(0, 0, interval_length)
96
86
 
97
87
  # assign the values as a timeseries
98
88
  year_description = openstudio_model.getYearDescription
99
89
 
100
90
  # set is leap year = true in case start date has 3 integers
101
- if @hash[:start_date][2]
91
+ if @hash[:start_date][2]
102
92
  year_description.setIsLeapYear(true)
103
93
  end
104
94
 
@@ -110,6 +100,6 @@ module FromHoneybee
110
100
 
111
101
  os_fi_schedule
112
102
  end
113
-
103
+
114
104
  end #ScheduleFixedIntervalAbridged
115
- end #FromHoneybee
105
+ end #Honeybee
@@ -1,7 +1,7 @@
1
1
  # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
3
  # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions are met:
7
7
  #
@@ -29,23 +29,12 @@
29
29
  # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
30
  # *******************************************************************************
31
31
 
32
- require 'from_honeybee/model_object'
33
-
34
- require 'openstudio'
32
+ require 'honeybee/schedule/ruleset'
35
33
 
36
- module FromHoneybee
37
- class ScheduleRulesetAbridged < ModelObject
38
- attr_reader :errors, :warnings
34
+ require 'to_openstudio/model_object'
39
35
 
40
- def initialize(hash = {})
41
- super(hash)
42
-
43
- raise "Incorrect model type '#{@type}'" unless @type == 'ScheduleRulesetAbridged'
44
- end
45
-
46
- def defaults
47
- @@schema[:components][:schemas][:ScheduleRulesetAbridged][:properties]
48
- end
36
+ module Honeybee
37
+ class ScheduleRulesetAbridged
49
38
 
50
39
  def find_existing_openstudio_object(openstudio_model)
51
40
  object = openstudio_model.getScheduleRulesetByName(@hash[:identifier])
@@ -69,24 +58,30 @@ module FromHoneybee
69
58
  end
70
59
 
71
60
  # loop through day schedules and create openstudio schedule day object
61
+ def_day_id = @hash[:default_day_schedule]
62
+ def_day_hash = nil
72
63
  @hash[:day_schedules].each do |day_schedule|
73
- day_schedule_new = OpenStudio::Model::ScheduleDay.new(openstudio_model)
74
- day_schedule_new.setName(day_schedule[:identifier])
75
- unless sch_type_limit_obj.nil?
76
- day_schedule_new.setScheduleTypeLimits(sch_type_limit_obj)
77
- end
78
- values_day_new = day_schedule[:values]
79
- times_day_new = day_schedule[:times]
80
- times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
81
- times_day_new.push([24, 0]) # Add [24, 0] at index 0
82
- values_day_new.each_index do |i|
83
- time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
84
- day_schedule_new.addValue(time_until, values_day_new[i])
64
+ if day_schedule[:identifier] != def_day_id
65
+ day_schedule_new = OpenStudio::Model::ScheduleDay.new(openstudio_model)
66
+ day_schedule_new.setName(day_schedule[:identifier])
67
+ unless sch_type_limit_obj.nil?
68
+ day_schedule_new.setScheduleTypeLimits(sch_type_limit_obj)
69
+ end
70
+ values_day_new = day_schedule[:values]
71
+ times_day_new = day_schedule[:times]
72
+ times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
73
+ times_day_new.push([24, 0]) # Add [24, 0] at index 0
74
+ values_day_new.each_index do |i|
75
+ time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
76
+ day_schedule_new.addValue(time_until, values_day_new[i])
77
+ end
78
+ else
79
+ def_day_hash = day_schedule
85
80
  end
86
81
  end
87
82
 
88
- # assign holiday schedule
89
- if @hash[:holiday_schedule]
83
+ # assign holiday schedule
84
+ if @hash[:holiday_schedule]
90
85
  holiday_schedule = openstudio_model.getScheduleDayByName(@hash[:holiday_schedule])
91
86
  unless holiday_schedule.empty?
92
87
  holiday_schedule_object = holiday_schedule.get
@@ -97,7 +92,7 @@ module FromHoneybee
97
92
  end
98
93
  end
99
94
 
100
- # assign summer design day schedule
95
+ # assign summer design day schedule
101
96
  if @hash[:summer_designday_schedule]
102
97
  summer_design_day = openstudio_model.getScheduleDayByName(@hash[:summer_designday_schedule])
103
98
  unless summer_design_day.empty?
@@ -113,22 +108,26 @@ module FromHoneybee
113
108
  winter_design_day_object = winter_design_day.get
114
109
  os_sch_ruleset.setWinterDesignDaySchedule(winter_design_day_object)
115
110
  end
116
- end
117
-
111
+ end
112
+
118
113
  # assign default day schedule
119
- default_day_schedule = openstudio_model.getScheduleDayByName(@hash[:default_day_schedule])
120
- unless default_day_schedule.empty?
121
- default_day_schedule_object = default_day_schedule.get
122
- values = default_day_schedule_object.values
123
- times = default_day_schedule_object.times
124
- values.each_index do |i|
125
- os_sch_ruleset.defaultDaySchedule.addValue(times[i], values[i])
126
- end
114
+ def_day_sch = os_sch_ruleset.defaultDaySchedule
115
+ def_day_sch.setName(def_day_id)
116
+ unless sch_type_limit_obj.nil?
117
+ def_day_sch.setScheduleTypeLimits(sch_type_limit_obj)
118
+ end
119
+ values_day_new = def_day_hash[:values]
120
+ times_day_new = def_day_hash[:times]
121
+ times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
122
+ times_day_new.push([24, 0]) # Add [24, 0] at index 0
123
+ values_day_new.each_index do |i|
124
+ time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
125
+ def_day_sch.addValue(time_until, values_day_new[i])
127
126
  end
128
127
 
129
128
  # assign schedule rules
130
129
  if @hash[:schedule_rules]
131
- @hash[:schedule_rules].each do |rule|
130
+ @hash[:schedule_rules].each do |rule|
132
131
  openstudio_schedule_rule = OpenStudio::Model::ScheduleRule.new(os_sch_ruleset)
133
132
  openstudio_schedule_rule.setApplySunday(rule[:apply_sunday])
134
133
  openstudio_schedule_rule.setApplyMonday(rule[:apply_monday])
@@ -165,4 +164,4 @@ module FromHoneybee
165
164
  end
166
165
 
167
166
  end #ScheduleRulesetAbridged
168
- end #FromHoneybee
167
+ end #Honeybee