urbanopt-reporting 0.3.2 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +39 -0
- data/LICENSE.md +29 -17
- data/Rakefile +16 -6
- data/doc_templates/copyright_ruby.txt +17 -7
- data/lib/measures/default_feature_reports/measure.rb +156 -95
- 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 +374 -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 +430 -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.rb +16 -6
- data/lib/urbanopt/reporting/default_reports.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/construction_cost.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/date.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/distributed_generation.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/end_use.rb +54 -23
- data/lib/urbanopt/reporting/default_reports/end_uses.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/extension.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/feature_report.rb +68 -6
- data/lib/urbanopt/reporting/default_reports/generator.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/location.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/logger.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/power_distribution.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/program.rb +17 -7
- data/lib/urbanopt/reporting/default_reports/reporting_period.rb +30 -8
- data/lib/urbanopt/reporting/default_reports/scenario_report.rb +26 -11
- data/lib/urbanopt/reporting/default_reports/schema/scenario_csv_columns.txt +11 -10
- data/lib/urbanopt/reporting/default_reports/schema/scenario_schema.json +27 -12
- data/lib/urbanopt/reporting/default_reports/solar_pv.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/storage.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/thermal_storage.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/timeseries_csv.rb +17 -7
- data/lib/urbanopt/reporting/default_reports/validator.rb +16 -6
- data/lib/urbanopt/reporting/default_reports/wind.rb +16 -6
- data/lib/urbanopt/reporting/derived_extension.rb +16 -6
- data/lib/urbanopt/reporting/version.rb +17 -7
- metadata +17 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c7f77ced3ece4ad3c08bc93a92108e57b4fc83bbd982304d2ceee67b5f6260ab
|
|
4
|
+
data.tar.gz: 026a4b1d4fd2bfe3690444092eee67ef47c936a5bbdbcc6318c4c0403b2ddf1e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 95161e4c8f6019163f112607c2c6d7576b1eb436a89f90ce91434e21096debfe7ee488c78fb107cd92eccedceab61700b1632333f7819b684bc05e9f611cf06f
|
|
7
|
+
data.tar.gz: 988b4612f950580f7baeaadc10845f71e5e5be954143f5374e9615184d74fee37893c7110682bc1476319faa536283350956e480c5fe603f12f1d531af438b14
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# URBANopt Reporting Gem
|
|
2
2
|
|
|
3
|
+
## Version 0.3.7
|
|
4
|
+
Date Range: 02/12/21 - 03/26/21
|
|
5
|
+
|
|
6
|
+
- Fixed [#47]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/47 ), Default features report bugfixes and updates
|
|
7
|
+
- Fixed [#67]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/67 ), Update copyrights for 2021
|
|
8
|
+
- Fixed [#70]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/70 ), feature report bug fix
|
|
9
|
+
|
|
10
|
+
## Version 0.3.6
|
|
11
|
+
|
|
12
|
+
Date Range: 02/05/21 - 02/11/21
|
|
13
|
+
|
|
14
|
+
- Fixed [#64]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/64 ), EnergyPlus changed output fuel names in version 9.4
|
|
15
|
+
|
|
16
|
+
## Version 0.3.5
|
|
17
|
+
|
|
18
|
+
Date Range: 01/16/21 - 02/04/21
|
|
19
|
+
|
|
20
|
+
- Fixed [#58]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/58 ), Feature report saving bug fix.
|
|
21
|
+
- Fixed [#60]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/60 ), Added EV/ ExteriorEquipment results to csv and json reports
|
|
22
|
+
- Fixed [#61]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/61 ), Enhance the aggregation of enduses.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## Version 0.3.4
|
|
26
|
+
|
|
27
|
+
Date Range: 01/14/21 - 01/15/21
|
|
28
|
+
|
|
29
|
+
- Fixed [#53]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/53 ), Make subfolders in feature saving if necessary
|
|
30
|
+
- Fixed [#55]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/55 ), Fix new measures
|
|
31
|
+
|
|
32
|
+
## Version 0.3.3
|
|
33
|
+
|
|
34
|
+
Date Range: 12/09/20 - 01/13/21
|
|
35
|
+
|
|
36
|
+
- Fixed [#36]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/36 ), Add reporting measure for district heating/cooling system mass flow rates
|
|
37
|
+
- Fixed [#37]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/37 ), Add EUI to default report
|
|
38
|
+
- Fixed [#38]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/38 ), Add better error handling around convert_units
|
|
39
|
+
- Fixed [#43]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/43 ), Add available_roof_area calculation
|
|
40
|
+
- Fixed [#44]( https://github.com/urbanopt/urbanopt-reporting-gem/issues/44 ), Fix coordinates order
|
|
41
|
+
|
|
3
42
|
## Version 0.3.2
|
|
4
43
|
|
|
5
44
|
Date Range: 12/07/20 - 12/08/20
|
data/LICENSE.md
CHANGED
|
@@ -1,27 +1,39 @@
|
|
|
1
|
-
|
|
1
|
+
# License
|
|
2
|
+
|
|
3
|
+
URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
|
2
4
|
contributors. All rights reserved.
|
|
3
5
|
|
|
4
|
-
Redistribution and use in source and binary forms, with or without modification,
|
|
6
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
5
7
|
are permitted provided that the following conditions are met:
|
|
6
8
|
|
|
7
|
-
Redistributions of source code must retain the above copyright notice, this list
|
|
9
|
+
Redistributions of source code must retain the above copyright notice, this list
|
|
8
10
|
of conditions and the following disclaimer.
|
|
9
11
|
|
|
10
|
-
Redistributions in binary form must reproduce the above copyright notice, this
|
|
11
|
-
list of conditions and the following disclaimer in the documentation and/or other
|
|
12
|
+
Redistributions in binary form must reproduce the above copyright notice, this
|
|
13
|
+
list of conditions and the following disclaimer in the documentation and/or other
|
|
12
14
|
materials provided with the distribution.
|
|
13
|
-
|
|
14
|
-
Neither the name of the copyright holder nor the names of its contributors may be
|
|
15
|
-
used to endorse or promote products derived from this software without specific
|
|
15
|
+
|
|
16
|
+
Neither the name of the copyright holder nor the names of its contributors may be
|
|
17
|
+
used to endorse or promote products derived from this software without specific
|
|
16
18
|
prior written permission.
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
Redistribution of this software, without modification, must refer to the software
|
|
21
|
+
by the same designation. Redistribution of a modified version of this software
|
|
22
|
+
(i) may not refer to the modified version by the same designation, or by any
|
|
23
|
+
confusingly similar designation, and (ii) must refer to the underlying software
|
|
24
|
+
originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
|
25
|
+
the term “URBANopt”, or any confusingly similar designation may not be used to
|
|
26
|
+
refer to any modified version of this software or any modified version of the
|
|
27
|
+
underlying software originally provided by Alliance without the prior written
|
|
28
|
+
consent of Alliance.
|
|
29
|
+
|
|
30
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
31
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
32
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
33
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
34
|
+
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
35
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
36
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
37
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
38
|
+
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
27
39
|
OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Rakefile
CHANGED
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, 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,
|
|
6
6
|
# are permitted provided that the following conditions are met:
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
|
9
9
|
# of conditions and the following disclaimer.
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
|
13
13
|
# materials provided with the distribution.
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
|
17
17
|
# prior written permission.
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
|
27
|
+
# consent of Alliance.
|
|
28
|
+
|
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, 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,
|
|
6
6
|
# are permitted provided that the following conditions are met:
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
|
9
9
|
# of conditions and the following disclaimer.
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
|
13
13
|
# materials provided with the distribution.
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
|
17
17
|
# prior written permission.
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
|
27
|
+
# consent of Alliance.
|
|
28
|
+
|
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
@@ -26,4 +36,4 @@
|
|
|
26
36
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
27
37
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
28
38
|
# OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
# *********************************************************************************
|
|
39
|
+
# *********************************************************************************
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, 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,
|
|
6
6
|
# are permitted provided that the following conditions are met:
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
|
9
9
|
# of conditions and the following disclaimer.
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
|
13
13
|
# materials provided with the distribution.
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
|
17
17
|
# prior written permission.
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
|
27
|
+
# consent of Alliance.
|
|
28
|
+
|
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
@@ -101,10 +111,9 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
101
111
|
def fuel_types
|
|
102
112
|
fuel_types = {
|
|
103
113
|
'Electricity' => 'Electricity',
|
|
104
|
-
'
|
|
105
|
-
'
|
|
114
|
+
'NaturalGas' => 'Natural Gas',
|
|
115
|
+
'FuelOilNo2' => 'Fuel Oil #2',
|
|
106
116
|
'Propane' => 'Propane',
|
|
107
|
-
'AdditionalFuel' => 'Additional Fuel',
|
|
108
117
|
'DistrictCooling' => 'District Cooling',
|
|
109
118
|
'DistrictHeating' => 'District Heating',
|
|
110
119
|
'Water' => 'Water'
|
|
@@ -113,6 +122,11 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
113
122
|
return fuel_types
|
|
114
123
|
end
|
|
115
124
|
|
|
125
|
+
# define other fuel types
|
|
126
|
+
def other_fuels
|
|
127
|
+
return ['Gasoline', 'Diesel', 'Coal', 'Fuel Oil No 1', 'Other Fuel 1', 'Steam']
|
|
128
|
+
end
|
|
129
|
+
|
|
116
130
|
# define enduses
|
|
117
131
|
def end_uses
|
|
118
132
|
end_uses = {
|
|
@@ -177,13 +191,13 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
177
191
|
end
|
|
178
192
|
end
|
|
179
193
|
|
|
180
|
-
# OtherFuels
|
|
181
|
-
other_fuels = ['FuelOil#1', 'Diesel', 'Gasoline', 'Coal', 'Steam']
|
|
194
|
+
# Create a custom meter for OtherFuels
|
|
182
195
|
other_fuel_uses = ['HeatRejection', 'Heating', 'WaterSystems', 'InteriorEquipment']
|
|
183
|
-
custom_meter_facility = 'Meter:Custom,OtherFuels:Facility,
|
|
196
|
+
custom_meter_facility = 'Meter:Custom,OtherFuels:Facility,OtherFuel2'
|
|
184
197
|
other_fuel_uses.each do |end_use|
|
|
185
|
-
custom_meter = "Meter:Custom,#{end_use}:OtherFuels,
|
|
198
|
+
custom_meter = "Meter:Custom,#{end_use}:OtherFuels,OtherFuel2"
|
|
186
199
|
other_fuels.each do |other_fuel|
|
|
200
|
+
other_fuel = other_fuel.gsub(' ', '')
|
|
187
201
|
result << OpenStudio::IdfObject.load("Output:Meter,#{end_use}:#{other_fuel},#{reporting_frequency};").get
|
|
188
202
|
custom_meter_facility += ",,#{end_use}:#{other_fuel}"
|
|
189
203
|
custom_meter += ",,#{end_use}:#{other_fuel}"
|
|
@@ -198,9 +212,10 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
198
212
|
# Request the output for each end use/fuel type combination
|
|
199
213
|
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Electricity:Facility,#{reporting_frequency};").get
|
|
200
214
|
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,ElectricityProduced:Facility,#{reporting_frequency};").get
|
|
201
|
-
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,
|
|
215
|
+
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,NaturalGas:Facility,#{reporting_frequency};").get
|
|
202
216
|
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,DistrictCooling:Facility,#{reporting_frequency};").get
|
|
203
217
|
result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,DistrictHeating:Facility,#{reporting_frequency};").get
|
|
218
|
+
|
|
204
219
|
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Cooling:Electricity,#{reporting_frequency};").get
|
|
205
220
|
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Heating:Electricity,#{reporting_frequency};").get
|
|
206
221
|
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,InteriorLights:Electricity,#{reporting_frequency};").get
|
|
@@ -209,18 +224,22 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
209
224
|
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Fans:Electricity,#{reporting_frequency};").get
|
|
210
225
|
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Pumps:Electricity,#{reporting_frequency};").get
|
|
211
226
|
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,WaterSystems:Electricity,#{reporting_frequency};").get
|
|
212
|
-
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Heating:
|
|
213
|
-
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,WaterSystems:
|
|
214
|
-
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,InteriorEquipment:
|
|
227
|
+
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Heating:NaturalGas,#{reporting_frequency};").get
|
|
228
|
+
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,WaterSystems:NaturalGas,#{reporting_frequency};").get
|
|
229
|
+
# result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,InteriorEquipment:NaturalGas,#{reporting_frequency};").get
|
|
215
230
|
result << OpenStudio::IdfObject.load('Output:Variable,*,Heating Coil Heating Rate,hourly; !- HVAC Average [W];').get
|
|
231
|
+
# result << OpenStudio::IdfObject.load("Output:Variable,*,Exterior Equipment:Electric Vehicles,#{reporting_frequency};").get
|
|
216
232
|
|
|
217
233
|
timeseries_data = ['District Cooling Chilled Water Rate', 'District Cooling Mass Flow Rate',
|
|
218
234
|
'District Cooling Inlet Temperature', 'District Cooling Outlet Temperature',
|
|
219
235
|
'District Heating Hot Water Rate', 'District Heating Mass Flow Rate',
|
|
220
236
|
'District Heating Inlet Temperature', 'District Heating Outlet Temperature', 'Cooling Coil Total Cooling Rate',
|
|
221
|
-
'Heating Coil Heating Rate']
|
|
237
|
+
'Heating Coil Heating Rate', 'ExteriorEquipment:Electricity']
|
|
222
238
|
|
|
223
239
|
tes_timeseries_data = ['Ice Thermal Storage End Fraction', 'Cooling coil Ice Thermal Storage End Fraction']
|
|
240
|
+
|
|
241
|
+
ev_timeseries_data = ['Exterior Equipment:Electric Vehicles']
|
|
242
|
+
|
|
224
243
|
timeseries_data += tes_timeseries_data
|
|
225
244
|
|
|
226
245
|
timeseries_data.each do |ts|
|
|
@@ -258,6 +277,11 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
258
277
|
if value.nil?
|
|
259
278
|
return nil
|
|
260
279
|
end
|
|
280
|
+
if from_units.nil? || to_units.nil?
|
|
281
|
+
@runner.registerError("Cannot convert units...from_units: #{from_units} or to_units: #{to_units} left blank.")
|
|
282
|
+
return nil
|
|
283
|
+
end
|
|
284
|
+
|
|
261
285
|
# apply unit conversion
|
|
262
286
|
value_converted = OpenStudio.convert(value, from_units, to_units)
|
|
263
287
|
if value_converted.is_initialized
|
|
@@ -353,10 +377,10 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
353
377
|
##
|
|
354
378
|
|
|
355
379
|
if feature_location.include? '['
|
|
356
|
-
# get latitude from feature_location
|
|
357
|
-
latitude = (feature_location.split(',')[0].delete! '[]').to_f
|
|
358
380
|
# get longitude from feature_location
|
|
359
|
-
longitude = (feature_location.split(',')[
|
|
381
|
+
longitude = (feature_location.split(',')[0].delete! '[]').to_f
|
|
382
|
+
# get latitude from feature_location
|
|
383
|
+
latitude = (feature_location.split(',')[1].delete! '[]').to_f
|
|
360
384
|
# latitude
|
|
361
385
|
feature_report.location.latitude_deg = latitude
|
|
362
386
|
# longitude
|
|
@@ -384,27 +408,34 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
384
408
|
# unconditioned_area
|
|
385
409
|
unconditioned_area = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='Building Area' AND RowName='Unconditioned Building Area' AND ColumnName='Area'")
|
|
386
410
|
feature_report.program.unconditioned_area_sqft = convert_units(unconditioned_area, 'm^2', 'ft^2')
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
411
|
+
if building.standardsBuildingType.is_initialized
|
|
412
|
+
floor_area -= unconditioned_area if ['Residential'].include?(building.standardsBuildingType.get) # conditioned floor area only
|
|
413
|
+
end
|
|
390
414
|
|
|
391
415
|
# maximum_number_of_stories
|
|
392
416
|
number_of_stories = building.standardsNumberOfStories.get if building.standardsNumberOfStories.is_initialized
|
|
393
417
|
number_of_stories ||= 1
|
|
394
418
|
feature_report.program.maximum_number_of_stories = number_of_stories
|
|
395
419
|
|
|
396
|
-
# maximum_roof_height
|
|
397
|
-
floor_to_floor_height = building.nominalFloortoFloorHeight.to_f
|
|
398
|
-
maximum_roof_height = number_of_stories * floor_to_floor_height
|
|
399
|
-
feature_report.program.maximum_roof_height_ft = maximum_roof_height
|
|
400
|
-
|
|
401
420
|
# maximum_number_of_stories_above_ground
|
|
402
421
|
number_of_stories_above_ground = building.standardsNumberOfAboveGroundStories.get if building.standardsNumberOfAboveGroundStories.is_initialized
|
|
403
422
|
number_of_stories_above_ground ||= 1
|
|
404
423
|
feature_report.program.maximum_number_of_stories_above_ground = number_of_stories_above_ground
|
|
405
424
|
|
|
425
|
+
# maximum_roof_height
|
|
426
|
+
floor_to_floor_height = building.nominalFloortoFloorHeight.get if building.nominalFloortoFloorHeight.is_initialized
|
|
427
|
+
floor_to_floor_height ||= 8
|
|
428
|
+
feature_report.program.maximum_roof_height_ft = feature_report.program.maximum_number_of_stories_above_ground * floor_to_floor_height
|
|
429
|
+
|
|
430
|
+
# footprint_area
|
|
431
|
+
if not ['Residential'].include?(building.standardsBuildingType.get)
|
|
432
|
+
feature_report.program.footprint_area_sqft = feature_report.program.floor_area_sqft / number_of_stories
|
|
433
|
+
else
|
|
434
|
+
feature_report.program.footprint_area_sqft = convert_units(floor_area, 'm^2', 'ft^2') / building.additionalProperties.getFeatureAsInteger('NumberOfConditionedStories').get
|
|
435
|
+
end
|
|
436
|
+
|
|
406
437
|
# number_of_residential_units
|
|
407
|
-
number_of_living_units = building.standardsNumberOfLivingUnits.
|
|
438
|
+
number_of_living_units = building.standardsNumberOfLivingUnits.get if building.standardsNumberOfLivingUnits.is_initialized
|
|
408
439
|
number_of_living_units ||= 1
|
|
409
440
|
feature_report.program.number_of_residential_units = number_of_living_units
|
|
410
441
|
|
|
@@ -425,6 +456,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
425
456
|
else
|
|
426
457
|
building_type = building_type.get
|
|
427
458
|
end
|
|
459
|
+
next if ['Residential'].include?(building_type) # space types with empty building type fields will inherit from the building object
|
|
428
460
|
space_type_areas[building_type] = 0 if space_type_areas[building_type].nil?
|
|
429
461
|
space_type_areas[building_type] += convert_units(space_type.floorArea, 'm^2', 'ft^2')
|
|
430
462
|
end
|
|
@@ -495,7 +527,22 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
495
527
|
total_roof_area += surface.netArea
|
|
496
528
|
end
|
|
497
529
|
end
|
|
498
|
-
|
|
530
|
+
|
|
531
|
+
total_roof_area_sqft = convert_units(total_roof_area, 'm^2', 'ft^2')
|
|
532
|
+
feature_report.program.roof_area_sqft[:total_roof_area_sqft] = total_roof_area_sqft
|
|
533
|
+
|
|
534
|
+
# available_roof_area_sqft
|
|
535
|
+
# RK: a more robust method should be implemented to find the available_roof_area
|
|
536
|
+
# assign available roof area to be a percentage of the total roof area
|
|
537
|
+
|
|
538
|
+
if building_types[0][:building_type].include? 'Single-Family Detached'
|
|
539
|
+
feature_report.program.roof_area_sqft[:available_roof_area_sqft] = 0.45 * total_roof_area_sqft
|
|
540
|
+
else
|
|
541
|
+
feature_report.program.roof_area_sqft[:available_roof_area_sqft] = 0.75 * total_roof_area_sqft
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
# RK: Temporary solution: assign available roof area to be equal to total roof area
|
|
545
|
+
# feature_report.program.roof_area_sqft[:available_roof_area_sqft] = total_roof_area_sqft
|
|
499
546
|
|
|
500
547
|
# orientation
|
|
501
548
|
# RK: a more robust method should be implemented to find orientation(finding main axis of the building using aspect ratio)
|
|
@@ -581,6 +628,22 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
581
628
|
total_source_energy = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='Site and Source Energy' AND RowName='Total Source Energy' AND ColumnName='Total Energy'")
|
|
582
629
|
feature_report.reporting_periods[0].total_source_energy_kwh = convert_units(total_source_energy, 'GJ', 'kWh')
|
|
583
630
|
|
|
631
|
+
# EUI is only valid with a full year of energy data
|
|
632
|
+
if begin_month == 1 && begin_day_of_month == 1 && end_month == 12 && end_day_of_month == 31
|
|
633
|
+
# calculate site EUI
|
|
634
|
+
site_EUI_kwh_per_m2 = feature_report.reporting_periods[0].total_site_energy_kwh / floor_area
|
|
635
|
+
site_EUI_kbtu_per_ft2 = convert_units(total_site_energy, 'GJ', 'kBtu') / convert_units(floor_area, 'm^2', 'ft^2')
|
|
636
|
+
# add site EUI to feature report
|
|
637
|
+
feature_report.reporting_periods[0].site_EUI_kwh_per_m2 = site_EUI_kwh_per_m2
|
|
638
|
+
feature_report.reporting_periods[0].site_EUI_kbtu_per_ft2 = site_EUI_kbtu_per_ft2
|
|
639
|
+
# calculate source EUI
|
|
640
|
+
source_EUI_kwh_per_m2 = feature_report.reporting_periods[0].total_source_energy_kwh / floor_area
|
|
641
|
+
source_EUI_kbtu_per_ft2 = convert_units(total_source_energy, 'GJ', 'kBtu') / convert_units(floor_area, 'm^2', 'ft^2')
|
|
642
|
+
# add source EUI to feature report
|
|
643
|
+
feature_report.reporting_periods[0].source_EUI_kwh_per_m2 = source_EUI_kwh_per_m2
|
|
644
|
+
feature_report.reporting_periods[0].source_EUI_kbtu_per_ft2 = source_EUI_kbtu_per_ft2
|
|
645
|
+
end
|
|
646
|
+
|
|
584
647
|
# net_site_energy
|
|
585
648
|
net_site_energy = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='Site and Source Energy' AND RowName='Net Site Energy' AND ColumnName='Total Energy'")
|
|
586
649
|
feature_report.reporting_periods[0].net_site_energy_kwh = convert_units(net_site_energy, 'GJ', 'kWh')
|
|
@@ -598,40 +661,45 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
598
661
|
feature_report.reporting_periods[0].natural_gas_kwh = convert_units(natural_gas, 'GJ', 'kWh')
|
|
599
662
|
|
|
600
663
|
# propane
|
|
601
|
-
propane = sql_query(runner, sql_file, '
|
|
602
|
-
feature_report.reporting_periods[0].propane_kwh =
|
|
603
|
-
feature_report.reporting_periods[0].propane_kwh = convert_units(propane, 'GJ', 'kWh') unless propane.nil?
|
|
664
|
+
propane = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Propane'")
|
|
665
|
+
feature_report.reporting_periods[0].propane_kwh = convert_units(propane, 'GJ', 'kWh')
|
|
604
666
|
|
|
605
667
|
# fuel_oil
|
|
606
|
-
fuel_oil = sql_query(runner, sql_file, '
|
|
607
|
-
feature_report.reporting_periods[0].fuel_oil_kwh =
|
|
608
|
-
feature_report.reporting_periods[0].fuel_oil_kwh = convert_units(fuel_oil, 'GJ', 'kWh') unless fuel_oil.nil?
|
|
668
|
+
fuel_oil = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Fuel Oil No 2'")
|
|
669
|
+
feature_report.reporting_periods[0].fuel_oil_kwh = convert_units(fuel_oil, 'GJ', 'kWh')
|
|
609
670
|
|
|
610
671
|
# other_fuels
|
|
611
|
-
|
|
612
|
-
|
|
672
|
+
gasoline = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Gasoline'")
|
|
673
|
+
diesel = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Diesel'")
|
|
674
|
+
coal = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Coal'")
|
|
675
|
+
fueloilno1 = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Fuel Oil No 1'")
|
|
676
|
+
otherfuel1 = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Other Fuel 1'")
|
|
677
|
+
steam = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Steam'")
|
|
678
|
+
# ensure not nil
|
|
613
679
|
feature_report.reporting_periods[0].other_fuels_kwh = 0.0
|
|
614
|
-
feature_report.reporting_periods[0].other_fuels_kwh
|
|
615
|
-
feature_report.reporting_periods[0].other_fuels_kwh
|
|
616
|
-
feature_report.reporting_periods[0].other_fuels_kwh
|
|
680
|
+
feature_report.reporting_periods[0].other_fuels_kwh += convert_units(gasoline, 'GJ', 'kWh') unless gasoline.nil?
|
|
681
|
+
feature_report.reporting_periods[0].other_fuels_kwh += convert_units(diesel, 'GJ', 'kWh') unless diesel.nil?
|
|
682
|
+
feature_report.reporting_periods[0].other_fuels_kwh += convert_units(coal, 'GJ', 'kWh') unless coal.nil?
|
|
683
|
+
feature_report.reporting_periods[0].other_fuels_kwh += convert_units(fueloilno1, 'GJ', 'kWh') unless fueloilno1.nil?
|
|
684
|
+
feature_report.reporting_periods[0].other_fuels_kwh += convert_units(otherfuel1, 'GJ', 'kWh') unless otherfuel1.nil?
|
|
685
|
+
feature_report.reporting_periods[0].other_fuels_kwh += convert_units(steam, 'GJ', 'kWh') unless steam.nil?
|
|
617
686
|
|
|
618
687
|
# district_cooling
|
|
619
688
|
district_cooling = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='District Cooling'")
|
|
620
689
|
feature_report.reporting_periods[0].district_cooling_kwh = convert_units(district_cooling, 'GJ', 'kWh')
|
|
621
|
-
|
|
622
|
-
feature_report.reporting_periods[0].district_cooling_kwh = 0.0 if
|
|
690
|
+
if building.standardsBuildingType.is_initialized
|
|
691
|
+
feature_report.reporting_periods[0].district_cooling_kwh = 0.0 if ['Residential'].include?(building.standardsBuildingType.get)
|
|
623
692
|
end
|
|
624
693
|
|
|
625
694
|
# district_heating
|
|
626
695
|
district_heating = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='District Heating'")
|
|
627
696
|
feature_report.reporting_periods[0].district_heating_kwh = convert_units(district_heating, 'GJ', 'kWh')
|
|
628
|
-
|
|
629
|
-
feature_report.reporting_periods[0].district_heating_kwh = 0.0 if
|
|
697
|
+
if building.standardsBuildingType.is_initialized
|
|
698
|
+
feature_report.reporting_periods[0].district_heating_kwh = 0.0 if ['Residential'].include?(building.standardsBuildingType.get)
|
|
630
699
|
end
|
|
631
700
|
|
|
632
701
|
# water
|
|
633
702
|
water = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Water'")
|
|
634
|
-
# feature_report.reporting_periods[0].water = convert_units(water, 'm3', 'ft3')
|
|
635
703
|
feature_report.reporting_periods[0].water_qbft = water
|
|
636
704
|
|
|
637
705
|
# electricity_produced
|
|
@@ -642,34 +710,11 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
642
710
|
|
|
643
711
|
# get fuel type as listed in the sql file
|
|
644
712
|
fueltypes = fuel_types.values
|
|
645
|
-
fueltypes.delete('Propane')
|
|
646
|
-
fueltypes.delete('Fuel Oil #2')
|
|
647
713
|
|
|
648
714
|
# get enduses as listed in the sql file
|
|
649
715
|
enduses = end_uses.values
|
|
650
716
|
enduses.delete('Facility')
|
|
651
717
|
|
|
652
|
-
# propane / fuel_oil
|
|
653
|
-
['Propane', 'Fuel Oil #2'].each do |ft|
|
|
654
|
-
end_uses.keys.each do |eu|
|
|
655
|
-
next if eu == 'Facility'
|
|
656
|
-
|
|
657
|
-
sql_r = sql_query(runner, sql_file, 'EnergyMeters', "TableName='Annual and Peak Values - Other' AND RowName='#{eu}:#{ft.tr(' ', '')}' AND ColumnName='Annual Value'")
|
|
658
|
-
|
|
659
|
-
# report each query in its corresponding feature report obeject
|
|
660
|
-
x = ft.tr(' ', '_').downcase
|
|
661
|
-
x = x.gsub('_#2', '')
|
|
662
|
-
x_u = x + '_kwh'
|
|
663
|
-
m = feature_report.reporting_periods[0].end_uses.send(x_u)
|
|
664
|
-
|
|
665
|
-
y = end_uses[eu].tr(' ', '_').downcase
|
|
666
|
-
if sql_r.nil?
|
|
667
|
-
sql_r = 0.0
|
|
668
|
-
end
|
|
669
|
-
m.send("#{y}=", convert_units(sql_r, 'GJ', 'kWh'))
|
|
670
|
-
end
|
|
671
|
-
end
|
|
672
|
-
|
|
673
718
|
# loop through fuel types and enduses to fill in sql_query method
|
|
674
719
|
fueltypes.each do |ft|
|
|
675
720
|
enduses.each do |eu|
|
|
@@ -679,12 +724,10 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
679
724
|
x = ft.tr(' ', '_').downcase
|
|
680
725
|
if x.include? 'water'
|
|
681
726
|
x_u = x + '_qbft'
|
|
682
|
-
else
|
|
727
|
+
else
|
|
728
|
+
x = x.gsub('_#2', '')
|
|
683
729
|
x_u = x + '_kwh'
|
|
684
730
|
end
|
|
685
|
-
if x_u == 'additional_fuel_kwh'
|
|
686
|
-
x_u = 'other_fuels_kwh'
|
|
687
|
-
end
|
|
688
731
|
m = feature_report.reporting_periods[0].end_uses.send(x_u)
|
|
689
732
|
|
|
690
733
|
y = eu.tr(' ', '_').downcase
|
|
@@ -693,17 +736,34 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
693
736
|
sql_r = 0.0
|
|
694
737
|
end
|
|
695
738
|
sql_r = convert_units(sql_r, 'GJ', 'kWh')
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
sql_r
|
|
699
|
-
end
|
|
700
|
-
building_types.each do |i|
|
|
701
|
-
sql_r = 0.0 if i[:building_type].include?('Single-Family Detached') && x_u.include?('district')
|
|
739
|
+
|
|
740
|
+
if building.standardsBuildingType.is_initialized
|
|
741
|
+
sql_r = 0.0 if ['Residential'].include?(building.standardsBuildingType.get) && x_u.include?('district')
|
|
702
742
|
end
|
|
703
743
|
m.send("#{y}=", sql_r)
|
|
704
744
|
end
|
|
705
745
|
end
|
|
706
746
|
|
|
747
|
+
# other fuels
|
|
748
|
+
m = feature_report.reporting_periods[0].end_uses.send('other_fuels_kwh')
|
|
749
|
+
enduses.each do |eu|
|
|
750
|
+
y = eu.tr(' ', '_').downcase
|
|
751
|
+
sql_r = 0.0
|
|
752
|
+
other_fuels.each do |ft|
|
|
753
|
+
sql = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='#{eu}' AND ColumnName='#{ft}'")
|
|
754
|
+
|
|
755
|
+
# ensure not nil so the equations below don't error out
|
|
756
|
+
if not sql.nil?
|
|
757
|
+
sql_r += convert_units(sql, 'GJ', 'kWh')
|
|
758
|
+
end
|
|
759
|
+
end
|
|
760
|
+
m.send("#{y}=", sql_r)
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
# add enduses subcategories
|
|
764
|
+
electric_vehicles = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses By Subcategory' AND RowName='Exterior Equipment:Electric Vehicles' AND ColumnName='Electricity'")
|
|
765
|
+
feature_report.reporting_periods[0].end_uses.electricity_kwh.electric_vehicles = convert_units(electric_vehicles, 'GJ', 'kWh')
|
|
766
|
+
|
|
707
767
|
### energy_production
|
|
708
768
|
## electricity_produced
|
|
709
769
|
# photovoltaic
|
|
@@ -720,7 +780,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
720
780
|
feature_report.reporting_periods[0].utility_costs_dollar[0][:fuel_type] = 'Electricity'
|
|
721
781
|
feature_report.reporting_periods[0].utility_costs_dollar[0][:total_cost] = elec_utility_cost
|
|
722
782
|
# gas utility cost
|
|
723
|
-
gas_utility_cost = sql_query(runner, sql_file, 'Economics Results Summary Report', "TableName='Annual Cost' AND RowName='Cost' AND ColumnName='Gas'")
|
|
783
|
+
gas_utility_cost = sql_query(runner, sql_file, 'Economics Results Summary Report', "TableName='Annual Cost' AND RowName='Cost' AND ColumnName='Natural Gas'")
|
|
724
784
|
feature_report.reporting_periods[0].utility_costs_dollar << { fuel_type: 'Natural Gas', total_cost: gas_utility_cost }
|
|
725
785
|
|
|
726
786
|
## comfort_result
|
|
@@ -758,31 +818,32 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
758
818
|
requested_timeseries_names = [
|
|
759
819
|
'Electricity:Facility',
|
|
760
820
|
'ElectricityProduced:Facility',
|
|
761
|
-
'
|
|
821
|
+
'NaturalGas:Facility',
|
|
762
822
|
'Propane:Facility',
|
|
763
|
-
'
|
|
823
|
+
'FuelOilNo2:Facility',
|
|
764
824
|
'OtherFuels:Facility',
|
|
765
825
|
'Cooling:Electricity',
|
|
766
826
|
'Heating:Electricity',
|
|
767
827
|
'InteriorLights:Electricity',
|
|
768
828
|
'ExteriorLights:Electricity',
|
|
769
829
|
'InteriorEquipment:Electricity',
|
|
830
|
+
'ExteriorEquipment:Electricity',
|
|
770
831
|
'Fans:Electricity',
|
|
771
832
|
'Pumps:Electricity',
|
|
772
833
|
'WaterSystems:Electricity',
|
|
773
834
|
'HeatRejection:Electricity',
|
|
774
|
-
'HeatRejection:
|
|
775
|
-
'Heating:
|
|
776
|
-
'WaterSystems:
|
|
777
|
-
'InteriorEquipment:
|
|
835
|
+
'HeatRejection:NaturalGas',
|
|
836
|
+
'Heating:NaturalGas',
|
|
837
|
+
'WaterSystems:NaturalGas',
|
|
838
|
+
'InteriorEquipment:NaturalGas',
|
|
778
839
|
'HeatRejection:Propane',
|
|
779
840
|
'Heating:Propane',
|
|
780
841
|
'WaterSystems:Propane',
|
|
781
842
|
'InteriorEquipment:Propane',
|
|
782
|
-
'HeatRejection:
|
|
783
|
-
'Heating:
|
|
784
|
-
'WaterSystems:
|
|
785
|
-
'InteriorEquipment:
|
|
843
|
+
'HeatRejection:FuelOilNo2',
|
|
844
|
+
'Heating:FuelOilNo2',
|
|
845
|
+
'WaterSystems:FuelOilNo2',
|
|
846
|
+
'InteriorEquipment:FuelOilNo2',
|
|
786
847
|
'HeatRejection:OtherFuels',
|
|
787
848
|
'Heating:OtherFuels',
|
|
788
849
|
'WaterSystems:OtherFuels',
|
|
@@ -919,14 +980,14 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
919
980
|
end
|
|
920
981
|
|
|
921
982
|
# residential considerations
|
|
922
|
-
|
|
923
|
-
values[key_cnt] = Array.new(n, 0) if ['DistrictCooling:Facility', 'DistrictHeating:Facility'].include?(timeseries_name) &&
|
|
983
|
+
if building.standardsBuildingType.is_initialized
|
|
984
|
+
values[key_cnt] = Array.new(n, 0) if ['DistrictCooling:Facility', 'DistrictHeating:Facility'].include?(timeseries_name) && ['Residential'].include?(building.standardsBuildingType.get)
|
|
924
985
|
end
|
|
925
986
|
|
|
926
987
|
# unit conversion
|
|
927
988
|
old_unit = ts.get.units if ts.is_initialized
|
|
928
989
|
|
|
929
|
-
if timeseries_name.include?('
|
|
990
|
+
if timeseries_name.include?('NaturalGas') || timeseries_name.include?('Propane') || timeseries_name.include?('FuelOilNo2') || timeseries_name.include?('OtherFuels')
|
|
930
991
|
new_unit = 'kBtu'
|
|
931
992
|
else
|
|
932
993
|
new_unit = case old_unit.to_s
|
|
@@ -1115,7 +1176,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
|
|
|
1115
1176
|
# get the timeseries for any of available timeseries
|
|
1116
1177
|
# RK: code enhancement needed
|
|
1117
1178
|
ts_d_e = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, 'Electricity:Facility', '')
|
|
1118
|
-
ts_d_g = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, '
|
|
1179
|
+
ts_d_g = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, 'NaturalGas:Facility', '')
|
|
1119
1180
|
|
|
1120
1181
|
if ts_d_e.is_initialized
|
|
1121
1182
|
timeseries_d = ts_d_e.get
|