openstudio-load-flexibility-measures 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/measures/add_hpwh/README.md +3 -163
- data/lib/measures/add_hpwh/docs/Flexible Domestic Hot Water Implementation Guide.pdf +0 -0
- data/lib/measures/add_hpwh/measure.rb +154 -156
- data/lib/measures/add_hpwh/measure.xml +76 -10
- data/lib/measures/add_packaged_ice_storage/measure.xml +8 -8
- data/lib/openstudio/load_flexibility_measures/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 678b5aacbeb51baa27c912b8691b2eaa2279ba92dbc96ebe0a9dd3f111a29c42
|
4
|
+
data.tar.gz: 12768b48601c478e3e6119d7aff9c1456c21ca4ded142561a061303839458aad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef15d6c3b4900eda9ca4d128668a06e1dbf77335902a61732bd920cff9748f061bb907810c2a497ea0127e450d5d5f8b2a217d526d9fe85938b3743b36db20d6
|
7
|
+
data.tar.gz: 93e4dedd2bd79ef2d9b1254e3e78eebbf3bd949f18682b224219c468c04c22365d3a958cc917a8ec38157107aab0bd8c2c0bd811cf19e7816b734c21fa86f5b3
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
# OpenStudio Load Flexibility Measures Gem
|
2
2
|
|
3
|
+
## Version 0.3.2
|
4
|
+
* Modify HPWH measure "simplified" option to automatically identify water heater objects without explicit user naming
|
5
|
+
* Modify HPWH measure to improve integration with URBANopt workflow
|
6
|
+
* Update HPWH measure documentation
|
7
|
+
|
3
8
|
## Version 0.3.1
|
4
9
|
* Updated OS Extension dependency to 0.4.2
|
5
10
|
* Updated OS Standards dependency to 0.2.13
|
11
|
+
* Added Jenkins file for CI testing
|
6
12
|
|
7
13
|
## Version 0.3.0
|
8
14
|
* Merged [#20](https://github.com/NREL/openstudio-load-flexibility-measures-gem/pull/20), 030 upgrade
|
@@ -2,14 +2,12 @@
|
|
2
2
|
|
3
3
|
###### (Automatically generated documentation)
|
4
4
|
|
5
|
-
#
|
5
|
+
#
|
6
6
|
|
7
7
|
## Description
|
8
|
-
|
8
|
+
|
9
9
|
|
10
10
|
## Modeler Description
|
11
|
-
This measure allows selection between three heat pump water heater modeling approaches in EnergyPlus.The user may select between the pumped-condenser or wrapped-condenser objects. They may also elect to use a simplified calculation which does not use the heat pump objects, but instead used an electric resistance heater and approximates the equivalent electrical input that would be required from a heat pump. This expedites simulation at the expense of accuracy.
|
12
|
-
The flexibility of the system is based on user-defined temperatures and times, which are converted into schedule objects. There are four flexibility options. (1) None: normal operation of the DHW system at a fixed tank temperature setpoint. (2) Charge - Heat Pump: the tank is charged to a maximum temperature using only the heat pump. (3) Charge - Electric: the tank is charged using internal electric resistance heaters to a maximum temperature. (4) Float: all heating elements are turned-off for a user-defined time period unless the tank temperature falls below a minimum value. The heat pump will be prioritized in a low tank temperature event, with the electric resistance heaters serving as back-up.
|
13
11
|
|
14
12
|
|
15
13
|
## Measure Type
|
@@ -21,166 +19,8 @@ ModelMeasure
|
|
21
19
|
## Arguments
|
22
20
|
|
23
21
|
|
24
|
-
### Remove existing water heater on selected loop
|
25
|
-
|
26
|
-
**Name:** remove_wh,
|
27
|
-
**Type:** Boolean,
|
28
|
-
**Units:** ,
|
29
|
-
**Required:** true,
|
30
|
-
**Model Dependent:** false
|
31
|
-
|
32
|
-
### Select hot water loop
|
33
|
-
The water tank will be placed on the supply side of this loop.
|
34
|
-
**Name:** loop,
|
35
|
-
**Type:** Choice,
|
36
|
-
**Units:** ,
|
37
|
-
**Required:** true,
|
38
|
-
**Model Dependent:** false
|
39
|
-
|
40
|
-
### Select thermal zone
|
41
|
-
This is where the water heater tank will be placed
|
42
|
-
**Name:** zone,
|
43
|
-
**Type:** Choice,
|
44
|
-
**Units:** ,
|
45
|
-
**Required:** true,
|
46
|
-
**Model Dependent:** false
|
47
|
-
|
48
|
-
### Select heat pump water heater type
|
49
|
-
|
50
|
-
**Name:** type,
|
51
|
-
**Type:** Choice,
|
52
|
-
**Units:** ,
|
53
|
-
**Required:** true,
|
54
|
-
**Model Dependent:** false
|
55
|
-
|
56
|
-
### Set hot water tank volume
|
57
|
-
[gal]
|
58
|
-
**Name:** vol,
|
59
|
-
**Type:** Double,
|
60
|
-
**Units:** ,
|
61
|
-
**Required:** true,
|
62
|
-
**Model Dependent:** false
|
63
|
-
|
64
|
-
### Set heat pump heating capacity
|
65
|
-
[kW]
|
66
|
-
**Name:** cap,
|
67
|
-
**Type:** Double,
|
68
|
-
**Units:** ,
|
69
|
-
**Required:** true,
|
70
|
-
**Model Dependent:** false
|
71
|
-
|
72
|
-
### Set heat pump rated COP (heating)
|
73
|
-
|
74
|
-
**Name:** cop,
|
75
|
-
**Type:** Double,
|
76
|
-
**Units:** ,
|
77
|
-
**Required:** true,
|
78
|
-
**Model Dependent:** false
|
79
|
-
|
80
|
-
### Set electric backup heating capacity
|
81
|
-
[kW]
|
82
|
-
**Name:** bu_cap,
|
83
|
-
**Type:** Double,
|
84
|
-
**Units:** ,
|
85
|
-
**Required:** true,
|
86
|
-
**Model Dependent:** false
|
87
|
-
|
88
|
-
### Set maximum tank temperature
|
89
|
-
[F]
|
90
|
-
**Name:** max_temp,
|
91
|
-
**Type:** Double,
|
92
|
-
**Units:** ,
|
93
|
-
**Required:** true,
|
94
|
-
**Model Dependent:** false
|
95
|
-
|
96
|
-
### Set minimum tank temperature during float
|
97
|
-
[F]
|
98
|
-
**Name:** min_temp,
|
99
|
-
**Type:** Double,
|
100
|
-
**Units:** ,
|
101
|
-
**Required:** true,
|
102
|
-
**Model Dependent:** false
|
103
|
-
|
104
|
-
### Set deadband temperature difference between heat pump and electric backup
|
105
|
-
[F]
|
106
|
-
**Name:** db_temp,
|
107
|
-
**Type:** Double,
|
108
|
-
**Units:** ,
|
109
|
-
**Required:** true,
|
110
|
-
**Model Dependent:** false
|
111
|
-
|
112
|
-
### Select reference tank setpoint temperature schedule
|
113
|
-
|
114
|
-
**Name:** sched,
|
115
|
-
**Type:** Choice,
|
116
|
-
**Units:** ,
|
117
|
-
**Required:** true,
|
118
|
-
**Model Dependent:** false
|
119
|
-
|
120
|
-
### Daily Flex Period 1:
|
121
|
-
Applies every day in the full run period.
|
122
|
-
**Name:** flex0,
|
123
|
-
**Type:** Choice,
|
124
|
-
**Units:** ,
|
125
|
-
**Required:** true,
|
126
|
-
**Model Dependent:** false
|
127
|
-
|
128
|
-
### Use 24-Hour Format
|
129
|
-
|
130
|
-
**Name:** flex_hrs0,
|
131
|
-
**Type:** String,
|
132
|
-
**Units:** ,
|
133
|
-
**Required:** false,
|
134
|
-
**Model Dependent:** false
|
135
|
-
|
136
|
-
### Daily Flex Period 2:
|
137
|
-
Applies every day in the full run period.
|
138
|
-
**Name:** flex1,
|
139
|
-
**Type:** Choice,
|
140
|
-
**Units:** ,
|
141
|
-
**Required:** true,
|
142
|
-
**Model Dependent:** false
|
143
|
-
|
144
|
-
### Use 24-Hour Format
|
145
|
-
|
146
|
-
**Name:** flex_hrs1,
|
147
|
-
**Type:** String,
|
148
|
-
**Units:** ,
|
149
|
-
**Required:** false,
|
150
|
-
**Model Dependent:** false
|
151
|
-
|
152
|
-
### Daily Flex Period 3:
|
153
|
-
Applies every day in the full run period.
|
154
|
-
**Name:** flex2,
|
155
|
-
**Type:** Choice,
|
156
|
-
**Units:** ,
|
157
|
-
**Required:** true,
|
158
|
-
**Model Dependent:** false
|
159
|
-
|
160
|
-
### Use 24-Hour Format
|
161
|
-
|
162
|
-
**Name:** flex_hrs2,
|
163
|
-
**Type:** String,
|
164
|
-
**Units:** ,
|
165
|
-
**Required:** false,
|
166
|
-
**Model Dependent:** false
|
167
|
-
|
168
|
-
### Daily Flex Period 4:
|
169
|
-
Applies every day in the full run period.
|
170
|
-
**Name:** flex3,
|
171
|
-
**Type:** Choice,
|
172
|
-
**Units:** ,
|
173
|
-
**Required:** true,
|
174
|
-
**Model Dependent:** false
|
175
|
-
|
176
|
-
### Use 24-Hour Format
|
177
|
-
|
178
|
-
**Name:** flex_hrs3,
|
179
|
-
**Type:** String,
|
180
|
-
**Units:** ,
|
181
|
-
**Required:** false,
|
182
|
-
**Model Dependent:** false
|
183
22
|
|
184
23
|
|
24
|
+
This measure does not have any user arguments
|
185
25
|
|
186
26
|
|
Binary file
|
@@ -87,36 +87,49 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
87
87
|
|
88
88
|
# create argument for removal of existing water heater tanks on selected loop
|
89
89
|
remove_wh = OpenStudio::Measure::OSArgument.makeBoolArgument('remove_wh', true)
|
90
|
-
remove_wh.setDisplayName('Remove existing water heater
|
90
|
+
remove_wh.setDisplayName('Remove existing water heater?')
|
91
91
|
remove_wh.setDescription('')
|
92
92
|
remove_wh.setDefaultValue(true)
|
93
93
|
args << remove_wh
|
94
94
|
|
95
|
-
# find available
|
96
|
-
|
95
|
+
# find available water heaters and get default volume
|
96
|
+
if !model.getWaterHeaterMixeds.empty?
|
97
|
+
wheaters = model.getWaterHeaterMixeds
|
98
|
+
end
|
97
99
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
end
|
100
|
+
default_vol = 80.0 # gallons
|
101
|
+
wh_names = ['All Water Heaters (Simplified Only)']
|
102
|
+
wheaters.each do |w|
|
103
|
+
if w.tankVolume.to_f > OpenStudio.convert(39, 'gal', 'm^3').to_f
|
104
|
+
wh_names << w.name.to_s
|
105
|
+
default_vol = [default_vol, (w.tankVolume.to_f / 0.0037854118).round(1)].max
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
108
|
-
|
109
|
+
wh = OpenStudio::Measure::OSArgument.makeChoiceArgument('wh', wh_names, true)
|
110
|
+
wh.setDisplayName('Select 40+ gallon water heater to replace or augment')
|
111
|
+
wh.setDescription("All can only be used with the 'Simplified' model")
|
112
|
+
wh.setDefaultValue(wh_names[0])
|
113
|
+
args << wh
|
109
114
|
|
110
|
-
# create argument for
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
115
|
+
# create argument for hot water tank volume
|
116
|
+
vol = OpenStudio::Measure::OSArgument.makeDoubleArgument('vol', false)
|
117
|
+
vol.setDisplayName('Set hot water tank volume [gal]')
|
118
|
+
vol.setDescription('Enter 0 to use existing tank volume(s). Values less than 5 are treated as sizing multipliers.')
|
119
|
+
vol.setUnits('gal')
|
120
|
+
vol.setDefaultValue(0)
|
121
|
+
args << vol
|
122
|
+
|
123
|
+
# create argument for water heater type
|
124
|
+
type = OpenStudio::Measure::OSArgument.makeChoiceArgument('type',
|
125
|
+
['Simplified', 'PumpedCondenser', 'WrappedCondenser'], true)
|
126
|
+
type.setDisplayName('Select heat pump water heater type')
|
127
|
+
type.setDescription('')
|
128
|
+
type.setDefaultValue('Simplified')
|
129
|
+
args << type
|
116
130
|
|
117
131
|
# find available spaces for heater location
|
118
132
|
zone_names = []
|
119
|
-
|
120
133
|
unless model.getThermalZones.empty?
|
121
134
|
zones = model.getThermalZones
|
122
135
|
zones.each do |zn|
|
@@ -126,46 +139,15 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
126
139
|
end
|
127
140
|
|
128
141
|
zone_names << 'Error: No Thermal Zones Found' if zone_names.empty?
|
142
|
+
zone_names = ['N/A - Simplified'] + zone_names
|
129
143
|
|
130
144
|
# create argument for thermal zone selection (location of water heater)
|
131
145
|
zone = OpenStudio::Measure::OSArgument.makeChoiceArgument('zone', zone_names, true)
|
132
|
-
zone.setDisplayName('Select thermal zone')
|
133
|
-
zone.setDescription(
|
146
|
+
zone.setDisplayName('Select thermal zone for HP evaporator')
|
147
|
+
zone.setDescription("Does not apply to 'Simplified' cases")
|
134
148
|
zone.setDefaultValue(zone_names[0])
|
135
149
|
args << zone
|
136
150
|
|
137
|
-
# create argument for water heater type
|
138
|
-
type = OpenStudio::Measure::OSArgument.makeChoiceArgument('type',
|
139
|
-
['PumpedCondenser', 'WrappedCondenser', 'Simplified'], true)
|
140
|
-
type.setDisplayName('Select heat pump water heater type')
|
141
|
-
type.setDescription('')
|
142
|
-
type.setDefaultValue('PumpedCondenser')
|
143
|
-
args << type
|
144
|
-
|
145
|
-
# find largest current water heater volume - if any mixed tanks are already present. Default is 80 gal.
|
146
|
-
default_vol = 80.0 # gal
|
147
|
-
|
148
|
-
wheaters = if !model.getWaterHeaterMixeds.empty?
|
149
|
-
model.getWaterHeaterMixeds
|
150
|
-
else
|
151
|
-
[]
|
152
|
-
end
|
153
|
-
|
154
|
-
unless wheaters.empty?
|
155
|
-
wheaters.each do |wh|
|
156
|
-
unless wh.tankVolume.empty?
|
157
|
-
default_vol = [default_vol, (wh.tankVolume.to_f / 0.0037854118).round(1)].max # convert m^3 to gal
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
# create argument for hot water tank volume
|
163
|
-
vol = OpenStudio::Measure::OSArgument.makeDoubleArgument('vol', true)
|
164
|
-
vol.setDisplayName('Set hot water tank volume')
|
165
|
-
vol.setDescription('[gal]')
|
166
|
-
vol.setDefaultValue(default_vol)
|
167
|
-
args << vol
|
168
|
-
|
169
151
|
# create argument for heat pump capacity
|
170
152
|
cap = OpenStudio::Measure::OSArgument.makeDoubleArgument('cap', true)
|
171
153
|
cap.setDisplayName('Set heat pump heating capacity')
|
@@ -176,7 +158,7 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
176
158
|
# create argument for heat pump rated cop
|
177
159
|
cop = OpenStudio::Measure::OSArgument.makeDoubleArgument('cop', true)
|
178
160
|
cop.setDisplayName('Set heat pump rated COP (heating)')
|
179
|
-
cop.setDefaultValue(2
|
161
|
+
cop.setDefaultValue(3.2)
|
180
162
|
args << cop
|
181
163
|
|
182
164
|
# create argument for electric backup capacity
|
@@ -289,13 +271,13 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
289
271
|
|
290
272
|
# assign the user inputs to variables
|
291
273
|
remove_wh = runner.getBoolArgumentValue('remove_wh', user_arguments)
|
292
|
-
|
293
|
-
|
274
|
+
wh = runner.getStringArgumentValue('wh', user_arguments)
|
275
|
+
vol = runner.getDoubleArgumentValue('vol', user_arguments)
|
294
276
|
type = runner.getStringArgumentValue('type', user_arguments)
|
277
|
+
zone = runner.getStringArgumentValue('zone', user_arguments)
|
295
278
|
cap = runner.getDoubleArgumentValue('cap', user_arguments)
|
296
279
|
cop = runner.getDoubleArgumentValue('cop', user_arguments)
|
297
280
|
bu_cap = runner.getDoubleArgumentValue('bu_cap', user_arguments)
|
298
|
-
vol = runner.getDoubleArgumentValue('vol', user_arguments)
|
299
281
|
max_temp = runner.getDoubleArgumentValue('max_temp', user_arguments)
|
300
282
|
min_temp = runner.getDoubleArgumentValue('min_temp', user_arguments)
|
301
283
|
db_temp = runner.getDoubleArgumentValue('db_temp', user_arguments)
|
@@ -306,15 +288,6 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
306
288
|
flex_hrs << runner.getStringArgumentValue('flex_hrs' + n.to_s, user_arguments)
|
307
289
|
end
|
308
290
|
|
309
|
-
# check for error inputs
|
310
|
-
if loop.include?('Error')
|
311
|
-
runner.registerError('No service hot water loop was found. Measure did not run.')
|
312
|
-
end
|
313
|
-
|
314
|
-
if zone.include?('Error')
|
315
|
-
runner.registerError('No thermal zone was found. Measure did not run.')
|
316
|
-
end
|
317
|
-
|
318
291
|
# check capacity, volume, and temps for reasonableness
|
319
292
|
if cap < 5
|
320
293
|
runner.registerWarning('HPWH heating capacity is less than 5kW ( 17kBtu/hr)')
|
@@ -324,7 +297,9 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
324
297
|
runner.registerWarning('Backup heating capaicty is less than 5kW ( 17kBtu/hr).')
|
325
298
|
end
|
326
299
|
|
327
|
-
if vol
|
300
|
+
if vol == 0
|
301
|
+
runner.registerInfo('Tank volume was not specified, using existing tank capacity.')
|
302
|
+
elsif vol < 40
|
328
303
|
runner.registerWarning('Tank has less than 40 gallon capacity; check heat pump sizing if model fails.')
|
329
304
|
end
|
330
305
|
|
@@ -334,15 +309,15 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
334
309
|
'conditions facilitate the growth of Legionella.')
|
335
310
|
end
|
336
311
|
|
337
|
-
if max_temp >
|
338
|
-
runner.registerWarning('Maximum charging temperature exceeded practical limits; reset to
|
339
|
-
max_temp =
|
312
|
+
if max_temp > 185
|
313
|
+
runner.registerWarning('Maximum charging temperature exceeded practical limits; reset to 185F.')
|
314
|
+
max_temp = 185.0
|
340
315
|
end
|
341
316
|
|
342
|
-
if max_temp >
|
317
|
+
if max_temp > 170
|
343
318
|
runner.registerWarning("#{max_temp}F is above or near the limit of the HP performance curves. If the " \
|
344
319
|
'simulation fails with cooling capacity less than 0, you have exceeded performance ' \
|
345
|
-
'limits. Consider setting max temp to less than
|
320
|
+
'limits. Consider setting max temp to less than 170F.')
|
346
321
|
end
|
347
322
|
|
348
323
|
# check selected schedule and set flag for later use
|
@@ -483,7 +458,7 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
483
458
|
idx += 1
|
484
459
|
end
|
485
460
|
|
486
|
-
## CONTROLS: TANK TEMPERATURE SETPOINT SCHEDULE (ELECTRIC BACKUP)
|
461
|
+
## END CONTROLS: TANK TEMPERATURE SETPOINT SCHEDULE (ELECTRIC BACKUP) ----------------------------------------------
|
487
462
|
|
488
463
|
## HARDWARE --------------------------------------------------------------------------------------------------------
|
489
464
|
# This section adds the selected type of heat pump water heater to the supply side of the selected loop. If
|
@@ -493,99 +468,122 @@ class AddHphw < OpenStudio::Measure::ModelMeasure
|
|
493
468
|
# use OS standards build - arbitrary selection, but NZE Ready seems appropriate
|
494
469
|
std = Standard.build('NREL ZNE Ready 2017')
|
495
470
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
count += 1
|
510
|
-
elsif le.iddObject.name.include?('WaterHeater:Stratified')
|
511
|
-
old_heater << model.getWaterHeaterStratifiedByName(le.name.to_s).get
|
512
|
-
count += 1
|
471
|
+
#####
|
472
|
+
# get the selected water heaters
|
473
|
+
whtrs = []
|
474
|
+
model.getWaterHeaterMixeds.each do |w|
|
475
|
+
if wh == 'All Water Heaters (Simplified Only)'
|
476
|
+
# exclude booster tanks (<10gal):
|
477
|
+
if w.tankVolume.to_f < 0.037854
|
478
|
+
next
|
479
|
+
else
|
480
|
+
whtrs << w
|
481
|
+
end
|
482
|
+
elsif w.name.to_s == wh
|
483
|
+
whtrs << w
|
513
484
|
end
|
514
485
|
end
|
515
486
|
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
487
|
+
whtrs.each do |wh|
|
488
|
+
# create empty arrays and initialize variables for later use
|
489
|
+
old_heater = []
|
490
|
+
count = 0
|
520
491
|
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
parasitic_fuel_consumption_rate: 3.0, # parasitic_fuel_consumption_rate
|
532
|
-
swh_temp_sch: sched, # swh_temp_sch
|
533
|
-
cop: cop, # cop
|
534
|
-
shr: 0.88, # shr
|
535
|
-
tank_ua: 3.9, # tank_ua
|
536
|
-
set_peak_use_flowrate: false, # set_peak_use_flowrate
|
537
|
-
peak_flowrate: 0.0, # peak_flowrate
|
538
|
-
flowrate_schedule: nil, # flowrate_schedule
|
539
|
-
water_heater_thermal_zone: zone) # water_heater_thermal_zone
|
540
|
-
else
|
541
|
-
hpwh = std.model_add_water_heater(model, # model
|
542
|
-
(cap * 1000), # water_heater_capacity
|
543
|
-
OpenStudio.convert(vol, 'gal', 'm^3').get, # water_heater_volume
|
544
|
-
'HeatPump', # water_heater_fuel
|
545
|
-
OpenStudio.convert(140.0, 'F', 'C').get, # service_water_temperature
|
546
|
-
3.0, # parasitic_fuel_consumption_rate
|
547
|
-
sched, # swh_temp_sch
|
548
|
-
false, # set_peak_use_flowrate
|
549
|
-
0.0, # peak_flowrate
|
550
|
-
nil, # flowrate_schedule
|
551
|
-
zone, # water_heater_thermal_zone
|
552
|
-
1) # number_water_heaters
|
553
|
-
end
|
492
|
+
# get the appropriate plant loop
|
493
|
+
loop = ''
|
494
|
+
loops = model.getPlantLoops
|
495
|
+
loops.each do |l|
|
496
|
+
l.supplyComponents.each do |c|
|
497
|
+
if c.name.to_s == wh.name.to_s
|
498
|
+
loop = l
|
499
|
+
end
|
500
|
+
end
|
501
|
+
end
|
554
502
|
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
hpwh.addToNode(inlet)
|
565
|
-
hpwh.setMaximumTemperatureLimit(OpenStudio.convert(max_temp, 'F', 'C').get)
|
566
|
-
runner.registerInfo("#{hpwh.name} was added to the model on #{loop.name}")
|
567
|
-
end
|
503
|
+
# use existing tank volume unless otherwise specified
|
504
|
+
# values between 0.0 and 5.0 are considered tank sizing multipliers
|
505
|
+
if vol == 0
|
506
|
+
v = wh.tankVolume
|
507
|
+
elsif (vol > 0.0) && (vol < 5.0)
|
508
|
+
v = wh.tankVolume.to_f * vol
|
509
|
+
else
|
510
|
+
v = OpenStudio.convert(vol, 'gal', 'm^3').get
|
511
|
+
end
|
568
512
|
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
513
|
+
inlet = wh.supplyInletModelObject.get.to_Node.get
|
514
|
+
outlet = wh.supplyOutletModelObject.get.to_Node.get
|
515
|
+
|
516
|
+
# Add heat pump water heater and attach to selected loop
|
517
|
+
# Reference: https://github.com/NREL/openstudio-standards/blob/master/lib/
|
518
|
+
# => openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb
|
519
|
+
if type != 'Simplified'
|
520
|
+
# convert zone name from STRING into OS model OBJECT
|
521
|
+
zone = model.getThermalZoneByName(zone).get
|
522
|
+
hpwh = std.model_add_heatpump_water_heater(model, # model
|
523
|
+
type: type, # type
|
524
|
+
water_heater_capacity: (cap * 1000 / cop), # water_heater_capacity
|
525
|
+
electric_backup_capacity: (bu_cap * 1000), # electric_backup_capacity
|
526
|
+
water_heater_volume: v, # water_heater_volume
|
527
|
+
service_water_temperature: OpenStudio.convert(140.0, 'F', 'C').get, # service_water_temperature
|
528
|
+
parasitic_fuel_consumption_rate: 3.0, # parasitic_fuel_consumption_rate
|
529
|
+
swh_temp_sch: sched, # swh_temp_sch
|
530
|
+
cop: cop, # cop
|
531
|
+
shr: 0.88, # shr
|
532
|
+
tank_ua: 3.9, # tank_ua
|
533
|
+
set_peak_use_flowrate: false, # set_peak_use_flowrate
|
534
|
+
peak_flowrate: 0.0, # peak_flowrate
|
535
|
+
flowrate_schedule: nil, # flowrate_schedule
|
536
|
+
water_heater_thermal_zone: zone) # water_heater_thermal_zone
|
537
|
+
else
|
538
|
+
# zone = wh.ambientTemperatureThermalZone.get
|
539
|
+
runner.registerWarning(wh.to_s)
|
540
|
+
hpwh = std.model_add_water_heater(model, # model
|
541
|
+
(cap * 1000), # water_heater_capacity
|
542
|
+
v.to_f, # water_heater_volume
|
543
|
+
'HeatPump', # water_heater_fuel
|
544
|
+
OpenStudio.convert(140.0, 'F', 'C').to_f, # service_water_temperature
|
545
|
+
3.0, # parasitic_fuel_consumption_rate
|
546
|
+
sched, # swh_temp_sch
|
547
|
+
false, # set_peak_use_flowrate
|
548
|
+
0.0, # peak_flowrate
|
549
|
+
nil, # flowrate_schedule
|
550
|
+
model.getThermalZones[0], # water_heater_thermal_zone
|
551
|
+
1) # number_water_heaters
|
552
|
+
# set COP in PLF curve
|
553
|
+
cop_curve = hpwh.partLoadFactorCurve.get
|
554
|
+
cop_curve.setName(cop_curve.name.get.gsub('2.8', cop.to_s))
|
555
|
+
cop_curve.setCoefficient1Constant(cop)
|
556
|
+
end
|
557
|
+
|
558
|
+
# add tank to appropriate branch and node (will be placed first in series if old tanks not removed)
|
559
|
+
# modify objects as ncessary
|
560
|
+
if type != 'Simplified'
|
561
|
+
hpwh.tank.addToNode(inlet)
|
562
|
+
hpwh.setDeadBandTemperatureDifference(db_temp / 1.8)
|
563
|
+
runner.registerInfo("#{hpwh.tank.name} was added to the model on #{loop.name}")
|
564
|
+
else
|
565
|
+
hpwh.addToNode(inlet)
|
566
|
+
hpwh.setMaximumTemperatureLimit(OpenStudio.convert(max_temp, 'F', 'C').get)
|
567
|
+
runner.registerInfo("#{hpwh.name} was added to the model on #{loop.name}")
|
574
568
|
end
|
575
|
-
end
|
576
|
-
## END HARDWARE ----------------------------------------------------------------------------------------------------
|
577
569
|
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
570
|
+
# remove old tank objects if necessary
|
571
|
+
if remove_wh
|
572
|
+
runner.registerInfo("#{wh.name} was removed from the model.")
|
573
|
+
wh.remove
|
574
|
+
end
|
575
|
+
|
576
|
+
# CONTROLS MODIFICATIONS FOR TANK ---------------------------------------------------------------------------------
|
577
|
+
# apply schedule to tank
|
578
|
+
if type == 'PumpedCondenser'
|
579
|
+
hpwh.tank.to_WaterHeaterMixed.get.setSetpointTemperatureSchedule(tank_sched)
|
580
|
+
elsif type == 'WrappedCondenser'
|
581
|
+
hpwh.tank.to_WaterHeaterStratified.get.setHeater1SetpointTemperatureSchedule(tank_sched)
|
582
|
+
hpwh.tank.to_WaterHeaterStratified.get.setHeater2SetpointTemperatureSchedule(tank_sched)
|
583
|
+
end
|
584
|
+
# END CONTROLS MODIFICATIONS FOR TANK -----------------------------------------------------------------------------
|
587
585
|
end
|
588
|
-
## END
|
586
|
+
## END HARDWARE ----------------------------------------------------------------------------------------------------
|
589
587
|
|
590
588
|
## ADD REPORTED VARIABLES ------------------------------------------------------------------------------------------
|
591
589
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.0</schema_version>
|
4
4
|
<name>add_hphw</name>
|
5
5
|
<uid>518cde6f-1806-4b9a-bee9-ccaac49c7a53</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>1ddd139f-d267-4817-95c1-339d78c6594e</version_id>
|
7
|
+
<version_modified>20210512T163832Z</version_modified>
|
8
8
|
<xml_checksum>A374667A</xml_checksum>
|
9
9
|
<class_name>AddHphw</class_name>
|
10
10
|
<display_name>Add HPWH for Domestic Hot Water</display_name>
|
@@ -18,6 +18,7 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
18
18
|
<display_name>Remove existing water heater on selected loop</display_name>
|
19
19
|
<description></description>
|
20
20
|
<type>Boolean</type>
|
21
|
+
<units></units>
|
21
22
|
<required>true</required>
|
22
23
|
<model_dependent>false</model_dependent>
|
23
24
|
<default_value>true</default_value>
|
@@ -31,12 +32,15 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
31
32
|
<display_name>false</display_name>
|
32
33
|
</choice>
|
33
34
|
</choices>
|
35
|
+
<min_value></min_value>
|
36
|
+
<max_value></max_value>
|
34
37
|
</argument>
|
35
38
|
<argument>
|
36
39
|
<name>loop</name>
|
37
40
|
<display_name>Select hot water loop</display_name>
|
38
41
|
<description>The water tank will be placed on the supply side of this loop.</description>
|
39
42
|
<type>Choice</type>
|
43
|
+
<units></units>
|
40
44
|
<required>true</required>
|
41
45
|
<model_dependent>false</model_dependent>
|
42
46
|
<default_value>Error: No Service Water Loop Found</default_value>
|
@@ -46,12 +50,15 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
46
50
|
<display_name>Error: No Service Water Loop Found</display_name>
|
47
51
|
</choice>
|
48
52
|
</choices>
|
53
|
+
<min_value></min_value>
|
54
|
+
<max_value></max_value>
|
49
55
|
</argument>
|
50
56
|
<argument>
|
51
57
|
<name>zone</name>
|
52
58
|
<display_name>Select thermal zone</display_name>
|
53
59
|
<description>This is where the water heater tank will be placed</description>
|
54
60
|
<type>Choice</type>
|
61
|
+
<units></units>
|
55
62
|
<required>true</required>
|
56
63
|
<model_dependent>false</model_dependent>
|
57
64
|
<default_value>Error: No Thermal Zones Found</default_value>
|
@@ -61,15 +68,18 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
61
68
|
<display_name>Error: No Thermal Zones Found</display_name>
|
62
69
|
</choice>
|
63
70
|
</choices>
|
71
|
+
<min_value></min_value>
|
72
|
+
<max_value></max_value>
|
64
73
|
</argument>
|
65
74
|
<argument>
|
66
75
|
<name>type</name>
|
67
76
|
<display_name>Select heat pump water heater type</display_name>
|
68
77
|
<description></description>
|
69
78
|
<type>Choice</type>
|
79
|
+
<units></units>
|
70
80
|
<required>true</required>
|
71
81
|
<model_dependent>false</model_dependent>
|
72
|
-
<default_value>
|
82
|
+
<default_value>Simplified</default_value>
|
73
83
|
<choices>
|
74
84
|
<choice>
|
75
85
|
<value>PumpedCondenser</value>
|
@@ -84,74 +94,99 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
84
94
|
<display_name>Simplified</display_name>
|
85
95
|
</choice>
|
86
96
|
</choices>
|
97
|
+
<min_value></min_value>
|
98
|
+
<max_value></max_value>
|
87
99
|
</argument>
|
88
100
|
<argument>
|
89
101
|
<name>vol</name>
|
90
102
|
<display_name>Set hot water tank volume</display_name>
|
91
103
|
<description>[gal]</description>
|
92
104
|
<type>Double</type>
|
105
|
+
<units></units>
|
93
106
|
<required>true</required>
|
94
107
|
<model_dependent>false</model_dependent>
|
95
108
|
<default_value>80</default_value>
|
109
|
+
<min_value></min_value>
|
110
|
+
<max_value></max_value>
|
96
111
|
</argument>
|
97
112
|
<argument>
|
98
113
|
<name>cap</name>
|
99
114
|
<display_name>Set heat pump heating capacity</display_name>
|
100
115
|
<description>[kW]</description>
|
101
116
|
<type>Double</type>
|
117
|
+
<units></units>
|
102
118
|
<required>true</required>
|
103
119
|
<model_dependent>false</model_dependent>
|
104
120
|
<default_value>23.4</default_value>
|
121
|
+
<min_value></min_value>
|
122
|
+
<max_value></max_value>
|
105
123
|
</argument>
|
106
124
|
<argument>
|
107
125
|
<name>cop</name>
|
108
126
|
<display_name>Set heat pump rated COP (heating)</display_name>
|
127
|
+
<description></description>
|
109
128
|
<type>Double</type>
|
129
|
+
<units></units>
|
110
130
|
<required>true</required>
|
111
131
|
<model_dependent>false</model_dependent>
|
112
132
|
<default_value>2.8</default_value>
|
133
|
+
<min_value></min_value>
|
134
|
+
<max_value></max_value>
|
113
135
|
</argument>
|
114
136
|
<argument>
|
115
137
|
<name>bu_cap</name>
|
116
138
|
<display_name>Set electric backup heating capacity</display_name>
|
117
139
|
<description>[kW]</description>
|
118
140
|
<type>Double</type>
|
141
|
+
<units></units>
|
119
142
|
<required>true</required>
|
120
143
|
<model_dependent>false</model_dependent>
|
121
144
|
<default_value>23.4</default_value>
|
145
|
+
<min_value></min_value>
|
146
|
+
<max_value></max_value>
|
122
147
|
</argument>
|
123
148
|
<argument>
|
124
149
|
<name>max_temp</name>
|
125
150
|
<display_name>Set maximum tank temperature</display_name>
|
126
151
|
<description>[F]</description>
|
127
152
|
<type>Double</type>
|
153
|
+
<units></units>
|
128
154
|
<required>true</required>
|
129
155
|
<model_dependent>false</model_dependent>
|
130
156
|
<default_value>160</default_value>
|
157
|
+
<min_value></min_value>
|
158
|
+
<max_value></max_value>
|
131
159
|
</argument>
|
132
160
|
<argument>
|
133
161
|
<name>min_temp</name>
|
134
162
|
<display_name>Set minimum tank temperature during float</display_name>
|
135
163
|
<description>[F]</description>
|
136
164
|
<type>Double</type>
|
165
|
+
<units></units>
|
137
166
|
<required>true</required>
|
138
167
|
<model_dependent>false</model_dependent>
|
139
168
|
<default_value>120</default_value>
|
169
|
+
<min_value></min_value>
|
170
|
+
<max_value></max_value>
|
140
171
|
</argument>
|
141
172
|
<argument>
|
142
173
|
<name>db_temp</name>
|
143
174
|
<display_name>Set deadband temperature difference between heat pump and electric backup</display_name>
|
144
175
|
<description>[F]</description>
|
145
176
|
<type>Double</type>
|
177
|
+
<units></units>
|
146
178
|
<required>true</required>
|
147
179
|
<model_dependent>false</model_dependent>
|
148
180
|
<default_value>5</default_value>
|
181
|
+
<min_value></min_value>
|
182
|
+
<max_value></max_value>
|
149
183
|
</argument>
|
150
184
|
<argument>
|
151
185
|
<name>sched</name>
|
152
186
|
<display_name>Select reference tank setpoint temperature schedule</display_name>
|
153
187
|
<description></description>
|
154
188
|
<type>Choice</type>
|
189
|
+
<units></units>
|
155
190
|
<required>true</required>
|
156
191
|
<model_dependent>false</model_dependent>
|
157
192
|
<default_value>--Create New @ 140F--</default_value>
|
@@ -161,12 +196,15 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
161
196
|
<display_name>--Create New @ 140F--</display_name>
|
162
197
|
</choice>
|
163
198
|
</choices>
|
199
|
+
<min_value></min_value>
|
200
|
+
<max_value></max_value>
|
164
201
|
</argument>
|
165
202
|
<argument>
|
166
203
|
<name>flex0</name>
|
167
204
|
<display_name>Daily Flex Period 1:</display_name>
|
168
205
|
<description>Applies every day in the full run period.</description>
|
169
206
|
<type>Choice</type>
|
207
|
+
<units></units>
|
170
208
|
<required>true</required>
|
171
209
|
<model_dependent>false</model_dependent>
|
172
210
|
<default_value>None</default_value>
|
@@ -188,20 +226,27 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
188
226
|
<display_name>Float</display_name>
|
189
227
|
</choice>
|
190
228
|
</choices>
|
229
|
+
<min_value></min_value>
|
230
|
+
<max_value></max_value>
|
191
231
|
</argument>
|
192
232
|
<argument>
|
193
233
|
<name>flex_hrs0</name>
|
194
234
|
<display_name>Use 24-Hour Format</display_name>
|
235
|
+
<description></description>
|
195
236
|
<type>String</type>
|
237
|
+
<units></units>
|
196
238
|
<required>false</required>
|
197
239
|
<model_dependent>false</model_dependent>
|
198
240
|
<default_value>HH:MM - HH:MM</default_value>
|
241
|
+
<min_value></min_value>
|
242
|
+
<max_value></max_value>
|
199
243
|
</argument>
|
200
244
|
<argument>
|
201
245
|
<name>flex1</name>
|
202
246
|
<display_name>Daily Flex Period 2:</display_name>
|
203
247
|
<description>Applies every day in the full run period.</description>
|
204
248
|
<type>Choice</type>
|
249
|
+
<units></units>
|
205
250
|
<required>true</required>
|
206
251
|
<model_dependent>false</model_dependent>
|
207
252
|
<default_value>None</default_value>
|
@@ -223,20 +268,27 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
223
268
|
<display_name>Float</display_name>
|
224
269
|
</choice>
|
225
270
|
</choices>
|
271
|
+
<min_value></min_value>
|
272
|
+
<max_value></max_value>
|
226
273
|
</argument>
|
227
274
|
<argument>
|
228
275
|
<name>flex_hrs1</name>
|
229
276
|
<display_name>Use 24-Hour Format</display_name>
|
277
|
+
<description></description>
|
230
278
|
<type>String</type>
|
279
|
+
<units></units>
|
231
280
|
<required>false</required>
|
232
281
|
<model_dependent>false</model_dependent>
|
233
282
|
<default_value>HH:MM - HH:MM</default_value>
|
283
|
+
<min_value></min_value>
|
284
|
+
<max_value></max_value>
|
234
285
|
</argument>
|
235
286
|
<argument>
|
236
287
|
<name>flex2</name>
|
237
288
|
<display_name>Daily Flex Period 3:</display_name>
|
238
289
|
<description>Applies every day in the full run period.</description>
|
239
290
|
<type>Choice</type>
|
291
|
+
<units></units>
|
240
292
|
<required>true</required>
|
241
293
|
<model_dependent>false</model_dependent>
|
242
294
|
<default_value>None</default_value>
|
@@ -258,20 +310,27 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
258
310
|
<display_name>Float</display_name>
|
259
311
|
</choice>
|
260
312
|
</choices>
|
313
|
+
<min_value></min_value>
|
314
|
+
<max_value></max_value>
|
261
315
|
</argument>
|
262
316
|
<argument>
|
263
317
|
<name>flex_hrs2</name>
|
264
318
|
<display_name>Use 24-Hour Format</display_name>
|
319
|
+
<description></description>
|
265
320
|
<type>String</type>
|
321
|
+
<units></units>
|
266
322
|
<required>false</required>
|
267
323
|
<model_dependent>false</model_dependent>
|
268
324
|
<default_value>HH:MM - HH:MM</default_value>
|
325
|
+
<min_value></min_value>
|
326
|
+
<max_value></max_value>
|
269
327
|
</argument>
|
270
328
|
<argument>
|
271
329
|
<name>flex3</name>
|
272
330
|
<display_name>Daily Flex Period 4:</display_name>
|
273
331
|
<description>Applies every day in the full run period.</description>
|
274
332
|
<type>Choice</type>
|
333
|
+
<units></units>
|
275
334
|
<required>true</required>
|
276
335
|
<model_dependent>false</model_dependent>
|
277
336
|
<default_value>None</default_value>
|
@@ -293,14 +352,20 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
293
352
|
<display_name>Float</display_name>
|
294
353
|
</choice>
|
295
354
|
</choices>
|
355
|
+
<min_value></min_value>
|
356
|
+
<max_value></max_value>
|
296
357
|
</argument>
|
297
358
|
<argument>
|
298
359
|
<name>flex_hrs3</name>
|
299
360
|
<display_name>Use 24-Hour Format</display_name>
|
361
|
+
<description></description>
|
300
362
|
<type>String</type>
|
363
|
+
<units></units>
|
301
364
|
<required>false</required>
|
302
365
|
<model_dependent>false</model_dependent>
|
303
366
|
<default_value>HH:MM - HH:MM</default_value>
|
367
|
+
<min_value></min_value>
|
368
|
+
<max_value></max_value>
|
304
369
|
</argument>
|
305
370
|
</arguments>
|
306
371
|
<outputs />
|
@@ -376,12 +441,6 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
376
441
|
<usage_type>test</usage_type>
|
377
442
|
<checksum>15E27276</checksum>
|
378
443
|
</file>
|
379
|
-
<file>
|
380
|
-
<filename>README.md</filename>
|
381
|
-
<filetype>md</filetype>
|
382
|
-
<usage_type>readme</usage_type>
|
383
|
-
<checksum>1FE9503E</checksum>
|
384
|
-
</file>
|
385
444
|
<file>
|
386
445
|
<version>
|
387
446
|
<software_program>OpenStudio</software_program>
|
@@ -391,7 +450,14 @@ The flexibility of the system is based on user-defined temperatures and times, w
|
|
391
450
|
<filename>measure.rb</filename>
|
392
451
|
<filetype>rb</filetype>
|
393
452
|
<usage_type>script</usage_type>
|
394
|
-
<checksum>
|
453
|
+
<checksum>44E0C02B</checksum>
|
454
|
+
</file>
|
455
|
+
<file>
|
456
|
+
<filename>README.md</filename>
|
457
|
+
<filetype>md</filetype>
|
458
|
+
<usage_type>readme</usage_type>
|
459
|
+
<checksum>0B68E96D</checksum>
|
395
460
|
</file>
|
396
461
|
</files>
|
397
462
|
</measure>
|
463
|
+
<error>undefined method `each' for nil:NilClass</error>
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.0</schema_version>
|
4
4
|
<name>add_packaged_ice_storage</name>
|
5
5
|
<uid>2aa8c128-53b9-49fd-9aaf-9253a1f05936</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>c0df7e6f-d86f-4f80-875d-420a727dbf8a</version_id>
|
7
|
+
<version_modified>20210421T154438Z</version_modified>
|
8
8
|
<xml_checksum>2617824F</xml_checksum>
|
9
9
|
<class_name>AddPackagedIceStorage</class_name>
|
10
10
|
<display_name>Add Packaged Ice Storage</display_name>
|
@@ -224,12 +224,6 @@ If 'AutoSize' is selected for ice capacity, these inputs set an ice capacity siz
|
|
224
224
|
<usage_type>test</usage_type>
|
225
225
|
<checksum>2D918464</checksum>
|
226
226
|
</file>
|
227
|
-
<file>
|
228
|
-
<filename>README.md</filename>
|
229
|
-
<filetype>md</filetype>
|
230
|
-
<usage_type>readme</usage_type>
|
231
|
-
<checksum>A67F3738</checksum>
|
232
|
-
</file>
|
233
227
|
<file>
|
234
228
|
<version>
|
235
229
|
<software_program>OpenStudio</software_program>
|
@@ -241,5 +235,11 @@ If 'AutoSize' is selected for ice capacity, these inputs set an ice capacity siz
|
|
241
235
|
<usage_type>script</usage_type>
|
242
236
|
<checksum>749A70A0</checksum>
|
243
237
|
</file>
|
238
|
+
<file>
|
239
|
+
<filename>README.md</filename>
|
240
|
+
<filetype>md</filetype>
|
241
|
+
<usage_type>readme</usage_type>
|
242
|
+
<checksum>E6FBC489</checksum>
|
243
|
+
</file>
|
244
244
|
</files>
|
245
245
|
</measure>
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio-load-flexibility-measures
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Heine
|
8
8
|
- Ryan Meyer
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-06-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -147,7 +147,7 @@ files:
|
|
147
147
|
homepage: https://openstudio.net
|
148
148
|
licenses: []
|
149
149
|
metadata: {}
|
150
|
-
post_install_message:
|
150
|
+
post_install_message:
|
151
151
|
rdoc_options: []
|
152
152
|
require_paths:
|
153
153
|
- lib
|
@@ -162,8 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
162
|
- !ruby/object:Gem::Version
|
163
163
|
version: '0'
|
164
164
|
requirements: []
|
165
|
-
rubygems_version: 3.1.
|
166
|
-
signing_key:
|
165
|
+
rubygems_version: 3.1.4
|
166
|
+
signing_key:
|
167
167
|
specification_version: 4
|
168
168
|
summary: library and measures for OpenStudio for load flexibility applications.
|
169
169
|
test_files: []
|