honeybee-openstudio 2.30.0 → 2.30.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e61c104adc3d8f346115f29cfdc29e268a8668ba11d5bf3e44fdd054f75f95ba
4
- data.tar.gz: 1d9b02e466124bbf3c72bb15e54308146ad0076d7e98339929fddac8d3018200
3
+ metadata.gz: c29446da276535ec1ad4119d8063832c45cc11afb8583294e4b1389dbb662136
4
+ data.tar.gz: 93c012855984051dafb92b4f8729c207b703bd23b785ab611ab922c24a982bcc
5
5
  SHA512:
6
- metadata.gz: cdf371172756c14205799e1a476517c64587a261e4331828ddce046082d256e70511ab00cb50275f35ee080deb44f1ce4a7f35bb8a04e21bf8fe94a805c21888
7
- data.tar.gz: a76dff993fb5fc51ea9d11d1999553d2f8a43fd107cb17864a6c8dc8ceac9999ca00d64b68d0f51261a70e91991952b5fda794d168f98f4f0470a6767dc680e2
6
+ metadata.gz: 3c41fa8ee56a59caa04f12351ec56a1bc7c9e5f579f12b24f5fafcbd54a1597381cf8b53828e59d93778aaa69a4bb2c54834929a3acd21431f4161578c270b88
7
+ data.tar.gz: 5b7e0de5cc99ffcdef04c36ff055a7d4fec9f6c879e2b69c841f26fa95d7e5e9d630dc68453c8e614ac6cd89983e12e0afb444f025d08b7ba356e6394486b314
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'honeybee-openstudio'
7
- spec.version = '2.30.0'
7
+ spec.version = '2.30.4'
8
8
  spec.authors = ['Tanushree Charan', 'Dan Macumber', 'Chris Mackey', 'Mostapha Sadeghipour Roudsari']
9
9
  spec.email = ['tanushree.charan@nrel.gov', 'chris@ladybug.tools']
10
10
 
@@ -21,7 +21,8 @@
21
21
  "add_blended_rates_to_urdb_rate": false,
22
22
  "net_metering_limit_kw": 0,
23
23
  "interconnection_limit_kw": 100000000.0,
24
- "urdb_label": "5e162e2a5457a3d50873e3af"
24
+ "blended_monthly_demand_charges_us_dollars_per_kw": [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
25
+ "blended_monthly_rates_us_dollars_per_kwh": [0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13]
25
26
  },
26
27
  "Wind": {
27
28
  "min_kw": 0,
@@ -46,11 +47,10 @@
46
47
  "pbi_years": 1,
47
48
  "pbi_system_max_kw": 1000000000.0
48
49
  },
49
- "PV": {
50
+ "PV": [{
50
51
  "pv_name": "Roof - South Face",
51
52
  "location":"roof",
52
53
  "existing_kw": 0,
53
- "existing_kw": 0,
54
54
  "min_kw": 0,
55
55
  "max_kw": 1000000000.0,
56
56
  "installed_cost_us_dollars_per_kw": 1600,
@@ -77,12 +77,48 @@
77
77
  "losses": 0.14,
78
78
  "array_type": 1,
79
79
  "module_type": 0,
80
- "gcr": 0.4,
80
+ "gcr": 0.99,
81
81
  "dc_ac_ratio": 1.2,
82
82
  "inv_eff": 0.96,
83
83
  "radius": 0,
84
84
  "tilt": 0.537
85
85
  },
86
+ {
87
+ "pv_name": "Groundmount",
88
+ "location":"ground",
89
+ "existing_kw": 0,
90
+ "min_kw": 0,
91
+ "max_kw": 1000000000.0,
92
+ "installed_cost_us_dollars_per_kw": 2200,
93
+ "om_cost_us_dollars_per_kw": 16,
94
+ "macrs_option_years": 5,
95
+ "macrs_bonus_pct": 1,
96
+ "macrs_itc_reduction": 0.5,
97
+ "federal_itc_pct": 0.26,
98
+ "state_ibi_pct": 0,
99
+ "state_ibi_max_us_dollars": 10000000000.0,
100
+ "utility_ibi_pct": 0,
101
+ "utility_ibi_max_us_dollars": 10000000000.0,
102
+ "federal_rebate_us_dollars_per_kw": 0,
103
+ "state_rebate_us_dollars_per_kw": 0,
104
+ "state_rebate_max_us_dollars": 10000000000.0,
105
+ "utility_rebate_us_dollars_per_kw": 0,
106
+ "utility_rebate_max_us_dollars": 10000000000.0,
107
+ "pbi_us_dollars_per_kwh": 0,
108
+ "pbi_max_us_dollars": 1000000000.0,
109
+ "pbi_years": 1,
110
+ "pbi_system_max_kw": 1000000000.0,
111
+ "degradation_pct": 0.005,
112
+ "azimuth": 180,
113
+ "losses": 0.14,
114
+ "array_type": 0,
115
+ "module_type": 0,
116
+ "gcr": 0.99,
117
+ "dc_ac_ratio": 1.2,
118
+ "inv_eff": 0.96,
119
+ "radius": 0,
120
+ "tilt": 0.537
121
+ }],
86
122
  "Storage": {
87
123
  "min_kw": 0,
88
124
  "max_kw": 1000000,
@@ -142,3 +178,4 @@
142
178
  "time_steps_per_hour": 1
143
179
  }
144
180
  }
181
+
@@ -35,6 +35,23 @@ require 'to_openstudio/model_object'
35
35
  module Honeybee
36
36
  class ScheduleTypeLimit < ModelObject
37
37
 
38
+ @@unit_types = [
39
+ 'Dimensionless',
40
+ 'Temperature',
41
+ 'DeltaTemperature',
42
+ 'PrecipitationRate',
43
+ 'Angle',
44
+ 'ConvectionCoefficient',
45
+ 'ActivityLevel',
46
+ 'Velocity',
47
+ 'Capacity',
48
+ 'Power',
49
+ 'Availability',
50
+ 'Percent',
51
+ 'Control',
52
+ 'Mode'
53
+ ]
54
+
38
55
  def self.from_schedule_type_limit(schedule_type_limit)
39
56
  # create an empty hash
40
57
  hash = {}
@@ -71,7 +88,9 @@ module Honeybee
71
88
  elsif unit_type == 'Controlmode'
72
89
  unit_type = 'Control'
73
90
  end
74
- hash[:unit_type] = unit_type
91
+ if @@unit_types.include? unit_type
92
+ hash[:unit_type] = unit_type
93
+ end
75
94
 
76
95
  hash
77
96
  end
@@ -43,6 +43,9 @@ module Honeybee
43
43
  unless @hash[:display_name].nil?
44
44
  os_ideal_air.setDisplayName(@hash[:display_name])
45
45
  end
46
+ # use no dehumidification unless there's a humidistat
47
+ os_ideal_air.setDehumidificationControlType('None')
48
+
46
49
  # assign the economizer type
47
50
  if @hash[:economizer_type]
48
51
  os_ideal_air.setOutdoorAirEconomizerType(@hash[:economizer_type])
@@ -86,25 +86,38 @@ module Honeybee
86
86
  eq_type = shw_hash[:equipment_type]
87
87
  if eq_type == 'Default_District_SHW'
88
88
  # add a district heating system to supply the heat for the loop
89
- district_hw = OpenStudio::Model::DistrictHeating.new(openstudio_model)
90
- district_hw.setName('Service Hot Water District Heat')
91
- district_hw.setNominalCapacity(1000000)
89
+ district_hw = OpenStudio::Model::WaterHeaterMixed.new(openstudio_model)
90
+ district_hw.setName('Ideal Service Hot Water Heater')
91
+ district_hw.setHeaterFuelType('DistrictHeating')
92
+ district_hw.setOffCycleParasiticFuelType('DistrictHeating')
93
+ district_hw.setOnCycleParasiticFuelType('DistrictHeating')
94
+ district_hw.setHeaterThermalEfficiency(1.0)
95
+ district_hw.setHeaterMaximumCapacity(1000000)
96
+ district_hw.setTankVolume(0)
97
+ district_hw.setHeaterControlType('Modulate')
98
+ target_sch_name = '22C Ambient Condition'
99
+ target_sch = create_constant_schedule(openstudio_model, target_sch_name, 22)
100
+ district_hw.setAmbientTemperatureSchedule(target_sch)
101
+ district_hw.setOffCycleLossCoefficienttoAmbientTemperature(0)
102
+ district_hw.setOnCycleLossCoefficienttoAmbientTemperature(0)
92
103
  hot_water_plant.addSupplyBranchForComponent(district_hw)
93
- elsif eq_type == 'Gas_WaterHeater' || eq_type == 'Electric_WaterHeater' || eq_type == 'HeatPump_WaterHeater'
104
+ # try to minimize the impact of the pump as much as possible
105
+ hot_water_pump.setEndUseSubcategory('Water Systems')
106
+ hot_water_pump.setMotorEfficiency(0.9)
107
+ else
94
108
  # add a water heater to supply the heat for the loop
95
109
  heater = OpenStudio::Model::WaterHeaterMixed.new(openstudio_model)
96
- if eq_type == 'Electric_WaterHeater' || eq_type == 'HeatPump_WaterHeater'
110
+ if eq_type == 'Electric_WaterHeater' || eq_type == 'HeatPump_WaterHeater' || eq_type == 'Electric_TanklessHeater'
97
111
  heater.setHeaterFuelType('Electricity')
98
112
  heater.setOffCycleParasiticFuelType('Electricity')
99
113
  heater.setOnCycleParasiticFuelType('Electricity')
100
114
  end
101
- heater.setName('SHW WaterHeater' + @@sys_count.to_s)
102
115
 
103
116
  # set the water heater efficiency
104
117
  if eq_type == 'HeatPump_WaterHeater'
105
118
  heater.setHeaterThermalEfficiency(1.0)
106
119
  elsif shw_hash[:heater_efficiency].nil?
107
- if eq_type == 'Electric_WaterHeater'
120
+ if eq_type == 'Electric_WaterHeater' || eq_type == 'Electric_TanklessHeater'
108
121
  heater.setHeaterThermalEfficiency(1.0)
109
122
  else
110
123
  heater.setHeaterThermalEfficiency(0.8)
@@ -159,9 +172,20 @@ module Honeybee
159
172
  end
160
173
  end
161
174
 
162
- # ensure that the tank is sized appropriately and add it to the loop
175
+ # set the capactiy and and controls of the water heater
163
176
  heater.setHeaterMaximumCapacity(1000000)
164
- heater.setTankVolume(@@shw_rates[shw_hash[:identifier]])
177
+ if eq_type == 'Gas_TanklessHeater' || eq_type == 'Electric_TanklessHeater'
178
+ heater.setName('SHW Tankless WaterHeater' + @@sys_count.to_s)
179
+ heater.setTankVolume(0)
180
+ heater.setHeaterControlType('Modulate')
181
+ heater.setOffCycleLossCoefficienttoAmbientTemperature(0)
182
+ heater.setOnCycleLossCoefficienttoAmbientTemperature(0)
183
+ else
184
+ heater.setName('SHW WaterHeater' + @@sys_count.to_s)
185
+ heater.setTankVolume(@@shw_rates[shw_hash[:identifier]])
186
+ end
187
+
188
+ # add it to the loop
165
189
  hot_water_plant.addSupplyBranchForComponent(heater)
166
190
 
167
191
  # if it's a heat pump system, then add the pump
@@ -196,30 +220,6 @@ module Honeybee
196
220
  end
197
221
  heat_sys.setName('SHW WaterHeater HeatPump' + @@sys_count.to_s)
198
222
  end
199
-
200
- elsif eq_type == 'Gas_TanklessHeater' || eq_type == 'Electric_TanklessHeater'
201
- # add a boiler to supply the heat for the loop
202
- heater = OpenStudio::Model::BoilerHotWater.new(openstudio_model)
203
- if eq_type == 'Electric_TanklessHeater'
204
- heater.setFuelType('Electricity')
205
- end
206
- heater.setName('SHW Tankless WaterHeater' + @@sys_count.to_s)
207
- heater.setEndUseSubcategory('Water Systems')
208
-
209
- # set the water heater efficiency
210
- unless shw_hash[:heater_efficiency].nil?
211
- heater.setNominalThermalEfficiency(shw_hash[:heater_efficiency])
212
- else
213
- if eq_type == 'Electric_TanklessHeater'
214
- heater.setNominalThermalEfficiency(1.0)
215
- else
216
- heater.setNominalThermalEfficiency(0.8)
217
- end
218
- end
219
-
220
- # ensure that the boiler is sized appropriately and add it to the loop
221
- heater.setNominalCapacity(1000000)
222
- hot_water_plant.addSupplyBranchForComponent(heater)
223
223
  end
224
224
 
225
225
  # add all of the water use connections to the loop and total the capacity
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybee-openstudio
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.30.0
4
+ version: 2.30.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanushree Charan
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2022-02-05 00:00:00.000000000 Z
14
+ date: 2022-02-19 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler