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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile +1 -1
- data/Jenkinsfile +1 -1
- data/README.md +1 -0
- data/Rakefile +3 -0
- data/lib/measures/AddMonthlyJSONUtilityData/measure.rb +3 -3
- data/lib/measures/AddMonthlyJSONUtilityData/measure.xml +3 -3
- data/lib/measures/AddMonthlyUtilityData/measure.xml +8 -8
- data/lib/measures/CalibrationReports/measure.rb +1 -3
- data/lib/measures/CalibrationReports/measure.xml +4 -4
- data/lib/measures/CalibrationReportsEnhanced/measure.rb +21 -22
- data/lib/measures/CalibrationReportsEnhanced/measure.xml +4 -4
- data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/measure.rb +12 -12
- data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/measure.xml +5 -5
- data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/measure.rb +12 -12
- data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/measure.xml +5 -5
- data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/measure.rb +21 -23
- data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/measure.xml +5 -5
- data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/measure.rb +21 -23
- data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/measure.xml +5 -5
- data/lib/measures/CoilCoolingWaterMultiplier/measure.rb +33 -43
- data/lib/measures/CoilCoolingWaterMultiplier/measure.xml +5 -5
- data/lib/measures/CoilCoolingWaterPercentChange/measure.rb +33 -43
- data/lib/measures/CoilCoolingWaterPercentChange/measure.xml +5 -5
- data/lib/measures/CoilHeatingElectricMultiplier/measure.rb +8 -8
- data/lib/measures/CoilHeatingElectricMultiplier/measure.xml +5 -5
- data/lib/measures/CoilHeatingElectricPercentChange/measure.rb +8 -8
- data/lib/measures/CoilHeatingElectricPercentChange/measure.xml +5 -5
- data/lib/measures/CoilHeatingGasMultiplier/measure.rb +8 -8
- data/lib/measures/CoilHeatingGasMultiplier/measure.xml +5 -5
- data/lib/measures/CoilHeatingGasPercentChange/measure.rb +8 -8
- data/lib/measures/CoilHeatingGasPercentChange/measure.xml +5 -5
- data/lib/measures/CoilHeatingWaterMultiplier/measure.rb +13 -15
- data/lib/measures/CoilHeatingWaterMultiplier/measure.xml +5 -5
- data/lib/measures/CoilHeatingWaterPercentChange/measure.rb +13 -15
- data/lib/measures/CoilHeatingWaterPercentChange/measure.xml +5 -5
- data/lib/measures/ConstructionLayerZeroMaterialProperties/measure.rb +4 -4
- data/lib/measures/ConstructionLayerZeroMaterialProperties/measure.xml +3 -3
- data/lib/measures/ExteriorWallThermalPropertiesMultiplier/measure.rb +8 -5
- data/lib/measures/ExteriorWallThermalPropertiesMultiplier/measure.xml +9 -9
- data/lib/measures/ExteriorWallThermalPropertiesPercentChange/measure.rb +8 -5
- data/lib/measures/ExteriorWallThermalPropertiesPercentChange/measure.xml +9 -9
- data/lib/measures/FansMultiplier/measure.rb +8 -8
- data/lib/measures/FansMultiplier/measure.xml +5 -5
- data/lib/measures/FansPercentChange/measure.rb +8 -8
- data/lib/measures/FansPercentChange/measure.xml +5 -5
- data/lib/measures/GeneralCalibrationMeasureMultiplier/measure.rb +2 -2
- data/lib/measures/GeneralCalibrationMeasureMultiplier/measure.xml +7 -7
- data/lib/measures/GeneralCalibrationMeasurePercentChange/measure.rb +2 -2
- data/lib/measures/GeneralCalibrationMeasurePercentChange/measure.xml +7 -7
- data/lib/measures/HardSizeHvac/measure.rb +2 -4
- data/lib/measures/HardSizeHvac/measure.xml +4 -4
- data/lib/measures/RValueOfInsulationForConstructionMultiplier/measure.rb +7 -9
- data/lib/measures/RValueOfInsulationForConstructionMultiplier/measure.xml +3 -3
- data/lib/measures/RValueOfInsulationForConstructionPercentageChange/measure.rb +7 -9
- data/lib/measures/RValueOfInsulationForConstructionPercentageChange/measure.xml +3 -3
- data/lib/measures/RoofThermalPropertiesMultiplier/measure.rb +8 -5
- data/lib/measures/RoofThermalPropertiesMultiplier/measure.xml +9 -9
- data/lib/measures/RoofThermalPropertiesPercentChange/measure.rb +8 -5
- data/lib/measures/RoofThermalPropertiesPercentChange/measure.xml +9 -9
- data/lib/measures/TimeseriesObjectiveFunction/README.md +51 -1
- data/lib/measures/TimeseriesObjectiveFunction/measure.rb +59 -53
- data/lib/measures/TimeseriesObjectiveFunction/measure.xml +26 -25
- data/lib/measures/TimeseriesObjectiveFunction/resources/report.html.erb +3 -0
- data/lib/measures/TimeseriesPlot/measure.rb +1 -3
- data/lib/measures/TimeseriesPlot/measure.xml +13 -13
- data/lib/measures/TimeseriesPlot/resources/report.html.erb +3 -0
- data/lib/measures/WaterHeaterMixedMultiplier/measure.rb +17 -22
- data/lib/measures/WaterHeaterMixedMultiplier/measure.xml +5 -5
- data/lib/measures/WaterHeaterMixedPercentChange/measure.rb +17 -22
- data/lib/measures/WaterHeaterMixedPercentChange/measure.xml +5 -5
- data/lib/measures/inspect_and_edit_parametric_schedules/measure.rb +13 -11
- data/lib/measures/inspect_and_edit_parametric_schedules/measure.xml +29 -29
- data/lib/measures/shift_hours_of_operation/measure.rb +31 -29
- data/lib/measures/shift_hours_of_operation/measure.xml +51 -37
- data/lib/openstudio/calibration/version.rb +1 -1
- data/openstudio-calibration.gemspec +13 -6
- metadata +69 -14
- 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
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
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
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
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
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
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
|
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>
|
7
|
-
<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>{
|
20
|
+
<default_value>{9fa48e19-3ce7-4149-85aa-b4d271b951ee}</default_value>
|
21
21
|
<choices>
|
22
22
|
<choice>
|
23
|
-
<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>
|
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 =
|
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
|
-
#
|
127
|
-
|
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
|
-
#
|
177
|
+
# if requested re-generate schedules
|
178
178
|
if args['apply_parametric_sch']
|
179
|
-
parametric_schedules =
|
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
|
-
#
|
187
|
-
|
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.
|
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>
|
7
|
-
<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>
|
79
|
-
<filetype>
|
80
|
-
<usage_type>
|
81
|
-
<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>
|
103
|
-
<filetype>
|
104
|
-
<usage_type>
|
105
|
-
<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>
|
109
|
-
<filetype>
|
110
|
-
<usage_type>
|
111
|
-
<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.
|
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>
|
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
|
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 =
|
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.
|
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 =
|
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
|
-
#
|
397
|
-
|
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
|
-
#
|
408
|
-
|
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
|
-
|
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 =
|
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
|
-
|
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 =
|
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 =
|
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
|
-
#
|
483
|
-
|
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.
|
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>
|
7
|
-
<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>
|
216
|
-
<filetype>
|
217
|
-
<usage_type>
|
218
|
-
<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
|
228
|
-
<filetype>
|
229
|
-
<usage_type>
|
230
|
-
<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
|
246
|
-
<filetype>
|
247
|
-
<usage_type>
|
248
|
-
<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>
|
285
|
+
<checksum>59E5AA36</checksum>
|
267
286
|
</file>
|
268
287
|
<file>
|
269
|
-
<
|
270
|
-
|
271
|
-
|
272
|
-
|
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>
|
@@ -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
|
27
|
-
spec.executables
|
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.
|
30
|
+
spec.required_ruby_version = '~> 3.2.2'
|
31
31
|
|
32
|
-
spec.add_dependency 'bundler', '~> 2.
|
33
|
-
spec.add_dependency 'openstudio-extension', '~> 0.
|
34
|
-
spec.add_dependency 'openstudio-standards', '
|
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
|