urbanopt-reporting 0.6.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/nightly_ci_build.yml +54 -0
  3. data/CHANGELOG.md +16 -0
  4. data/Gemfile +10 -5
  5. data/LICENSE.md +16 -11
  6. data/README.md +1 -0
  7. data/Rakefile +2 -37
  8. data/building_loads.csv +52561 -0
  9. data/doc_templates/LICENSE.md +16 -11
  10. data/doc_templates/copyright_erb.txt +22 -16
  11. data/doc_templates/copyright_js.txt +2 -2
  12. data/doc_templates/copyright_ruby.txt +2 -37
  13. data/lib/measures/.rubocop.yml +1 -2
  14. data/lib/measures/default_feature_reports/LICENSE.md +23 -18
  15. data/lib/measures/default_feature_reports/measure.rb +110 -61
  16. data/lib/measures/default_feature_reports/measure.xml +40 -45
  17. data/lib/measures/export_modelica_loads/LICENSE.md +23 -18
  18. data/lib/measures/export_modelica_loads/measure.rb +19 -54
  19. data/lib/measures/export_modelica_loads/measure.xml +31 -31
  20. data/lib/measures/export_time_series_modelica/LICENSE.md +23 -18
  21. data/lib/measures/export_time_series_modelica/measure.rb +2 -37
  22. data/lib/measures/export_time_series_modelica/measure.xml +48 -42
  23. data/lib/measures/export_time_series_modelica/resources/os_lib_helper_methods.rb +2 -37
  24. data/lib/urbanopt/reporting/default_reports/construction_cost.rb +2 -37
  25. data/lib/urbanopt/reporting/default_reports/date.rb +2 -37
  26. data/lib/urbanopt/reporting/default_reports/distributed_generation.rb +3 -38
  27. data/lib/urbanopt/reporting/default_reports/end_use.rb +2 -37
  28. data/lib/urbanopt/reporting/default_reports/end_uses.rb +2 -37
  29. data/lib/urbanopt/reporting/default_reports/extension.rb +2 -37
  30. data/lib/urbanopt/reporting/default_reports/feature_report.rb +7 -38
  31. data/lib/urbanopt/reporting/default_reports/generator.rb +2 -37
  32. data/lib/urbanopt/reporting/default_reports/location.rb +2 -37
  33. data/lib/urbanopt/reporting/default_reports/logger.rb +4 -37
  34. data/lib/urbanopt/reporting/default_reports/power_distribution.rb +2 -37
  35. data/lib/urbanopt/reporting/default_reports/program.rb +2 -37
  36. data/lib/urbanopt/reporting/default_reports/qaqc_flags.rb +147 -0
  37. data/lib/urbanopt/reporting/default_reports/reporting_period.rb +6 -41
  38. data/lib/urbanopt/reporting/default_reports/scenario_power_distribution.rb +2 -37
  39. data/lib/urbanopt/reporting/default_reports/scenario_power_distribution_cost.rb +177 -0
  40. data/lib/urbanopt/reporting/default_reports/scenario_report.rb +36 -52
  41. data/lib/urbanopt/reporting/default_reports/schema/scenario_schema.json +372 -31
  42. data/lib/urbanopt/reporting/default_reports/solar_pv.rb +2 -37
  43. data/lib/urbanopt/reporting/default_reports/storage.rb +2 -37
  44. data/lib/urbanopt/reporting/default_reports/thermal_storage.rb +2 -37
  45. data/lib/urbanopt/reporting/default_reports/timeseries_csv.rb +2 -37
  46. data/lib/urbanopt/reporting/default_reports/validator.rb +2 -37
  47. data/lib/urbanopt/reporting/default_reports/wind.rb +2 -37
  48. data/lib/urbanopt/reporting/default_reports.rb +2 -37
  49. data/lib/urbanopt/reporting/derived_extension.rb +2 -37
  50. data/lib/urbanopt/reporting/version.rb +3 -38
  51. data/lib/urbanopt/reporting.rb +2 -37
  52. data/urbanopt-reporting-gem.gemspec +3 -3
  53. metadata +14 -11
  54. data/.github/workflows/nightly_build.yml +0 -41
@@ -1,4 +1,4 @@
1
- URBANopt (tm), Copyright (c) 2019-2022, Alliance for Sustainable Energy, LLC, and other
1
+ URBANopt (tm), Copyright (c) 2019-2023, 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,
@@ -15,13 +15,18 @@ Neither the name of the copyright holder nor the names of its contributors may b
15
15
  used to endorse or promote products derived from this software without specific
16
16
  prior written permission.
17
17
 
18
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27
- OF THE POSSIBILITY OF SUCH DAMAGE.
18
+ The name of the copyright holder(s), any contributors, the United States Government,
19
+ the United States Department of Energy, or any of their employees may not be used to
20
+ endorse or promote products derived from this software without specific prior written
21
+ permission from the respective party.
22
+
23
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS "AS IS" AND
24
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
26
+ THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE UNITED STATES GOVERNMENT, OR THE UNITED
27
+ STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT,
28
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
30
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
32
+ WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,31 +1,37 @@
1
1
  <%
2
2
  # *********************************************************************************
3
- # URBANopt (tm), Copyright (c) 2019-2022, Alliance for Sustainable Energy, LLC, and other
3
+ # URBANopt (tm), Copyright (c) 2019-2023, 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,
7
7
  # are permitted provided that the following conditions are met:
8
- #
8
+
9
9
  # Redistributions of source code must retain the above copyright notice, this list
10
10
  # of conditions and the following disclaimer.
11
- #
11
+
12
12
  # Redistributions in binary form must reproduce the above copyright notice, this
13
13
  # list of conditions and the following disclaimer in the documentation and/or other
14
14
  # materials provided with the distribution.
15
- #
15
+
16
16
  # Neither the name of the copyright holder nor the names of its contributors may be
17
17
  # used to endorse or promote products derived from this software without specific
18
18
  # prior written permission.
19
- #
20
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21
- # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
- # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23
- # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
24
- # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25
- # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
- # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
28
- # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
29
- # OF THE POSSIBILITY OF SUCH DAMAGE.
19
+
20
+ # The name of the copyright holder(s), any contributors, the United States Government,
21
+ # the United States Department of Energy, or any of their employees may not be used to
22
+ # endorse or promote products derived from this software without specific prior written
23
+ # permission from the respective party.
24
+
25
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS "AS IS" AND
26
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27
+ # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
28
+ # THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE UNITED STATES GOVERNMENT, OR THE UNITED
29
+ # STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT,
30
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
32
+ # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
34
+ # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+
30
36
  # *********************************************************************************
31
37
  %>
@@ -1,4 +1,4 @@
1
1
  /* @preserve
2
- * URBANopt (tm), Copyright (c) 2019-2022, Alliance for Sustainable Energy, LLC, and other contributors. All rights reserved.
3
- * Use of this source code is governed by the BSD 3-Clause license.
2
+ * URBANopt (tm), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ * See also https://github.com/urbanopt/urbanopt-reporting-gem/blob/develop/LICENSE.md
4
4
  */
@@ -1,39 +1,4 @@
1
1
  # *********************************************************************************
2
- # URBANopt™, Copyright (c) 2019-2022, Alliance for Sustainable Energy, LLC, and other
3
- # contributors. All rights reserved.
4
-
5
- # Redistribution and use in source and binary forms, with or without modification,
6
- # are permitted provided that the following conditions are met:
7
-
8
- # Redistributions of source code must retain the above copyright notice, this list
9
- # of conditions and the following disclaimer.
10
-
11
- # Redistributions in binary form must reproduce the above copyright notice, this
12
- # list of conditions and the following disclaimer in the documentation and/or other
13
- # materials provided with the distribution.
14
-
15
- # Neither the name of the copyright holder nor the names of its contributors may be
16
- # used to endorse or promote products derived from this software without specific
17
- # prior written permission.
18
-
19
- # Redistribution of this software, without modification, must refer to the software
20
- # by the same designation. Redistribution of a modified version of this software
21
- # (i) may not refer to the modified version by the same designation, or by any
22
- # confusingly similar designation, and (ii) must refer to the underlying software
23
- # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
24
- # the term “URBANopt”, or any confusingly similar designation may not be used to
25
- # refer to any modified version of this software or any modified version of the
26
- # underlying software originally provided by Alliance without the prior written
27
- # consent of Alliance.
28
-
29
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
30
- # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
31
- # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
32
- # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33
- # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34
- # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
36
- # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
37
- # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
38
- # OF THE POSSIBILITY OF SUCH DAMAGE.
2
+ # URBANopt (tm), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://github.com/urbanopt/urbanopt-reporting-gem/blob/develop/LICENSE.md
39
4
  # *********************************************************************************
@@ -1,7 +1,6 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - gems/**/*
3
+ - 'spec/test_measures/**/*'
4
4
  require: rubocop-performance
5
-
6
5
  inherit_from:
7
6
  - http://s3.amazonaws.com/openstudio-resources/styles/rubocop_v4.yml
@@ -1,27 +1,32 @@
1
- URBANopt (tm), Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
1
+ URBANopt (tm), Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
2
2
  contributors. All rights reserved.
3
3
 
4
- Redistribution and use in source and binary forms, with or without modification,
4
+ Redistribution and use in source and binary forms, with or without modification,
5
5
  are permitted provided that the following conditions are met:
6
6
 
7
- Redistributions of source code must retain the above copyright notice, this list
7
+ Redistributions of source code must retain the above copyright notice, this list
8
8
  of conditions and the following disclaimer.
9
9
 
10
- Redistributions in binary form must reproduce the above copyright notice, this
11
- list of conditions and the following disclaimer in the documentation and/or other
10
+ Redistributions in binary form must reproduce the above copyright notice, this
11
+ list of conditions and the following disclaimer in the documentation and/or other
12
12
  materials provided with the distribution.
13
-
14
- Neither the name of the copyright holder nor the names of its contributors may be
15
- used to endorse or promote products derived from this software without specific
13
+
14
+ Neither the name of the copyright holder nor the names of its contributors may be
15
+ used to endorse or promote products derived from this software without specific
16
16
  prior written permission.
17
17
 
18
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27
- OF THE POSSIBILITY OF SUCH DAMAGE.
18
+ The name of the copyright holder(s), any contributors, the United States Government,
19
+ the United States Department of Energy, or any of their employees may not be used to
20
+ endorse or promote products derived from this software without specific prior written
21
+ permission from the respective party.
22
+
23
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS "AS IS" AND
24
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
26
+ THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE UNITED STATES GOVERNMENT, OR THE UNITED
27
+ STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT,
28
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
30
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
32
+ WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,52 +1,17 @@
1
1
  # *********************************************************************************
2
- # URBANopt™, Copyright (c) 2019-2022, Alliance for Sustainable Energy, LLC, and other
3
- # contributors. All rights reserved.
4
-
5
- # Redistribution and use in source and binary forms, with or without modification,
6
- # are permitted provided that the following conditions are met:
7
-
8
- # Redistributions of source code must retain the above copyright notice, this list
9
- # of conditions and the following disclaimer.
10
-
11
- # Redistributions in binary form must reproduce the above copyright notice, this
12
- # list of conditions and the following disclaimer in the documentation and/or other
13
- # materials provided with the distribution.
14
-
15
- # Neither the name of the copyright holder nor the names of its contributors may be
16
- # used to endorse or promote products derived from this software without specific
17
- # prior written permission.
18
-
19
- # Redistribution of this software, without modification, must refer to the software
20
- # by the same designation. Redistribution of a modified version of this software
21
- # (i) may not refer to the modified version by the same designation, or by any
22
- # confusingly similar designation, and (ii) must refer to the underlying software
23
- # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
24
- # the term “URBANopt”, or any confusingly similar designation may not be used to
25
- # refer to any modified version of this software or any modified version of the
26
- # underlying software originally provided by Alliance without the prior written
27
- # consent of Alliance.
28
-
29
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
30
- # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
31
- # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
32
- # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33
- # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34
- # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
36
- # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
37
- # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
38
- # OF THE POSSIBILITY OF SUCH DAMAGE.
2
+ # URBANopt (tm), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://github.com/urbanopt/urbanopt-reporting-gem/blob/develop/LICENSE.md
39
4
  # *********************************************************************************
40
5
 
41
6
  require 'urbanopt/reporting/default_reports'
42
7
  require 'csv'
43
8
  require 'benchmark'
9
+ require 'json'
44
10
  require 'logger'
45
11
 
46
- @@logger = Logger.new($stdout)
47
-
48
12
  # start the measure
49
13
  class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
14
+ @@logger = Logger.new($stdout)
50
15
  # human readable name
51
16
  def name
52
17
  return 'DefaultFeatureReports'
@@ -233,7 +198,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
233
198
  # result << OpenStudio::IdfObject.load("Output:Variable,*,Exterior Equipment:Electric Vehicles,#{reporting_frequency};").get
234
199
 
235
200
  ## add environmental factor outputs
236
- #result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Output:EnvironmentalImpactFactors,#{reporting_frequency};").get
201
+ # result << OpenStudio::IdfObject.load("Output:Meter:MeterFileOnly,Output:EnvironmentalImpactFactors,#{reporting_frequency};").get
237
202
  # result << OpenStudio::IdfObject.load("Output:Variable,*,Environmental Impact Total N2O Emissions Carbon Equivalent Mass,#{reporting_frequency}; !- HVAC Sum [kg];").get
238
203
  # result << OpenStudio::IdfObject.load("Output:Variable,*,Environmental Impact Total CH4 Emissions Carbon Equivalent Mass,#{reporting_frequency}; !- HVAC Sum [kg];").get
239
204
  # result << OpenStudio::IdfObject.load("Output:Variable,*,Environmental Impact Total CO2 Emissions Carbon Equivalent Mass,#{reporting_frequency}; !- HVAC Sum [kg];").get
@@ -252,11 +217,9 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
252
217
  ev_timeseries_data = ['Exterior Equipment:Electric Vehicles']
253
218
 
254
219
  emissions_timeseries_data = ['Future_Annual_Electricity_Emissions', 'Future_Hourly_Electricity_Emissions',
255
- 'Historical_Annual_Electricity_Emissions', 'Historical_Hourly_Electricity_Emissions',
256
- 'Future_Annual_Electricity_Emissions_Intensity', 'Future_Hourly_Electricity_Emissions_Intensity',
257
- 'Historical_Annual_Electricity_Emissions_Intensity', 'Historical_Hourly_Electricity_Emissions_Intensity']
258
-
259
-
220
+ 'Historical_Annual_Electricity_Emissions', 'Historical_Hourly_Electricity_Emissions',
221
+ 'Future_Annual_Electricity_Emissions_Intensity', 'Future_Hourly_Electricity_Emissions_Intensity',
222
+ 'Historical_Annual_Electricity_Emissions_Intensity', 'Historical_Hourly_Electricity_Emissions_Intensity']
260
223
 
261
224
  timeseries_data += tes_timeseries_data
262
225
  timeseries_data += emissions_timeseries_data
@@ -291,6 +254,83 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
291
254
  return val
292
255
  end
293
256
 
257
+ def feature_qaqc_flags(runner)
258
+ # QAQC flags by category
259
+ qaqc_flags_hash = {} # Make a hash for count of flags of each category
260
+
261
+ runner.workflow.workflowSteps.each do |step| # Go through all the steps
262
+ if step.to_MeasureStep.is_initialized
263
+ measure_step = step.to_MeasureStep.get
264
+
265
+ measure_name = measure_step.measureDirName
266
+
267
+ if measure_step.name.is_initialized
268
+ measure_name = measure_step.name.get
269
+ end
270
+
271
+ if measure_name.include? 'qaqc'
272
+ puts "measure_name = #{measure_name}"
273
+ if measure_step.result.is_initialized
274
+ result = measure_step.result.get
275
+ puts " result = #{result}"
276
+
277
+ ## Adding quaqc_flags_list to check the step value name since units key is missing from the result
278
+ ## It does show in the out.osw but not in the runner.workflow.workflowSteps object
279
+ # use this list to define the flags you want to report
280
+ qaqc_flags_list = [
281
+ 'eui_reasonableness', 'end_use_by_category', 'mechanical_system_part_load_efficiency',
282
+ 'simultaneous_heating_and_cooling', 'internal_loads', 'schedules', 'envelope_r_value',
283
+ 'domestic_hot_water', 'mechanical_system_efficiency', 'supply_and_zone_air_temperature', 'total_qaqc_flags'
284
+ ]
285
+
286
+ result.stepValues.each do |step_value|
287
+ # get name
288
+ name = step_value.name
289
+
290
+ if qaqc_flags_list.include? name
291
+
292
+ # get value
293
+ # check if value, double, int, or bool
294
+ value_type = step_value.variantType.valueDescription
295
+ case value_type
296
+ when 'Double'
297
+ value = step_value.valueAsDouble
298
+ when 'Integer'
299
+ value = step_value.valueAsInteger
300
+ when 'Boolean'
301
+ value = step_value.valueAsBoolean
302
+ when 'String'
303
+ value = step_value.valueAsString
304
+ else
305
+ # catchall for unexpected value types
306
+ value = step_value.valueAsVariant.to_s
307
+ end
308
+
309
+ if qaqc_flags_hash[name]
310
+ qaqc_flags_hash[name] += value
311
+ else
312
+ qaqc_flags_hash[name] = value
313
+ end
314
+
315
+ end
316
+ end
317
+
318
+ puts "qaqc_flags_hash = #{qaqc_flags_hash}"
319
+
320
+ # Hack to put 'total_qaqc_flags' at the end of the hash
321
+ temp_hash_for_ordering = { 'total_qaqc_flags' => qaqc_flags_hash['total_qaqc_flags'] }
322
+ qaqc_flags_hash.delete('total_qaqc_flags')
323
+ qaqc_flags_hash['total_qaqc_flags'] = temp_hash_for_ordering['total_qaqc_flags']
324
+
325
+ end
326
+
327
+ end
328
+
329
+ end
330
+ end
331
+ return qaqc_flags_hash
332
+ end
333
+
294
334
  # unit conversion method
295
335
  def convert_units(value, from_units, to_units)
296
336
  if value.nil?
@@ -836,7 +876,6 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
836
876
 
837
877
  # electricity emissions
838
878
  begin
839
-
840
879
  # future_annual_emissions
841
880
  future_annual_emissions_ts = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, 'Future_Annual_Electricity_Emissions', 'EMS')
842
881
  feature_report.reporting_periods[0].emissions[:future_annual_electricity_emissions_mt] = future_annual_emissions_ts.get.values.sum
@@ -868,11 +907,24 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
868
907
  # historical_hourly_emissions_intensity
869
908
  historical_hourly_emissions_intensity_ts = sql_file.timeSeries(ann_env_pd.to_s, reporting_frequency.to_s, 'Historical_Hourly_Electricity_Emissions_Intensity', 'EMS')
870
909
  feature_report.reporting_periods[0].emissions[:historical_hourly_electricity_emissions_intensity_kg_per_ft2] = historical_hourly_emissions_intensity_ts.get.values.sum
871
-
872
910
  rescue StandardError
873
911
  @@logger.info('Emissions are not reported for this feature')
874
912
  end
875
913
 
914
+ # add qaqc results to feature report
915
+ qaqc_flags_hash = feature_qaqc_flags(runner)
916
+ feature_report.qaqc_flags.eui_reasonableness = qaqc_flags_hash['eui_reasonableness']
917
+ feature_report.qaqc_flags.end_use_by_category = qaqc_flags_hash['end_use_by_category']
918
+ feature_report.qaqc_flags.mechanical_system_part_load_efficiency = qaqc_flags_hash['mechanical_system_part_load_efficiency']
919
+ feature_report.qaqc_flags.simultaneous_heating_and_cooling = qaqc_flags_hash['simultaneous_heating_and_cooling']
920
+ feature_report.qaqc_flags.internal_loads = qaqc_flags_hash['internal_loads']
921
+ feature_report.qaqc_flags.schedules = qaqc_flags_hash['schedules']
922
+ feature_report.qaqc_flags.envelope_r_value = qaqc_flags_hash['envelope_r_value']
923
+ feature_report.qaqc_flags.domestic_hot_water = qaqc_flags_hash['domestic_hot_water']
924
+ feature_report.qaqc_flags.mechanical_system_efficiency = qaqc_flags_hash['mechanical_system_efficiency']
925
+ feature_report.qaqc_flags.supply_and_zone_air_temperature = qaqc_flags_hash['supply_and_zone_air_temperature']
926
+ feature_report.qaqc_flags.total_qaqc_flags = qaqc_flags_hash['total_qaqc_flags']
927
+
876
928
  ##########################################################################################################################
877
929
  # set conversion variables
878
930
  conv_J_mwh = 1000000 * 60 * 60 # J to MWh (1000000J/MJ * 60hr/min * 60 min/sec)
@@ -888,7 +940,6 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
888
940
  fo1_val = 294.962046
889
941
  fo2_val = 294.962046
890
942
 
891
-
892
943
  ##########################################################################################################################
893
944
  ######################################## Reporting TImeseries Results FOR CSV File #######################################
894
945
 
@@ -948,7 +999,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
948
999
  'Historical_Hourly_Electricity_Emissions_Intensity',
949
1000
  'Natural_Gas_Emissions',
950
1001
  'Natural_Gas_Emissions_Intensity',
951
- 'Propane_Emissions',
1002
+ 'Propane_Emissions',
952
1003
  'Propane_Emissions_Intensity',
953
1004
  'FuelOilNo2_Emissions',
954
1005
  'FuelOilNo2_Emissions_Intensity',
@@ -980,7 +1031,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
980
1031
  runner.registerInfo("All timeseries: #{requested_timeseries_names}")
981
1032
 
982
1033
  # timeseries variables to keep to calculate power
983
- tsToKeep = ['Electricity:Facility', 'ElectricityProduced:Facility','Propane:Facility', 'NaturalGas:Facility', 'FuelOilNo2:Facility', 'FuelOilNo1:Facility']
1034
+ tsToKeep = ['Electricity:Facility', 'ElectricityProduced:Facility', 'Propane:Facility', 'NaturalGas:Facility', 'FuelOilNo2:Facility', 'FuelOilNo1:Facility']
984
1035
  tsToKeepIndexes = {}
985
1036
 
986
1037
  ### powerFactor ###
@@ -1145,7 +1196,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1145
1196
  if timeseries_name == 'Natural_Gas_Emissions'
1146
1197
  newVals = Array.new(n, 0)
1147
1198
  (0..n - 1).each do |j|
1148
- newVals[j] = (nat_gas_val * (values[tsToKeepIndexes['NaturalGas:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f ) * conv_kg_mt.to_f
1199
+ newVals[j] = (nat_gas_val * (values[tsToKeepIndexes['NaturalGas:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f) * conv_kg_mt.to_f
1149
1200
  j += 1
1150
1201
  end
1151
1202
  new_unit = 'MT'
@@ -1158,7 +1209,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1158
1209
  if timeseries_name == 'Propane_Emissions'
1159
1210
  newVals = Array.new(n, 0)
1160
1211
  (0..n - 1).each do |j|
1161
- newVals[j] = (lpg_val * (values[tsToKeepIndexes['Propane:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f ) * conv_kg_mt.to_f
1212
+ newVals[j] = (lpg_val * (values[tsToKeepIndexes['Propane:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f) * conv_kg_mt.to_f
1162
1213
  j += 1
1163
1214
  end
1164
1215
  new_unit = 'MT'
@@ -1171,7 +1222,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1171
1222
  if timeseries_name == 'FuelOilNo2_Emissions'
1172
1223
  newVals = Array.new(n, 0)
1173
1224
  (0..n - 1).each do |j|
1174
- newVals[j] = (fo2_val * (values[tsToKeepIndexes['FuelOilNo2:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f ) * conv_kg_mt.to_f
1225
+ newVals[j] = (fo2_val * (values[tsToKeepIndexes['FuelOilNo2:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f) * conv_kg_mt.to_f
1175
1226
  j += 1
1176
1227
  end
1177
1228
  new_unit = 'MT'
@@ -1183,12 +1234,12 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1183
1234
 
1184
1235
  ### calculate emissions intensity metric
1185
1236
  # get flr_area
1186
- flr_area = building.floorArea * 10.764 #change from m2 to ft2
1237
+ flr_area = building.floorArea * 10.764 # change from m2 to ft2
1187
1238
 
1188
1239
  if timeseries_name == 'Natural_Gas_Emissions_Intensity'
1189
1240
  newVals = Array.new(n, 0)
1190
1241
  (0..n - 1).each do |j|
1191
- newVals[j] = (((nat_gas_val * (values[tsToKeepIndexes['NaturalGas:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f ) * conv_kg_mt.to_f ) * 1000 / flr_area) # unit: kg/ft2 - changed mt to kg
1242
+ newVals[j] = (((nat_gas_val * (values[tsToKeepIndexes['NaturalGas:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f) * conv_kg_mt.to_f) * 1000 / flr_area) # unit: kg/ft2 - changed mt to kg
1192
1243
  j += 1
1193
1244
  end
1194
1245
  new_unit = 'KG/FT2'
@@ -1201,7 +1252,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1201
1252
  if timeseries_name == 'Propane_Emissions_Intensity'
1202
1253
  newVals = Array.new(n, 0)
1203
1254
  (0..n - 1).each do |j|
1204
- newVals[j] = (((lpg_val * (values[tsToKeepIndexes['Propane:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f ) * conv_kg_mt.to_f ) * 1000 / flr_area) # unit: kg/ft2 - changed mt to kg
1255
+ newVals[j] = (((lpg_val * (values[tsToKeepIndexes['Propane:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f) * conv_kg_mt.to_f) * 1000 / flr_area) # unit: kg/ft2 - changed mt to kg
1205
1256
  j += 1
1206
1257
  end
1207
1258
  new_unit = 'KG/FT2'
@@ -1214,7 +1265,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1214
1265
  if timeseries_name == 'FuelOilNo2_Emissions_Intensity'
1215
1266
  newVals = Array.new(n, 0)
1216
1267
  (0..n - 1).each do |j|
1217
- newVals[j] = (((fo2_val * (values[tsToKeepIndexes['FuelOilNo2:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f ) * conv_kg_mt.to_f ) * 1000 / flr_area) # unit: kg/ft2 - changed mt to kg
1268
+ newVals[j] = (((fo2_val * (values[tsToKeepIndexes['FuelOilNo2:Facility']][j].to_f * conv_kbtu_J.to_f) / conv_J_mwh.to_f) * conv_kg_mt.to_f) * 1000 / flr_area) # unit: kg/ft2 - changed mt to kg
1218
1269
  j += 1
1219
1270
  end
1220
1271
  new_unit = 'KG/FT2'
@@ -1280,8 +1331,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1280
1331
  end
1281
1332
  end
1282
1333
  end
1283
- end
1284
-
1334
+ end
1285
1335
 
1286
1336
  # append units to headers
1287
1337
  new_timeseries_name += "(#{new_unit})"
@@ -1414,7 +1464,7 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1414
1464
  end
1415
1465
  end
1416
1466
 
1417
- puts "values = #{values}"
1467
+ # puts "values = #{values}"
1418
1468
 
1419
1469
  # closing the sql file
1420
1470
  sql_file.close
@@ -1426,7 +1476,6 @@ class DefaultFeatureReports < OpenStudio::Measure::ReportingMeasure
1426
1476
  feature_report.timeseries_csv.column_names = final_timeseries_names
1427
1477
 
1428
1478
  ##### Save the 'default_feature_reports.json' file
1429
-
1430
1479
  feature_report_hash = feature_report.to_hash
1431
1480
 
1432
1481
  File.open('default_feature_reports.json', 'w') do |f|