urbanopt-reporting 0.2.1 → 0.3.0

This diff has not been reviewed by any users.
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73d4a00d402cdde91643c03b38449beb6978e5e6cb1af0b9102d607a3c865548
4
- data.tar.gz: 8dd9ba4afbd16ba9a08f32edb24e0939cb9689b55683cd50c18a1e002f7fb4fd
3
+ metadata.gz: 6a5d25f304c691b6de042fecc1b03cdbcda6e6cb175609532cf0926116dbce94
4
+ data.tar.gz: d805ec996625d83bcc9aff79f9d98edf0cc0618ec94b1c799ed8532f7ce47cf5
5
5
  SHA512:
6
- metadata.gz: 75c674f97c37f9cdb64ab7c0e523691aae8027dbf74a25be38634924676a526de207306bd0ac05de533e24071af73e98a898058f120748b0c100fcc4f2a3b927
7
- data.tar.gz: 44eed7300f9b94e85b431bf7fcee1d47e5a2480f0801036b9839d3b8ea9f057c42e498cd2ef99863abf30375db9be5f2f2acfdc0d2b6a4cd954c5a4759509a46
6
+ metadata.gz: 5a6cc2110c6ba387e9a9fb23b1dcd9d5bcd56cd342a6448097cce382003caa79aabd2bab83360896c764d888dd41408390c350b5eb25943209c8932f22790c52
7
+ data.tar.gz: 0c57334221a85295fde20dae7f7ae4ad23145c6baf82d17398c32efa4fc80acf71d5b2c6eb806780d67eba137a98e653a9e930cf5d4fb27ffd8f8bad40a5435f
@@ -1,5 +1,11 @@
1
1
  # URBANopt Reporting Gem
2
2
 
3
+ ## Version 0.3.0
4
+
5
+ Date Range: 11/12/2020 - 11/25/2020
6
+
7
+ - Updating dependencies to support OpenStudio 3.1.0
8
+
3
9
  ## Version 0.2.1
4
10
 
5
11
  Date Range: 09/22/2020 - 11/12/2020
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- URBANopt<sup>&trade;</sup>, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
1
+ URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
2
  contributors. All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification,
@@ -1,4 +1,4 @@
1
- URBANopt™, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
1
+ URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
2
  contributors. All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification,
@@ -1,6 +1,6 @@
1
1
  <%
2
2
  # *********************************************************************************
3
- # URBANopt™, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
3
+ # URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
4
4
  # contributors. All rights reserved.
5
5
  #
6
6
  # Redistribution and use in source and binary forms, with or without modification,
@@ -1,4 +1,4 @@
1
1
  /* @preserve
2
- * URBANopt™, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other contributors. All rights reserved.
2
+ * URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other contributors. All rights reserved.
3
3
  * Use of this source code is governed by the BSD 3-Clause license.
4
4
  */
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt™, 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,4 +1,4 @@
1
- URBANopt™, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
1
+ URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
2
  contributors. All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification,
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt™, 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,
@@ -99,37 +99,39 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
99
99
 
100
100
  # define fuel types
101
101
  def fuel_types
102
- fuel_types = [
103
- 'Electricity',
104
- 'Gas',
105
- 'AdditionalFuel',
106
- 'DistrictCooling',
107
- 'DistrictHeating',
108
- 'Water'
109
- ]
102
+ fuel_types = {
103
+ 'Electricity' => 'Electricity',
104
+ 'Gas' => 'Natural Gas',
105
+ 'FuelOil#2' => 'Fuel Oil #2',
106
+ 'Propane' => 'Propane',
107
+ 'AdditionalFuel' => 'Additional Fuel',
108
+ 'DistrictCooling' => 'District Cooling',
109
+ 'DistrictHeating' => 'District Heating',
110
+ 'Water' => 'Water'
111
+ }
110
112
 
111
113
  return fuel_types
112
114
  end
113
115
 
114
116
  # define enduses
115
117
  def end_uses
116
- end_uses = [
117
- 'Heating',
118
- 'Cooling',
119
- 'InteriorLights',
120
- 'ExteriorLights',
121
- 'InteriorEquipment',
122
- 'ExteriorEquipment',
123
- 'Fans',
124
- 'Pumps',
125
- 'HeatRejection',
126
- 'Humidifier',
127
- 'HeatRecovery',
128
- 'WaterSystems',
129
- 'Refrigeration',
130
- 'Generators',
131
- 'Facility'
132
- ]
118
+ end_uses = {
119
+ 'Heating' => 'Heating',
120
+ 'Cooling' => 'Cooling',
121
+ 'InteriorLights' => 'Interior Lighting',
122
+ 'ExteriorLights' => 'Exterior Lighting',
123
+ 'InteriorEquipment' => 'Interior Equipment',
124
+ 'ExteriorEquipment' => 'Exterior Equipment',
125
+ 'Fans' => 'Fans',
126
+ 'Pumps' => 'Pumps',
127
+ 'HeatRejection' => 'Heat Rejection',
128
+ 'Humidifier' => 'Humidification',
129
+ 'HeatRecovery' => 'Heat Recovery',
130
+ 'WaterSystems' => 'Water Systems',
131
+ 'Refrigeration' => 'Refrigeration',
132
+ 'Generators' => 'Generators',
133
+ 'Facility' => 'Facility'
134
+ }
133
135
 
134
136
  return end_uses
135
137
  end
@@ -163,7 +165,9 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
163
165
 
164
166
  # Request the output for each end use/fuel type combination
165
167
  end_uses.each do |end_use|
168
+ end_use, _ = end_use
166
169
  fuel_types.each do |fuel_type|
170
+ fuel_type, _ = fuel_type
167
171
  variable_name = if end_use == 'Facility'
168
172
  "#{fuel_type}:#{end_use}"
169
173
  else
@@ -173,6 +177,24 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
173
177
  end
174
178
  end
175
179
 
180
+ # OtherFuels
181
+ other_fuels = ["FuelOil#1", "Diesel", "Gasoline", "Coal", "Steam"]
182
+ other_fuel_uses = ["HeatRejection", "Heating", "WaterSystems", "InteriorEquipment"]
183
+ custom_meter_facility = "Meter:Custom,OtherFuels:Facility,OtherFuel1"
184
+ other_fuel_uses.each do |end_use|
185
+ custom_meter = "Meter:Custom,#{end_use}:OtherFuels,OtherFuel1"
186
+ other_fuels.each do |other_fuel|
187
+ result << OpenStudio::IdfObject.load("Output:Meter,#{end_use}:#{other_fuel},#{reporting_frequency};").get
188
+ custom_meter_facility += ",,#{end_use}:#{other_fuel}"
189
+ custom_meter += ",,#{end_use}:#{other_fuel}"
190
+ end
191
+ custom_meter += ";"
192
+ result << OpenStudio::IdfObject.load(custom_meter).get
193
+ result << OpenStudio::IdfObject.load("Output:Meter,#{end_use}:OtherFuels,#{reporting_frequency};").get
194
+ end
195
+ result << OpenStudio::IdfObject.load("#{custom_meter_facility};").get
196
+ result << OpenStudio::IdfObject.load("Output:Meter,OtherFuels:Facility,#{reporting_frequency};").get
197
+
176
198
  # Request the output for each end use/fuel type combination
177
199
  result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Electricity:Facility,#{reporting_frequency};").get
178
200
  result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,ElectricityProduced:Facility,#{reporting_frequency};").get
@@ -228,11 +250,14 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
228
250
  end
229
251
  end
230
252
 
231
- val
253
+ return val
232
254
  end
233
255
 
234
256
  # unit conversion method
235
257
  def convert_units(value, from_units, to_units)
258
+ if value.nil?
259
+ return nil
260
+ end
236
261
  # apply unit conversion
237
262
  value_converted = OpenStudio.convert(value, from_units, to_units)
238
263
  if value_converted.is_initialized
@@ -572,17 +597,35 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
572
597
  natural_gas = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Natural Gas'")
573
598
  feature_report.reporting_periods[0].natural_gas_kwh = convert_units(natural_gas, 'GJ', 'kWh')
574
599
 
575
- # additional_fuel
600
+ # propane
601
+ propane = sql_query(runner, sql_file, 'EnergyMeters', "TableName='Annual and Peak Values - Other' AND RowName='Propane:Facility' AND ColumnName='Annual Value'")
602
+ feature_report.reporting_periods[0].propane_kwh = 0.0
603
+ feature_report.reporting_periods[0].propane_kwh = convert_units(propane, 'GJ', 'kWh') unless propane.nil?
604
+
605
+ # fuel_oil
606
+ fuel_oil = sql_query(runner, sql_file, 'EnergyMeters', "TableName='Annual and Peak Values - Other' AND RowName='FuelOil#2:Facility' AND ColumnName='Annual Value'")
607
+ feature_report.reporting_periods[0].fuel_oil_kwh = 0.0
608
+ feature_report.reporting_periods[0].fuel_oil_kwh = convert_units(fuel_oil, 'GJ', 'kWh') unless fuel_oil.nil?
609
+
610
+ # other_fuels
576
611
  additional_fuel = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Additional Fuel'")
577
- feature_report.reporting_periods[0].additional_fuel_kwh = convert_units(additional_fuel, 'GJ', 'kWh')
612
+ feature_report.reporting_periods[0].other_fuels_kwh = convert_units(additional_fuel, 'GJ', 'kWh')
613
+ feature_report.reporting_periods[0].other_fuels_kwh -= feature_report.reporting_periods[0].propane_kwh
614
+ feature_report.reporting_periods[0].other_fuels_kwh -= feature_report.reporting_periods[0].fuel_oil_kwh
578
615
 
579
616
  # district_cooling
580
617
  district_cooling = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='District Cooling'")
581
618
  feature_report.reporting_periods[0].district_cooling_kwh = convert_units(district_cooling, 'GJ', 'kWh')
619
+ building_types.each do |i|
620
+ feature_report.reporting_periods[0].district_cooling_kwh = 0.0 if i[:building_type].include?('Single-Family Detached')
621
+ end
582
622
 
583
623
  # district_heating
584
624
  district_heating = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='District Heating'")
585
625
  feature_report.reporting_periods[0].district_heating_kwh = convert_units(district_heating, 'GJ', 'kWh')
626
+ building_types.each do |i|
627
+ feature_report.reporting_periods[0].district_heating_kwh = 0.0 if i[:building_type].include?('Single-Family Detached')
628
+ end
586
629
 
587
630
  # water
588
631
  water = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='Total End Uses' AND ColumnName='Water'")
@@ -596,41 +639,62 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
596
639
  ## end_uses
597
640
 
598
641
  # get fuel type as listed in the sql file
599
- fuel_type = ['Electricity', 'Natural Gas', 'Additional Fuel', 'District Cooling', 'District Heating', 'Water']
642
+ fueltypes = fuel_types.values
643
+ fueltypes.delete('Propane')
644
+ fueltypes.delete('Fuel Oil #2')
600
645
 
601
646
  # get enduses as listed in the sql file
602
- enduses = ['Heating', 'Cooling', 'Interior Lighting', 'Exterior Lighting', 'Interior Equipment', 'Exterior Equipment', 'Fans', 'Pumps',
603
- 'Heat Rejection', 'Humidification', 'Heat Recovery', 'Water Systems', 'Refrigeration', 'Generators']
647
+ enduses = end_uses.values
648
+ enduses.delete('Facility')
649
+
650
+ # propane / fuel_oil
651
+ ['Propane', 'Fuel Oil #2'].each do |ft|
652
+ end_uses.keys.each do |eu|
653
+ next if eu == 'Facility'
654
+
655
+ sql_r = sql_query(runner, sql_file, 'EnergyMeters', "TableName='Annual and Peak Values - Other' AND RowName='#{eu}:#{ft.tr(' ', '')}' AND ColumnName='Annual Value'")
656
+
657
+ # report each query in its corresponding feature report obeject
658
+ x = ft.tr(' ', '_').downcase
659
+ x = x.gsub('_#2', '')
660
+ x_u = x + '_kwh'
661
+ m = feature_report.reporting_periods[0].end_uses.send(x_u)
662
+
663
+ y = end_uses[eu].tr(' ', '_').downcase
664
+ if sql_r.nil?
665
+ sql_r = 0.0
666
+ end
667
+ m.send("#{y}=", convert_units(sql_r, 'GJ', 'kWh'))
668
+ end
669
+ end
604
670
 
605
671
  # loop through fuel types and enduses to fill in sql_query method
606
- fuel_type.each do |ft|
672
+ fueltypes.each do |ft|
607
673
  enduses.each do |eu|
608
674
  sql_r = sql_query(runner, sql_file, 'AnnualBuildingUtilityPerformanceSummary', "TableName='End Uses' AND RowName='#{eu}' AND ColumnName='#{ft}'")
609
675
 
610
676
  # report each query in its corresponding feature report obeject
611
- if ft.include? ' '
612
- x = ft.tr(' ', '_').downcase
613
- if x.include? 'water'
614
- x_u = x + '_qbft'
615
- else
616
- x_u = x + '_kwh'
617
- end
618
- m = feature_report.reporting_periods[0].end_uses.send(x_u)
677
+ x = ft.tr(' ', '_').downcase
678
+ if x.include? 'water'
679
+ x_u = x + '_qbft'
619
680
  else
620
- if ft.downcase.include? 'water'
621
- ft_u = ft + '_qbft'
622
- else
623
- ft_u = ft + '_kwh'
624
- end
625
- m = feature_report.reporting_periods[0].end_uses.send(ft_u.downcase)
681
+ x_u = x + '_kwh'
626
682
  end
683
+ if x_u == 'additional_fuel_kwh'
684
+ x_u = 'other_fuels_kwh'
685
+ end
686
+ m = feature_report.reporting_periods[0].end_uses.send(x_u)
627
687
 
628
- if eu.include? ' '
629
- y = eu.tr(' ', '_').downcase
630
- m.send("#{y}=", convert_units(sql_r, 'GJ', 'kWh'))
631
- else
632
- m.send("#{eu.downcase}=", convert_units(sql_r, 'GJ', 'kWh'))
688
+ y = eu.tr(' ', '_').downcase
689
+ sql_r = convert_units(sql_r, 'GJ', 'kWh')
690
+ if x_u == 'other_fuels_kwh'
691
+ sql_r -= feature_report.reporting_periods[0].end_uses.propane_kwh.send(y)
692
+ sql_r -= feature_report.reporting_periods[0].end_uses.fuel_oil_kwh.send(y)
633
693
  end
694
+ building_types.each do |i|
695
+ sql_r = 0.0 if (i[:building_type].include?('Single-Family Detached') && x_u.include?('district'))
696
+ end
697
+ m.send("#{y}=", sql_r)
634
698
  end
635
699
  end
636
700
 
@@ -689,6 +753,9 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
689
753
  'Electricity:Facility',
690
754
  'ElectricityProduced:Facility',
691
755
  'Gas:Facility',
756
+ 'Propane:Facility',
757
+ 'FuelOil#2:Facility',
758
+ 'OtherFuels:Facility',
692
759
  'Cooling:Electricity',
693
760
  'Heating:Electricity',
694
761
  'InteriorLights:Electricity',
@@ -702,6 +769,18 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
702
769
  'Heating:Gas',
703
770
  'WaterSystems:Gas',
704
771
  'InteriorEquipment:Gas',
772
+ 'HeatRejection:Propane',
773
+ 'Heating:Propane',
774
+ 'WaterSystems:Propane',
775
+ 'InteriorEquipment:Propane',
776
+ 'HeatRejection:FuelOil#2',
777
+ 'Heating:FuelOil#2',
778
+ 'WaterSystems:FuelOil#2',
779
+ 'InteriorEquipment:FuelOil#2',
780
+ 'HeatRejection:OtherFuels',
781
+ 'Heating:OtherFuels',
782
+ 'WaterSystems:OtherFuels',
783
+ 'InteriorEquipment:OtherFuels',
705
784
  'DistrictCooling:Facility',
706
785
  'DistrictHeating:Facility',
707
786
  'District Cooling Chilled Water Rate',
@@ -765,8 +844,12 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
765
844
  puts " *********timeseries_name = #{timeseries_name}******************"
766
845
  runner.registerInfo("TIMESERIES: #{timeseries_name}")
767
846
 
768
- # get all the key values that this timeseries can be reported for (e.g. if PMV is requested for each zone)
769
- key_values = sql_file.availableKeyValues('RUN PERIOD 1', 'Zone Timestep', timeseries_name)
847
+ # get all the key values that this timeseries can be reported for (e.g. if PMV is requested for each zone)
848
+ if timeseries_name.include?('OtherFuels')
849
+ key_values = sql_file.availableKeyValues('RUN PERIOD 1', 'Zone Timestep', timeseries_name.upcase)
850
+ else
851
+ key_values = sql_file.availableKeyValues('RUN PERIOD 1', 'Zone Timestep', timeseries_name)
852
+ end
770
853
  runner.registerInfo("KEY VALUES: #{key_values}")
771
854
  if key_values.empty?
772
855
  key_values = ['']
@@ -810,7 +893,11 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
810
893
  # final_timeseries_names << new_timeseries_name
811
894
 
812
895
  # get the actual timeseries
813
- ts = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, timeseries_name, key_value)
896
+ if timeseries_name.include?('OtherFuels')
897
+ ts = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, timeseries_name.upcase, key_value)
898
+ else
899
+ ts = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, timeseries_name, key_value)
900
+ end
814
901
 
815
902
  if n.nil?
816
903
  # first timeseries should always be set
@@ -825,10 +912,15 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
825
912
  values[key_cnt] = Array.new(n, 0)
826
913
  end
827
914
 
915
+ # residential considerations
916
+ building_types.each do |i|
917
+ values[key_cnt] = Array.new(n, 0) if ['DistrictCooling:Facility', 'DistrictHeating:Facility'].include?(timeseries_name) && i[:building_type].include?('Single-Family Detached')
918
+ end
919
+
828
920
  # unit conversion
829
921
  old_unit = ts.get.units if ts.is_initialized
830
922
 
831
- if timeseries_name.include? 'Gas'
923
+ if timeseries_name.include?('Gas') || timeseries_name.include?('Propane') || timeseries_name.include?('FuelOil#2') || timeseries_name.include?('OtherFuels')
832
924
  new_unit = 'kBtu'
833
925
  else
834
926
  new_unit = case old_unit.to_s
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.0</schema_version>
4
4
  <name>default_feature_reports</name>
5
5
  <uid>9ee3135a-8070-4408-bfa1-b75fecf9dd4f</uid>
6
- <version_id>1f4eb28d-d586-4c10-8d23-f3495054ce1e</version_id>
7
- <version_modified>20200921T204602Z</version_modified>
6
+ <version_id>f9af7bd8-e9ce-41b4-b892-df29f235a9bd</version_id>
7
+ <version_modified>20201201T173130Z</version_modified>
8
8
  <xml_checksum>FB304155</xml_checksum>
9
9
  <class_name>DefaultFeatureReports</class_name>
10
10
  <display_name>DefaultFeatureReports</display_name>
@@ -126,17 +126,23 @@
126
126
  <usage_type>test</usage_type>
127
127
  <checksum>CC4BFFAF</checksum>
128
128
  </file>
129
+ <file>
130
+ <filename>README.md</filename>
131
+ <filetype>md</filetype>
132
+ <usage_type>readme</usage_type>
133
+ <checksum>0B68E96D</checksum>
134
+ </file>
129
135
  <file>
130
136
  <filename>LICENSE.md</filename>
131
137
  <filetype>md</filetype>
132
138
  <usage_type>license</usage_type>
133
- <checksum>D8541540</checksum>
139
+ <checksum>BBD19F47</checksum>
134
140
  </file>
135
141
  <file>
136
142
  <filename>default_feature_reports_test.rb</filename>
137
143
  <filetype>rb</filetype>
138
144
  <usage_type>test</usage_type>
139
- <checksum>A5706600</checksum>
145
+ <checksum>19681175</checksum>
140
146
  </file>
141
147
  <file>
142
148
  <version>
@@ -147,13 +153,7 @@
147
153
  <filename>measure.rb</filename>
148
154
  <filetype>rb</filetype>
149
155
  <usage_type>script</usage_type>
150
- <checksum>3C7B646E</checksum>
151
- </file>
152
- <file>
153
- <filename>README.md</filename>
154
- <filetype>md</filetype>
155
- <usage_type>readme</usage_type>
156
- <checksum>0B68E96D</checksum>
156
+ <checksum>B1E43E26</checksum>
157
157
  </file>
158
158
  </files>
159
159
  </measure>
@@ -39,9 +39,9 @@ module URBANopt
39
39
  # Enduses class inlclude results for each fuel type.
40
40
  ##
41
41
  class EndUses
42
- attr_accessor :electricity_kwh, :natural_gas_kwh, :additional_fuel_kwh, :district_cooling_kwh, :district_heating_kwh, :water_qbft # :nodoc:
42
+ attr_accessor :electricity_kwh, :natural_gas_kwh, :propane_kwh, :fuel_oil_kwh, :other_fuels_kwh, :district_cooling_kwh, :district_heating_kwh, :water_qbft # :nodoc:
43
43
  ##
44
- # EndUses class intialize end_uses(fuel type) attributes: +:electricity_kwh+ , +:natural_gas_kwh+ , +:additional_fuel_kwh+ ,
44
+ # EndUses class intialize end_uses(fuel type) attributes: +:electricity_kwh+ , +:natural_gas_kwh+ , +:propane_kwh+ , +:fuel_oil_kwh+ , +:other_fuels_kwh+ ,
45
45
  # +:district_cooling_kwh+ , +:district_heating_kwh+ , +:water_qbft+
46
46
  ##
47
47
  # [parameters:]
@@ -53,7 +53,9 @@ module URBANopt
53
53
 
54
54
  @electricity_kwh = EndUse.new(hash[:electricity_kwh])
55
55
  @natural_gas_kwh = EndUse.new(hash[:natural_gas_kwh])
56
- @additional_fuel_kwh = EndUse.new(hash[:additional_fuel_kwh])
56
+ @propane_kwh = EndUse.new(hash[:propane_kwh])
57
+ @fuel_oil_kwh = EndUse.new(hash[:fuel_oil_kwh])
58
+ @other_fuels_kwh = EndUse.new(hash[:other_fuels_kwh])
57
59
  @district_cooling_kwh = EndUse.new(hash[:district_cooling_kwh])
58
60
  @district_heating_kwh = EndUse.new(hash[:district_heating_kwh])
59
61
  @water_qbft = EndUse.new(hash[:water_qbft])
@@ -72,7 +74,7 @@ module URBANopt
72
74
  def to_hash
73
75
  result = {}
74
76
 
75
- electricity_kwh_hash = @electricity_kwh.to_hash if @electricity_kwh.to_hash
77
+ electricity_kwh_hash = @electricity_kwh.to_hash if @electricity_kwh
76
78
  electricity_kwh_hash.delete_if { |k, v| v.nil? }
77
79
  result[:electricity_kwh] = electricity_kwh_hash if @electricity_kwh
78
80
 
@@ -80,9 +82,17 @@ module URBANopt
80
82
  natural_gas_kwh_hash.delete_if { |k, v| v.nil? }
81
83
  result[:natural_gas_kwh] = natural_gas_kwh_hash if @natural_gas_kwh
82
84
 
83
- additional_fuel_kwh_hash = @additional_fuel_kwh.to_hash if @additional_fuel_kwh
84
- additional_fuel_kwh_hash.delete_if { |k, v| v.nil? }
85
- result[:additional_fuel_kwh] = additional_fuel_kwh_hash if @additional_fuel_kwh
85
+ propane_kwh_hash = @propane_kwh.to_hash if @propane_kwh
86
+ propane_kwh_hash.delete_if { |k, v| v.nil? }
87
+ result[:propane_kwh] = propane_kwh_hash if @propane_kwh
88
+
89
+ fuel_oil_kwh_hash = @fuel_oil_kwh.to_hash if @fuel_oil_kwh
90
+ fuel_oil_kwh_hash.delete_if { |k, v| v.nil? }
91
+ result[:fuel_oil_kwh] = fuel_oil_kwh_hash if @fuel_oil_kwh
92
+
93
+ other_fuels_kwh_hash = @other_fuels_kwh.to_hash if @other_fuels_kwh
94
+ other_fuels_kwh_hash.delete_if { |k, v| v.nil? }
95
+ result[:other_fuels_kwh] = other_fuels_kwh_hash if @other_fuels_kwh
86
96
 
87
97
  district_cooling_kwh_hash = @district_cooling_kwh.to_hash if @district_cooling_kwh
88
98
  district_cooling_kwh_hash.delete_if { |k, v| v.nil? }
@@ -111,7 +121,9 @@ module URBANopt
111
121
  hash = {}
112
122
  hash[:electricity_kwh] = EndUse.new.to_hash
113
123
  hash[:natural_gas_kwh] = EndUse.new.to_hash
114
- hash[:additional_fuel_kwh] = EndUse.new.to_hash
124
+ hash[:propane_kwh] = EndUse.new.to_hash
125
+ hash[:fuel_oil_kwh] = EndUse.new.to_hash
126
+ hash[:other_fuels_kwh] = EndUse.new.to_hash
115
127
  hash[:district_cooling_kwh] = EndUse.new.to_hash
116
128
  hash[:district_heating_kwh] = EndUse.new.to_hash
117
129
  hash[:water_qbft] = EndUse.new.to_hash
@@ -129,7 +141,9 @@ module URBANopt
129
141
  # modify the existing_period by summing up the results ; # sum results only if they exist
130
142
  @electricity_kwh.merge_end_use!(new_end_uses.electricity_kwh)
131
143
  @natural_gas_kwh.merge_end_use!(new_end_uses.natural_gas_kwh)
132
- @additional_fuel_kwh.merge_end_use!(new_end_uses.additional_fuel_kwh)
144
+ @propane_kwh.merge_end_use!(new_end_uses.propane_kwh)
145
+ @fuel_oil_kwh.merge_end_use!(new_end_uses.fuel_oil_kwh)
146
+ @other_fuels_kwh.merge_end_use!(new_end_uses.other_fuels_kwh)
133
147
  @district_cooling_kwh.merge_end_use!(new_end_uses.district_cooling_kwh)
134
148
  @district_heating_kwh.merge_end_use!(new_end_uses.district_heating_kwh)
135
149
  return self
@@ -44,13 +44,13 @@ module URBANopt
44
44
  ##
45
45
  class ReportingPeriod
46
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, :additional_fuel_kwh, :district_cooling_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
48
  :district_heating_kwh, :water_qbft, :electricity_produced_kwh, :end_uses, :energy_production_kwh, :photovoltaic,
49
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
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+ , +:additional_fuel_kwh+ , +:district_cooling_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
54
  # +:district_heating_kwh+ , +:water_qbft+ , +:electricity_produced_kwh+ , +:end_uses+ , +:energy_production_kwh+ , +:photovoltaic_kwh+ ,
55
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+
@@ -70,14 +70,16 @@ module URBANopt
70
70
 
71
71
  @total_site_energy_kwh = hash[:total_site_energy_kwh]
72
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
- @additional_fuel_kwh = hash [:additional_fuel_kwh]
80
- @district_cooling_kwh = hash [:district_cooling_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]
81
83
  @district_heating_kwh = hash[:district_heating_kwh]
82
84
  @water_qbft = hash[:water_qbft]
83
85
  @electricity_produced_kwh = hash[:electricity_produced_kwh]
@@ -108,14 +110,16 @@ module URBANopt
108
110
 
109
111
  hash[:total_site_energy_kwh] = nil
110
112
  hash[:total_source_energy_kwh] = nil
111
- hash [:net_site_energy_kwh] = nil
112
- hash [:net_source_energy_kwh] = nil
113
- hash [:net_utility_cost_dollar] = nil
114
- hash [:total_utility_cost_dollar] = nil
115
- hash [:electricity_kwh] = nil
116
- hash [:natural_gas_kwh] = nil
117
- hash [:additional_fuel_kwh] = nil
118
- hash [:district_cooling_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
119
123
  hash[:district_heating_kwh] = nil
120
124
 
121
125
  hash[:electricity_produced_kwh] = nil
@@ -150,7 +154,9 @@ module URBANopt
150
154
  result[:total_utility_cost_dollar] = @total_utility_cost_dollar if @total_utility_cost_dollar
151
155
  result[:electricity_kwh] = @electricity_kwh if @electricity_kwh
152
156
  result[:natural_gas_kwh] = @natural_gas_kwh if @natural_gas_kwh
153
- result[:additional_fuel_kwh] = @additional_fuel_kwh if @additional_fuel_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
154
160
  result[:district_cooling_kwh] = @district_cooling_kwh if @district_cooling_kwh
155
161
  result[:district_heating_kwh] = @district_heating_kwh if @district_heating_kwh
156
162
  result[:water_qbft] = @water_qbft if @water_qbft
@@ -218,7 +224,9 @@ module URBANopt
218
224
  existing_period.total_utility_cost_dollar = add_values(existing_period.total_utility_cost_dollar, new_period.total_utility_cost_dollar)
219
225
  existing_period.electricity_kwh = add_values(existing_period.electricity_kwh, new_period.electricity_kwh)
220
226
  existing_period.natural_gas_kwh = add_values(existing_period.natural_gas_kwh, new_period.natural_gas_kwh)
221
- existing_period.additional_fuel_kwh = add_values(existing_period.additional_fuel_kwh, new_period.additional_fuel_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)
222
230
  existing_period.district_cooling_kwh = add_values(existing_period.district_cooling_kwh, new_period.district_cooling_kwh)
223
231
  existing_period.district_heating_kwh = add_values(existing_period.district_heating_kwh, new_period.district_heating_kwh)
224
232
  existing_period.water_qbft = add_values(existing_period.water_qbft, new_period.water_qbft)
@@ -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
@@ -301,8 +301,16 @@
301
301
  "description": "Sum of all natural gas end uses consumption (kWh)",
302
302
  "type": "number"
303
303
  },
304
- "additional_fuel_kwh": {
305
- "description": "Sum of all additional fuel end uses consumption (kWh)",
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)",
306
314
  "type": "number"
307
315
  },
308
316
  "district_cooling_kwh": {
@@ -371,7 +379,13 @@
371
379
  "natural_gas_kwh": {
372
380
  "$ref": "#/definitions/EndUse"
373
381
  },
374
- "additional_fuel_kwh": {
382
+ "propane_kwh": {
383
+ "$ref": "#/definitions/EndUse"
384
+ },
385
+ "fuel_oil_kwh": {
386
+ "$ref": "#/definitions/EndUse"
387
+ },
388
+ "other_fuels_kwh": {
375
389
  "$ref": "#/definitions/EndUse"
376
390
  },
377
391
  "district_cooling_kwh": {
@@ -522,9 +536,11 @@
522
536
  "enum": [
523
537
  "Electricity",
524
538
  "Natural Gas",
539
+ "Propane",
540
+ "Fuel Oil",
525
541
  "District Cooling",
526
542
  "District Heating",
527
- "Additional Fuel",
543
+ "Other Fuels",
528
544
  "Water"
529
545
  ]
530
546
  },
@@ -30,6 +30,6 @@
30
30
 
31
31
  module URBANopt
32
32
  module Reporting
33
- VERSION = '0.2.1'.freeze
33
+ VERSION = '0.3.0'.freeze
34
34
  end
35
35
  end
@@ -29,5 +29,5 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency 'rspec', '~> 3.7'
30
30
  spec.add_runtime_dependency 'json-schema', '~> 2.8'
31
31
  spec.add_runtime_dependency 'json_pure', '~> 2.3'
32
- spec.add_runtime_dependency 'openstudio-extension', '~> 0.2.5'
32
+ spec.add_runtime_dependency 'openstudio-extension', '~> 0.3.1'
33
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: urbanopt-reporting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rawad El Kontar
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-11-12 00:00:00.000000000 Z
12
+ date: 2020-12-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -87,14 +87,14 @@ dependencies:
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 0.2.5
90
+ version: 0.3.1
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: 0.2.5
97
+ version: 0.3.1
98
98
  description: Library include scenario default reporting measure and scenario defaults
99
99
  reports schema and classes
100
100
  email: