honeybee-openstudio 1.8.3 → 2.1.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.
@@ -50,6 +50,7 @@ require 'from_honeybee/hvac/ideal_air'
50
50
  # import the construction objects
51
51
  require 'from_honeybee/construction/opaque'
52
52
  require 'from_honeybee/construction/window'
53
+ require 'from_honeybee/construction/windowshade'
53
54
  require 'from_honeybee/construction/shade'
54
55
  require 'from_honeybee/construction/air'
55
56
 
@@ -184,12 +185,23 @@ module FromHoneybee
184
185
  end
185
186
  create_program_types
186
187
 
187
- # create all of the model geometry
188
188
  if log_report
189
189
  puts 'Translating Room Geometry'
190
190
  end
191
191
  create_rooms
192
192
 
193
+ unless $window_shade_hash.empty?
194
+ if log_report
195
+ puts 'Translating Window Shading Control'
196
+ end
197
+ create_shading_control
198
+ end
199
+
200
+ if log_report
201
+ puts 'Translating HVAC Systems'
202
+ end
203
+ create_hvacs
204
+
193
205
  if log_report
194
206
  puts 'Translating Context Shade Geometry'
195
207
  end
@@ -197,15 +209,11 @@ module FromHoneybee
197
209
  create_orphaned_faces
198
210
  create_orphaned_apertures
199
211
  create_orphaned_doors
200
-
201
- # create the hvac systems
202
- if log_report
203
- puts 'Translating HVAC Systems'
204
- end
205
- create_hvacs
206
212
  end
207
213
 
208
214
  def create_materials
215
+ $gas_gap_hash = Hash.new # hash to track gas gaps in case they are split by shades
216
+
209
217
  @hash[:properties][:energy][:materials].each do |material|
210
218
  material_type = material[:type]
211
219
 
@@ -216,8 +224,13 @@ module FromHoneybee
216
224
  material_object = EnergyMaterialNoMass.new(material)
217
225
  when 'EnergyWindowMaterialGas'
218
226
  material_object = EnergyWindowMaterialGas.new(material)
227
+ $gas_gap_hash[material[:identifier]] = material_object
228
+ when 'EnergyWindowMaterialGasMixture'
229
+ material_object = EnergyWindowMaterialGasMixture.new(material)
230
+ $gas_gap_hash[material[:identifier]] = material_object
219
231
  when 'EnergyWindowMaterialGasCustom'
220
232
  material_object = EnergyWindowMaterialGasCustom.new(material)
233
+ $gas_gap_hash[material[:identifier]] = material_object
221
234
  when 'EnergyWindowMaterialSimpleGlazSys'
222
235
  material_object = EnergyWindowMaterialSimpleGlazSys.new(material)
223
236
  when 'EnergyWindowMaterialBlind'
@@ -235,6 +248,7 @@ module FromHoneybee
235
248
 
236
249
  def create_constructions
237
250
  $air_boundary_hash = Hash.new # hash to track any air boundary constructions
251
+ $window_shade_hash = Hash.new # hash to track any window constructions with shade
238
252
 
239
253
  @hash[:properties][:energy][:constructions].each do |construction|
240
254
  identifier = construction[:identifier]
@@ -245,6 +259,9 @@ module FromHoneybee
245
259
  construction_object = OpaqueConstructionAbridged.new(construction)
246
260
  when 'WindowConstructionAbridged'
247
261
  construction_object = WindowConstructionAbridged.new(construction)
262
+ when 'WindowConstructionShadeAbridged'
263
+ construction_object = WindowConstructionShadeAbridged.new(construction)
264
+ $window_shade_hash[construction[:identifier]] = construction_object
248
265
  when 'ShadeConstruction'
249
266
  construction_object = ShadeConstruction.new(construction)
250
267
  when 'AirBoundaryConstructionAbridged'
@@ -344,7 +361,7 @@ module FromHoneybee
344
361
  end
345
362
  end
346
363
 
347
- # Create mixing objects between Rooms
364
+ # create mixing objects between Rooms
348
365
  $air_mxing_array.each do |air_mix_props|
349
366
  zone_mixing = OpenStudio::Model::ZoneMixing.new(air_mix_props[0])
350
367
  zone_mixing.setDesignFlowRate(air_mix_props[1])
@@ -361,35 +378,25 @@ module FromHoneybee
361
378
  end
362
379
  end
363
380
  end
364
-
365
-
366
- def create_orphaned_shades
367
- if @hash[:orphaned_shades]
368
- shading_surface_group = OpenStudio::Model::ShadingSurfaceGroup.new(@openstudio_model)
369
- shading_surface_group.setShadingSurfaceType('Building')
370
- @hash[:orphaned_shades].each do |shade|
371
- shade_object = Shade.new(shade)
372
- openstudio_shade = shade_object.to_openstudio(@openstudio_model)
373
- openstudio_shade.setShadingSurfaceGroup(shading_surface_group)
374
- end
375
- end
376
- end
377
381
 
378
- def create_orphaned_faces
379
- if @hash[:orphaned_faces]
380
- raise "Orphaned Faces are not translatable to OpenStudio."
381
- end
382
- end
383
-
384
- def create_orphaned_apertures
385
- if @hash[:orphaned_apertures]
386
- raise "Orphaned Apertures are not translatable to OpenStudio."
387
- end
388
- end
389
-
390
- def create_orphaned_doors
391
- if @hash[:orphaned_doors]
392
- raise "Orphaned Doors are not translatable to OpenStudio."
382
+ def create_shading_control
383
+ # assign any shading control objects to windows with shades
384
+ # this is run as a separate step once all logic about construction sets is in place
385
+ sub_faces = @openstudio_model.getSubSurfaces()
386
+ sub_faces.each do |sub_face|
387
+ constr_ref = sub_face.construction
388
+ unless constr_ref.empty?
389
+ constr = constr_ref.get
390
+ constr_name_ref = constr.name
391
+ unless constr_name_ref.empty?
392
+ constr_name = constr_name_ref.get
393
+ unless $window_shade_hash[constr_name].nil?
394
+ window_shd_constr = $window_shade_hash[constr_name]
395
+ os_shd_control = window_shd_constr.to_openstudio_shading_control(@openstudio_model)
396
+ sub_face.setShadingControl(os_shd_control)
397
+ end
398
+ end
399
+ end
393
400
  end
394
401
  end
395
402
 
@@ -428,6 +435,36 @@ module FromHoneybee
428
435
  end
429
436
  end
430
437
 
438
+ def create_orphaned_shades
439
+ if @hash[:orphaned_shades]
440
+ shading_surface_group = OpenStudio::Model::ShadingSurfaceGroup.new(@openstudio_model)
441
+ shading_surface_group.setShadingSurfaceType('Building')
442
+ @hash[:orphaned_shades].each do |shade|
443
+ shade_object = Shade.new(shade)
444
+ openstudio_shade = shade_object.to_openstudio(@openstudio_model)
445
+ openstudio_shade.setShadingSurfaceGroup(shading_surface_group)
446
+ end
447
+ end
448
+ end
449
+
450
+ def create_orphaned_faces
451
+ if @hash[:orphaned_faces]
452
+ raise "Orphaned Faces are not translatable to OpenStudio."
453
+ end
454
+ end
455
+
456
+ def create_orphaned_apertures
457
+ if @hash[:orphaned_apertures]
458
+ raise "Orphaned Apertures are not translatable to OpenStudio."
459
+ end
460
+ end
461
+
462
+ def create_orphaned_doors
463
+ if @hash[:orphaned_doors]
464
+ raise "Orphaned Doors are not translatable to OpenStudio."
465
+ end
466
+ end
467
+
431
468
  #TODO: create runlog for errors.
432
469
 
433
470
  end # Model
@@ -58,10 +58,23 @@ module FromHoneybee
58
58
  os_sch_ruleset = OpenStudio::Model::ScheduleRuleset.new(openstudio_model)
59
59
  os_sch_ruleset.setName(@hash[:identifier])
60
60
 
61
+ # assign schedule type limit
62
+ sch_type_limit_obj = nil
63
+ if @hash[:schedule_type_limit]
64
+ schedule_type_limit = openstudio_model.getScheduleTypeLimitsByName(@hash[:schedule_type_limit])
65
+ unless schedule_type_limit.empty?
66
+ sch_type_limit_obj = schedule_type_limit.get
67
+ os_sch_ruleset.setScheduleTypeLimits(sch_type_limit_obj)
68
+ end
69
+ end
70
+
61
71
  # loop through day schedules and create openstudio schedule day object
62
72
  @hash[:day_schedules].each do |day_schedule|
63
73
  day_schedule_new = OpenStudio::Model::ScheduleDay.new(openstudio_model)
64
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
65
78
  values_day_new = day_schedule[:values]
66
79
  times_day_new = day_schedule[:times]
67
80
  times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
@@ -78,8 +91,8 @@ module FromHoneybee
78
91
  unless holiday_schedule.empty?
79
92
  holiday_schedule_object = holiday_schedule.get
80
93
  begin
81
- os_sch_ruleset.setHolidaySchedule(holiday_schedule_object)
82
- rescue NoMethodError
94
+ os_sch_ruleset.setHolidaySchedule(holiday_schedule_object)
95
+ rescue NoMethodError # REMOVE: Once the upgrade to OpenStudio 3.0 is official
83
96
  end
84
97
  end
85
98
  end
@@ -112,15 +125,6 @@ module FromHoneybee
112
125
  os_sch_ruleset.defaultDaySchedule.addValue(times[i], values[i])
113
126
  end
114
127
  end
115
-
116
- # assign schedule type limit
117
- if @hash[:schedule_type_limit]
118
- schedule_type_limit = openstudio_model.getScheduleTypeLimitsByName(@hash[:schedule_type_limit])
119
- unless schedule_type_limit.empty?
120
- schedule_type_limit_object = schedule_type_limit.get
121
- os_sch_ruleset.setScheduleTypeLimits(schedule_type_limit_object)
122
- end
123
- end
124
128
 
125
129
  # assign schedule rules
126
130
  if @hash[:schedule_rules]
@@ -147,23 +147,62 @@ module FromHoneybee
147
147
 
148
148
  # set defaults for the Model's ShadowCalculation object
149
149
  os_shadow_calc = @openstudio_model.getShadowCalculation
150
- os_shadow_calc.setCalculationFrequency(shdw_defaults[:calculation_frequency][:default])
151
- os_shadow_calc.setMaximumFiguresInShadowOverlapCalculations(shdw_defaults[:maximum_figures][:default])
152
- os_shadow_calc.setCalculationMethod(shdw_defaults[:calculation_method][:default])
150
+ begin
151
+ os_shadow_calc.setShadingCalculationMethod(
152
+ shdw_defaults[:calculation_method][:default])
153
+ rescue NoMethodError # REMOVE: Once the upgrade to OpenStudio 3.0 is official
154
+ os_shadow_calc.setCalculationMethod(
155
+ shdw_defaults[:calculation_method][:default])
156
+ end
157
+ begin
158
+ os_shadow_calc.setShadingCalculationUpdateFrequencyMethod(
159
+ shdw_defaults[:calculation_update_method][:default])
160
+ rescue # REMOVE: Once the upgrade to OpenStudio 3.0 is official
161
+ end
162
+ begin
163
+ os_shadow_calc.setShadingCalculationUpdateFrequency(
164
+ shdw_defaults[:calculation_frequency][:default])
165
+ rescue NoMethodError # REMOVE: Once the upgrade to OpenStudio 3.0 is official
166
+ os_shadow_calc.setCalculationFrequency(
167
+ shdw_defaults[:calculation_frequency][:default])
168
+ end
169
+ os_shadow_calc.setMaximumFiguresInShadowOverlapCalculations(
170
+ shdw_defaults[:maximum_figures][:default])
153
171
 
154
172
  # override any ShadowCalculation defaults with lodaded JSON
155
173
  if @hash[:shadow_calculation]
174
+ if @hash[:shadow_calculation][:calculation_method]
175
+ begin
176
+ os_shadow_calc.setShadingCalculationMethod(
177
+ @hash[:shadow_calculation][:calculation_method])
178
+ rescue NoMethodError # REMOVE: Once the upgrade to OpenStudio 3.0 is official
179
+ os_shadow_calc.setCalculationMethod(
180
+ @hash[:shadow_calculation][:calculation_method])
181
+ end
182
+ end
183
+ if @hash[:shadow_calculation][:calculation_update_method]
184
+ begin
185
+ os_shadow_calc.setShadingCalculationUpdateFrequencyMethod(
186
+ @hash[:shadow_calculation][:calculation_update_method])
187
+ rescue # REMOVE: Once the upgrade to OpenStudio 3.0 is official
188
+ end
189
+ end
156
190
  if @hash[:shadow_calculation][:calculation_frequency]
157
- os_shadow_calc.setCalculationFrequency(@hash[:shadow_calculation][:calculation_frequency])
191
+ begin
192
+ os_shadow_calc.setShadingCalculationUpdateFrequency(
193
+ @hash[:shadow_calculation][:calculation_frequency])
194
+ rescue NoMethodError # REMOVE: Once the upgrade to OpenStudio 3.0 is official
195
+ os_shadow_calc.setCalculationFrequency(
196
+ @hash[:shadow_calculation][:calculation_frequency])
197
+ end
158
198
  end
159
199
  if @hash[:shadow_calculation][:maximum_figures]
160
- os_shadow_calc.setMaximumFiguresInShadowOverlapCalculations(@hash[:shadow_calculation][:maximum_figures])
161
- end
162
- if @hash[:shadow_calculation][:calculation_method]
163
- os_shadow_calc.setCalculationMethod(@hash[:shadow_calculation][:calculation_method])
200
+ os_shadow_calc.setMaximumFiguresInShadowOverlapCalculations(
201
+ @hash[:shadow_calculation][:maximum_figures])
164
202
  end
165
203
  if @hash[:shadow_calculation][:solar_distribution]
166
- os_sim_control.setSolarDistribution(@hash[:shadow_calculation][:solar_distribution])
204
+ os_sim_control.setSolarDistribution(
205
+ @hash[:shadow_calculation][:solar_distribution])
167
206
  end
168
207
  end
169
208
 
@@ -203,13 +242,13 @@ module FromHoneybee
203
242
  end
204
243
  if @hash[:output][:summary_reports]
205
244
  begin
206
- os_report = OpenStudio::Model::OutputTableSummaryReports.new(@openstudio_model)
207
- rescue NameError
245
+ os_report = @openstudio_model.getOutputTableSummaryReports
246
+ rescue # REMOVE: Once the upgrade to OpenStudio 3.0 is official
208
247
  end
209
248
  @hash[:output][:summary_reports].each do |report|
210
249
  begin
211
250
  os_report.addSummaryReport(report)
212
- rescue NoMethodError
251
+ rescue NoMethodError # REMOVE: Once the upgrade to OpenStudio 3.0 is official
213
252
  end
214
253
  end
215
254
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybee-openstudio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.3
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanushree Charan
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2020-05-27 00:00:00.000000000 Z
14
+ date: 2020-06-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -19,42 +19,42 @@ dependencies:
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '1.14'
22
+ version: '2.1'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.14'
29
+ version: '2.1'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rake
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - '='
35
35
  - !ruby/object:Gem::Version
36
- version: 12.3.1
36
+ version: '13.0'
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - '='
42
42
  - !ruby/object:Gem::Version
43
- version: 12.3.1
43
+ version: '13.0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: rspec
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - '='
49
49
  - !ruby/object:Gem::Version
50
- version: 3.7.0
50
+ version: '3.9'
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - '='
56
56
  - !ruby/object:Gem::Version
57
- version: 3.7.0
57
+ version: '3.9'
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rubocop
60
60
  requirement: !ruby/object:Gem::Requirement
@@ -103,28 +103,28 @@ dependencies:
103
103
  requirements:
104
104
  - - '='
105
105
  - !ruby/object:Gem::Version
106
- version: 0.1.6
106
+ version: 0.2.3
107
107
  type: :runtime
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
111
  - - '='
112
112
  - !ruby/object:Gem::Version
113
- version: 0.1.6
113
+ version: 0.2.3
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: openstudio-standards
116
116
  requirement: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - "~>"
119
119
  - !ruby/object:Gem::Version
120
- version: 0.2.7
120
+ version: 0.2.11
121
121
  type: :runtime
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
124
  requirements:
125
125
  - - "~>"
126
126
  - !ruby/object:Gem::Version
127
- version: 0.2.7
127
+ version: 0.2.11
128
128
  - !ruby/object:Gem::Dependency
129
129
  name: public_suffix
130
130
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +171,7 @@ files:
171
171
  - lib/from_honeybee/construction/opaque.rb
172
172
  - lib/from_honeybee/construction/shade.rb
173
173
  - lib/from_honeybee/construction/window.rb
174
+ - lib/from_honeybee/construction/windowshade.rb
174
175
  - lib/from_honeybee/construction_set.rb
175
176
  - lib/from_honeybee/extension.rb
176
177
  - lib/from_honeybee/geometry/aperture.rb
@@ -234,8 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
235
  - !ruby/object:Gem::Version
235
236
  version: '0'
236
237
  requirements: []
237
- rubyforge_project:
238
- rubygems_version: 2.7.7
238
+ rubygems_version: 3.0.6
239
239
  signing_key:
240
240
  specification_version: 4
241
241
  summary: Gem for translating between Honeybee JSON and OpenStudio Model.