urbanopt-reporting 0.1.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +19 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +15 -0
- data/.github/pull_request_template.md +13 -0
- data/.rdoc_options +36 -0
- data/CHANGELOG.md +39 -0
- data/CONTRIBUTING.md +1 -1
- data/LICENSE.md +1 -1
- data/RDOC_MAIN.md +10 -0
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/deploy_docs.sh +5 -0
- 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/.gitignore +3 -0
- data/docs/.vuepress/components/InnerJsonSchema.vue +76 -0
- data/docs/.vuepress/components/JsonSchema.vue +12 -0
- data/docs/.vuepress/components/ScenarioSchema.vue +12 -0
- data/docs/.vuepress/components/StaticLink.vue +8 -0
- data/docs/.vuepress/config.js +25 -0
- data/docs/.vuepress/highlight.js +8 -0
- data/docs/.vuepress/json-schema-deref-loader.js +22 -0
- data/docs/.vuepress/public/custom_rdoc_styles.css +78 -0
- data/docs/.vuepress/styles/palette.styl +1 -0
- data/docs/.vuepress/utils.js +17 -0
- data/docs/README.md +9 -0
- data/docs/package-lock.json +10018 -0
- data/docs/package.json +30 -0
- data/docs/schemas/scenario-schema.md +3 -0
- data/lib/measures/default_feature_reports/LICENSE.md +1 -1
- data/lib/measures/default_feature_reports/measure.rb +261 -88
- data/lib/measures/default_feature_reports/measure.xml +11 -11
- data/lib/urbanopt/reporting.rb +1 -1
- data/lib/urbanopt/reporting/default_reports.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/construction_cost.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/date.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/distributed_generation.rb +119 -6
- data/lib/urbanopt/reporting/default_reports/end_use.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/end_uses.rb +53 -39
- data/lib/urbanopt/reporting/default_reports/extension.rb +30 -0
- data/lib/urbanopt/reporting/default_reports/feature_report.rb +52 -21
- data/lib/urbanopt/reporting/default_reports/generator.rb +2 -2
- data/lib/urbanopt/reporting/default_reports/location.rb +12 -12
- data/lib/urbanopt/reporting/default_reports/logger.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/power_distribution.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/program.rb +87 -87
- data/lib/urbanopt/reporting/default_reports/reporting_period.rb +87 -79
- data/lib/urbanopt/reporting/default_reports/scenario_report.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/schema/README.md +1 -1
- data/lib/urbanopt/reporting/default_reports/schema/scenario_csv_columns.txt +18 -1
- data/lib/urbanopt/reporting/default_reports/schema/scenario_schema.json +117 -82
- data/lib/urbanopt/reporting/default_reports/solar_pv.rb +2 -2
- data/lib/urbanopt/reporting/default_reports/storage.rb +2 -2
- data/lib/urbanopt/reporting/default_reports/thermal_storage.rb +111 -0
- data/lib/urbanopt/reporting/default_reports/timeseries_csv.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/validator.rb +1 -1
- data/lib/urbanopt/reporting/default_reports/wind.rb +2 -2
- data/lib/urbanopt/reporting/derived_extension.rb +1 -1
- data/lib/urbanopt/reporting/version.rb +2 -2
- data/urbanopt-reporting-gem.gemspec +4 -4
- metadata +37 -15
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
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,
|
@@ -43,16 +43,16 @@ module URBANopt
|
|
43
43
|
# ReportingPeriod includes all the results of a specific reporting period.
|
44
44
|
##
|
45
45
|
class ReportingPeriod
|
46
|
-
attr_accessor :id, :name, :multiplier, :start_date, :end_date, :month, :day_of_month, :year, :
|
47
|
-
:
|
48
|
-
:
|
49
|
-
:fuel_type, :
|
46
|
+
attr_accessor :id, :name, :multiplier, :start_date, :end_date, :month, :day_of_month, :year, :total_site_energy_kwh, :total_source_energy_kwh,
|
47
|
+
:net_site_energy_kwh, :net_source_energy_kwh, :total_utility_cost_dollar, :net_utility_cost_dollar, :utility_costs_dollar, :electricity_kwh, :natural_gas_kwh, :propane_kwh, :fuel_oil_kwh, :other_fuels_kwh, :district_cooling_kwh,
|
48
|
+
:district_heating_kwh, :water_qbft, :electricity_produced_kwh, :end_uses, :energy_production_kwh, :photovoltaic,
|
49
|
+
:fuel_type, :total_cost_dollar, :usage_cost_dollar, :demand_cost_dollar, :comfort_result, :time_setpoint_not_met_during_occupied_cooling,
|
50
50
|
:time_setpoint_not_met_during_occupied_heating, :time_setpoint_not_met_during_occupied_hours, :hours_out_of_comfort_bounds_PMV, :hours_out_of_comfort_bounds_PPD #:nodoc:
|
51
51
|
# ReportingPeriod class initializes the reporting period attributes:
|
52
|
-
# +:id+ , +:name+ , +:multiplier+ , +:start_date+ , +:end_date+ , +:month+ , +:day_of_month+ , +:year+ , +:
|
53
|
-
# +:
|
54
|
-
# +:
|
55
|
-
# +:fuel_type+ , +:
|
52
|
+
# +:id+ , +:name+ , +:multiplier+ , +:start_date+ , +:end_date+ , +:month+ , +:day_of_month+ , +:year+ , +:total_site_energy_kwh+ , +:total_source_energy_kwh+ ,
|
53
|
+
# +:net_site_energy_kwh+ , +:net_source_energy_kwh+ , +:total_utility_cost_dollar , +:net_utility_cost_dollar+ , +:utility_costs_dollar+ , +:electricity_kwh+ , +:natural_gas_kwh+ , +:propane_kwh+ , +:fuel_oil_kwh+ , +:other_fuels_kwh+ , +:district_cooling_kwh+ ,
|
54
|
+
# +:district_heating_kwh+ , +:water_qbft+ , +:electricity_produced_kwh+ , +:end_uses+ , +:energy_production_kwh+ , +:photovoltaic_kwh+ ,
|
55
|
+
# +:fuel_type+ , +:total_cost_dollar+ , +:usage_cost_dollar+ , +:demand_cost_dollar+ , +:comfort_result+ , +:time_setpoint_not_met_during_occupied_cooling+ ,
|
56
56
|
# +:time_setpoint_not_met_during_occupied_heating+ , +:time_setpoint_not_met_during_occupied_hours+
|
57
57
|
##
|
58
58
|
# [parameters:]
|
@@ -68,24 +68,26 @@ module URBANopt
|
|
68
68
|
@start_date = Date.new(hash[:start_date])
|
69
69
|
@end_date = Date.new(hash[:end_date])
|
70
70
|
|
71
|
-
@
|
72
|
-
@
|
73
|
-
@
|
74
|
-
@
|
75
|
-
@
|
76
|
-
@
|
77
|
-
@
|
78
|
-
@
|
79
|
-
@
|
80
|
-
@
|
81
|
-
@
|
82
|
-
@
|
83
|
-
@
|
71
|
+
@total_site_energy_kwh = hash[:total_site_energy_kwh]
|
72
|
+
@total_source_energy_kwh = hash[:total_source_energy_kwh]
|
73
|
+
@net_site_energy_kwh = hash[:net_site_energy_kwh]
|
74
|
+
@net_source_energy_kwh = hash[:net_source_energy_kwh]
|
75
|
+
@net_utility_cost_dollar = hash[:net_utility_cost_dollar]
|
76
|
+
@total_utility_cost_dollar = hash[:total_utility_cost_dollar]
|
77
|
+
@electricity_kwh = hash[:electricity_kwh]
|
78
|
+
@natural_gas_kwh = hash[:natural_gas_kwh]
|
79
|
+
@propane_kwh = hash[:propane_kwh]
|
80
|
+
@fuel_oil_kwh = hash[:fuel_oil_kwh]
|
81
|
+
@other_fuels_kwh = hash[:other_fuels_kwh]
|
82
|
+
@district_cooling_kwh = hash[:district_cooling_kwh]
|
83
|
+
@district_heating_kwh = hash[:district_heating_kwh]
|
84
|
+
@water_qbft = hash[:water_qbft]
|
85
|
+
@electricity_produced_kwh = hash[:electricity_produced_kwh]
|
84
86
|
@end_uses = EndUses.new(hash[:end_uses])
|
85
87
|
|
86
|
-
@
|
88
|
+
@energy_production_kwh = hash[:energy_production_kwh]
|
87
89
|
|
88
|
-
@
|
90
|
+
@utility_costs_dollar = hash[:utility_costs_dollar]
|
89
91
|
|
90
92
|
@comfort_result = hash[:comfort_result]
|
91
93
|
|
@@ -106,22 +108,24 @@ module URBANopt
|
|
106
108
|
hash[:start_date] = Date.new.to_hash
|
107
109
|
hash[:end_date] = Date.new.to_hash
|
108
110
|
|
109
|
-
hash[:
|
110
|
-
hash[:
|
111
|
-
hash
|
112
|
-
hash
|
113
|
-
hash
|
114
|
-
hash
|
115
|
-
hash
|
116
|
-
hash
|
117
|
-
hash
|
118
|
-
hash
|
119
|
-
hash[:
|
120
|
-
|
121
|
-
hash[:
|
111
|
+
hash[:total_site_energy_kwh] = nil
|
112
|
+
hash[:total_source_energy_kwh] = nil
|
113
|
+
hash[:net_site_energy_kwh] = nil
|
114
|
+
hash[:net_source_energy_kwh] = nil
|
115
|
+
hash[:net_utility_cost_dollar] = nil
|
116
|
+
hash[:total_utility_cost_dollar] = nil
|
117
|
+
hash[:electricity_kwh] = nil
|
118
|
+
hash[:natural_gas_kwh] = nil
|
119
|
+
hash[:propane_kwh] = nil
|
120
|
+
hash[:fuel_oil_kwh] = nil
|
121
|
+
hash[:other_fuels_kwh] = nil
|
122
|
+
hash[:district_cooling_kwh] = nil
|
123
|
+
hash[:district_heating_kwh] = nil
|
124
|
+
|
125
|
+
hash[:electricity_produced_kwh] = nil
|
122
126
|
hash[:end_uses] = EndUses.new.to_hash
|
123
|
-
hash[:
|
124
|
-
hash[:
|
127
|
+
hash[:energy_production_kwh] = { electricity_produced: { photovoltaic: nil } }
|
128
|
+
hash[:utility_costs_dollar] = [{ fuel_type: nil, total_cost_dollar: nil, usage_cost_dollar: nil, demand_cost_dollar: nil }]
|
125
129
|
hash[:comfort_result] = { time_setpoint_not_met_during_occupied_cooling: nil, time_setpoint_not_met_during_occupied_heating: nil,
|
126
130
|
time_setpoint_not_met_during_occupied_hours: nil, hours_out_of_comfort_bounds_PMV: nil, hours_out_of_comfort_bounds_PPD: nil }
|
127
131
|
|
@@ -142,32 +146,34 @@ module URBANopt
|
|
142
146
|
result[:multiplier] = @multiplier if @multiplier
|
143
147
|
result[:start_date] = @start_date.to_hash if @start_date
|
144
148
|
result[:end_date] = @end_date.to_hash if @end_date
|
145
|
-
result[:
|
146
|
-
result[:
|
147
|
-
result[:
|
148
|
-
result[:
|
149
|
-
result[:
|
150
|
-
result[:
|
151
|
-
result[:
|
152
|
-
result[:
|
153
|
-
result[:
|
154
|
-
result[:
|
155
|
-
result[:
|
156
|
-
result[:
|
157
|
-
result[:
|
149
|
+
result[:total_site_energy_kwh] = @total_site_energy_kwh if @total_site_energy_kwh
|
150
|
+
result[:total_source_energy_kwh] = @total_source_energy_kwh if @total_source_energy_kwh
|
151
|
+
result[:net_site_energy_kwh] = @net_site_energy_kwh if @net_site_energy_kwh
|
152
|
+
result[:net_source_energy_kwh] = @net_source_energy_kwh if @net_source_energy_kwh
|
153
|
+
result[:net_utility_cost_dollar] = @net_utility_cost_dollar if @net_utility_cost_dollar
|
154
|
+
result[:total_utility_cost_dollar] = @total_utility_cost_dollar if @total_utility_cost_dollar
|
155
|
+
result[:electricity_kwh] = @electricity_kwh if @electricity_kwh
|
156
|
+
result[:natural_gas_kwh] = @natural_gas_kwh if @natural_gas_kwh
|
157
|
+
result[:propane_kwh] = @propane_kwh if @propane_kwh
|
158
|
+
result[:fuel_oil_kwh] = @fuel_oil_kwh if @fuel_oil_kwh
|
159
|
+
result[:other_fuels_kwh] = @other_fuels_kwh if @other_fuels_kwh
|
160
|
+
result[:district_cooling_kwh] = @district_cooling_kwh if @district_cooling_kwh
|
161
|
+
result[:district_heating_kwh] = @district_heating_kwh if @district_heating_kwh
|
162
|
+
result[:water_qbft] = @water_qbft if @water_qbft
|
163
|
+
result[:electricity_produced_kwh] = @electricity_produced_kwh if @electricity_produced_kwh
|
158
164
|
result[:end_uses] = @end_uses.to_hash if @end_uses
|
159
165
|
|
160
|
-
|
161
|
-
|
162
|
-
|
166
|
+
energy_production_kwh_hash = @energy_production_kwh if @energy_production_kwh
|
167
|
+
energy_production_kwh_hash.delete_if { |k, v| v.nil? }
|
168
|
+
energy_production_kwh_hash.each do |eph|
|
163
169
|
eph.delete_if { |k, v| v.nil? }
|
164
170
|
end
|
165
171
|
|
166
|
-
result[:
|
172
|
+
result[:energy_production_kwh] = energy_production_kwh_hash if @energy_production_kwh
|
167
173
|
|
168
|
-
if @
|
169
|
-
result[:
|
170
|
-
@
|
174
|
+
if @utility_costs_dollar.any?
|
175
|
+
result[:utility_costs_dollar] = @utility_costs_dollar
|
176
|
+
@utility_costs_dollar.each do |uc|
|
171
177
|
uc&.delete_if { |k, v| v.nil? }
|
172
178
|
end
|
173
179
|
end
|
@@ -211,34 +217,36 @@ module URBANopt
|
|
211
217
|
##
|
212
218
|
def self.merge_reporting_period(existing_period, new_period)
|
213
219
|
# modify the existing_period by summing up the results
|
214
|
-
existing_period.
|
215
|
-
existing_period.
|
216
|
-
existing_period.
|
217
|
-
existing_period.
|
218
|
-
existing_period.
|
219
|
-
existing_period.
|
220
|
-
existing_period.
|
221
|
-
existing_period.
|
222
|
-
existing_period.
|
223
|
-
existing_period.
|
224
|
-
existing_period.
|
225
|
-
existing_period.
|
220
|
+
existing_period.total_site_energy_kwh = add_values(existing_period.total_site_energy_kwh, new_period.total_site_energy_kwh)
|
221
|
+
existing_period.total_source_energy_kwh = add_values(existing_period.total_source_energy_kwh, new_period.total_source_energy_kwh)
|
222
|
+
existing_period.net_source_energy_kwh = add_values(existing_period.net_source_energy_kwh, new_period.net_source_energy_kwh)
|
223
|
+
existing_period.net_utility_cost_dollar = add_values(existing_period.net_utility_cost_dollar, new_period.net_utility_cost_dollar)
|
224
|
+
existing_period.total_utility_cost_dollar = add_values(existing_period.total_utility_cost_dollar, new_period.total_utility_cost_dollar)
|
225
|
+
existing_period.electricity_kwh = add_values(existing_period.electricity_kwh, new_period.electricity_kwh)
|
226
|
+
existing_period.natural_gas_kwh = add_values(existing_period.natural_gas_kwh, new_period.natural_gas_kwh)
|
227
|
+
existing_period.propane_kwh = add_values(existing_period.propane_kwh, new_period.propane_kwh)
|
228
|
+
existing_period.fuel_oil_kwh = add_values(existing_period.fuel_oil_kwh, new_period.fuel_oil_kwh)
|
229
|
+
existing_period.other_fuels_kwh = add_values(existing_period.other_fuels_kwh, new_period.other_fuels_kwh)
|
230
|
+
existing_period.district_cooling_kwh = add_values(existing_period.district_cooling_kwh, new_period.district_cooling_kwh)
|
231
|
+
existing_period.district_heating_kwh = add_values(existing_period.district_heating_kwh, new_period.district_heating_kwh)
|
232
|
+
existing_period.water_qbft = add_values(existing_period.water_qbft, new_period.water_qbft)
|
233
|
+
existing_period.electricity_produced_kwh = add_values(existing_period.electricity_produced_kwh, new_period.electricity_produced_kwh)
|
226
234
|
|
227
235
|
# merge end uses
|
228
236
|
new_end_uses = new_period.end_uses
|
229
237
|
existing_period.end_uses&.merge_end_uses!(new_end_uses)
|
230
238
|
|
231
|
-
if existing_period.
|
232
|
-
if existing_period.
|
233
|
-
existing_period.
|
239
|
+
if existing_period.energy_production_kwh
|
240
|
+
if existing_period.energy_production_kwh[:electricity_produced_kwh]
|
241
|
+
existing_period.energy_production_kwh[:electricity_produced_kwh][:photovoltaic_kwh] = add_values(existing_period.energy_production_kwh[:electricity_produced][:photovoltaic], new_period.energy_production_kwh[:electricity_produced_kwh][:photovoltaic_kwh])
|
234
242
|
end
|
235
243
|
end
|
236
244
|
|
237
|
-
existing_period.
|
238
|
-
existing_period.
|
239
|
-
existing_period.
|
240
|
-
existing_period.
|
241
|
-
existing_period.
|
245
|
+
existing_period.utility_costs_dollar&.each_with_index do |item, i|
|
246
|
+
existing_period.utility_costs_dollar[i][:fuel_type] = existing_period.utility_costs_dollar[i][:fuel_type]
|
247
|
+
existing_period.utility_costs_dollar[i][:total_cost] = add_values(existing_period.utility_costs_dollar[i][:total_cost], new_period.utility_costs_dollar[i][:total_cost])
|
248
|
+
existing_period.utility_costs_dollar[i][:usage_cost] = add_values(existing_period.utility_costs_dollar[i][:usage_cost], new_period.utility_costs_dollar[i][:usage_cost])
|
249
|
+
existing_period.utility_costs_dollar[i][:demand_cost] = add_values(existing_period.utility_costs_dollar[i][:demand_cost], new_period.utility_costs_dollar[i][:demand_cost])
|
242
250
|
end
|
243
251
|
|
244
252
|
if existing_period.comfort_result
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
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,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# URBANopt Scenario Schema
|
2
2
|
|
3
|
-
The URBANopt Scenario Gem includes functionality for defining scenarios, running simulations, and post-processing results. An URBANopt Scenario describes a specific set of options to apply to each Feature in a FeatureFile (e.g. each GeoJSON Feature in an URBANopt GeoJSON File). User defined SimulationMapper classes translate each Feature to a SimulationDir which is a directory containing simulation input files. A ScenarioRunner is used to perform simulations for each SimulationDir. Finally, a ScenarioPostProcessor can run on a Scenario to generate scenario level results. The [URBANopt Scenario Gem Design Document](https://docs.google.com/document/d/1ExcGuHliaSvPlrYevAJTSV8XAtTQXz_KQqH3p4iQDwg/edit) describes the gem in more detail. The [URBANopt Example Project](https://github.com/urbanopt/urbanopt-example-project) demonstrates how to use the URBANopt Scenario Gem to perform a scenario analysis.
|
3
|
+
The URBANopt <sup>™</sup> Scenario Gem includes functionality for defining scenarios, running simulations, and post-processing results. An URBANopt Scenario describes a specific set of options to apply to each Feature in a FeatureFile (e.g. each GeoJSON Feature in an URBANopt GeoJSON File). User defined SimulationMapper classes translate each Feature to a SimulationDir which is a directory containing simulation input files. A ScenarioRunner is used to perform simulations for each SimulationDir. Finally, a ScenarioPostProcessor can run on a Scenario to generate scenario level results. The [URBANopt Scenario Gem Design Document](https://docs.google.com/document/d/1ExcGuHliaSvPlrYevAJTSV8XAtTQXz_KQqH3p4iQDwg/edit) describes the gem in more detail. The [URBANopt Example Project](https://github.com/urbanopt/urbanopt-example-project) demonstrates how to use the URBANopt Scenario Gem to perform a scenario analysis.
|
4
4
|
|
5
5
|
## Reporting output units
|
6
6
|
|
@@ -2,6 +2,9 @@ Datetime
|
|
2
2
|
Electricity:Facility
|
3
3
|
ElectricityProduced:Facility
|
4
4
|
Gas:Facility
|
5
|
+
Propane:Facility
|
6
|
+
FuelOil#2:Facility
|
7
|
+
OtherFuels:Facility
|
5
8
|
Cooling:Electricity
|
6
9
|
Heating:Electricity
|
7
10
|
InteriorLights:Electricity
|
@@ -15,6 +18,18 @@ HeatRejection:Gas
|
|
15
18
|
Heating:Gas
|
16
19
|
WaterSystems:Gas
|
17
20
|
InteriorEquipment:Gas
|
21
|
+
HeatRejection:Propane
|
22
|
+
Heating:Propane
|
23
|
+
WaterSystems:Propane
|
24
|
+
InteriorEquipment:Propane
|
25
|
+
HeatRejection:FuelOil#2
|
26
|
+
Heating:FuelOil#2
|
27
|
+
WaterSystems:FuelOil#2
|
28
|
+
InteriorEquipment:FuelOil#2
|
29
|
+
HeatRejection:OtherFuels
|
30
|
+
Heating:OtherFuels
|
31
|
+
WaterSystems:OtherFuels
|
32
|
+
InteriorEquipment:OtherFuels
|
18
33
|
DistrictCooling:Facility
|
19
34
|
DistrictHeating:Facility
|
20
35
|
District Cooling Chilled Water Rate
|
@@ -31,4 +46,6 @@ ElectricityProduced:Facility Power
|
|
31
46
|
Electricity:Facility Apparent Power
|
32
47
|
ElectricityProduced:Facility Apparent Power
|
33
48
|
Net Power
|
34
|
-
Net Apparent Power
|
49
|
+
Net Apparent Power
|
50
|
+
Ice Thermal Storage End Fraction
|
51
|
+
Cooling Coil Ice Thermal Storage End Fraction
|
@@ -63,6 +63,9 @@
|
|
63
63
|
},
|
64
64
|
"distributed_generation": {
|
65
65
|
"$ref": "#/definitions/DistributedGeneration"
|
66
|
+
},
|
67
|
+
"thermal_storage": {
|
68
|
+
"$ref": "#/definitions/ThermalStorage"
|
66
69
|
}
|
67
70
|
},
|
68
71
|
"required": [
|
@@ -216,6 +219,9 @@
|
|
216
219
|
},
|
217
220
|
"power_distribution": {
|
218
221
|
"$ref": "#/definitions/PowerDistribution"
|
222
|
+
},
|
223
|
+
"thermal_storage": {
|
224
|
+
"$ref": "#/definitions/ThermalStorage"
|
219
225
|
}
|
220
226
|
},
|
221
227
|
"required": [
|
@@ -257,69 +263,77 @@
|
|
257
263
|
"end_date": {
|
258
264
|
"$ref": "#/definitions/Date"
|
259
265
|
},
|
260
|
-
"
|
261
|
-
"description": "Total energy used on site, does not include generation (
|
266
|
+
"total_site_energy_kwh": {
|
267
|
+
"description": "Total energy used on site, does not include generation (kWh)",
|
262
268
|
"type": "number"
|
263
269
|
},
|
264
|
-
"
|
265
|
-
"description": "Total source energy used, does not include generation (
|
270
|
+
"total_source_energy_kwh": {
|
271
|
+
"description": "Total source energy used, does not include generation (kWh)",
|
266
272
|
"type": "number"
|
267
273
|
},
|
268
|
-
"
|
269
|
-
"description": "Net site energy (
|
274
|
+
"net_site_energy_kwh": {
|
275
|
+
"description": "Net site energy (kWh)",
|
270
276
|
"type": "number"
|
271
277
|
},
|
272
|
-
"
|
273
|
-
"description": "Net source energy (
|
278
|
+
"net_source_energy_kwh": {
|
279
|
+
"description": "Net source energy (kWh)",
|
274
280
|
"type": "number"
|
275
281
|
},
|
276
|
-
"
|
277
|
-
"description": "Total utility cost",
|
282
|
+
"total_utility_cost_dollar": {
|
283
|
+
"description": "Total utility cost ($)",
|
278
284
|
"type": "number"
|
279
285
|
},
|
280
|
-
"
|
281
|
-
"description": "Net utility cost for reporting period includes generation",
|
286
|
+
"net_utility_cost_dollar": {
|
287
|
+
"description": "Net utility cost for reporting period includes generation ($)",
|
282
288
|
"type": "number"
|
283
289
|
},
|
284
|
-
"
|
290
|
+
"utility_costs_dollar": {
|
285
291
|
"type": "array",
|
286
292
|
"items": {
|
287
293
|
"$ref": "#/definitions/UtilityCost"
|
288
294
|
}
|
289
295
|
},
|
290
|
-
"
|
296
|
+
"electricity_kwh": {
|
291
297
|
"description": "Sum of all electricity used, does not include electricity produced (kWh)",
|
292
298
|
"type": "number"
|
293
299
|
},
|
294
|
-
"
|
295
|
-
"description": "Sum of all natural gas end uses consumption (
|
300
|
+
"natural_gas_kwh": {
|
301
|
+
"description": "Sum of all natural gas end uses consumption (kWh)",
|
296
302
|
"type": "number"
|
297
303
|
},
|
298
|
-
|
299
|
-
"description": "Sum of all
|
304
|
+
"propane_kwh": {
|
305
|
+
"description": "Sum of all propane end uses consumption (kWh)",
|
306
|
+
"type": "number"
|
307
|
+
},
|
308
|
+
"fuel_oil_kwh": {
|
309
|
+
"description": "Sum of all fuel oil #2 end uses consumption (kWh)",
|
310
|
+
"type": "number"
|
311
|
+
},
|
312
|
+
"other_fuels_kwh": {
|
313
|
+
"description": "Sum of all other (fuel oil #1, diesel, gasoline, coal, steam) fuel end uses consumption (kWh)",
|
300
314
|
"type": "number"
|
301
315
|
},
|
302
|
-
"
|
303
|
-
"description": "Sum of all distric cooling end uses consumption (
|
316
|
+
"district_cooling_kwh": {
|
317
|
+
"description": "Sum of all distric cooling end uses consumption (kWh)",
|
304
318
|
"type": "number"
|
305
319
|
},
|
306
|
-
"
|
307
|
-
"description": "Sum of all distric heating end uses consumption (
|
320
|
+
"district_heating_kwh": {
|
321
|
+
"description": "Sum of all distric heating end uses consumption (kWh)",
|
308
322
|
"type": "number"
|
309
323
|
},
|
310
|
-
"
|
324
|
+
"water_qbft": {
|
311
325
|
"description": "Sum of all water end uses consumption (ft^3)",
|
312
326
|
"type": "number"
|
313
327
|
},
|
314
|
-
"
|
328
|
+
"electricity_produced_kwh": {
|
315
329
|
"description": "Sum of all electricity produced (kWh)",
|
316
330
|
"type": "number"
|
317
331
|
},
|
318
332
|
"end_uses": {
|
319
333
|
"$ref": "#/definitions/EndUses"
|
320
334
|
},
|
321
|
-
"
|
322
|
-
"description": "Energy produced for reporting period.
|
335
|
+
"energy_production_kwh": {
|
336
|
+
"description": "Energy produced for reporting period. Water reported in m^3, all others in kWh.",
|
323
337
|
"type": "object",
|
324
338
|
"properties": {
|
325
339
|
"electricity_produced": {
|
@@ -356,25 +370,31 @@
|
|
356
370
|
"additionalProperties": false
|
357
371
|
},
|
358
372
|
"EndUses": {
|
359
|
-
"description": "End uses for reporting period. Does not include energy produced.
|
373
|
+
"description": "End uses for reporting period. Does not include energy produced. Water reported in m^3, all others in kWh.",
|
360
374
|
"type": "object",
|
361
375
|
"properties": {
|
362
|
-
"
|
376
|
+
"electricity_kwh": {
|
363
377
|
"$ref": "#/definitions/EndUse"
|
364
378
|
},
|
365
|
-
"
|
379
|
+
"natural_gas_kwh": {
|
366
380
|
"$ref": "#/definitions/EndUse"
|
367
381
|
},
|
368
|
-
|
382
|
+
"propane_kwh": {
|
383
|
+
"$ref": "#/definitions/EndUse"
|
384
|
+
},
|
385
|
+
"fuel_oil_kwh": {
|
386
|
+
"$ref": "#/definitions/EndUse"
|
387
|
+
},
|
388
|
+
"other_fuels_kwh": {
|
369
389
|
"$ref": "#/definitions/EndUse"
|
370
390
|
},
|
371
|
-
"
|
391
|
+
"district_cooling_kwh": {
|
372
392
|
"$ref": "#/definitions/EndUse"
|
373
393
|
},
|
374
|
-
"
|
394
|
+
"district_heating_kwh": {
|
375
395
|
"$ref": "#/definitions/EndUse"
|
376
396
|
},
|
377
|
-
"
|
397
|
+
"water_qbft": {
|
378
398
|
"$ref": "#/definitions/EndUse"
|
379
399
|
}
|
380
400
|
},
|
@@ -516,9 +536,11 @@
|
|
516
536
|
"enum": [
|
517
537
|
"Electricity",
|
518
538
|
"Natural Gas",
|
539
|
+
"Propane",
|
540
|
+
"Fuel Oil",
|
519
541
|
"District Cooling",
|
520
542
|
"District Heating",
|
521
|
-
"
|
543
|
+
"Other Fuels",
|
522
544
|
"Water"
|
523
545
|
]
|
524
546
|
},
|
@@ -540,15 +562,15 @@
|
|
540
562
|
"Location": {
|
541
563
|
"type": "object",
|
542
564
|
"properties": {
|
543
|
-
"
|
544
|
-
"description": "(deg)",
|
565
|
+
"latitude_deg": {
|
566
|
+
"description": "latitude for the centroid of the feature (deg)",
|
545
567
|
"type": "number"
|
546
568
|
},
|
547
|
-
"
|
548
|
-
"description": "(deg)",
|
569
|
+
"longitude_deg": {
|
570
|
+
"description": "longitude for the centroid of the feature (deg)",
|
549
571
|
"type": "number"
|
550
572
|
},
|
551
|
-
"
|
573
|
+
"surface_elevation_ft": {
|
552
574
|
"description": "The surface elevation (above NAVD88 datum) (ft).",
|
553
575
|
"type": "number"
|
554
576
|
},
|
@@ -567,27 +589,27 @@
|
|
567
589
|
"Program": {
|
568
590
|
"type": "object",
|
569
591
|
"properties": {
|
570
|
-
"
|
592
|
+
"site_area_sqft": {
|
571
593
|
"description": "Area of the entire site or lot (ft^2)",
|
572
594
|
"type": "number"
|
573
595
|
},
|
574
|
-
"
|
596
|
+
"floor_area_sqft": {
|
575
597
|
"description": "Building gross floor area (ft^2)",
|
576
598
|
"type": "number"
|
577
599
|
},
|
578
|
-
"
|
600
|
+
"conditioned_area_sqft": {
|
579
601
|
"description": "Building conditioned floor area (ft^2)",
|
580
602
|
"type": "number"
|
581
603
|
},
|
582
|
-
"
|
604
|
+
"unconditioned_area_sqft": {
|
583
605
|
"description": "Building unconditioned floor area (ft^2)",
|
584
606
|
"type": "number"
|
585
607
|
},
|
586
|
-
"
|
608
|
+
"footprint_area_sqft": {
|
587
609
|
"description": "Building floorprint area (ft^2)",
|
588
610
|
"type": "number"
|
589
611
|
},
|
590
|
-
"
|
612
|
+
"maximum_roof_height_ft": {
|
591
613
|
"description": "Maximum height of the roof relative to surface elevation (ft)",
|
592
614
|
"type": "number"
|
593
615
|
},
|
@@ -599,7 +621,7 @@
|
|
599
621
|
"description": "The maximum number of building stories above ground",
|
600
622
|
"type": "number"
|
601
623
|
},
|
602
|
-
"
|
624
|
+
"parking_area_sqft": {
|
603
625
|
"description": "Parking gross area (ft^2)",
|
604
626
|
"type": "number"
|
605
627
|
},
|
@@ -611,11 +633,11 @@
|
|
611
633
|
"description": "Number of parking spaces with electric vehicle charging",
|
612
634
|
"type": "number"
|
613
635
|
},
|
614
|
-
"
|
636
|
+
"parking_footprint_area_sqft": {
|
615
637
|
"description": "Parking floorprint area (ft^2)",
|
616
638
|
"type": "number"
|
617
639
|
},
|
618
|
-
"
|
640
|
+
"maximum_parking_height_ft": {
|
619
641
|
"description": "Maximum height of the parking structure relative to surface elevation (ft)",
|
620
642
|
"type": "number"
|
621
643
|
},
|
@@ -637,84 +659,84 @@
|
|
637
659
|
"$ref": "#/definitions/BuildingType"
|
638
660
|
}
|
639
661
|
},
|
640
|
-
"
|
662
|
+
"window_area_sqft": {
|
641
663
|
"description": "Exterior windows gross area (ft^2)",
|
642
664
|
"type": "object",
|
643
665
|
"properties": {
|
644
|
-
"
|
666
|
+
"north_window_area_sqft": {
|
645
667
|
"type": "number"
|
646
668
|
},
|
647
|
-
"
|
669
|
+
"south_window_area_sqft": {
|
648
670
|
"type": "number"
|
649
671
|
},
|
650
|
-
"
|
672
|
+
"east_window_area_sqft": {
|
651
673
|
"type": "number"
|
652
674
|
},
|
653
|
-
"
|
675
|
+
"west_window_area_sqft": {
|
654
676
|
"type": "number"
|
655
677
|
},
|
656
|
-
"
|
678
|
+
"total_window_area_sqft": {
|
657
679
|
"type": "number"
|
658
680
|
}
|
659
681
|
},
|
660
682
|
"required": [
|
661
|
-
"
|
683
|
+
"total_window_area_sqft"
|
662
684
|
],
|
663
685
|
"additionalProperties": false
|
664
686
|
},
|
665
|
-
"
|
687
|
+
"wall_area_sqft": {
|
666
688
|
"description": "exterior walls gross area (ft^2)",
|
667
689
|
"type": "object",
|
668
690
|
"properties": {
|
669
|
-
"
|
691
|
+
"north_wall_area_sqft": {
|
670
692
|
"type": "number"
|
671
693
|
},
|
672
|
-
"
|
694
|
+
"south_wall_area_sqft": {
|
673
695
|
"type": "number"
|
674
696
|
},
|
675
|
-
"
|
697
|
+
"east_wall_area_sqft": {
|
676
698
|
"type": "number"
|
677
699
|
},
|
678
|
-
"
|
700
|
+
"west_wall_area_sqft": {
|
679
701
|
"type": "number"
|
680
702
|
},
|
681
|
-
"
|
703
|
+
"total_wall_area_sqft": {
|
682
704
|
"type": "number"
|
683
705
|
}
|
684
706
|
},
|
685
707
|
"required": [
|
686
|
-
"
|
687
|
-
"
|
688
|
-
"
|
689
|
-
"
|
690
|
-
"
|
708
|
+
"north_wall_area_sqft",
|
709
|
+
"south_wall_area_sqft",
|
710
|
+
"east_wall_area_sqft",
|
711
|
+
"west_wall_area_sqft",
|
712
|
+
"total_wall_area_sqft"
|
691
713
|
],
|
692
714
|
"additionalProperties": false
|
693
715
|
},
|
694
|
-
"
|
716
|
+
"roof_area_sqft": {
|
695
717
|
"type": "object",
|
696
718
|
"properties": {
|
697
|
-
"
|
719
|
+
"equipment_roof_area_sqft": {
|
698
720
|
"type": "number"
|
699
721
|
},
|
700
|
-
"
|
722
|
+
"photovoltaic_roof_area_sqft": {
|
701
723
|
"type": "number"
|
702
724
|
},
|
703
|
-
"
|
725
|
+
"available_roof_area_sqft": {
|
704
726
|
"description": "gross roof area (ft^2)",
|
705
727
|
"type": "number"
|
706
728
|
},
|
707
|
-
"
|
729
|
+
"total_roof_area_sqft": {
|
708
730
|
"description": "Exterior roofs gross area (ft^2)",
|
709
731
|
"type": "number"
|
710
732
|
}
|
711
733
|
},
|
712
734
|
"required": [
|
713
|
-
"
|
735
|
+
"total_roof_area_sqft"
|
714
736
|
],
|
715
737
|
"additionalProperties": false
|
716
738
|
},
|
717
|
-
"
|
739
|
+
"orientation_deg": {
|
718
740
|
"description": "Rotation of longest axis from East-West,about up axis (deg)",
|
719
741
|
"type": "number"
|
720
742
|
},
|
@@ -722,22 +744,22 @@
|
|
722
744
|
"description": "Ratio of longest to shortest axis",
|
723
745
|
"type": "number"
|
724
746
|
},
|
725
|
-
"
|
747
|
+
"total_construction_cost_dollar": {
|
726
748
|
"description": "total construction cost calculated from the defined cost per floor area ($)",
|
727
749
|
"type": "number"
|
728
750
|
}
|
729
751
|
},
|
730
752
|
"required": [
|
731
|
-
"
|
732
|
-
"
|
733
|
-
"
|
734
|
-
"
|
735
|
-
"
|
753
|
+
"floor_area_sqft",
|
754
|
+
"conditioned_area_sqft",
|
755
|
+
"unconditioned_area_sqft",
|
756
|
+
"footprint_area_sqft",
|
757
|
+
"maximum_roof_height_ft",
|
736
758
|
"number_of_residential_units",
|
737
759
|
"building_types",
|
738
|
-
"
|
739
|
-
"
|
740
|
-
"
|
760
|
+
"window_area_sqft",
|
761
|
+
"wall_area_sqft",
|
762
|
+
"roof_area_sqft"
|
741
763
|
],
|
742
764
|
"additionalProperties": false
|
743
765
|
},
|
@@ -852,6 +874,19 @@
|
|
852
874
|
"type": "number"
|
853
875
|
}
|
854
876
|
}
|
877
|
+
},
|
878
|
+
"ThermalStorage": {
|
879
|
+
"type": "object",
|
880
|
+
"properties": {
|
881
|
+
"its_size": {
|
882
|
+
"description": "Total central plant TES capacity in kWh",
|
883
|
+
"type": "number"
|
884
|
+
},
|
885
|
+
"ptes_size": {
|
886
|
+
"description": "Total distributed/packaged TES capacity in kWh",
|
887
|
+
"type": "number"
|
888
|
+
}
|
889
|
+
}
|
855
890
|
}
|
856
891
|
}
|
857
892
|
}
|