openstudio-geb 0.0.2 → 0.0.3r
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/lib/measures/AdjustThermostatSetpointsByDegreesForPeakHours/measure.rb +1 -1
- data/lib/measures/add_chilled_water_storage_tank/measure.rb +167 -36
- data/lib/measures/add_chilled_water_storage_tank/tests/restaurant.osm +12189 -0
- data/lib/measures/average_ventilation_for_peak_hours/measure.rb +22 -11
- data/lib/measures/average_ventilation_for_peak_hours/tests/LargeOffice-90.1-2013-ASHRAE 169-2013-5A.osm +21863 -0
- data/lib/measures/reduce_epd_by_percentage_for_peak_hours/measure.rb +94 -95
- data/lib/openstudio/geb/version.rb +1 -1
- metadata +7 -5
- data/lib/measures/average_ventilation_for_peak_hours/tests/example_model.osm +0 -8077
@@ -51,14 +51,14 @@ class ReduceEPDByPercentageForPeakHours < OpenStudio::Measure::ModelMeasure
|
|
51
51
|
start_date1 = OpenStudio::Ruleset::OSArgument.makeStringArgument('start_date1', false)
|
52
52
|
start_date1.setDisplayName('First start date for the Reduction')
|
53
53
|
start_date1.setDescription('In MM-DD format')
|
54
|
-
start_date1.setDefaultValue('
|
54
|
+
start_date1.setDefaultValue('07-01')
|
55
55
|
args << start_date1
|
56
56
|
|
57
57
|
# make an argument for the end date of the reduction
|
58
58
|
end_date1 = OpenStudio::Ruleset::OSArgument.makeStringArgument('end_date1', false)
|
59
59
|
end_date1.setDisplayName('First end date for the Reduction')
|
60
60
|
end_date1.setDescription('In MM-DD format')
|
61
|
-
end_date1.setDefaultValue('
|
61
|
+
end_date1.setDefaultValue('08-31')
|
62
62
|
args << end_date1
|
63
63
|
|
64
64
|
|
@@ -71,21 +71,21 @@ class ReduceEPDByPercentageForPeakHours < OpenStudio::Measure::ModelMeasure
|
|
71
71
|
|
72
72
|
# make an argument for the second end date of the reduction
|
73
73
|
end_date2 = OpenStudio::Ruleset::OSArgument.makeStringArgument('end_date2', false)
|
74
|
-
end_date2.setDisplayName('Second end date for the Reduction')
|
74
|
+
end_date2.setDisplayName('Second end date for the Reduction (optional)')
|
75
75
|
end_date2.setDescription('Specify a date in MM-DD format if you want a second period of reduction; leave blank if not needed. If either the start or end date is blank, the period is considered not used.')
|
76
76
|
end_date2.setDefaultValue('')
|
77
77
|
args << end_date2
|
78
78
|
|
79
79
|
# make an argument for the third start date of the reduction
|
80
80
|
start_date3 = OpenStudio::Ruleset::OSArgument.makeStringArgument('start_date3', false)
|
81
|
-
start_date3.setDisplayName('
|
81
|
+
start_date3.setDisplayName('Third start date for the Reduction (optional)')
|
82
82
|
start_date3.setDescription('Specify a date in MM-DD format if you want a third period of reduction; leave blank if not needed.')
|
83
83
|
start_date3.setDefaultValue('')
|
84
84
|
args << start_date3
|
85
85
|
|
86
86
|
# make an argument for the third end date of the reduction
|
87
87
|
end_date3 = OpenStudio::Ruleset::OSArgument.makeStringArgument('end_date3', false)
|
88
|
-
end_date3.setDisplayName('
|
88
|
+
end_date3.setDisplayName('Third end date for the Reduction')
|
89
89
|
end_date3.setDescription('Specify a date in MM-DD format if you want a third period of reduction; leave blank if not needed. If either the start or end date is blank, the period is considered not used.')
|
90
90
|
end_date3.setDefaultValue('')
|
91
91
|
args << end_date3
|
@@ -333,110 +333,109 @@ class ReduceEPDByPercentageForPeakHours < OpenStudio::Measure::ModelMeasure
|
|
333
333
|
if equip_schedules.key?(equip_sch.get.name.to_s)
|
334
334
|
new_equip_sch = equip_schedules[equip_sch.get.name.to_s]
|
335
335
|
else
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
336
|
+
if equip_sch.get.to_ScheduleRuleset.empty?
|
337
|
+
runner.registerWarning("Schedule #{equip_sch.get.name} isn't a ScheduleRuleset object and won't be altered by this measure.")
|
338
|
+
next
|
339
|
+
else
|
340
|
+
new_equip_sch = equip_sch.get.clone(model)
|
341
|
+
new_equip_sch = new_equip_sch.to_Schedule.get
|
342
|
+
new_equip_sch.setName("#{equip_sch.get.name.to_s} adjusted #{epd_factor}")
|
343
|
+
# add to the hash
|
344
|
+
equip_schedules[equip_sch.get.name.to_s] = new_equip_sch
|
345
|
+
end
|
341
346
|
end
|
342
347
|
equip.setSchedule(new_equip_sch)
|
348
|
+
runner.registerInfo("Schedule #{equip_sch.get.name} of electric equipment #{equip.name} will be altered by this measure.")
|
343
349
|
end
|
344
350
|
end
|
345
351
|
|
346
352
|
equip_schedules.each do |old_name, equip_sch|
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
runner.registerInfo("------------
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
day_rule_period1 = updateDaySchedule(day_rule_period1, day_time_vector1, day_value_vector1, shift_time1, shift_time2, epd_factor)
|
385
|
-
runner.registerInfo(" ------------ updated time: #{day_rule_period1.times.map {|os_time| os_time.toString}}")
|
386
|
-
runner.registerInfo(" ------------ updated values: #{day_rule_period1.values}")
|
387
|
-
runner.registerInfo("--------------- schedule updated for #{rule_period1.startDate.get} to #{rule_period1.endDate.get}")
|
388
|
-
|
389
|
-
if os_start_date2 and os_end_date2
|
390
|
-
rule_period2 = copy_sch_rule_for_period(model, rule_period1, rule_period1.daySchedule, os_start_date2, os_end_date2)
|
391
|
-
unless schedule_set.setScheduleRuleIndex(rule_period2, 0)
|
392
|
-
runner.registerError("Fail to set rule index for #{rule_period2.daySchedule.name.to_s}.")
|
393
|
-
end
|
394
|
-
current_index += 1
|
395
|
-
runner.registerInfo("--------------- schedule updated for #{rule_period2.startDate.get} to #{rule_period2.endDate.get}")
|
396
|
-
end
|
353
|
+
schedule_set = equip_sch.to_ScheduleRuleset.get
|
354
|
+
default_rule = schedule_set.defaultDaySchedule
|
355
|
+
rules = schedule_set.scheduleRules
|
356
|
+
days_covered = Array.new(7, false)
|
357
|
+
original_rule_number = rules.length
|
358
|
+
if original_rule_number > 0
|
359
|
+
runner.registerInfo("------------ schedule rule set #{old_name} has #{original_rule_number} rules.")
|
360
|
+
current_index = 0
|
361
|
+
# rules are in order of priority
|
362
|
+
rules.each do |rule|
|
363
|
+
runner.registerInfo("------------ Rule #{rule.ruleIndex}: #{rule.daySchedule.name.to_s}")
|
364
|
+
rule_period1 = rule.clone(model).to_ScheduleRule.get # OpenStudio::Model::ScheduleRule.new(schedule_set, rule.daySchedule)
|
365
|
+
rule_period1.setStartDate(os_start_date1)
|
366
|
+
rule_period1.setEndDate(os_end_date1)
|
367
|
+
checkDaysCovered(rule_period1, days_covered)
|
368
|
+
runner.registerInfo("--------------- current days of week coverage: #{days_covered}")
|
369
|
+
|
370
|
+
# set the order of the new cloned schedule rule, to make sure the modified rule has a higher priority than the original one
|
371
|
+
# and different copies keep the same priority as their original orders
|
372
|
+
unless schedule_set.setScheduleRuleIndex(rule_period1, current_index)
|
373
|
+
runner.registerError("Fail to set rule index for #{day_rule_period1.name.to_s}.")
|
374
|
+
end
|
375
|
+
current_index += 1
|
376
|
+
|
377
|
+
day_rule_period1 = rule_period1.daySchedule
|
378
|
+
day_time_vector1 = day_rule_period1.times
|
379
|
+
day_value_vector1 = day_rule_period1.values
|
380
|
+
runner.registerInfo(" ------------ time: #{day_time_vector1.map {|os_time| os_time.toString}}")
|
381
|
+
runner.registerInfo(" ------------ values: #{day_value_vector1}")
|
382
|
+
unless day_value_vector1.empty?
|
383
|
+
applicable = true
|
384
|
+
end
|
385
|
+
day_rule_period1.clearValues
|
386
|
+
day_rule_period1 = updateDaySchedule(day_rule_period1, day_time_vector1, day_value_vector1, shift_time1, shift_time2, epd_factor)
|
387
|
+
runner.registerInfo(" ------------ updated time: #{day_rule_period1.times.map {|os_time| os_time.toString}}")
|
388
|
+
runner.registerInfo(" ------------ updated values: #{day_rule_period1.values}")
|
389
|
+
runner.registerInfo("--------------- schedule updated for #{rule_period1.startDate.get} to #{rule_period1.endDate.get}")
|
397
390
|
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
end
|
403
|
-
current_index += 1
|
404
|
-
runner.registerInfo("--------------- schedule updated for #{rule_period3.startDate.get} to #{rule_period3.endDate.get}")
|
391
|
+
if os_start_date2 and os_end_date2
|
392
|
+
rule_period2 = copy_sch_rule_for_period(model, rule_period1, rule_period1.daySchedule, os_start_date2, os_end_date2)
|
393
|
+
unless schedule_set.setScheduleRuleIndex(rule_period2, 0)
|
394
|
+
runner.registerError("Fail to set rule index for #{rule_period2.daySchedule.name.to_s}.")
|
405
395
|
end
|
396
|
+
current_index += 1
|
397
|
+
runner.registerInfo("--------------- schedule updated for #{rule_period2.startDate.get} to #{rule_period2.endDate.get}")
|
398
|
+
end
|
406
399
|
|
407
|
-
|
408
|
-
|
409
|
-
|
400
|
+
if os_start_date3 and os_end_date3
|
401
|
+
rule_period3 = copy_sch_rule_for_period(model, rule_period1, rule_period1.daySchedule, os_start_date3, os_end_date3)
|
402
|
+
unless schedule_set.setScheduleRuleIndex(rule_period3, 0)
|
403
|
+
runner.registerError("Fail to set rule index for #{rule_period3.daySchedule.name.to_s}.")
|
410
404
|
end
|
411
|
-
|
412
|
-
|
413
|
-
else
|
414
|
-
runner.registerWarning("Electric equipment schedule #{old_name} is a ScheduleRuleSet, but has no ScheduleRules associated. It won't be altered by this measure.")
|
415
|
-
end
|
416
|
-
if days_covered.include?(false)
|
417
|
-
new_default_rule = OpenStudio::Model::ScheduleRule.new(schedule_set)
|
418
|
-
new_default_rule.setStartDate(os_start_date1)
|
419
|
-
new_default_rule.setEndDate(os_end_date1)
|
420
|
-
coverMissingDays(new_default_rule, days_covered)
|
421
|
-
checkDaysCovered(new_default_rule, days_covered)
|
422
|
-
|
423
|
-
cloned_default_day = default_rule.clone(model)
|
424
|
-
cloned_default_day.setParent(new_default_rule)
|
425
|
-
|
426
|
-
new_default_day = new_default_rule.daySchedule
|
427
|
-
day_time_vector = new_default_day.times
|
428
|
-
day_value_vector = new_default_day.values
|
429
|
-
new_default_day.clearValues
|
430
|
-
new_default_day = updateDaySchedule(new_default_day, day_time_vector, day_value_vector, shift_time1, shift_time2, epd_factor)
|
431
|
-
if os_start_date2 and os_end_date2
|
432
|
-
copy_sch_rule_for_period(model, new_default_rule, new_default_day, os_start_date2, os_end_date2)
|
405
|
+
current_index += 1
|
406
|
+
runner.registerInfo("--------------- schedule updated for #{rule_period3.startDate.get} to #{rule_period3.endDate.get}")
|
433
407
|
end
|
434
|
-
|
435
|
-
|
408
|
+
|
409
|
+
# The original rule will be shifted to have the currently lowest priority
|
410
|
+
unless schedule_set.setScheduleRuleIndex(rule, original_rule_number + current_index - 1)
|
411
|
+
runner.registerError("Fail to set rule index for #{rule.daySchedule.name.to_s}.")
|
436
412
|
end
|
437
413
|
|
438
414
|
end
|
439
|
-
|
415
|
+
else
|
416
|
+
runner.registerWarning("Electric equipment schedule #{old_name} is a ScheduleRuleSet, but has no ScheduleRules associated. It won't be altered by this measure.")
|
417
|
+
end
|
418
|
+
if days_covered.include?(false)
|
419
|
+
new_default_rule = OpenStudio::Model::ScheduleRule.new(schedule_set)
|
420
|
+
new_default_rule.setStartDate(os_start_date1)
|
421
|
+
new_default_rule.setEndDate(os_end_date1)
|
422
|
+
coverMissingDays(new_default_rule, days_covered)
|
423
|
+
checkDaysCovered(new_default_rule, days_covered)
|
424
|
+
|
425
|
+
cloned_default_day = default_rule.clone(model)
|
426
|
+
cloned_default_day.setParent(new_default_rule)
|
427
|
+
|
428
|
+
new_default_day = new_default_rule.daySchedule
|
429
|
+
day_time_vector = new_default_day.times
|
430
|
+
day_value_vector = new_default_day.values
|
431
|
+
new_default_day.clearValues
|
432
|
+
new_default_day = updateDaySchedule(new_default_day, day_time_vector, day_value_vector, shift_time1, shift_time2, epd_factor)
|
433
|
+
if os_start_date2 and os_end_date2
|
434
|
+
copy_sch_rule_for_period(model, new_default_rule, new_default_day, os_start_date2, os_end_date2)
|
435
|
+
end
|
436
|
+
if os_start_date3 and os_end_date3
|
437
|
+
copy_sch_rule_for_period(model, new_default_rule, new_default_day, os_start_date3, os_end_date3)
|
438
|
+
end
|
440
439
|
end
|
441
440
|
|
442
441
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio-geb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3r
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kaiyu Sun
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-10-
|
12
|
+
date: 2022-10-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -166,6 +166,7 @@ files:
|
|
166
166
|
- lib/measures/add_chilled_water_storage_tank/tests/CZ06RV2.epw
|
167
167
|
- lib/measures/add_chilled_water_storage_tank/tests/add_chilled_water_storage_tank_test.rb
|
168
168
|
- lib/measures/add_chilled_water_storage_tank/tests/example_model.osm
|
169
|
+
- lib/measures/add_chilled_water_storage_tank/tests/restaurant.osm
|
169
170
|
- lib/measures/add_electrochromic_window/LICENSE.md
|
170
171
|
- lib/measures/add_electrochromic_window/README.md
|
171
172
|
- lib/measures/add_electrochromic_window/README.md.erb
|
@@ -229,8 +230,9 @@ files:
|
|
229
230
|
- lib/measures/average_ventilation_for_peak_hours/README.md.erb
|
230
231
|
- lib/measures/average_ventilation_for_peak_hours/measure.rb
|
231
232
|
- lib/measures/average_ventilation_for_peak_hours/measure.xml
|
233
|
+
- lib/measures/average_ventilation_for_peak_hours/tests/LargeOffice-90.1-2013-ASHRAE
|
234
|
+
169-2013-5A.osm
|
232
235
|
- lib/measures/average_ventilation_for_peak_hours/tests/average_ventilation_for_peak_hours_test.rb
|
233
|
-
- lib/measures/average_ventilation_for_peak_hours/tests/example_model.osm
|
234
236
|
- lib/measures/enable_occupancy_driven_lighting/LICENSE.md
|
235
237
|
- lib/measures/enable_occupancy_driven_lighting/README.md
|
236
238
|
- lib/measures/enable_occupancy_driven_lighting/README.md.erb
|
@@ -301,9 +303,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
301
303
|
version: '0'
|
302
304
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
303
305
|
requirements:
|
304
|
-
- - "
|
306
|
+
- - ">"
|
305
307
|
- !ruby/object:Gem::Version
|
306
|
-
version:
|
308
|
+
version: 1.3.1
|
307
309
|
requirements: []
|
308
310
|
rubygems_version: 3.1.4
|
309
311
|
signing_key:
|