urbanopt-reporting 0.6.2 → 0.8.0

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.
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|