openstudio-geb 0.4.0 → 0.5.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.
@@ -10,6 +10,7 @@ require 'openstudio/measure/ShowRunnerOutput'
10
10
  require 'minitest/autorun'
11
11
  require_relative '../measure.rb'
12
12
  require 'fileutils'
13
+ require 'json'
13
14
 
14
15
  class AddElectricVehicleChargingLoadTest < Minitest::Test
15
16
  # def setup
@@ -28,137 +29,8 @@ class AddElectricVehicleChargingLoadTest < Minitest::Test
28
29
  # create an instance of a runner
29
30
  runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
30
31
 
31
- # get arguments and test that they are what we are expecting
32
- arguments = measure.arguments(model)
33
- assert_equal(10, arguments.size)
34
- assert_equal('bldg_use_type', arguments[0].name)
35
- assert_equal('home', arguments[0].printValue)
36
-
37
-
38
- # set argument values to bad values and run the measure
39
- argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments)
40
-
41
- bldg_use_type = arguments[0].clone
42
- assert(bldg_use_type.setValue('workplace'))
43
- argument_map['bldg_use_type'] = bldg_use_type
44
-
45
- num_ev_chargers = arguments[1].clone
46
- assert(num_ev_chargers.setValue(3))
47
- argument_map['num_ev_chargers'] = num_ev_chargers
48
-
49
- num_evs = arguments[2].clone
50
- assert(num_evs.setValue(10))
51
- argument_map['num_evs'] = num_evs
52
-
53
- # avg_arrival_time = arguments[4].clone
54
- # assert(avg_arrival_time.setValue('9:00'))
55
- # argument_map['avg_arrival_time'] = avg_arrival_time
56
- #
57
- avg_leave_time = arguments[5].clone
58
- assert(avg_leave_time.setValue('23:30'))
59
- argument_map['avg_leave_time'] = avg_leave_time
60
-
61
- start_charge_time = arguments[6].clone
62
- assert(start_charge_time.setValue('17:00'))
63
- argument_map['start_charge_time'] = start_charge_time
64
-
65
- avg_charge_hours = arguments[7].clone
66
- assert(avg_charge_hours.setValue(4))
67
- argument_map['avg_charge_hours'] = avg_charge_hours
68
-
69
- # charge_on_sat = arguments[8].clone
70
- # assert(charge_on_sat.setValue(false))
71
- # argument_map['charge_on_sat'] = charge_on_sat
72
- #
73
- # charge_on_sun = arguments[9].clone
74
- # assert(charge_on_sun.setValue(false))
75
- # argument_map['charge_on_sun'] = charge_on_sun
76
-
77
-
78
- measure.run(model, runner, argument_map)
79
- result = runner.result
80
- puts "errors: #{result.errors.inspect}"
81
- puts "warnings: "
82
- result.warnings.each{|warning| puts warning.logMessage}
83
- show_output(result)
84
- assert(result.value.valueName == 'Success')
85
- assert(result.errors.empty?)
86
-
87
- # save the model
88
- # output_file_path = OpenStudio::Path.new('tests/test.osm')
89
- output_file_path = File.join(File.dirname(__FILE__), 'test.osm')
90
- model.save(output_file_path,true)
91
- end
92
-
93
- def test_number_of_arguments_and_argument_names
94
- # create an instance of the measure
95
- measure = AddElectricVehicleChargingLoad.new
96
-
97
- # make an empty model
98
- model = OpenStudio::Model::Model.new
99
-
100
- # get arguments and test that they are what we are expecting
101
- arguments = measure.arguments(model)
102
- assert_equal(1, arguments.size)
103
- assert_equal('space_name', arguments[0].name)
104
- end
105
-
106
- def test_bad_argument_values
107
- # create an instance of the measure
108
- measure = AddElectricVehicleChargingLoad.new
109
-
110
- # create runner with empty OSW
111
- osw = OpenStudio::WorkflowJSON.new
112
- runner = OpenStudio::Measure::OSRunner.new(osw)
113
-
114
- # make an empty model
115
- model = OpenStudio::Model::Model.new
116
-
117
32
  # get arguments
118
33
  arguments = measure.arguments(model)
119
- argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments)
120
-
121
- # create hash of argument values
122
- args_hash = {}
123
- args_hash['space_name'] = ''
124
-
125
- # populate argument with specified hash value if specified
126
- arguments.each do |arg|
127
- temp_arg_var = arg.clone
128
- if args_hash.key?(arg.name)
129
- assert(temp_arg_var.setValue(args_hash[arg.name]))
130
- end
131
- argument_map[arg.name] = temp_arg_var
132
- end
133
-
134
- # run the measure
135
- measure.run(model, runner, argument_map)
136
- result = runner.result
137
-
138
- # show the output
139
- show_output(result)
140
-
141
- # assert that it ran correctly
142
- assert_equal('Fail', result.value.valueName)
143
- end
144
-
145
- def test_good_argument_values
146
- # create an instance of the measure
147
- measure = AddElectricVehicleChargingLoad.new
148
-
149
- # create runner with empty OSW
150
- osw = OpenStudio::WorkflowJSON.new
151
- runner = OpenStudio::Measure::OSRunner.new(osw)
152
-
153
- # load the test model
154
- translator = OpenStudio::OSVersion::VersionTranslator.new
155
- path = "#{File.dirname(__FILE__)}/example_model.osm"
156
- model = translator.loadModel(path)
157
- assert(!model.empty?)
158
- model = model.get
159
-
160
- # store the number of spaces in the seed model
161
- num_spaces_seed = model.getSpaces.size
162
34
 
163
35
  # get arguments
164
36
  arguments = measure.arguments(model)
@@ -167,7 +39,26 @@ class AddElectricVehicleChargingLoadTest < Minitest::Test
167
39
  # create hash of argument values.
168
40
  # If the argument has a default that you want to use, you don't need it in the hash
169
41
  args_hash = {}
170
- args_hash['space_name'] = 'New Space'
42
+ # for workplace
43
+ # args_hash['bldg_use_type'] = 'workplace'
44
+ # args_hash['num_ev_chargers'] = 3
45
+ # args_hash['num_evs'] = 10
46
+ # args_hash['charger_level'] = 'Level 2'
47
+ # args_hash['avg_arrival_time'] = '9:00'
48
+ # args_hash['arrival_time_variation_in_mins'] = 60
49
+ # args_hash['avg_charge_hours'] = 2.5
50
+ # args_hash['charge_time_variation_in_mins'] = 60
51
+
52
+ # for commercial station
53
+ args_hash['bldg_use_type'] = 'commercial station'
54
+ args_hash['num_ev_chargers'] = 7
55
+ args_hash['num_evs'] = 28
56
+ args_hash['charger_level'] = 'DC charger'
57
+ args_hash['avg_arrival_time'] = '14:00'
58
+ args_hash['arrival_time_variation_in_mins'] = 300
59
+ args_hash['avg_charge_hours'] = 2
60
+ args_hash['charge_time_variation_in_mins'] = 30
61
+
171
62
  # using defaults values from measure.rb for other arguments
172
63
 
173
64
  # populate argument with specified hash value if specified
@@ -179,23 +70,31 @@ class AddElectricVehicleChargingLoadTest < Minitest::Test
179
70
  argument_map[arg.name] = temp_arg_var
180
71
  end
181
72
 
182
- # run the measure
183
73
  measure.run(model, runner, argument_map)
184
74
  result = runner.result
185
-
186
- # show the output
75
+ puts "errors: #{result.errors.inspect}"
76
+ puts "warnings: "
77
+ result.warnings.each{|warning| puts warning.logMessage}
187
78
  show_output(result)
188
-
189
- # assert that it ran correctly
190
- assert_equal('Success', result.value.valueName)
191
- assert(result.info.size == 1)
192
- assert(result.warnings.empty?)
193
-
194
- # check that there is now 1 space
195
- assert_equal(1, model.getSpaces.size - num_spaces_seed)
79
+ assert(result.value.valueName == 'Success')
80
+ assert(result.errors.empty?)
196
81
 
197
82
  # save the model to test output directory
198
83
  output_file_path = "#{File.dirname(__FILE__)}//output/test_output.osm"
199
84
  model.save(output_file_path, true)
85
+
86
+ # test run the modified model
87
+ osw = {}
88
+ osw["weather_file"] = File.join(File.dirname(__FILE__ ), "CZ06RV2.epw")
89
+ osw["seed_file"] = output_file_path
90
+ osw_path = "#{File.dirname(__FILE__)}//output/test_output.osw"
91
+ File.open(osw_path, 'w') do |f|
92
+ f << JSON.pretty_generate(osw)
93
+ end
94
+ cli_path = OpenStudio.getOpenStudioCLI
95
+ cmd = "\"#{cli_path}\" run -w \"#{osw_path}\""
96
+ puts cmd
97
+ system(cmd)
200
98
  end
99
+
201
100
  end
@@ -1,47 +1,47 @@
1
1
 
2
2
  OS:Version,
3
- {15c822a5-8680-412d-9051-4c5f5bf84af1}, !- Handle
4
- 3.1.0; !- Version Identifier
3
+ {710267aa-03b7-4f18-b675-4210bf362bb2}, !- Handle
4
+ 3.7.0; !- Version Identifier
5
5
 
6
6
  OS:Schedule:Ruleset,
7
- {cd6f08cb-2d6b-4ead-b510-9973ab57fb3c}, !- Handle
7
+ {5e51be1d-47a4-45a6-831f-69e2b394fc9c}, !- Handle
8
8
  EV Charging Power Draw, !- Name
9
- {49fe0c88-4ae2-4960-b3e1-046e84601563}, !- Schedule Type Limits Name
10
- {4af36474-1ece-45a3-872e-112cb929f330}; !- Default Day Schedule Name
9
+ {f4a971c0-7bb6-4f09-b54b-593ad91e646f}, !- Schedule Type Limits Name
10
+ {6bcacd24-481f-4f28-9dba-45fc1174e22a}; !- Default Day Schedule Name
11
11
 
12
12
  OS:Schedule:Day,
13
- {4af36474-1ece-45a3-872e-112cb929f330}, !- Handle
13
+ {6bcacd24-481f-4f28-9dba-45fc1174e22a}, !- Handle
14
14
  EV Charging Default, !- Name
15
- {49fe0c88-4ae2-4960-b3e1-046e84601563}, !- Schedule Type Limits Name
15
+ {f4a971c0-7bb6-4f09-b54b-593ad91e646f}, !- Schedule Type Limits Name
16
16
  , !- Interpolate to Timestep
17
17
  8, !- Hour 1
18
- 0, !- Minute 1
18
+ 8, !- Minute 1
19
19
  0, !- Value Until Time 1
20
20
  8, !- Hour 2
21
- 6, !- Minute 2
21
+ 19, !- Minute 2
22
22
  0.333333333333333, !- Value Until Time 2
23
23
  8, !- Hour 3
24
- 13, !- Minute 3
24
+ 20, !- Minute 3
25
25
  0.666666666666667, !- Value Until Time 3
26
- 20, !- Hour 4
27
- 5, !- Minute 4
26
+ 14, !- Hour 4
27
+ 34, !- Minute 4
28
28
  1, !- Value Until Time 4
29
- 20, !- Hour 5
30
- 20, !- Minute 5
29
+ 14, !- Hour 5
30
+ 39, !- Minute 5
31
31
  0.666666666666667, !- Value Until Time 5
32
- 23, !- Hour 6
33
- 8, !- Minute 6
32
+ 16, !- Hour 6
33
+ 21, !- Minute 6
34
34
  0.333333333333333, !- Value Until Time 6
35
35
  24, !- Hour 7
36
36
  0, !- Minute 7
37
- 0; !- Value Until Time 7
37
+ -1.2335811384724e-16; !- Value Until Time 7
38
38
 
39
39
  OS:Schedule:Rule,
40
- {311feac1-7062-41ae-b8f1-51dc8e415ed6}, !- Handle
40
+ {f33ae947-b72d-4290-aaef-fe86f9501ffc}, !- Handle
41
41
  EV Charging Power Saturday, !- Name
42
- {cd6f08cb-2d6b-4ead-b510-9973ab57fb3c}, !- Schedule Ruleset Name
42
+ {5e51be1d-47a4-45a6-831f-69e2b394fc9c}, !- Schedule Ruleset Name
43
43
  1, !- Rule Order
44
- {6d266ac8-247e-491c-b8cd-a96ec0f017e7}, !- Day Schedule Name
44
+ {8ec2458e-65f1-4aeb-990f-bedc9b3fadfa}, !- Day Schedule Name
45
45
  , !- Apply Sunday
46
46
  , !- Apply Monday
47
47
  , !- Apply Tuesday
@@ -51,83 +51,83 @@ OS:Schedule:Rule,
51
51
  Yes; !- Apply Saturday
52
52
 
53
53
  OS:Schedule:Day,
54
- {6d266ac8-247e-491c-b8cd-a96ec0f017e7}, !- Handle
54
+ {8ec2458e-65f1-4aeb-990f-bedc9b3fadfa}, !- Handle
55
55
  EV Charging Default 1, !- Name
56
- {49fe0c88-4ae2-4960-b3e1-046e84601563}, !- Schedule Type Limits Name
56
+ {f4a971c0-7bb6-4f09-b54b-593ad91e646f}, !- Schedule Type Limits Name
57
57
  , !- Interpolate to Timestep
58
58
  8, !- Hour 1
59
- 0, !- Minute 1
59
+ 8, !- Minute 1
60
60
  0, !- Value Until Time 1
61
61
  8, !- Hour 2
62
- 6, !- Minute 2
62
+ 19, !- Minute 2
63
63
  0.333333333333333, !- Value Until Time 2
64
64
  8, !- Hour 3
65
- 13, !- Minute 3
65
+ 20, !- Minute 3
66
66
  0.666666666666667, !- Value Until Time 3
67
- 20, !- Hour 4
68
- 5, !- Minute 4
67
+ 14, !- Hour 4
68
+ 34, !- Minute 4
69
69
  1, !- Value Until Time 4
70
- 20, !- Hour 5
71
- 20, !- Minute 5
70
+ 14, !- Hour 5
71
+ 39, !- Minute 5
72
72
  0.666666666666667, !- Value Until Time 5
73
- 23, !- Hour 6
74
- 8, !- Minute 6
73
+ 16, !- Hour 6
74
+ 21, !- Minute 6
75
75
  0.333333333333333, !- Value Until Time 6
76
76
  24, !- Hour 7
77
77
  0, !- Minute 7
78
- 0; !- Value Until Time 7
78
+ -1.2335811384724e-16; !- Value Until Time 7
79
79
 
80
80
  OS:Schedule:Rule,
81
- {f7becaf9-071a-4de9-979d-ee534e725aa2}, !- Handle
81
+ {a4dc317b-a25b-488b-8b39-3a45a92069f4}, !- Handle
82
82
  EV Charging Power Sunday, !- Name
83
- {cd6f08cb-2d6b-4ead-b510-9973ab57fb3c}, !- Schedule Ruleset Name
83
+ {5e51be1d-47a4-45a6-831f-69e2b394fc9c}, !- Schedule Ruleset Name
84
84
  0, !- Rule Order
85
- {8a773ccc-0531-4ec0-8b6c-00d4f6f4dc2d}, !- Day Schedule Name
85
+ {41604025-03c3-4af2-8370-f6ac84c8e3b7}, !- Day Schedule Name
86
86
  Yes; !- Apply Sunday
87
87
 
88
88
  OS:Schedule:Day,
89
- {8a773ccc-0531-4ec0-8b6c-00d4f6f4dc2d}, !- Handle
89
+ {41604025-03c3-4af2-8370-f6ac84c8e3b7}, !- Handle
90
90
  EV Charging Default 2, !- Name
91
- {49fe0c88-4ae2-4960-b3e1-046e84601563}, !- Schedule Type Limits Name
91
+ {f4a971c0-7bb6-4f09-b54b-593ad91e646f}, !- Schedule Type Limits Name
92
92
  , !- Interpolate to Timestep
93
93
  8, !- Hour 1
94
- 0, !- Minute 1
94
+ 8, !- Minute 1
95
95
  0, !- Value Until Time 1
96
96
  8, !- Hour 2
97
- 6, !- Minute 2
97
+ 19, !- Minute 2
98
98
  0.333333333333333, !- Value Until Time 2
99
99
  8, !- Hour 3
100
- 13, !- Minute 3
100
+ 20, !- Minute 3
101
101
  0.666666666666667, !- Value Until Time 3
102
- 20, !- Hour 4
103
- 5, !- Minute 4
102
+ 14, !- Hour 4
103
+ 34, !- Minute 4
104
104
  1, !- Value Until Time 4
105
- 20, !- Hour 5
106
- 20, !- Minute 5
105
+ 14, !- Hour 5
106
+ 39, !- Minute 5
107
107
  0.666666666666667, !- Value Until Time 5
108
- 23, !- Hour 6
109
- 8, !- Minute 6
108
+ 16, !- Hour 6
109
+ 21, !- Minute 6
110
110
  0.333333333333333, !- Value Until Time 6
111
111
  24, !- Hour 7
112
112
  0, !- Minute 7
113
- 0; !- Value Until Time 7
113
+ -1.2335811384724e-16; !- Value Until Time 7
114
114
 
115
115
  OS:Exterior:FuelEquipment:Definition,
116
- {e3509498-6b91-4e72-83b1-4e5ae20fef10}, !- Handle
117
- 21000.0 w EV Charging Definition, !- Name
118
- 21000; !- Design Level {W}
116
+ {1c7425ee-61c5-4424-a7a2-680290c07aab}, !- Handle
117
+ 28799.999999999996 w EV Charging Definition, !- Name
118
+ 28800; !- Design Level {W}
119
119
 
120
120
  OS:Exterior:FuelEquipment,
121
- {7a05dd98-4879-49b2-bd7d-bca187c06148}, !- Handle
122
- 21000.0 w EV Charger, !- Name
123
- {e3509498-6b91-4e72-83b1-4e5ae20fef10}, !- Exterior Fuel Equipment Definition Name
124
- {cd6f08cb-2d6b-4ead-b510-9973ab57fb3c}, !- Schedule Name
121
+ {31a42d85-55dc-43ec-b0a8-beace3568b41}, !- Handle
122
+ 28799.999999999996 w EV Charger, !- Name
123
+ {1c7425ee-61c5-4424-a7a2-680290c07aab}, !- Exterior Fuel Equipment Definition Name
124
+ {5e51be1d-47a4-45a6-831f-69e2b394fc9c}, !- Schedule Name
125
125
  Electricity, !- Fuel Use Type
126
126
  , !- Multiplier
127
127
  Electric Vehicles; !- End-Use Subcategory
128
128
 
129
129
  OS:ScheduleTypeLimits,
130
- {49fe0c88-4ae2-4960-b3e1-046e84601563}, !- Handle
130
+ {f4a971c0-7bb6-4f09-b54b-593ad91e646f}, !- Handle
131
131
  Fractional, !- Name
132
132
  0, !- Lower Limit Value
133
133
  1, !- Upper Limit Value
@@ -477,9 +477,9 @@ class AddChilledWaterStorageTank < OpenStudio::Measure::ModelMeasure
477
477
  # return false
478
478
  # end
479
479
  run_output_path = runner.getPathArgumentValue('run_output_path', user_arguments)
480
- Dir.mkdir(run_output_path.to_s) unless File.exists?(run_output_path.to_s)
480
+ Dir.mkdir(run_output_path.to_s) unless File.exist?(run_output_path.to_s)
481
481
  sizing_output_path = File.expand_path(File.join(run_output_path.to_s, 'sizing_run'))
482
- Dir.mkdir(sizing_output_path.to_s) unless File.exists?(sizing_output_path.to_s)
482
+ Dir.mkdir(sizing_output_path.to_s) unless File.exist?(sizing_output_path.to_s)
483
483
 
484
484
  # Change the simulation to only run the sizing days
485
485
  sim_control = model.getSimulationControl
@@ -7,11 +7,11 @@
7
7
  # http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
8
8
 
9
9
  # start the measure
10
- require 'openstudio/extension/core/os_lib_helper_methods'
11
- require 'openstudio/extension/core/os_lib_schedules'
10
+ # require 'openstudio/extension/core/os_lib_helper_methods'
11
+ # require 'openstudio/extension/core/os_lib_schedules'
12
+ require 'openstudio-standards'
12
13
  class AddExteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
13
- include OsLib_HelperMethods
14
- include OsLib_Schedules
14
+
15
15
  # human readable name
16
16
  def name
17
17
  # Measure name should be the title case of the class name.
@@ -142,7 +142,8 @@ class AddExteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
142
142
  'default_day' => ["default day"] + normal_day_data_pairs,
143
143
  'rules' => [['Adjusted days', "#{start_month}/#{start_day}-#{end_month}/#{end_day}",
144
144
  'Sun/Mon/Tue/Wed/Thu/Fri/Sat'] + adjusted_day_data_pairs] }
145
- global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
145
+ # global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
146
+ global_shading_schedule = OpenstudioStandards::Schedules.create_complex_schedule(model, options)
146
147
  runner.registerInfo("A new schedule 'Exterior blinds schedule' has been created for new shading control objects.")
147
148
  end
148
149
  unless space_shading_control
@@ -9,11 +9,10 @@
9
9
  # http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
10
10
 
11
11
  # start the measure
12
- require 'openstudio/extension/core/os_lib_helper_methods'
13
- require 'openstudio/extension/core/os_lib_schedules'
12
+ # require 'openstudio/extension/core/os_lib_helper_methods'
13
+ # require 'openstudio/extension/core/os_lib_schedules'
14
+ require 'openstudio-standards'
14
15
  class AddInteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
15
- include OsLib_HelperMethods
16
- include OsLib_Schedules
17
16
  # human readable name
18
17
  def name
19
18
  # Measure name should be the title case of the class name.
@@ -144,7 +143,8 @@ class AddInteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
144
143
  'default_day' => ["default day"] + normal_day_data_pairs,
145
144
  'rules' => [['Adjusted days', "#{start_month}/#{start_day}-#{end_month}/#{end_day}",
146
145
  'Sun/Mon/Tue/Wed/Thu/Fri/Sat'] + adjusted_day_data_pairs] }
147
- global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
146
+ # global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
147
+ global_shading_schedule = OpenstudioStandards::Schedules.create_complex_schedule(model, options)
148
148
  runner.registerInfo("A new schedule 'Interior blinds schedule' has been created for new shading control objects.")
149
149
  end
150
150
  unless space_shading_control
@@ -7,9 +7,10 @@
7
7
  # http://nrel.github.io/OpenStudio-user-documentation/measures/measure_writing_guide/
8
8
 
9
9
  # load OpenStudio measure libraries from openstudio-extension gem
10
- require 'openstudio-extension'
11
- require 'openstudio/extension/core/os_lib_helper_methods'
12
- require 'openstudio/extension/core/os_lib_schedules'
10
+ # require 'openstudio-extension'
11
+ # require 'openstudio/extension/core/os_lib_helper_methods'
12
+ # require 'openstudio/extension/core/os_lib_schedules'
13
+ require 'openstudio-standards'
13
14
 
14
15
  # start the measure
15
16
  # this measure originally came from BCL (https://bcl.nrel.gov/results/?fq=bundle:measure&fq=measure_tags:Onsite%20Power%20Generation.Photovoltaic&show_rows=25)
@@ -69,8 +70,9 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
69
70
  end
70
71
 
71
72
  # assign the user inputs to variables
72
- args = OsLib_HelperMethods.createRunVariables(runner, model, user_arguments, arguments(model))
73
- if !args then return false end
73
+ # args = OsLib_HelperMethods.createRunVariables(runner, model, user_arguments, arguments(model))
74
+ args = runner. (arguments(model), user_arguments)
75
+ unless args then return false end
74
76
 
75
77
  # check expected values of double arguments
76
78
  # todo - not sure why this isn't working. Elsewhere it is used on E+ and reporting measures.
@@ -87,7 +89,7 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
87
89
 
88
90
  # create the inverter
89
91
  inverter = OpenStudio::Model::ElectricLoadCenterInverterSimple.new(model)
90
- inverter.setInverterEfficiency(args['inverter_efficiency'])
92
+ inverter.setInverterEfficiency(args[:inverter_efficiency])
91
93
  runner.registerInfo("Created inverter with efficiency of #{inverter.inverterEfficiency}")
92
94
 
93
95
  # create the distribution system
@@ -95,14 +97,15 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
95
97
  elcd.setInverter(inverter)
96
98
 
97
99
  # create shared shading transmittance schedule
98
- target_transmittance = 1.0 - args['fraction_of_surface'].to_f
100
+ target_transmittance = 1.0 - args[:fraction_of_surface].to_f
99
101
  inputs = {
100
102
  'name' => 'PV Shading Transmittance Schedule',
101
103
  'winterTimeValuePairs' => { 24.0 => target_transmittance },
102
104
  'summerTimeValuePairs' => { 24.0 => target_transmittance },
103
105
  'defaultTimeValuePairs' => { 24.0 => target_transmittance }
104
106
  }
105
- pv_shading_transmittance_schedule = OsLib_Schedules.createSimpleSchedule(model, inputs)
107
+ # pv_shading_transmittance_schedule = OsLib_Schedules.createSimpleSchedule(model, inputs)
108
+ pv_shading_transmittance_schedule = OpenstudioStandards::Schedules.create_simple_schedule(model, inputs)
106
109
  runner.registerInfo("Created transmittance schedule for PV shading surfaces with constant value of #{target_transmittance}")
107
110
 
108
111
  model.getSurfaces.each do |surface|
@@ -129,8 +132,8 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
129
132
  panel = OpenStudio::Model::GeneratorPhotovoltaic.simple(model)
130
133
  panel.setSurface(shading_surface)
131
134
  performance = panel.photovoltaicPerformance.to_PhotovoltaicPerformanceSimple.get
132
- performance.setFractionOfSurfaceAreaWithActiveSolarCells(args['fraction_of_surface'])
133
- performance.setFixedEfficiency(args['cell_efficiency'])
135
+ performance.setFractionOfSurfaceAreaWithActiveSolarCells(args[:fraction_of_surface])
136
+ performance.setFixedEfficiency(args[:cell_efficiency])
134
137
 
135
138
  # connect panel to electric load center distribution
136
139
  elcd.addGenerator(panel)
@@ -9,11 +9,10 @@
9
9
  # http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
10
10
 
11
11
  # start the measure
12
- require 'openstudio/extension/core/os_lib_helper_methods'
13
- require 'openstudio/extension/core/os_lib_schedules'
12
+ # require 'openstudio/extension/core/os_lib_helper_methods'
13
+ # require 'openstudio/extension/core/os_lib_schedules'
14
+ require 'openstudio-standards'
14
15
  class AverageVentilationForPeakHours < OpenStudio::Measure::ModelMeasure
15
- include OsLib_HelperMethods
16
- include OsLib_Schedules
17
16
  # human readable name
18
17
  def name
19
18
  return "Average Ventilation for Peak Hours"
@@ -188,7 +187,8 @@ class AverageVentilationForPeakHours < OpenStudio::Measure::ModelMeasure
188
187
  'default_day' => ["default day"] + normal_day_data_pairs,
189
188
  'rules' => [['Adjusted days', "#{start_month1}/#{start_day1}-#{end_month1}/#{end_day1}",
190
189
  'Sun/Mon/Tue/Wed/Thu/Fri/Sat'] + adjusted_day_data_pairs] }
191
- new_oa_sch = OsLib_Schedules.createComplexSchedule(model, options)
190
+ # new_oa_sch = OsLib_Schedules.createComplexSchedule(model, options)
191
+ new_oa_sch = OpenstudioStandards::Schedules.create_complex_schedule(model, options)
192
192
  outdoor_air_object.setOutdoorAirFlowRateFractionSchedule(new_oa_sch)
193
193
  else
194
194
  if schedules.key?(oa_sch.get.name.to_s)
@@ -66,9 +66,9 @@ class EnableOccupancyDrivenLighting < OpenStudio::Measure::ModelMeasure
66
66
  end
67
67
  runner.registerInfo("Pre-run output path: #{run_output_path}")
68
68
 
69
- Dir.mkdir(run_output_path) unless File.exists?(run_output_path)
69
+ Dir.mkdir(run_output_path) unless File.exist?(run_output_path)
70
70
  prerun_dir = File.join(run_output_path, 'pre-run')
71
- Dir.mkdir(prerun_dir) unless File.exists?(prerun_dir)
71
+ Dir.mkdir(prerun_dir) unless File.exist?(prerun_dir)
72
72
  prerun_osw_path = File.join(prerun_dir, 'sizing.osm')
73
73
  model.save(prerun_osw_path, true) # true is overwrite
74
74
 
@@ -74,6 +74,8 @@ module OpenStudio
74
74
  def apply_measures(osw_result_folder)
75
75
  # create osw_file
76
76
  osw_path = File.join(osw_result_folder, "geb.osw")
77
+ # get the folder of measures
78
+ measures_path = File.expand_path("../../../measures/", __FILE__ )
77
79
 
78
80
  steps = []
79
81
  # measure_dict: hash of measures and their arguments => {measure_name: arguments}
@@ -82,7 +84,8 @@ module OpenStudio
82
84
  report_measures = {}
83
85
  @measure_dict.each_pair do |m_name, para_dict|
84
86
  # get all EnergyPlus and Reporting measures out and remove original ones
85
- File.open("#{para_dict['measure_dir_name']}/measure.rb", 'r') do |file|
87
+ # now measure_dir_name uses folder name rather than absolute path, adding "measure_paths" to the osw file
88
+ File.open("#{measures_path}/#{para_dict['measure_dir_name']}/measure.rb", 'r') do |file|
86
89
  file.each_line do |line|
87
90
  if line =~ /class.+EnergyPlusMeasure/
88
91
  energyplus_measures[m_name] = @measure_dict[m_name]
@@ -119,6 +122,7 @@ module OpenStudio
119
122
  end
120
123
 
121
124
  osw = {}
125
+ osw["measure_paths"] = [measures_path]
122
126
  osw["weather_file"] = @weather_file_path
123
127
  osw["seed_file"] = @baseline_dir_str
124
128
  osw["steps"] = steps
@@ -52,7 +52,8 @@ def list_all_geb_measures
52
52
  measures.each do |measure|
53
53
  measure_name = measure.split('/')[-2]
54
54
  measure_list[measure_name] = {}
55
- measure_list[measure_name]['measure_dir_name'] = File.dirname(measure)
55
+ # now measure_dir_name uses folder name rather than absolute path, adding "measure_paths" to the osw file
56
+ measure_list[measure_name]['measure_dir_name'] = File.basename(File.dirname(measure)) # get just this folder name
56
57
  end
57
58
 
58
59
  =begin
@@ -114,7 +115,7 @@ end
114
115
  def postprocess_out_osw(outdir)
115
116
 
116
117
  out_osw = File.join(outdir, 'out.osw')
117
- raise "Cannot find file #{out_osw}" if !File.exists?(out_osw)
118
+ raise "Cannot find file #{out_osw}" if !File.exist?(out_osw)
118
119
 
119
120
  result_osw = nil
120
121
  File.open(out_osw, 'r') do |f|
@@ -5,6 +5,6 @@
5
5
 
6
6
  module OpenStudio
7
7
  module Geb
8
- VERSION = '0.4.0'.freeze
8
+ VERSION = '0.5.0'.freeze
9
9
  end
10
10
  end
@@ -22,11 +22,14 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 2.1'
25
+ spec.required_ruby_version = '~> 3.2.2'
26
+
27
+ spec.add_dependency 'openstudio-extension', '~> 0.8.0'
28
+ spec.add_dependency 'openstudio-standards', '0.6.1'
29
+
30
+ spec.add_development_dependency 'bundler', '~> 2.4.10'
26
31
  spec.add_development_dependency 'rake', '~> 13.0'
27
- spec.add_development_dependency 'rspec', '3.7.0'
28
- spec.add_development_dependency 'rubocop', '~> 1.15.0'
32
+ spec.add_development_dependency 'rspec', '~> 3.9'
33
+ spec.add_development_dependency 'rubocop', '1.50'
29
34
 
30
- spec.add_dependency 'openstudio-extension', '~> 0.7.0'
31
- spec.add_dependency 'openstudio-standards', '~> 0.5.0'
32
35
  end