openstudio-calibration 0.8.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/Gemfile +1 -1
  4. data/Jenkinsfile +1 -1
  5. data/README.md +1 -0
  6. data/Rakefile +3 -0
  7. data/lib/measures/AddMonthlyJSONUtilityData/measure.rb +3 -3
  8. data/lib/measures/AddMonthlyJSONUtilityData/measure.xml +3 -3
  9. data/lib/measures/AddMonthlyUtilityData/measure.xml +8 -8
  10. data/lib/measures/CalibrationReports/measure.rb +1 -3
  11. data/lib/measures/CalibrationReports/measure.xml +4 -4
  12. data/lib/measures/CalibrationReportsEnhanced/measure.rb +21 -22
  13. data/lib/measures/CalibrationReportsEnhanced/measure.xml +4 -4
  14. data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/measure.rb +12 -12
  15. data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/measure.xml +5 -5
  16. data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/measure.rb +12 -12
  17. data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/measure.xml +5 -5
  18. data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/measure.rb +21 -23
  19. data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/measure.xml +5 -5
  20. data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/measure.rb +21 -23
  21. data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/measure.xml +5 -5
  22. data/lib/measures/CoilCoolingWaterMultiplier/measure.rb +33 -43
  23. data/lib/measures/CoilCoolingWaterMultiplier/measure.xml +5 -5
  24. data/lib/measures/CoilCoolingWaterPercentChange/measure.rb +33 -43
  25. data/lib/measures/CoilCoolingWaterPercentChange/measure.xml +5 -5
  26. data/lib/measures/CoilHeatingElectricMultiplier/measure.rb +8 -8
  27. data/lib/measures/CoilHeatingElectricMultiplier/measure.xml +5 -5
  28. data/lib/measures/CoilHeatingElectricPercentChange/measure.rb +8 -8
  29. data/lib/measures/CoilHeatingElectricPercentChange/measure.xml +5 -5
  30. data/lib/measures/CoilHeatingGasMultiplier/measure.rb +8 -8
  31. data/lib/measures/CoilHeatingGasMultiplier/measure.xml +5 -5
  32. data/lib/measures/CoilHeatingGasPercentChange/measure.rb +8 -8
  33. data/lib/measures/CoilHeatingGasPercentChange/measure.xml +5 -5
  34. data/lib/measures/CoilHeatingWaterMultiplier/measure.rb +13 -15
  35. data/lib/measures/CoilHeatingWaterMultiplier/measure.xml +5 -5
  36. data/lib/measures/CoilHeatingWaterPercentChange/measure.rb +13 -15
  37. data/lib/measures/CoilHeatingWaterPercentChange/measure.xml +5 -5
  38. data/lib/measures/ConstructionLayerZeroMaterialProperties/measure.rb +4 -4
  39. data/lib/measures/ConstructionLayerZeroMaterialProperties/measure.xml +3 -3
  40. data/lib/measures/ExteriorWallThermalPropertiesMultiplier/measure.rb +8 -5
  41. data/lib/measures/ExteriorWallThermalPropertiesMultiplier/measure.xml +9 -9
  42. data/lib/measures/ExteriorWallThermalPropertiesPercentChange/measure.rb +8 -5
  43. data/lib/measures/ExteriorWallThermalPropertiesPercentChange/measure.xml +9 -9
  44. data/lib/measures/FansMultiplier/measure.rb +8 -8
  45. data/lib/measures/FansMultiplier/measure.xml +5 -5
  46. data/lib/measures/FansPercentChange/measure.rb +8 -8
  47. data/lib/measures/FansPercentChange/measure.xml +5 -5
  48. data/lib/measures/GeneralCalibrationMeasureMultiplier/measure.rb +2 -2
  49. data/lib/measures/GeneralCalibrationMeasureMultiplier/measure.xml +7 -7
  50. data/lib/measures/GeneralCalibrationMeasurePercentChange/measure.rb +2 -2
  51. data/lib/measures/GeneralCalibrationMeasurePercentChange/measure.xml +7 -7
  52. data/lib/measures/HardSizeHvac/measure.rb +2 -4
  53. data/lib/measures/HardSizeHvac/measure.xml +4 -4
  54. data/lib/measures/RValueOfInsulationForConstructionMultiplier/measure.rb +7 -9
  55. data/lib/measures/RValueOfInsulationForConstructionMultiplier/measure.xml +3 -3
  56. data/lib/measures/RValueOfInsulationForConstructionPercentageChange/measure.rb +7 -9
  57. data/lib/measures/RValueOfInsulationForConstructionPercentageChange/measure.xml +3 -3
  58. data/lib/measures/RoofThermalPropertiesMultiplier/measure.rb +8 -5
  59. data/lib/measures/RoofThermalPropertiesMultiplier/measure.xml +9 -9
  60. data/lib/measures/RoofThermalPropertiesPercentChange/measure.rb +8 -5
  61. data/lib/measures/RoofThermalPropertiesPercentChange/measure.xml +9 -9
  62. data/lib/measures/TimeseriesObjectiveFunction/README.md +51 -1
  63. data/lib/measures/TimeseriesObjectiveFunction/measure.rb +59 -53
  64. data/lib/measures/TimeseriesObjectiveFunction/measure.xml +26 -25
  65. data/lib/measures/TimeseriesObjectiveFunction/resources/report.html.erb +3 -0
  66. data/lib/measures/TimeseriesPlot/measure.rb +1 -3
  67. data/lib/measures/TimeseriesPlot/measure.xml +13 -13
  68. data/lib/measures/TimeseriesPlot/resources/report.html.erb +3 -0
  69. data/lib/measures/WaterHeaterMixedMultiplier/measure.rb +17 -22
  70. data/lib/measures/WaterHeaterMixedMultiplier/measure.xml +5 -5
  71. data/lib/measures/WaterHeaterMixedPercentChange/measure.rb +17 -22
  72. data/lib/measures/WaterHeaterMixedPercentChange/measure.xml +5 -5
  73. data/lib/measures/inspect_and_edit_parametric_schedules/measure.rb +13 -11
  74. data/lib/measures/inspect_and_edit_parametric_schedules/measure.xml +29 -29
  75. data/lib/measures/shift_hours_of_operation/measure.rb +31 -29
  76. data/lib/measures/shift_hours_of_operation/measure.xml +51 -37
  77. data/lib/openstudio/calibration/version.rb +1 -1
  78. data/openstudio-calibration.gemspec +13 -6
  79. metadata +69 -14
  80. data/lib/measures/TimeseriesObjectiveFunction/README.md.erb +0 -42
@@ -156,33 +156,27 @@ class WaterHeaterMixedPercentChange < OpenStudio::Measure::ModelMeasure
156
156
  water_heaters.each do |water_heater|
157
157
  altered_heater = false
158
158
  # modify maximum_capacity_multiplier
159
- if maximum_capacity_multiplier != 0.0
160
- if water_heater.heaterMaximumCapacity.is_initialized
161
- runner.registerInfo("Applying #{maximum_capacity_multiplier}x maximum capacity Percent Change to #{water_heater.name.get}.")
162
- water_heater.setHeaterMaximumCapacity(water_heater.heaterMaximumCapacity.get + water_heater.heaterMaximumCapacity.get * maximum_capacity_multiplier * 0.01)
163
- altered_max_cap << water_heater.handle.to_s
164
- altered_heater = true
165
- end
159
+ if maximum_capacity_multiplier != 0.0 && water_heater.heaterMaximumCapacity.is_initialized
160
+ runner.registerInfo("Applying #{maximum_capacity_multiplier}x maximum capacity Percent Change to #{water_heater.name.get}.")
161
+ water_heater.setHeaterMaximumCapacity(water_heater.heaterMaximumCapacity.get + water_heater.heaterMaximumCapacity.get * maximum_capacity_multiplier * 0.01)
162
+ altered_max_cap << water_heater.handle.to_s
163
+ altered_heater = true
166
164
  end
167
165
 
168
166
  # modify minimum_capacity_multiplier
169
- if minimum_capacity_multiplier != 0.0
170
- if water_heater.heaterMinimumCapacity.is_initialized
171
- runner.registerInfo("Applying #{minimum_capacity_multiplier}x minimum capacity Percent Change to #{water_heater.name.get}.")
172
- water_heater.setHeaterMaximumCapacity(water_heater.heaterMinimumCapacity.get + water_heater.heaterMinimumCapacity.get * minimum_capacity_multiplier * 0.01)
173
- altered_min_cap << water_heater.handle.to_s
174
- altered_heater = true
175
- end
167
+ if minimum_capacity_multiplier != 0.0 && water_heater.heaterMinimumCapacity.is_initialized
168
+ runner.registerInfo("Applying #{minimum_capacity_multiplier}x minimum capacity Percent Change to #{water_heater.name.get}.")
169
+ water_heater.setHeaterMaximumCapacity(water_heater.heaterMinimumCapacity.get + water_heater.heaterMinimumCapacity.get * minimum_capacity_multiplier * 0.01)
170
+ altered_min_cap << water_heater.handle.to_s
171
+ altered_heater = true
176
172
  end
177
173
 
178
174
  # modify thermal_efficiency_multiplier
179
- if thermal_efficiency_multiplier != 0.0
180
- if water_heater.heaterThermalEfficiency.is_initialized
181
- runner.registerInfo("Applying #{thermal_efficiency_multiplier}x thermal efficiency Percent Change to #{water_heater.name.get}.")
182
- water_heater.setHeaterThermalEfficiency(water_heater.heaterThermalEfficiency.get + water_heater.heaterThermalEfficiency.get * thermal_efficiency_multiplier * 0.01)
183
- altered_thermalefficiency << water_heater.handle.to_s
184
- altered_heater = true
185
- end
175
+ if thermal_efficiency_multiplier != 0.0 && water_heater.heaterThermalEfficiency.is_initialized
176
+ runner.registerInfo("Applying #{thermal_efficiency_multiplier}x thermal efficiency Percent Change to #{water_heater.name.get}.")
177
+ water_heater.setHeaterThermalEfficiency(water_heater.heaterThermalEfficiency.get + water_heater.heaterThermalEfficiency.get * thermal_efficiency_multiplier * 0.01)
178
+ altered_thermalefficiency << water_heater.handle.to_s
179
+ altered_heater = true
186
180
  end
187
181
 
188
182
  orig_fuel_type = water_heater.heaterFuelType
@@ -193,10 +187,11 @@ class WaterHeaterMixedPercentChange < OpenStudio::Measure::ModelMeasure
193
187
  end
194
188
 
195
189
  next unless altered_heater
190
+
196
191
  altered_heaters << water_heater.handle.to_s
197
192
  change_name(water_heater, maximum_capacity_multiplier, minimum_capacity_multiplier, thermal_efficiency_multiplier, fuel_type, orig_fuel_type)
198
193
  runner.registerInfo("WaterHeater name changed to: #{water_heater.name.get}")
199
- end # end water_heater loop
194
+ end
200
195
 
201
196
  # na if nothing in model to look at
202
197
  if altered_heaters.empty?
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.0</schema_version>
4
4
  <name>water_heater_mixed_percent_change</name>
5
5
  <uid>c42bf4e7-2bbb-44c6-ab91-e6ddb53e050d</uid>
6
- <version_id>63f5274b-2240-4fe7-aee5-2b96309f435e</version_id>
7
- <version_modified>20230602T154657Z</version_modified>
6
+ <version_id>5a4c46fa-7fb4-4a4b-a51f-5055fd061518</version_id>
7
+ <version_modified>20240428T231349Z</version_modified>
8
8
  <xml_checksum>D28BCE9C</xml_checksum>
9
9
  <class_name>WaterHeaterMixedPercentChange</class_name>
10
10
  <display_name>Water Heater Mixed Percent Change</display_name>
@@ -17,10 +17,10 @@
17
17
  <type>Choice</type>
18
18
  <required>true</required>
19
19
  <model_dependent>false</model_dependent>
20
- <default_value>{978271ac-8723-4076-ab28-6cc9c2da6144}</default_value>
20
+ <default_value>{9fa48e19-3ce7-4149-85aa-b4d271b951ee}</default_value>
21
21
  <choices>
22
22
  <choice>
23
- <value>{978271ac-8723-4076-ab28-6cc9c2da6144}</value>
23
+ <value>{9fa48e19-3ce7-4149-85aa-b4d271b951ee}</value>
24
24
  <display_name>*All WaterHeaterMixeds*</display_name>
25
25
  </choice>
26
26
  <choice>
@@ -176,7 +176,7 @@
176
176
  <filename>measure.rb</filename>
177
177
  <filetype>rb</filetype>
178
178
  <usage_type>script</usage_type>
179
- <checksum>2831FFEF</checksum>
179
+ <checksum>CE10E4B6</checksum>
180
180
  </file>
181
181
  </files>
182
182
  </measure>
@@ -10,10 +10,6 @@
10
10
 
11
11
  require 'openstudio-standards'
12
12
 
13
- # load OpenStudio measure libraries from openstudio-extension gem
14
- require 'openstudio-extension'
15
- require 'openstudio/extension/core/os_lib_helper_methods'
16
-
17
13
  # start the measure
18
14
  class InspectAndEditParametricSchedules < OpenStudio::Measure::ModelMeasure
19
15
  # human readable name
@@ -120,11 +116,15 @@ class InspectAndEditParametricSchedules < OpenStudio::Measure::ModelMeasure
120
116
  super(model, runner, user_arguments)
121
117
 
122
118
  # assign the user inputs to variables
123
- args = OsLib_HelperMethods.createRunVariables(runner, model, user_arguments, arguments(model))
119
+ args = runner.getArgumentValues(arguments(model), user_arguments)
120
+ args = Hash[args.collect{ |k, v| [k.to_s, v] }]
124
121
  if !args then return false end
122
+
123
+ # open channel to log messages
124
+ reset_log
125
125
 
126
- # setup log messages that will come from standards
127
- OsLib_HelperMethods.setup_log_msgs(runner, true) # bool is debug
126
+ # Turn debugging output on/off
127
+ debug = false
128
128
 
129
129
  # load standards
130
130
  standard = Standard.build('90.1-2004') # selected template doesn't matter
@@ -174,17 +174,19 @@ class InspectAndEditParametricSchedules < OpenStudio::Measure::ModelMeasure
174
174
  # report initial condition of model
175
175
  runner.registerInitialCondition("The building started with #{counter_parametric_schedules.uniq.size.size} parametric schedules.")
176
176
 
177
- # if requested re-generate schedules
177
+ # if requested re-generate schedules
178
178
  if args['apply_parametric_sch']
179
- parametric_schedules = standard.model_apply_parametric_schedules(model, ramp_frequency: nil, infer_hoo_for_non_assigned_objects: true, error_on_out_of_order: true)
179
+ parametric_schedules = OpenstudioStandards::Schedules.model_apply_parametric_schedules(model, ramp_frequency: nil, infer_hoo_for_non_assigned_objects: true, error_on_out_of_order: true)
180
180
  runner.registerInfo("Applying #{parametric_schedules.size} parametric schedules.")
181
181
  end
182
182
 
183
183
  # report final condition of model
184
184
  runner.registerFinalCondition("The building finished with #{parametric_schedules.size} parametric schedules.")
185
185
 
186
- # report log messages from standards
187
- OsLib_HelperMethods.log_msgs
186
+ # gather log
187
+ log_messages_to_runner(runner, debug)
188
+ reset_log
189
+
188
190
 
189
191
  return true
190
192
  end
@@ -1,10 +1,10 @@
1
1
  <?xml version="1.0"?>
2
2
  <measure>
3
- <schema_version>3.0</schema_version>
3
+ <schema_version>3.1</schema_version>
4
4
  <name>inspect_and_edit_parametric_schedules</name>
5
5
  <uid>4b5f610d-caac-47c2-bd5b-610e2fc0768e</uid>
6
- <version_id>1d17e26a-5b3d-4d74-b5bb-7623dc3d5e3a</version_id>
7
- <version_modified>20230602T154656Z</version_modified>
6
+ <version_id>cbb5a3da-7152-4bb9-832c-7028f7eda960</version_id>
7
+ <version_modified>2024-07-11T19:58:13Z</version_modified>
8
8
  <xml_checksum>57318DBA</xml_checksum>
9
9
  <class_name>InspectAndEditParametricSchedules</class_name>
10
10
  <display_name>Inspect and Edit Parametric Schedules</display_name>
@@ -75,22 +75,10 @@
75
75
  </attributes>
76
76
  <files>
77
77
  <file>
78
- <filename>example_parametric_model.osm</filename>
79
- <filetype>osm</filetype>
80
- <usage_type>test</usage_type>
81
- <checksum>A0C68C28</checksum>
82
- </file>
83
- <file>
84
- <filename>apply_measures_now.png</filename>
85
- <filetype>png</filetype>
86
- <usage_type>doc</usage_type>
87
- <checksum>2D9A8051</checksum>
88
- </file>
89
- <file>
90
- <filename>README.md.erb</filename>
91
- <filetype>erb</filetype>
92
- <usage_type>readmeerb</usage_type>
93
- <checksum>F073FF6D</checksum>
78
+ <filename>LICENSE.md</filename>
79
+ <filetype>md</filetype>
80
+ <usage_type>license</usage_type>
81
+ <checksum>BFFB1AA6</checksum>
94
82
  </file>
95
83
  <file>
96
84
  <filename>README.md</filename>
@@ -99,27 +87,39 @@
99
87
  <checksum>A551610E</checksum>
100
88
  </file>
101
89
  <file>
102
- <filename>LICENSE.md</filename>
103
- <filetype>md</filetype>
104
- <usage_type>license</usage_type>
105
- <checksum>BFFB1AA6</checksum>
90
+ <filename>README.md.erb</filename>
91
+ <filetype>erb</filetype>
92
+ <usage_type>readmeerb</usage_type>
93
+ <checksum>F073FF6D</checksum>
106
94
  </file>
107
95
  <file>
108
- <filename>inspect_and_edit_parametric_schedules_test.rb</filename>
109
- <filetype>rb</filetype>
110
- <usage_type>test</usage_type>
111
- <checksum>83CA7DAD</checksum>
96
+ <filename>apply_measures_now.png</filename>
97
+ <filetype>png</filetype>
98
+ <usage_type>doc</usage_type>
99
+ <checksum>2D9A8051</checksum>
112
100
  </file>
113
101
  <file>
114
102
  <version>
115
103
  <software_program>OpenStudio</software_program>
116
104
  <identifier>3.1.0</identifier>
117
- <min_compatible>3.1.0</min_compatible>
105
+ <min_compatible>3.8.0</min_compatible>
118
106
  </version>
119
107
  <filename>measure.rb</filename>
120
108
  <filetype>rb</filetype>
121
109
  <usage_type>script</usage_type>
122
- <checksum>EFE84854</checksum>
110
+ <checksum>5164BF8C</checksum>
111
+ </file>
112
+ <file>
113
+ <filename>example_parametric_model.osm</filename>
114
+ <filetype>osm</filetype>
115
+ <usage_type>test</usage_type>
116
+ <checksum>A0C68C28</checksum>
117
+ </file>
118
+ <file>
119
+ <filename>inspect_and_edit_parametric_schedules_test.rb</filename>
120
+ <filetype>rb</filetype>
121
+ <usage_type>test</usage_type>
122
+ <checksum>5DFEDEDD</checksum>
123
123
  </file>
124
124
  </files>
125
125
  </measure>
@@ -10,14 +10,8 @@
10
10
 
11
11
  require 'openstudio-standards'
12
12
 
13
- # load OpenStudio measure libraries from openstudio-extension gem
14
- require 'openstudio-extension'
15
- require 'openstudio/extension/core/os_lib_helper_methods'
16
-
17
13
  # start the measure
18
14
  class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
19
- # resource file modules
20
- include OsLib_HelperMethods
21
15
 
22
16
  # human readable name
23
17
  def name
@@ -45,14 +39,18 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
45
39
  hoo_start_weekday.setDescription('Use decimal hours so an 1 hour and 15 minute shift would be 1.25. Positive value moves the hour of operation later')
46
40
  hoo_start_weekday.setDefaultValue(0.0)
47
41
  hoo_start_weekday.setUnits('Hours')
42
+ hoo_start_weekday.setMinValue(-24.0)
43
+ hoo_start_weekday.setMaxValue(24.0)
48
44
  args << hoo_start_weekday
49
45
 
50
46
  # delta hoo_dur for weekday
51
47
  hoo_dur_weekday = OpenStudio::Measure::OSArgument.makeDoubleArgument('hoo_dur_weekday', true)
52
48
  hoo_dur_weekday.setDisplayName('Extend the weekday of hours of operation.')
53
49
  hoo_dur_weekday.setDescription('Use decimal hours so an 1 hour and 15 minute would be 1.25. Positive value makes the hour of operation longer.')
54
- hoo_dur_weekday .setDefaultValue(0.0)
50
+ hoo_dur_weekday.setDefaultValue(0.0)
55
51
  hoo_dur_weekday.setUnits('Hours')
52
+ hoo_dur_weekday.setMinValue(-24.0)
53
+ hoo_dur_weekday.setMaxValue(24.0)
56
54
  args << hoo_dur_weekday
57
55
 
58
56
  # TODO: - could include every day of the week
@@ -63,6 +61,8 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
63
61
  hoo_start_saturday.setDescription('Use decimal hours so an 1 hour and 15 minute shift would be 1.25. Positive value moves the hour of operation later')
64
62
  hoo_start_saturday.setDefaultValue(0.0)
65
63
  hoo_start_saturday.setUnits('Hours')
64
+ hoo_start_saturday.setMinValue(-24.0)
65
+ hoo_start_saturday.setMaxValue(24.0)
66
66
  args << hoo_start_saturday
67
67
 
68
68
  # delta hoo_dur for saturday
@@ -71,6 +71,8 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
71
71
  hoo_dur_saturday.setDescription('Use decimal hours so an 1 hour and 15 minute would be 1.25. Positive value makes the hour of operation longer.')
72
72
  hoo_dur_saturday.setDefaultValue(0.0)
73
73
  hoo_dur_saturday.setUnits('Hours')
74
+ hoo_dur_saturday.setMinValue(-24.0)
75
+ hoo_dur_saturday.setMaxValue(24.0)
74
76
  args << hoo_dur_saturday
75
77
 
76
78
  # delta hoo_start for sundays
@@ -79,6 +81,8 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
79
81
  hoo_start_sunday.setDescription('Use decimal hours so an 1 hour and 15 minute shift would be 1.25. Positive value moves the hour of operation later')
80
82
  hoo_start_sunday.setDefaultValue(0.0)
81
83
  hoo_start_sunday.setUnits('Hours')
84
+ hoo_start_sunday.setMinValue(-24.0)
85
+ hoo_start_sunday.setMaxValue(24.0)
82
86
  args << hoo_start_sunday
83
87
 
84
88
  # delta hoo_dur for sunday
@@ -87,6 +91,8 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
87
91
  hoo_dur_sunday.setDescription('Use decimal hours so an 1 hour and 15 minute would be 1.25. Positive value makes the hour of operation longer.')
88
92
  hoo_dur_sunday.setDefaultValue(0.0)
89
93
  hoo_dur_sunday.setUnits('Hours')
94
+ hoo_dur_sunday.setMinValue(-24.0)
95
+ hoo_dur_sunday.setMaxValue(24.0)
90
96
  args << hoo_dur_sunday
91
97
 
92
98
  # TODO: - could include start and end days to have delta or absolute values applied to. (maybe decimal between 1.0 and 13.0 month where 3.50 would be March 15th)
@@ -111,6 +117,8 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
111
117
  fraction_of_daily_occ_range.setDescription('This determine what fraction of occupancy be considered operating conditions. This fraction is normalized to expanded to range seen over the full year and does not necessary equal fraction of design occupancy. This value should be between 0 and 1.0 and is only used if dynamically generated parametric schedules are used.')
112
118
  fraction_of_daily_occ_range.setDefaultValue(0.25)
113
119
  fraction_of_daily_occ_range.setUnits('Hours')
120
+ fraction_of_daily_occ_range.setMinValue(0.0)
121
+ fraction_of_daily_occ_range.setMaxValue(1.0)
114
122
  args << fraction_of_daily_occ_range
115
123
 
116
124
  # argument to choose hour of operation variable method
@@ -150,7 +158,7 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
150
158
  runner.registerWarning("Hours of Operation Schedule is not set for #{space.name}.")
151
159
  next
152
160
  end
153
- hours_of_operation_hash = standard.space_hours_of_operation(space)
161
+ hours_of_operation_hash = OpenstudioStandards::Space.space_hours_of_operation(space)
154
162
  hours_of_operation_hash.each do |hoo_key, val|
155
163
  if val[:hoo_hours] == 0.0
156
164
  hoo_summary_hash[:zero_hoo] << val[:hoo_hours]
@@ -234,7 +242,7 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
234
242
  # use this to link to hoo from hours_of_operation_hash
235
243
  counter_of_orig_index = hours_of_operation_hash.size - 2 # this is not impacted by cloning that may have happened above
236
244
 
237
- hoo_sch.scheduleRules.reverse.each do |rule|
245
+ hoo_sch.scheduleRules.reverse_each do |rule|
238
246
  # inspect days of the week
239
247
  actual_days_of_week_for_profile = []
240
248
  if rule.applyMonday then actual_days_of_week_for_profile << 'mon' end
@@ -390,22 +398,15 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
390
398
  super(model, runner, user_arguments)
391
399
 
392
400
  # assign the user inputs to variables
393
- args = OsLib_HelperMethods.createRunVariables(runner, model, user_arguments, arguments(model))
401
+ args = runner.getArgumentValues(arguments(model), user_arguments)
402
+ args = Hash[args.collect{ |k, v| [k.to_s, v] }]
394
403
  if !args then return false end
395
404
 
396
- # check expected values of double arguments
397
- fraction = OsLib_HelperMethods.checkDoubleAndIntegerArguments(runner, user_arguments, 'min' => 0.0, 'max' => 1.0, 'min_eq_bool' => true, 'max_eq_bool' => true, 'arg_array' => ['fraction_of_daily_occ_range'])
398
-
399
- neg_24__24 = ['hoo_start_weekday',
400
- 'hoo_dur_weekday',
401
- 'hoo_start_saturday',
402
- 'hoo_dur_saturday',
403
- 'hoo_start_sunday',
404
- 'hoo_dur_sunday']
405
- time_hours = OsLib_HelperMethods.checkDoubleAndIntegerArguments(runner, user_arguments, 'min' => -24.0, 'max' => 24.0, 'min_eq_bool' => true, 'max_eq_bool' => true, 'arg_array' => neg_24__24)
405
+ # open channel to log messages
406
+ reset_log
406
407
 
407
- # setup log messages that will come from standards
408
- OsLib_HelperMethods.setup_log_msgs(runner, true) # bool is debug
408
+ # Turn debugging output on/off
409
+ debug = false
409
410
 
410
411
  # load standards
411
412
  standard = Standard.build('90.1-2004') # selected template doesn't matter
@@ -414,19 +415,19 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
414
415
  # infer hours of operation for the building
415
416
  # @param fraction_of_daily_occ_range [Double] fraction above/below daily min range required to start and end hours of operation
416
417
  occ_fraction = args['fraction_of_daily_occ_range']
417
- standard.model_infer_hours_of_operation_building(model, fraction_of_daily_occ_range: occ_fraction, gen_occ_profile: true)
418
+ OpenstudioStandards::Schedules.model_infer_hours_of_operation_building(model, fraction_of_daily_occ_range: occ_fraction, gen_occ_profile: true)
418
419
  runner.registerInfo('Inferring initial hours of operation for the building and generating parametric profile formulas.')
419
420
 
420
421
  # report back hours of operation
421
422
  initial_hoo_range = []
422
- hours_of_operation_hash_test = standard.space_hours_of_operation(model.getSpaces.first)
423
+ hours_of_operation_hash_test = OpenstudioStandards::Space.space_hours_of_operation(model.getSpaces.first)
423
424
  hours_of_operation_hash_test.each do |hoo_key, val|
424
425
  initial_hoo_range << val[:hoo_hours]
425
426
  runner.registerInfo("For Profile Index #{hoo_key} hours of operation run for #{val[:hoo_hours]} hours, from #{val[:hoo_start]} to #{val[:hoo_end]} and is used for #{val[:days_used].size} days of the year.")
426
427
  end
427
428
 
428
429
  # model_setup_parametric_schedules
429
- standard.model_setup_parametric_schedules(model, gather_data_only: false, hoo_var_method: args['hoo_var_method'])
430
+ OpenstudioStandards::Schedules.model_setup_parametric_schedules(model, gather_data_only: false, hoo_var_method: args['hoo_var_method'])
430
431
  end
431
432
 
432
433
  # report initial condition of model
@@ -446,7 +447,7 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
446
447
  runner.registerWarning("Hours of Operation Schedule is not set for #{space.name}.")
447
448
  next
448
449
  end
449
- hours_of_operation_hash = standard.space_hours_of_operation(space)
450
+ hours_of_operation_hash = OpenstudioStandards::Space.space_hours_of_operation(space)
450
451
  used_hoo_sch_sets[hours_of_operation.get] = hours_of_operation_hash
451
452
  end
452
453
 
@@ -468,7 +469,7 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
468
469
  # TODO: - need to address this error when manipulating schedules
469
470
  # [openstudio.standards.ScheduleRuleset] <1> Pre-interpolated processed hash for Large Office Bldg Equip Default Schedule has one or more out of order conflicts: [[3.5, 0.8], [4.5, 0.6], [5.0, 0.6], [7.0, 0.5], [9.0, 0.4], [6.0, 0.4], [10.0, 0.9], [16.5, 0.9], [17.5, 0.8], [18.5, 0.9], [21.5, 0.9]]. Method will stop because Error on Out of Order was set to true.
470
471
  # model_build_parametric_schedules
471
- parametric_schedules = standard.model_apply_parametric_schedules(model, ramp_frequency: nil, infer_hoo_for_non_assigned_objects: true, error_on_out_of_order: true)
472
+ parametric_schedules = OpenstudioStandards::Schedules.model_apply_parametric_schedules(model, ramp_frequency: nil, infer_hoo_for_non_assigned_objects: true, error_on_out_of_order: false)
472
473
  runner.registerInfo("Created #{parametric_schedules.size} parametric schedules.")
473
474
 
474
475
  # report final condition of model
@@ -479,8 +480,9 @@ class ShiftHoursOfOperation < OpenStudio::Measure::ModelMeasure
479
480
  runner.registerFinalCondition("Across the building the hours of operation range from #{hoo_summary_hash[:final_hoo_dur_range].min} hours to #{hoo_summary_hash[:final_hoo_dur_range].max} hours. Start of hours of operation range from #{hoo_summary_hash[:final_hoo_start_range].min} to #{hoo_summary_hash[:final_hoo_start_range].max}.")
480
481
  end
481
482
 
482
- # get log messages (if debug in setup is true this will fail for error)
483
- OsLib_HelperMethods.log_msgs
483
+ # gather log
484
+ log_messages_to_runner(runner, debug)
485
+ reset_log
484
486
 
485
487
  # TODO: - adding hours of operation to a schedule that doesn't have them to start with, like a sunday, can be problematic
486
488
  # todo - start of day may not be reliable and there may not be formula inputs to show what occupied behavior is
@@ -1,10 +1,10 @@
1
1
  <?xml version="1.0"?>
2
2
  <measure>
3
- <schema_version>3.0</schema_version>
3
+ <schema_version>3.1</schema_version>
4
4
  <name>shift_hours_of_operation</name>
5
5
  <uid>e8ae02a4-4be2-45c3-b85b-2a1d94662653</uid>
6
- <version_id>1300914a-ae91-41df-9b9a-da9b2adde3ad</version_id>
7
- <version_modified>20230602T154656Z</version_modified>
6
+ <version_id>b960e0ec-2792-4cb7-aadc-e29fa84034bb</version_id>
7
+ <version_modified>2024-07-11T19:58:17Z</version_modified>
8
8
  <xml_checksum>4098406A</xml_checksum>
9
9
  <class_name>ShiftHoursOfOperation</class_name>
10
10
  <display_name>Shift Hours of Operation</display_name>
@@ -20,6 +20,8 @@
20
20
  <required>true</required>
21
21
  <model_dependent>false</model_dependent>
22
22
  <default_value>0</default_value>
23
+ <min_value>-24.000000</min_value>
24
+ <max_value>24.000000</max_value>
23
25
  </argument>
24
26
  <argument>
25
27
  <name>hoo_dur_weekday</name>
@@ -30,6 +32,8 @@
30
32
  <required>true</required>
31
33
  <model_dependent>false</model_dependent>
32
34
  <default_value>0</default_value>
35
+ <min_value>-24.000000</min_value>
36
+ <max_value>24.000000</max_value>
33
37
  </argument>
34
38
  <argument>
35
39
  <name>hoo_start_saturday</name>
@@ -40,6 +44,8 @@
40
44
  <required>true</required>
41
45
  <model_dependent>false</model_dependent>
42
46
  <default_value>0</default_value>
47
+ <min_value>-24.000000</min_value>
48
+ <max_value>24.000000</max_value>
43
49
  </argument>
44
50
  <argument>
45
51
  <name>hoo_dur_saturday</name>
@@ -50,6 +56,8 @@
50
56
  <required>true</required>
51
57
  <model_dependent>false</model_dependent>
52
58
  <default_value>0</default_value>
59
+ <min_value>-24.000000</min_value>
60
+ <max_value>24.000000</max_value>
53
61
  </argument>
54
62
  <argument>
55
63
  <name>hoo_start_sunday</name>
@@ -60,6 +68,8 @@
60
68
  <required>true</required>
61
69
  <model_dependent>false</model_dependent>
62
70
  <default_value>0</default_value>
71
+ <min_value>-24.000000</min_value>
72
+ <max_value>24.000000</max_value>
63
73
  </argument>
64
74
  <argument>
65
75
  <name>hoo_dur_sunday</name>
@@ -70,6 +80,8 @@
70
80
  <required>true</required>
71
81
  <model_dependent>false</model_dependent>
72
82
  <default_value>0</default_value>
83
+ <min_value>-24.000000</min_value>
84
+ <max_value>24.000000</max_value>
73
85
  </argument>
74
86
  <argument>
75
87
  <name>delta_values</name>
@@ -118,6 +130,8 @@
118
130
  <required>true</required>
119
131
  <model_dependent>false</model_dependent>
120
132
  <default_value>0.25</default_value>
133
+ <min_value>0.000000</min_value>
134
+ <max_value>1.000000</max_value>
121
135
  </argument>
122
136
  <argument>
123
137
  <name>hoo_var_method</name>
@@ -212,10 +226,16 @@
212
226
  </attributes>
213
227
  <files>
214
228
  <file>
215
- <filename>example_model.osm</filename>
216
- <filetype>osm</filetype>
217
- <usage_type>test</usage_type>
218
- <checksum>BE467EF8</checksum>
229
+ <filename>LICENSE.md</filename>
230
+ <filetype>md</filetype>
231
+ <usage_type>license</usage_type>
232
+ <checksum>BFFB1AA6</checksum>
233
+ </file>
234
+ <file>
235
+ <filename>README.md</filename>
236
+ <filetype>md</filetype>
237
+ <usage_type>readme</usage_type>
238
+ <checksum>46CEB194</checksum>
219
239
  </file>
220
240
  <file>
221
241
  <filename>README.md.erb</filename>
@@ -224,10 +244,21 @@
224
244
  <checksum>232D0477</checksum>
225
245
  </file>
226
246
  <file>
227
- <filename>target_hoo_from_model.osm</filename>
228
- <filetype>osm</filetype>
229
- <usage_type>test</usage_type>
230
- <checksum>3F74E693</checksum>
247
+ <filename>.gitkeep</filename>
248
+ <filetype>gitkeep</filetype>
249
+ <usage_type>doc</usage_type>
250
+ <checksum>00000000</checksum>
251
+ </file>
252
+ <file>
253
+ <version>
254
+ <software_program>OpenStudio</software_program>
255
+ <identifier>3.1.0</identifier>
256
+ <min_compatible>3.8.0</min_compatible>
257
+ </version>
258
+ <filename>measure.rb</filename>
259
+ <filetype>rb</filetype>
260
+ <usage_type>script</usage_type>
261
+ <checksum>564F5547</checksum>
231
262
  </file>
232
263
  <file>
233
264
  <filename>SimpleModel.osm</filename>
@@ -242,39 +273,22 @@
242
273
  <checksum>03619D54</checksum>
243
274
  </file>
244
275
  <file>
245
- <filename>.gitkeep</filename>
246
- <filetype>gitkeep</filetype>
247
- <usage_type>doc</usage_type>
248
- <checksum>00000000</checksum>
249
- </file>
250
- <file>
251
- <filename>README.md</filename>
252
- <filetype>md</filetype>
253
- <usage_type>readme</usage_type>
254
- <checksum>46CEB194</checksum>
255
- </file>
256
- <file>
257
- <filename>LICENSE.md</filename>
258
- <filetype>md</filetype>
259
- <usage_type>license</usage_type>
260
- <checksum>BFFB1AA6</checksum>
276
+ <filename>example_model.osm</filename>
277
+ <filetype>osm</filetype>
278
+ <usage_type>test</usage_type>
279
+ <checksum>BE467EF8</checksum>
261
280
  </file>
262
281
  <file>
263
282
  <filename>shift_hours_of_operation_test.rb</filename>
264
283
  <filetype>rb</filetype>
265
284
  <usage_type>test</usage_type>
266
- <checksum>7820BD97</checksum>
285
+ <checksum>59E5AA36</checksum>
267
286
  </file>
268
287
  <file>
269
- <version>
270
- <software_program>OpenStudio</software_program>
271
- <identifier>3.1.0</identifier>
272
- <min_compatible>3.1.0</min_compatible>
273
- </version>
274
- <filename>measure.rb</filename>
275
- <filetype>rb</filetype>
276
- <usage_type>script</usage_type>
277
- <checksum>8C482469</checksum>
288
+ <filename>target_hoo_from_model.osm</filename>
289
+ <filetype>osm</filetype>
290
+ <usage_type>test</usage_type>
291
+ <checksum>3F74E693</checksum>
278
292
  </file>
279
293
  </files>
280
294
  </measure>
@@ -5,6 +5,6 @@
5
5
 
6
6
  module OpenStudio
7
7
  module Calibration
8
- VERSION = '0.8.0'.freeze
8
+ VERSION = '0.10.0'.freeze
9
9
  end
10
10
  end
@@ -23,16 +23,23 @@ Gem::Specification.new do |spec|
23
23
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
24
24
  f.match(%r{^(test|lib.measures.*tests|spec|features)/})
25
25
  end
26
- spec.bindir = 'exe'
27
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
+ spec.bindir = 'exe'
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ['lib']
29
29
 
30
- spec.required_ruby_version = '~> 2.7.0'
30
+ spec.required_ruby_version = '~> 3.2.2'
31
31
 
32
- spec.add_dependency 'bundler', '~> 2.1'
33
- spec.add_dependency 'openstudio-extension', '~> 0.6.1'
34
- spec.add_dependency 'openstudio-standards', '~> 0.4.0'
32
+ spec.add_dependency 'bundler', '~> 2.4.10'
33
+ spec.add_dependency 'openstudio-extension', '~> 0.8.0'
34
+ spec.add_dependency 'openstudio-standards', '0.6.1'
35
+
36
+ # if we need the following dependencies pinned,
37
+ # let's set them in extension-gem for next release
38
+ spec.add_dependency 'multipart-post', '2.4.0'
39
+ spec.add_dependency 'regexp_parser', '2.9.0'
40
+ spec.add_dependency 'addressable', '2.8.1'
35
41
 
36
42
  spec.add_development_dependency 'rake', '~> 13.0'
37
43
  spec.add_development_dependency 'rspec', '~> 3.9'
44
+ spec.add_development_dependency 'octokit', '4.18.0' # for change logs
38
45
  end