urbanopt-reporting 0.1.0 → 0.3.1
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/.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
|
}
|