openstudio-geb 0.0.2 → 0.0.3r
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|