urbanopt-reporting 0.2.1 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -1
- data/LICENSE.md +1 -1
- data/doc_templates/LICENSE.md +1 -1
- data/doc_templates/copyright_erb.txt +1 -1
- data/doc_templates/copyright_js.txt +1 -1
- data/doc_templates/copyright_ruby.txt +1 -1
- data/docs/package-lock.json +3 -3
- data/docs/package.json +1 -1
- data/lib/measures/default_feature_reports/LICENSE.md +1 -1
- data/lib/measures/default_feature_reports/measure.rb +193 -59
- data/lib/measures/default_feature_reports/measure.xml +11 -11
- data/lib/measures/export_modelica_loads/LICENSE.md +27 -0
- data/lib/measures/export_modelica_loads/README.md +26 -0
- data/lib/measures/export_modelica_loads/README.md.erb +42 -0
- data/lib/measures/export_modelica_loads/docs/.gitkeep +0 -0
- data/lib/measures/export_modelica_loads/measure.rb +373 -0
- data/lib/measures/export_modelica_loads/measure.xml +92 -0
- data/lib/measures/export_modelica_loads/resources/report.html.in +13 -0
- data/lib/measures/export_time_series_modelica/LICENSE.md +1 -0
- data/lib/measures/export_time_series_modelica/README.md +59 -0
- data/lib/measures/export_time_series_modelica/README.md.erb +42 -0
- data/lib/measures/export_time_series_modelica/docs/.gitkeep +0 -0
- data/lib/measures/export_time_series_modelica/measure.rb +429 -0
- data/lib/measures/export_time_series_modelica/measure.xml +147 -0
- data/lib/measures/export_time_series_modelica/resources/os_lib_helper_methods.rb +399 -0
- data/lib/measures/export_time_series_modelica/resources/report.html.in +13 -0
- data/lib/urbanopt/reporting/default_reports/end_uses.rb +23 -9
- data/lib/urbanopt/reporting/default_reports/feature_report.rb +62 -5
- data/lib/urbanopt/reporting/default_reports/reporting_period.rb +42 -22
- data/lib/urbanopt/reporting/default_reports/scenario_report.rb +7 -4
- data/lib/urbanopt/reporting/default_reports/schema/scenario_csv_columns.txt +15 -0
- data/lib/urbanopt/reporting/default_reports/schema/scenario_schema.json +33 -5
- data/lib/urbanopt/reporting/version.rb +1 -1
- data/urbanopt-reporting-gem.gemspec +1 -1
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75187e938a1cbfabd1d74eba912af03fcd2aade54955a490d68ea1b97b229dd2
|
4
|
+
data.tar.gz: 25b56a46e4569a71a7c01964bf64f2a14d8c30fdc9f6f5167fd61b40f272eb52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a5f20c29cc1eec6aafeece4479a52c4c5a6a0ecfb0374a0b8f243551f9a7d49ecfbcf25b233ce7e19441551adcd87c5eb668ad509d4c87b0681ea1a187da6b2
|
7
|
+
data.tar.gz: bccc2ad11e97d3330f2706cb9a7d32c5c0209130af88738854e6d56fb6d34b5ccfcc8b51b42633d3f359bf4c03c34d4888108528bd38c558c96ec06569c92e9d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,44 @@
|
|
1
1
|
# URBANopt Reporting Gem
|
2
2
|
|
3
|
+
## Version 0.3.4
|
4
|
+
|
5
|
+
Date Range: 01/14/21 - 01/15/21
|
6
|
+
|
7
|
+
- Fixed [#53]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/53 ), Make subfolders in feature saving if necessary
|
8
|
+
- Fixed [#55]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/55 ), Fix new measures
|
9
|
+
|
10
|
+
## Version 0.3.3
|
11
|
+
|
12
|
+
Date Range: 12/09/20 - 01/13/21
|
13
|
+
|
14
|
+
- Fixed [#36]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/36 ), Add reporting measure for district heating/cooling system mass flow rates
|
15
|
+
- Fixed [#37]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/37 ), Add EUI to default report
|
16
|
+
- Fixed [#38]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/38 ), Add better error handling around convert_units
|
17
|
+
- Fixed [#43]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/43 ), Add available_roof_area calculation
|
18
|
+
- Fixed [#44]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/44 ), Fix coordinates order
|
19
|
+
|
20
|
+
## Version 0.3.2
|
21
|
+
|
22
|
+
Date Range: 12/07/20 - 12/08/20
|
23
|
+
|
24
|
+
- Fixed [#27]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/27 ), reporting measure fails when there are no additional fuels in the model
|
25
|
+
- Fixed [#29]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/29 ), restore save_feature_report function for backward compatibility
|
26
|
+
- Fixed [#32]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/32 ), bump extension-gem dependency
|
27
|
+
|
28
|
+
## Version 0.3.1
|
29
|
+
|
30
|
+
Date Range: 11/26/2020 - 12/07/2020
|
31
|
+
|
32
|
+
- Fixed [#19]( https://github.com/urbanopt/urbanopt-reporting-gem/pull/19 ), check for nil values to avoid crashing unit conversion
|
33
|
+
- Fixed [#24]( https://github.com/urbanopt/urbanopt-reporting-gem/pull/24 ), Support reporting of other fuels
|
34
|
+
- Fixed [#28]( https://github.com/urbanopt/urbanopt-reporting-gem/pull/28 ), fix for other_fuels being nil and restore save_feature_report function
|
35
|
+
|
36
|
+
## Version 0.3.0
|
37
|
+
|
38
|
+
Date Range: 11/12/2020 - 11/25/2020
|
39
|
+
|
40
|
+
- Updating dependencies to support OpenStudio 3.1.0
|
41
|
+
|
3
42
|
## Version 0.2.1
|
4
43
|
|
5
44
|
Date Range: 09/22/2020 - 11/12/2020
|
@@ -29,4 +68,4 @@ Date Range: 08/27/2020 - 09/21/2020
|
|
29
68
|
|
30
69
|
08/17/2020
|
31
70
|
|
32
|
-
Initial release of the urbanopt-reporting gem.
|
71
|
+
Initial release of the urbanopt-reporting gem.
|
data/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
URBANopt
|
1
|
+
URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
2
2
|
contributors. All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
data/doc_templates/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
URBANopt
|
1
|
+
URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
2
2
|
contributors. All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%
|
2
2
|
# *********************************************************************************
|
3
|
-
# URBANopt
|
3
|
+
# URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
4
4
|
# contributors. All rights reserved.
|
5
5
|
#
|
6
6
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,4 +1,4 @@
|
|
1
1
|
/* @preserve
|
2
|
-
* URBANopt
|
2
|
+
* URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other contributors. All rights reserved.
|
3
3
|
* Use of this source code is governed by the BSD 3-Clause license.
|
4
4
|
*/
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
data/docs/package-lock.json
CHANGED
@@ -4814,9 +4814,9 @@
|
|
4814
4814
|
"integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
|
4815
4815
|
},
|
4816
4816
|
"highlight.js": {
|
4817
|
-
"version": "10.
|
4818
|
-
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.
|
4819
|
-
"integrity": "sha512-
|
4817
|
+
"version": "10.4.1",
|
4818
|
+
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.1.tgz",
|
4819
|
+
"integrity": "sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg=="
|
4820
4820
|
},
|
4821
4821
|
"hmac-drbg": {
|
4822
4822
|
"version": "1.0.1",
|
data/docs/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
},
|
11
11
|
"author": "NREL",
|
12
12
|
"dependencies": {
|
13
|
-
"highlight.js": "^10.
|
13
|
+
"highlight.js": "^10.4.1",
|
14
14
|
"json-schema-ref-parser": "^9.0.6",
|
15
15
|
"json-schema-view-js": "git+https://git@github.com/bgschiller/json-schema-view-js.git",
|
16
16
|
"vuepress": "^1.7.1",
|
@@ -1,4 +1,4 @@
|
|
1
|
-
URBANopt
|
1
|
+
URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
2
2
|
contributors. All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -99,37 +99,39 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
99
99
|
|
100
100
|
# define fuel types
|
101
101
|
def fuel_types
|
102
|
-
fuel_types =
|
103
|
-
'Electricity',
|
104
|
-
'Gas',
|
105
|
-
'
|
106
|
-
'
|
107
|
-
'
|
108
|
-
'
|
109
|
-
|
102
|
+
fuel_types = {
|
103
|
+
'Electricity' => 'Electricity',
|
104
|
+
'Gas' => 'Natural Gas',
|
105
|
+
'FuelOil#2' => 'Fuel Oil #2',
|
106
|
+
'Propane' => 'Propane',
|
107
|
+
'AdditionalFuel' => 'Additional Fuel',
|
108
|
+
'DistrictCooling' => 'District Cooling',
|
109
|
+
'DistrictHeating' => 'District Heating',
|
110
|
+
'Water' => 'Water'
|
111
|
+
}
|
110
112
|
|
111
113
|
return fuel_types
|
112
114
|
end
|
113
115
|
|
114
116
|
# define enduses
|
115
117
|
def end_uses
|
116
|
-
end_uses =
|
117
|
-
'Heating',
|
118
|
-
'Cooling',
|
119
|
-
'InteriorLights',
|
120
|
-
'ExteriorLights',
|
121
|
-
'InteriorEquipment',
|
122
|
-
'ExteriorEquipment',
|
123
|
-
'Fans',
|
124
|
-
'Pumps',
|
125
|
-
'HeatRejection',
|
126
|
-
'Humidifier',
|
127
|
-
'HeatRecovery',
|
128
|
-
'WaterSystems',
|
129
|
-
'Refrigeration',
|
130
|
-
'Generators',
|
131
|
-
'Facility'
|
132
|
-
|
118
|
+
end_uses = {
|
119
|
+
'Heating' => 'Heating',
|
120
|
+
'Cooling' => 'Cooling',
|
121
|
+
'InteriorLights' => 'Interior Lighting',
|
122
|
+
'ExteriorLights' => 'Exterior Lighting',
|
123
|
+
'InteriorEquipment' => 'Interior Equipment',
|
124
|
+
'ExteriorEquipment' => 'Exterior Equipment',
|
125
|
+
'Fans' => 'Fans',
|
126
|
+
'Pumps' => 'Pumps',
|
127
|
+
'HeatRejection' => 'Heat Rejection',
|
128
|
+
'Humidifier' => 'Humidification',
|
129
|
+
'HeatRecovery' => 'Heat Recovery',
|
130
|
+
'WaterSystems' => 'Water Systems',
|
131
|
+
'Refrigeration' => 'Refrigeration',
|
132
|
+
'Generators' => 'Generators',
|
133
|
+
'Facility' => 'Facility'
|
134
|
+
}
|
133
135
|
|
134
136
|
return end_uses
|
135
137
|
end
|
@@ -163,7 +165,9 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
163
165
|
|
164
166
|
# Request the output for each end use/fuel type combination
|
165
167
|
end_uses.each do |end_use|
|
168
|
+
end_use, = end_use
|
166
169
|
fuel_types.each do |fuel_type|
|
170
|
+
fuel_type, = fuel_type
|
167
171
|
variable_name = if end_use == 'Facility'
|
168
172
|
"#{fuel_type}:#{end_use}"
|
169
173
|
else
|
@@ -173,6 +177,24 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
173
177
|
end
|
174
178
|
end
|
175
179
|
|
180
|
+
# OtherFuels
|
181
|
+
other_fuels = ['FuelOil#1', 'Diesel', 'Gasoline', 'Coal', 'Steam']
|
182
|
+
other_fuel_uses = ['HeatRejection', 'Heating', 'WaterSystems', 'InteriorEquipment']
|
183
|
+
custom_meter_facility = 'Meter:Custom,OtherFuels:Facility,OtherFuel1'
|
184
|
+
other_fuel_uses.each do |end_use|
|
185
|
+
custom_meter = "Meter:Custom,#{end_use}:OtherFuels,OtherFuel1"
|
186
|
+
other_fuels.each do |other_fuel|
|
187
|
+
result << OpenStudio::IdfObject.load("Output:Meter,#{end_use}:#{other_fuel},#{reporting_frequency};").get
|
188
|
+
custom_meter_facility += ",,#{end_use}:#{other_fuel}"
|
189
|
+
custom_meter += ",,#{end_use}:#{other_fuel}"
|
190
|
+
end
|
191
|
+
custom_meter += ';'
|
192
|
+
result << OpenStudio::IdfObject.load(custom_meter).get
|
193
|
+
result << OpenStudio::IdfObject.load("Output:Meter,#{end_use}:OtherFuels,#{reporting_frequency};").get
|
194
|
+
end
|
195
|
+
result << OpenStudio::IdfObject.load("#{custom_meter_facility};").get
|
196
|
+
result << OpenStudio::IdfObject.load("Output:Meter,OtherFuels:Facility,#{reporting_frequency};").get
|
197
|
+
|
176
198
|
# Request the output for each end use/fuel type combination
|
177
199
|
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Electricity:Facility,#{reporting_frequency};").get
|
178
200
|
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,ElectricityProduced:Facility,#{reporting_frequency};").get
|
@@ -228,11 +250,19 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
228
250
|
end
|
229
251
|
end
|
230
252
|
|
231
|
-
val
|
253
|
+
return val
|
232
254
|
end
|
233
255
|
|
234
256
|
# unit conversion method
|
235
257
|
def convert_units(value, from_units, to_units)
|
258
|
+
if value.nil?
|
259
|
+
return nil
|
260
|
+
end
|
261
|
+
if from_units.nil? || to_units.nil?
|
262
|
+
@runner.registerError("Cannot convert units...from_units: #{from_units} or to_units: #{to_units} left blank.")
|
263
|
+
return nil
|
264
|
+
end
|
265
|
+
|
236
266
|
# apply unit conversion
|
237
267
|
value_converted = OpenStudio.convert(value, from_units, to_units)
|
238
268
|
if value_converted.is_initialized
|
@@ -328,10 +358,10 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
328
358
|
##
|
329
359
|
|
330
360
|
if feature_location.include? '['
|
331
|
-
# get latitude from feature_location
|
332
|
-
latitude = (feature_location.split(',')[0].delete! '[]').to_f
|
333
361
|
# get longitude from feature_location
|
334
|
-
longitude = (feature_location.split(',')[
|
362
|
+
longitude = (feature_location.split(',')[0].delete! '[]').to_f
|
363
|
+
# get latitude from feature_location
|
364
|
+
latitude = (feature_location.split(',')[1].delete! '[]').to_f
|
335
365
|
# latitude
|
336
366
|
feature_report.location.latitude_deg = latitude
|
337
367
|
# longitude
|
@@ -470,7 +500,22 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
470
500
|
total_roof_area += surface.netArea
|
471
501
|
end
|
472
502
|
end
|
473
|
-
|
503
|
+
|
504
|
+
total_roof_area_sqft = convert_units(total_roof_area, 'm^2', 'ft^2')
|
505
|
+
feature_report.program.roof_area_sqft[:total_roof_area_sqft] = total_roof_area_sqft
|
506
|
+
|
507
|
+
# available_roof_area_sqft
|
508
|
+
# RK: a more robust method should be implemented to find the available_roof_area
|
509
|
+
# assign available roof area to be a percentage of the total roof area
|
510
|
+
|
511
|
+
if building_types[0][:building_type].include? 'Single-Family Detached'
|
512
|
+
feature_report.program.roof_area_sqft[:available_roof_area_sqft] = 0.45 * total_roof_area_sqft
|
513
|
+
else
|
514
|
+
feature_report.program.roof_area_sqft[:available_roof_area_sqft] = 0.75 * total_roof_area_sqft
|
515
|
+
end
|
516
|
+
|
517
|
+
# RK: Temporary solution: assign available roof area to be equal to total roof area
|
518
|
+
# feature_report.program.roof_area_sqft[:available_roof_area_sqft] = total_roof_area_sqft
|
474
519
|
|
475
520
|
# orientation
|
476
521
|
# RK: a more robust method should be implemented to find orientation(finding main axis of the building using aspect ratio)
|
@@ -556,6 +601,22 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
556
601
|
total_source_energy = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='Site and Source Energy' AND RowName='Total Source Energy' AND ColumnName='Total Energy'")
|
557
602
|
feature_report.reporting_periods[0].total_source_energy_kwh = convert_units(total_source_energy, 'GJ', 'kWh')
|
558
603
|
|
604
|
+
# EUI is only valid with a full year of energy data
|
605
|
+
if begin_month == 1 && begin_day_of_month == 1 && end_month == 12 && end_day_of_month == 31
|
606
|
+
# calculate site EUI
|
607
|
+
site_EUI_kwh_per_m2 = feature_report.reporting_periods[0].total_site_energy_kwh / floor_area
|
608
|
+
site_EUI_kbtu_per_ft2 = convert_units(total_site_energy, 'GJ', 'kBtu') / feature_report.program.floor_area_sqft
|
609
|
+
# add site EUI to feature report
|
610
|
+
feature_report.reporting_periods[0].site_EUI_kwh_per_m2 = site_EUI_kwh_per_m2
|
611
|
+
feature_report.reporting_periods[0].site_EUI_kbtu_per_ft2 = site_EUI_kbtu_per_ft2
|
612
|
+
# calculate source EUI
|
613
|
+
source_EUI_kwh_per_m2 = feature_report.reporting_periods[0].total_source_energy_kwh / floor_area
|
614
|
+
source_EUI_kbtu_per_ft2 = convert_units(total_source_energy, 'GJ', 'kBtu') / feature_report.program.floor_area_sqft
|
615
|
+
# add source EUI to feature report
|
616
|
+
feature_report.reporting_periods[0].source_EUI_kwh_per_m2 = source_EUI_kwh_per_m2
|
617
|
+
feature_report.reporting_periods[0].source_EUI_kbtu_per_ft2 = source_EUI_kbtu_per_ft2
|
618
|
+
end
|
619
|
+
|
559
620
|
# net_site_energy
|
560
621
|
net_site_energy = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='Site and Source Energy' AND RowName='Net Site Energy' AND ColumnName='Total Energy'")
|
561
622
|
feature_report.reporting_periods[0].net_site_energy_kwh = convert_units(net_site_energy, 'GJ', 'kWh')
|
@@ -572,17 +633,37 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
572
633
|
natural_gas = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Natural Gas'")
|
573
634
|
feature_report.reporting_periods[0].natural_gas_kwh = convert_units(natural_gas, 'GJ', 'kWh')
|
574
635
|
|
575
|
-
#
|
636
|
+
# propane
|
637
|
+
propane = sql_query(runner, sql_file, 'EnergyMeters', "TableName='Annual and Peak Values - Other' AND RowName='Propane:Facility' AND ColumnName='Annual Value'")
|
638
|
+
feature_report.reporting_periods[0].propane_kwh = 0.0
|
639
|
+
feature_report.reporting_periods[0].propane_kwh = convert_units(propane, 'GJ', 'kWh') unless propane.nil?
|
640
|
+
|
641
|
+
# fuel_oil
|
642
|
+
fuel_oil = sql_query(runner, sql_file, 'EnergyMeters', "TableName='Annual and Peak Values - Other' AND RowName='FuelOil#2:Facility' AND ColumnName='Annual Value'")
|
643
|
+
feature_report.reporting_periods[0].fuel_oil_kwh = 0.0
|
644
|
+
feature_report.reporting_periods[0].fuel_oil_kwh = convert_units(fuel_oil, 'GJ', 'kWh') unless fuel_oil.nil?
|
645
|
+
|
646
|
+
# other_fuels
|
576
647
|
additional_fuel = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Additional Fuel'")
|
577
|
-
|
648
|
+
# ensure additional fuel is not nil
|
649
|
+
feature_report.reporting_periods[0].other_fuels_kwh = 0.0
|
650
|
+
feature_report.reporting_periods[0].other_fuels_kwh = convert_units(additional_fuel, 'GJ', 'kWh') unless additional_fuel.nil?
|
651
|
+
feature_report.reporting_periods[0].other_fuels_kwh -= feature_report.reporting_periods[0].propane_kwh
|
652
|
+
feature_report.reporting_periods[0].other_fuels_kwh -= feature_report.reporting_periods[0].fuel_oil_kwh
|
578
653
|
|
579
654
|
# district_cooling
|
580
655
|
district_cooling = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='District Cooling'")
|
581
656
|
feature_report.reporting_periods[0].district_cooling_kwh = convert_units(district_cooling, 'GJ', 'kWh')
|
657
|
+
building_types.each do |i|
|
658
|
+
feature_report.reporting_periods[0].district_cooling_kwh = 0.0 if i[:building_type].include?('Single-Family Detached')
|
659
|
+
end
|
582
660
|
|
583
661
|
# district_heating
|
584
662
|
district_heating = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='District Heating'")
|
585
663
|
feature_report.reporting_periods[0].district_heating_kwh = convert_units(district_heating, 'GJ', 'kWh')
|
664
|
+
building_types.each do |i|
|
665
|
+
feature_report.reporting_periods[0].district_heating_kwh = 0.0 if i[:building_type].include?('Single-Family Detached')
|
666
|
+
end
|
586
667
|
|
587
668
|
# water
|
588
669
|
water = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Water'")
|
@@ -596,41 +677,66 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
596
677
|
## end_uses
|
597
678
|
|
598
679
|
# get fuel type as listed in the sql file
|
599
|
-
|
680
|
+
fueltypes = fuel_types.values
|
681
|
+
fueltypes.delete('Propane')
|
682
|
+
fueltypes.delete('Fuel Oil #2')
|
600
683
|
|
601
684
|
# get enduses as listed in the sql file
|
602
|
-
enduses =
|
603
|
-
|
685
|
+
enduses = end_uses.values
|
686
|
+
enduses.delete('Facility')
|
687
|
+
|
688
|
+
# propane / fuel_oil
|
689
|
+
['Propane', 'Fuel Oil #2'].each do |ft|
|
690
|
+
end_uses.keys.each do |eu|
|
691
|
+
next if eu == 'Facility'
|
692
|
+
|
693
|
+
sql_r = sql_query(runner, sql_file, 'EnergyMeters', "TableName='Annual and Peak Values - Other' AND RowName='#{eu}:#{ft.tr(' ', '')}' AND ColumnName='Annual Value'")
|
694
|
+
|
695
|
+
# report each query in its corresponding feature report obeject
|
696
|
+
x = ft.tr(' ', '_').downcase
|
697
|
+
x = x.gsub('_#2', '')
|
698
|
+
x_u = x + '_kwh'
|
699
|
+
m = feature_report.reporting_periods[0].end_uses.send(x_u)
|
700
|
+
|
701
|
+
y = end_uses[eu].tr(' ', '_').downcase
|
702
|
+
if sql_r.nil?
|
703
|
+
sql_r = 0.0
|
704
|
+
end
|
705
|
+
m.send("#{y}=", convert_units(sql_r, 'GJ', 'kWh'))
|
706
|
+
end
|
707
|
+
end
|
604
708
|
|
605
709
|
# loop through fuel types and enduses to fill in sql_query method
|
606
|
-
|
710
|
+
fueltypes.each do |ft|
|
607
711
|
enduses.each do |eu|
|
608
712
|
sql_r = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='#{eu}' AND ColumnName='#{ft}'")
|
609
713
|
|
610
714
|
# report each query in its corresponding feature report obeject
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
x_u = x + '_qbft'
|
615
|
-
else
|
616
|
-
x_u = x + '_kwh'
|
617
|
-
end
|
618
|
-
m = feature_report.reporting_periods[0].end_uses.send(x_u)
|
715
|
+
x = ft.tr(' ', '_').downcase
|
716
|
+
if x.include? 'water'
|
717
|
+
x_u = x + '_qbft'
|
619
718
|
else
|
620
|
-
|
621
|
-
ft_u = ft + '_qbft'
|
622
|
-
else
|
623
|
-
ft_u = ft + '_kwh'
|
624
|
-
end
|
625
|
-
m = feature_report.reporting_periods[0].end_uses.send(ft_u.downcase)
|
719
|
+
x_u = x + '_kwh'
|
626
720
|
end
|
721
|
+
if x_u == 'additional_fuel_kwh'
|
722
|
+
x_u = 'other_fuels_kwh'
|
723
|
+
end
|
724
|
+
m = feature_report.reporting_periods[0].end_uses.send(x_u)
|
627
725
|
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
726
|
+
y = eu.tr(' ', '_').downcase
|
727
|
+
# ensure not nil so the equations below don't error out
|
728
|
+
if sql_r.nil?
|
729
|
+
sql_r = 0.0
|
730
|
+
end
|
731
|
+
sql_r = convert_units(sql_r, 'GJ', 'kWh')
|
732
|
+
if x_u == 'other_fuels_kwh'
|
733
|
+
sql_r -= feature_report.reporting_periods[0].end_uses.propane_kwh.send(y)
|
734
|
+
sql_r -= feature_report.reporting_periods[0].end_uses.fuel_oil_kwh.send(y)
|
633
735
|
end
|
736
|
+
building_types.each do |i|
|
737
|
+
sql_r = 0.0 if i[:building_type].include?('Single-Family Detached') && x_u.include?('district')
|
738
|
+
end
|
739
|
+
m.send("#{y}=", sql_r)
|
634
740
|
end
|
635
741
|
end
|
636
742
|
|
@@ -689,6 +795,9 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
689
795
|
'Electricity:Facility',
|
690
796
|
'ElectricityProduced:Facility',
|
691
797
|
'Gas:Facility',
|
798
|
+
'Propane:Facility',
|
799
|
+
'FuelOil#2:Facility',
|
800
|
+
'OtherFuels:Facility',
|
692
801
|
'Cooling:Electricity',
|
693
802
|
'Heating:Electricity',
|
694
803
|
'InteriorLights:Electricity',
|
@@ -702,6 +811,18 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
702
811
|
'Heating:Gas',
|
703
812
|
'WaterSystems:Gas',
|
704
813
|
'InteriorEquipment:Gas',
|
814
|
+
'HeatRejection:Propane',
|
815
|
+
'Heating:Propane',
|
816
|
+
'WaterSystems:Propane',
|
817
|
+
'InteriorEquipment:Propane',
|
818
|
+
'HeatRejection:FuelOil#2',
|
819
|
+
'Heating:FuelOil#2',
|
820
|
+
'WaterSystems:FuelOil#2',
|
821
|
+
'InteriorEquipment:FuelOil#2',
|
822
|
+
'HeatRejection:OtherFuels',
|
823
|
+
'Heating:OtherFuels',
|
824
|
+
'WaterSystems:OtherFuels',
|
825
|
+
'InteriorEquipment:OtherFuels',
|
705
826
|
'DistrictCooling:Facility',
|
706
827
|
'DistrictHeating:Facility',
|
707
828
|
'District Cooling Chilled Water Rate',
|
@@ -766,7 +887,11 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
766
887
|
runner.registerInfo("TIMESERIES: #{timeseries_name}")
|
767
888
|
|
768
889
|
# get all the key values that this timeseries can be reported for (e.g. if PMV is requested for each zone)
|
769
|
-
|
890
|
+
if timeseries_name.include?('OtherFuels')
|
891
|
+
key_values = sql_file.availableKeyValues('RUN PERIOD 1', 'Zone Timestep', timeseries_name.upcase)
|
892
|
+
else
|
893
|
+
key_values = sql_file.availableKeyValues('RUN PERIOD 1', 'Zone Timestep', timeseries_name)
|
894
|
+
end
|
770
895
|
runner.registerInfo("KEY VALUES: #{key_values}")
|
771
896
|
if key_values.empty?
|
772
897
|
key_values = ['']
|
@@ -810,7 +935,11 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
810
935
|
# final_timeseries_names << new_timeseries_name
|
811
936
|
|
812
937
|
# get the actual timeseries
|
813
|
-
|
938
|
+
if timeseries_name.include?('OtherFuels')
|
939
|
+
ts = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, timeseries_name.upcase, key_value)
|
940
|
+
else
|
941
|
+
ts = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, timeseries_name, key_value)
|
942
|
+
end
|
814
943
|
|
815
944
|
if n.nil?
|
816
945
|
# first timeseries should always be set
|
@@ -825,10 +954,15 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
825
954
|
values[key_cnt] = Array.new(n, 0)
|
826
955
|
end
|
827
956
|
|
957
|
+
# residential considerations
|
958
|
+
building_types.each do |i|
|
959
|
+
values[key_cnt] = Array.new(n, 0) if ['DistrictCooling:Facility', 'DistrictHeating:Facility'].include?(timeseries_name) && i[:building_type].include?('Single-Family Detached')
|
960
|
+
end
|
961
|
+
|
828
962
|
# unit conversion
|
829
963
|
old_unit = ts.get.units if ts.is_initialized
|
830
964
|
|
831
|
-
if timeseries_name.include?
|
965
|
+
if timeseries_name.include?('Gas') || timeseries_name.include?('Propane') || timeseries_name.include?('FuelOil#2') || timeseries_name.include?('OtherFuels')
|
832
966
|
new_unit = 'kBtu'
|
833
967
|
else
|
834
968
|
new_unit = case old_unit.to_s
|