From 64ba96c1f819eac3f4cf156c272d0521bf76a5f7 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Wed, 8 Nov 2023 13:49:46 -0700 Subject: [PATCH 1/5] Bump to rc2. --- .github/workflows/config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index 72222884ea..39d273ac39 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -11,7 +11,7 @@ jobs: run-unit-tests: runs-on: ubuntu-latest container: - image: docker://nrel/openstudio:3.7.0-rc1 + image: docker://nrel/openstudio:3.7.0-rc2 steps: - uses: actions/checkout@v3 with: @@ -63,7 +63,7 @@ jobs: run-workflow1-tests: runs-on: ubuntu-latest container: - image: docker://nrel/openstudio:3.7.0-rc1 + image: docker://nrel/openstudio:3.7.0-rc2 steps: - uses: actions/checkout@v3 with: @@ -86,7 +86,7 @@ jobs: run-workflow2-tests: runs-on: ubuntu-latest container: - image: docker://nrel/openstudio:3.7.0-rc1 + image: docker://nrel/openstudio:3.7.0-rc2 steps: - uses: actions/checkout@v3 with: @@ -115,8 +115,8 @@ jobs: - name: Install software and run test shell: pwsh run: | - $env:OS_VERSION="3.7.0-rc1" - $env:OS_SHA="211bb633b0" + $env:OS_VERSION="3.7.0-rc2" + $env:OS_SHA="c0cbe73b51" Invoke-WebRequest -OutFile Windows.tar.gz -URI "https://github.com/NREL/OpenStudio/releases/download/v${env:OS_VERSION}/OpenStudio-${env:OS_VERSION}+${env:OS_SHA}-Windows.tar.gz" tar -xzf Windows.tar.gz & .\OpenStudio-${env:OS_VERSION}+${env:OS_SHA}-Windows\bin\openstudio.exe workflow\run_simulation.rb -x workflow\sample_files\base.xml --hourly ALL --add-component-loads --add-stochastic-schedules From 496f2406ddf1c3ac1b800980a6a577a6cb701b99 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Wed, 8 Nov 2023 15:41:38 -0700 Subject: [PATCH 2/5] Fix CI failures. --- ReportSimulationOutput/measure.rb | 3 +-- ReportSimulationOutput/measure.xml | 6 +++--- ReportUtilityBills/measure.rb | 3 +-- ReportUtilityBills/measure.xml | 6 +++--- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/ReportSimulationOutput/measure.rb b/ReportSimulationOutput/measure.rb index 33ef59e8a6..80833da66b 100644 --- a/ReportSimulationOutput/measure.rb +++ b/ReportSimulationOutput/measure.rb @@ -560,9 +560,8 @@ def run(runner, user_arguments) args[:use_dview_format] = false end - output_dir = File.dirname(runner.lastEpwFilePath.get.to_s) - hpxml_defaults_path = @model.getBuilding.additionalProperties.getFeatureAsString('hpxml_defaults_path').get + output_dir = File.dirname(hpxml_defaults_path) building_id = @model.getBuilding.additionalProperties.getFeatureAsString('building_id').get hpxml = HPXML.new(hpxml_path: hpxml_defaults_path, building_id: building_id) diff --git a/ReportSimulationOutput/measure.xml b/ReportSimulationOutput/measure.xml index 161f260779..d3f0a25e6b 100644 --- a/ReportSimulationOutput/measure.xml +++ b/ReportSimulationOutput/measure.xml @@ -3,8 +3,8 @@ 3.1 report_simulation_output df9d170c-c21a-4130-866d-0d46b06073fd - 24e7b614-2b4f-4273-ba8a-e3617d8d0409 - 2023-11-06T20:36:46Z + c711b3fd-66c2-4d05-ade1-8822d5e96da3 + 2023-11-08T22:40:39Z 9BF1E6AC ReportSimulationOutput HPXML Simulation Output Report @@ -1929,7 +1929,7 @@ measure.rb rb script - BF3DF39A + 6E0C5161 test_report_sim_output.rb diff --git a/ReportUtilityBills/measure.rb b/ReportUtilityBills/measure.rb index 1cdffb28e9..64e8575308 100644 --- a/ReportUtilityBills/measure.rb +++ b/ReportUtilityBills/measure.rb @@ -237,10 +237,9 @@ def run(runner, user_arguments) args = get_arguments(runner, arguments(model), user_arguments) - output_dir = File.dirname(runner.lastEpwFilePath.get.to_s) - hpxml_path = @model.getBuilding.additionalProperties.getFeatureAsString('hpxml_path').get hpxml_defaults_path = @model.getBuilding.additionalProperties.getFeatureAsString('hpxml_defaults_path').get + output_dir = File.dirname(hpxml_defaults_path) building_id = @model.getBuilding.additionalProperties.getFeatureAsString('building_id').get hpxml = HPXML.new(hpxml_path: hpxml_defaults_path, building_id: building_id) diff --git a/ReportUtilityBills/measure.xml b/ReportUtilityBills/measure.xml index 13721f93b8..a2e8953b69 100644 --- a/ReportUtilityBills/measure.xml +++ b/ReportUtilityBills/measure.xml @@ -3,8 +3,8 @@ 3.1 report_utility_bills ca88a425-e59a-4bc4-af51-c7e7d1e960fe - 65fc31a4-1c57-4d29-9bd4-ef00e35c5c5f - 2023-11-02T14:40:05Z + f0cf0ead-74b8-477b-943f-b6ebdd45a11d + 2023-11-08T22:40:40Z 15BF4E57 ReportUtilityBills Utility Bills Report @@ -142,7 +142,7 @@ measure.rb rb script - 9F95708E + 4A038500 detailed_rates/Sample Flat Rate Min Annual Charge.json From da6303bce2ba3cdf11cfbfb2a0dfb724f1747e5c Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Wed, 15 Nov 2023 18:27:44 -0800 Subject: [PATCH 3/5] Update for upcoming rc3. [ci skip] --- .github/workflows/config.yml | 10 ++--- .../tests/test_report_utility_bills.rb | 16 +++---- tasks.rb | 43 ++----------------- 3 files changed, 15 insertions(+), 54 deletions(-) diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index 39d273ac39..d639c0bf10 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -11,7 +11,7 @@ jobs: run-unit-tests: runs-on: ubuntu-latest container: - image: docker://nrel/openstudio:3.7.0-rc2 + image: docker://nrel/openstudio:3.7.0-rc3 steps: - uses: actions/checkout@v3 with: @@ -63,7 +63,7 @@ jobs: run-workflow1-tests: runs-on: ubuntu-latest container: - image: docker://nrel/openstudio:3.7.0-rc2 + image: docker://nrel/openstudio:3.7.0-rc3 steps: - uses: actions/checkout@v3 with: @@ -86,7 +86,7 @@ jobs: run-workflow2-tests: runs-on: ubuntu-latest container: - image: docker://nrel/openstudio:3.7.0-rc2 + image: docker://nrel/openstudio:3.7.0-rc3 steps: - uses: actions/checkout@v3 with: @@ -115,8 +115,8 @@ jobs: - name: Install software and run test shell: pwsh run: | - $env:OS_VERSION="3.7.0-rc2" - $env:OS_SHA="c0cbe73b51" + $env:OS_VERSION="3.7.0-rc3" + $env:OS_SHA="c5eaca971b" Invoke-WebRequest -OutFile Windows.tar.gz -URI "https://github.com/NREL/OpenStudio/releases/download/v${env:OS_VERSION}/OpenStudio-${env:OS_VERSION}+${env:OS_SHA}-Windows.tar.gz" tar -xzf Windows.tar.gz & .\OpenStudio-${env:OS_VERSION}+${env:OS_SHA}-Windows\bin\openstudio.exe workflow\run_simulation.rb -x workflow\sample_files\base.xml --hourly ALL --add-component-loads --add-stochastic-schedules diff --git a/ReportUtilityBills/tests/test_report_utility_bills.rb b/ReportUtilityBills/tests/test_report_utility_bills.rb index 7b64b6363a..ee375ad525 100644 --- a/ReportUtilityBills/tests/test_report_utility_bills.rb +++ b/ReportUtilityBills/tests/test_report_utility_bills.rb @@ -1211,7 +1211,8 @@ def _test_measure(hpxml: nil, expected_errors: [], expected_warnings: []) # Run OSW command = "#{OpenStudio.getOpenStudioCLI} run -w #{osw_path}" - cli_output = `#{command}` + success = system(command) + assert(success) # Cleanup File.delete(osw_path) @@ -1220,15 +1221,12 @@ def _test_measure(hpxml: nil, expected_errors: [], expected_warnings: []) bills_monthly_csv = File.join(File.dirname(template_osw), 'run', 'results_bills_monthly.csv') # Check warnings/errors - if not expected_errors.empty? - expected_errors.each do |expected_error| - assert(cli_output.include?("ERROR] #{expected_error}")) - end + log_lines = File.readlines(File.join(File.dirname(template_osw), 'run', 'run.log')).map(&:strip) + expected_errors.each do |expected_error| + assert(log_lines.any? { |line| line.include?(' ERROR]') && line.include?(expected_error) }) end - if not expected_warnings.empty? - expected_warnings.each do |expected_warning| - assert(cli_output.include?("WARN] #{expected_warning}")) - end + expected_warnings.each do |expected_warning| + assert(log_lines.any? { |line| line.include?(' WARN]') && line.include?(expected_warning) }) end if !hpxml.nil? diff --git a/tasks.rb b/tasks.rb index f6bb9cb777..ba278eeb57 100644 --- a/tasks.rb +++ b/tasks.rb @@ -2559,47 +2559,10 @@ def display_usage(command_list) # Update measures XMLs puts 'Updating measure.xmls...' - require 'oga' Dir['**/measure.xml'].each do |measure_xml| - for n_attempt in 1..5 # For some reason CLI randomly generates errors, so try multiple times - measure_dir = File.dirname(measure_xml) - command = "#{OpenStudio.getOpenStudioCLI} measure -u '#{measure_dir}'" - system(command, [:out, :err] => File::NULL) - - # Check for error - xml_doc = XMLHelper.parse_file(measure_xml) - err_val = XMLHelper.get_value(xml_doc, '/measure/error', :string) - if err_val.nil? - err_val = XMLHelper.get_value(xml_doc, '/error', :string) - end - if err_val.nil? - break # Successfully updated - else - if n_attempt == 5 - fail "#{measure_xml}: #{err_val}" # Error generated all 5 times, fail - else - # Remove error from measure XML, try again - orig_lines = File.readlines(measure_xml) - new_lines = [] - inside_error = false - orig_lines.each do |l| - if l.include? '' - inside_error = true - end - if l.include? '' - inside_error = false - next - end - next if inside_error - - new_lines << l - end - File.open(measure_xml, 'w') do |file| - file.puts new_lines - end - end - end - end + measure_dir = File.dirname(measure_xml) + command = "#{OpenStudio.getOpenStudioCLI} measure -u '#{measure_dir}'" + system(command, [:out, :err] => File::NULL) end puts 'Done.' From 56d57315544662843cdd46de72f61d684ae8fa1f Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 16 Nov 2023 21:57:34 -0800 Subject: [PATCH 4/5] Bump sha --- .github/workflows/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index d639c0bf10..f136f20ef6 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -116,7 +116,7 @@ jobs: shell: pwsh run: | $env:OS_VERSION="3.7.0-rc3" - $env:OS_SHA="c5eaca971b" + $env:OS_SHA="37087fd612" Invoke-WebRequest -OutFile Windows.tar.gz -URI "https://github.com/NREL/OpenStudio/releases/download/v${env:OS_VERSION}/OpenStudio-${env:OS_VERSION}+${env:OS_SHA}-Windows.tar.gz" tar -xzf Windows.tar.gz & .\OpenStudio-${env:OS_VERSION}+${env:OS_SHA}-Windows\bin\openstudio.exe workflow\run_simulation.rb -x workflow\sample_files\base.xml --hourly ALL --add-component-loads --add-stochastic-schedules From b5f15f7255f77bf1c86f16fb281e16d24ec5b4ae Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 17 Nov 2023 07:16:50 -0800 Subject: [PATCH 5/5] Fix updating of reporting measures --- ReportSimulationOutput/README.md | 787 +++++++++++++++++++++++++++++ ReportSimulationOutput/measure.xml | 8 +- ReportUtilityBills/README.md | 87 ++++ ReportUtilityBills/measure.xml | 6 +- tasks.rb | 3 +- 5 files changed, 883 insertions(+), 8 deletions(-) create mode 100644 ReportSimulationOutput/README.md create mode 100644 ReportUtilityBills/README.md diff --git a/ReportSimulationOutput/README.md b/ReportSimulationOutput/README.md new file mode 100644 index 0000000000..1b9c8bb26c --- /dev/null +++ b/ReportSimulationOutput/README.md @@ -0,0 +1,787 @@ + +###### (Automatically generated documentation) + +# HPXML Simulation Output Report + +## Description +Reports simulation outputs for residential HPXML-based models. + +Processes EnergyPlus simulation outputs in order to generate an annual output file and an optional timeseries output file. + +## Arguments + + +**Output Format** + +The file format of the annual (and timeseries, if requested) outputs. If 'csv_dview' is selected, the timeseries CSV file will include header rows that facilitate opening the file in the DView application. + +- **Name:** ``output_format`` +- **Type:** ``Choice`` + +- **Required:** ``false`` + +- **Choices:** `csv`, `json`, `msgpack`, `csv_dview` + +
+ +**Generate Annual Output: Total Consumptions** + +Generates annual energy consumptions for the total building. + +- **Name:** ``include_annual_total_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Fuel Consumptions** + +Generates annual energy consumptions for each fuel type. + +- **Name:** ``include_annual_fuel_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: End Use Consumptions** + +Generates annual energy consumptions for each end use. + +- **Name:** ``include_annual_end_use_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: System Use Consumptions** + +Generates annual energy consumptions for each end use of each HVAC and water heating system. + +- **Name:** ``include_annual_system_use_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Emissions** + +Generates annual emissions. Requires the appropriate HPXML inputs to be specified. + +- **Name:** ``include_annual_emissions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Emission Fuel Uses** + +Generates annual emissions for each fuel type. Requires the appropriate HPXML inputs to be specified. + +- **Name:** ``include_annual_emission_fuels`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Emission End Uses** + +Generates annual emissions for each end use. Requires the appropriate HPXML inputs to be specified. + +- **Name:** ``include_annual_emission_end_uses`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Total Loads** + +Generates annual heating, cooling, and hot water loads. + +- **Name:** ``include_annual_total_loads`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Unmet Hours** + +Generates annual unmet hours for heating and cooling. + +- **Name:** ``include_annual_unmet_hours`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Peak Fuels** + +Generates annual electricity peaks for summer/winter. + +- **Name:** ``include_annual_peak_fuels`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Peak Loads** + +Generates annual peak loads for heating/cooling. + +- **Name:** ``include_annual_peak_loads`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Component Loads** + +Generates annual heating and cooling loads disaggregated by component type. + +- **Name:** ``include_annual_component_loads`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Hot Water Uses** + +Generates annual hot water usages for each end use. + +- **Name:** ``include_annual_hot_water_uses`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: HVAC Summary** + +Generates HVAC capacities, design temperatures, and design loads. + +- **Name:** ``include_annual_hvac_summary`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Annual Output: Resilience** + +Generates annual resilience outputs. + +- **Name:** ``include_annual_resilience`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Timeseries Reporting Frequency** + +The frequency at which to report timeseries output data. Using 'none' will disable timeseries outputs. + +- **Name:** ``timeseries_frequency`` +- **Type:** ``Choice`` + +- **Required:** ``false`` + +- **Choices:** `none`, `timestep`, `hourly`, `daily`, `monthly` + +
+ +**Generate Timeseries Output: Total Consumptions** + +Generates timeseries energy consumptions for the total building. + +- **Name:** ``include_timeseries_total_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Fuel Consumptions** + +Generates timeseries energy consumptions for each fuel type. + +- **Name:** ``include_timeseries_fuel_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: End Use Consumptions** + +Generates timeseries energy consumptions for each end use. + +- **Name:** ``include_timeseries_end_use_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: System Use Consumptions** + +Generates timeseries energy consumptions for each end use of each HVAC and water heating system. + +- **Name:** ``include_timeseries_system_use_consumptions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Emissions** + +Generates timeseries emissions. Requires the appropriate HPXML inputs to be specified. + +- **Name:** ``include_timeseries_emissions`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Emission Fuel Uses** + +Generates timeseries emissions for each fuel type. Requires the appropriate HPXML inputs to be specified. + +- **Name:** ``include_timeseries_emission_fuels`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Emission End Uses** + +Generates timeseries emissions for each end use. Requires the appropriate HPXML inputs to be specified. + +- **Name:** ``include_timeseries_emission_end_uses`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Hot Water Uses** + +Generates timeseries hot water usages for each end use. + +- **Name:** ``include_timeseries_hot_water_uses`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Total Loads** + +Generates timeseries heating, cooling, and hot water loads. + +- **Name:** ``include_timeseries_total_loads`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Component Loads** + +Generates timeseries heating and cooling loads disaggregated by component type. + +- **Name:** ``include_timeseries_component_loads`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Unmet Hours** + +Generates timeseries unmet hours for heating and cooling. + +- **Name:** ``include_timeseries_unmet_hours`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Zone Temperatures** + +Generates timeseries temperatures for each thermal zone. + +- **Name:** ``include_timeseries_zone_temperatures`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Airflows** + +Generates timeseries airflows. + +- **Name:** ``include_timeseries_airflows`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Weather** + +Generates timeseries weather data. + +- **Name:** ``include_timeseries_weather`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Resilience** + +Generates timeseries resilience outputs. + +- **Name:** ``include_timeseries_resilience`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Timestamp Convention** + +Determines whether timeseries timestamps use the start-of-period or end-of-period convention. Doesn't apply if the output format is 'csv_dview'. + +- **Name:** ``timeseries_timestamp_convention`` +- **Type:** ``Choice`` + +- **Required:** ``false`` + +- **Choices:** `start`, `end` + +
+ +**Generate Timeseries Output: Number of Decimal Places** + +Allows overriding the default number of decimal places for timeseries output. Does not apply if output format is msgpack, where no rounding is performed because there is no file size penalty to storing full precision. + +- **Name:** ``timeseries_num_decimal_places`` +- **Type:** ``Integer`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Add TimeDST Column** + +Optionally add, in addition to the default local standard Time column, a local clock TimeDST column. Requires that daylight saving time is enabled. + +- **Name:** ``add_timeseries_dst_column`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: Add TimeUTC Column** + +Optionally add, in addition to the default local standard Time column, a local clock TimeUTC column. If the time zone UTC offset is not provided in the HPXML file, the time zone in the EPW header will be used. + +- **Name:** ``add_timeseries_utc_column`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Timeseries Output: EnergyPlus Output Variables** + +Optionally generates timeseries EnergyPlus output variables. If multiple output variables are desired, use a comma-separated list. Do not include key values; by default all key values will be requested. Example: "Zone People Occupant Count, Zone People Total Heating Energy" + +- **Name:** ``user_output_variables`` +- **Type:** ``String`` + +- **Required:** ``false`` + +
+ +**Annual Output File Name** + +If not provided, defaults to 'results_annual.csv' (or 'results_annual.json' or 'results_annual.msgpack'). + +- **Name:** ``annual_output_file_name`` +- **Type:** ``String`` + +- **Required:** ``false`` + +
+ +**Timeseries Output File Name** + +If not provided, defaults to 'results_timeseries.csv' (or 'results_timeseries.json' or 'results_timeseries.msgpack'). + +- **Name:** ``timeseries_output_file_name`` +- **Type:** ``String`` + +- **Required:** ``false`` + +
+ + + + + +## Outputs +All possible measure outputs are listed below. Actual outputs depend on measure argument values provided. + + +- ``energy_use_total_m_btu`` + +- ``energy_use_net_m_btu`` + +- ``fuel_use_electricity_total_m_btu`` + +- ``fuel_use_natural_gas_total_m_btu`` + +- ``fuel_use_fuel_oil_total_m_btu`` + +- ``fuel_use_propane_total_m_btu`` + +- ``fuel_use_wood_cord_total_m_btu`` + +- ``fuel_use_wood_pellets_total_m_btu`` + +- ``fuel_use_coal_total_m_btu`` + +- ``end_use_electricity_heating_m_btu`` + +- ``end_use_electricity_heating_fans_pumps_m_btu`` + +- ``end_use_electricity_heating_heat_pump_backup_m_btu`` + +- ``end_use_electricity_heating_heat_pump_backup_fans_pumps_m_btu`` + +- ``end_use_electricity_cooling_m_btu`` + +- ``end_use_electricity_cooling_fans_pumps_m_btu`` + +- ``end_use_electricity_hot_water_m_btu`` + +- ``end_use_electricity_hot_water_recirc_pump_m_btu`` + +- ``end_use_electricity_hot_water_solar_thermal_pump_m_btu`` + +- ``end_use_electricity_lighting_interior_m_btu`` + +- ``end_use_electricity_lighting_garage_m_btu`` + +- ``end_use_electricity_lighting_exterior_m_btu`` + +- ``end_use_electricity_mech_vent_m_btu`` + +- ``end_use_electricity_mech_vent_preheating_m_btu`` + +- ``end_use_electricity_mech_vent_precooling_m_btu`` + +- ``end_use_electricity_whole_house_fan_m_btu`` + +- ``end_use_electricity_refrigerator_m_btu`` + +- ``end_use_electricity_freezer_m_btu`` + +- ``end_use_electricity_dehumidifier_m_btu`` + +- ``end_use_electricity_dishwasher_m_btu`` + +- ``end_use_electricity_clothes_washer_m_btu`` + +- ``end_use_electricity_clothes_dryer_m_btu`` + +- ``end_use_electricity_range_oven_m_btu`` + +- ``end_use_electricity_ceiling_fan_m_btu`` + +- ``end_use_electricity_television_m_btu`` + +- ``end_use_electricity_plug_loads_m_btu`` + +- ``end_use_electricity_electric_vehicle_charging_m_btu`` + +- ``end_use_electricity_well_pump_m_btu`` + +- ``end_use_electricity_pool_heater_m_btu`` + +- ``end_use_electricity_pool_pump_m_btu`` + +- ``end_use_electricity_permanent_spa_heater_m_btu`` + +- ``end_use_electricity_permanent_spa_pump_m_btu`` + +- ``end_use_electricity_pv_m_btu`` + +- ``end_use_electricity_generator_m_btu`` + +- ``end_use_electricity_battery_m_btu`` + +- ``end_use_natural_gas_heating_m_btu`` + +- ``end_use_natural_gas_heating_heat_pump_backup_m_btu`` + +- ``end_use_natural_gas_hot_water_m_btu`` + +- ``end_use_natural_gas_clothes_dryer_m_btu`` + +- ``end_use_natural_gas_range_oven_m_btu`` + +- ``end_use_natural_gas_mech_vent_preheating_m_btu`` + +- ``end_use_natural_gas_pool_heater_m_btu`` + +- ``end_use_natural_gas_permanent_spa_heater_m_btu`` + +- ``end_use_natural_gas_grill_m_btu`` + +- ``end_use_natural_gas_lighting_m_btu`` + +- ``end_use_natural_gas_fireplace_m_btu`` + +- ``end_use_natural_gas_generator_m_btu`` + +- ``end_use_fuel_oil_heating_m_btu`` + +- ``end_use_fuel_oil_heating_heat_pump_backup_m_btu`` + +- ``end_use_fuel_oil_hot_water_m_btu`` + +- ``end_use_fuel_oil_clothes_dryer_m_btu`` + +- ``end_use_fuel_oil_range_oven_m_btu`` + +- ``end_use_fuel_oil_mech_vent_preheating_m_btu`` + +- ``end_use_fuel_oil_grill_m_btu`` + +- ``end_use_fuel_oil_lighting_m_btu`` + +- ``end_use_fuel_oil_fireplace_m_btu`` + +- ``end_use_fuel_oil_generator_m_btu`` + +- ``end_use_propane_heating_m_btu`` + +- ``end_use_propane_heating_heat_pump_backup_m_btu`` + +- ``end_use_propane_hot_water_m_btu`` + +- ``end_use_propane_clothes_dryer_m_btu`` + +- ``end_use_propane_range_oven_m_btu`` + +- ``end_use_propane_mech_vent_preheating_m_btu`` + +- ``end_use_propane_grill_m_btu`` + +- ``end_use_propane_lighting_m_btu`` + +- ``end_use_propane_fireplace_m_btu`` + +- ``end_use_propane_generator_m_btu`` + +- ``end_use_wood_cord_heating_m_btu`` + +- ``end_use_wood_cord_heating_heat_pump_backup_m_btu`` + +- ``end_use_wood_cord_hot_water_m_btu`` + +- ``end_use_wood_cord_clothes_dryer_m_btu`` + +- ``end_use_wood_cord_range_oven_m_btu`` + +- ``end_use_wood_cord_mech_vent_preheating_m_btu`` + +- ``end_use_wood_cord_grill_m_btu`` + +- ``end_use_wood_cord_lighting_m_btu`` + +- ``end_use_wood_cord_fireplace_m_btu`` + +- ``end_use_wood_cord_generator_m_btu`` + +- ``end_use_wood_pellets_heating_m_btu`` + +- ``end_use_wood_pellets_heating_heat_pump_backup_m_btu`` + +- ``end_use_wood_pellets_hot_water_m_btu`` + +- ``end_use_wood_pellets_clothes_dryer_m_btu`` + +- ``end_use_wood_pellets_range_oven_m_btu`` + +- ``end_use_wood_pellets_mech_vent_preheating_m_btu`` + +- ``end_use_wood_pellets_grill_m_btu`` + +- ``end_use_wood_pellets_lighting_m_btu`` + +- ``end_use_wood_pellets_fireplace_m_btu`` + +- ``end_use_wood_pellets_generator_m_btu`` + +- ``end_use_coal_heating_m_btu`` + +- ``end_use_coal_heating_heat_pump_backup_m_btu`` + +- ``end_use_coal_hot_water_m_btu`` + +- ``end_use_coal_clothes_dryer_m_btu`` + +- ``end_use_coal_range_oven_m_btu`` + +- ``end_use_coal_mech_vent_preheating_m_btu`` + +- ``end_use_coal_grill_m_btu`` + +- ``end_use_coal_lighting_m_btu`` + +- ``end_use_coal_fireplace_m_btu`` + +- ``end_use_coal_generator_m_btu`` + +- ``load_heating_delivered_m_btu`` + +- ``load_heating_heat_pump_backup_m_btu`` + +- ``load_cooling_delivered_m_btu`` + +- ``load_hot_water_delivered_m_btu`` + +- ``load_hot_water_tank_losses_m_btu`` + +- ``load_hot_water_desuperheater_m_btu`` + +- ``load_hot_water_solar_thermal_m_btu`` + +- ``unmet_hours_heating_hr`` + +- ``unmet_hours_cooling_hr`` + +- ``peak_electricity_winter_total_w`` + +- ``peak_electricity_summer_total_w`` + +- ``peak_electricity_annual_total_w`` + +- ``peak_load_heating_delivered_k_btu_hr`` + +- ``peak_load_cooling_delivered_k_btu_hr`` + +- ``component_load_heating_roofs_m_btu`` + +- ``component_load_heating_ceilings_m_btu`` + +- ``component_load_heating_walls_m_btu`` + +- ``component_load_heating_rim_joists_m_btu`` + +- ``component_load_heating_foundation_walls_m_btu`` + +- ``component_load_heating_doors_m_btu`` + +- ``component_load_heating_windows_conduction_m_btu`` + +- ``component_load_heating_windows_solar_m_btu`` + +- ``component_load_heating_skylights_conduction_m_btu`` + +- ``component_load_heating_skylights_solar_m_btu`` + +- ``component_load_heating_floors_m_btu`` + +- ``component_load_heating_slabs_m_btu`` + +- ``component_load_heating_internal_mass_m_btu`` + +- ``component_load_heating_infiltration_m_btu`` + +- ``component_load_heating_natural_ventilation_m_btu`` + +- ``component_load_heating_mechanical_ventilation_m_btu`` + +- ``component_load_heating_whole_house_fan_m_btu`` + +- ``component_load_heating_ducts_m_btu`` + +- ``component_load_heating_internal_gains_m_btu`` + +- ``component_load_heating_lighting_m_btu`` + +- ``component_load_cooling_roofs_m_btu`` + +- ``component_load_cooling_ceilings_m_btu`` + +- ``component_load_cooling_walls_m_btu`` + +- ``component_load_cooling_rim_joists_m_btu`` + +- ``component_load_cooling_foundation_walls_m_btu`` + +- ``component_load_cooling_doors_m_btu`` + +- ``component_load_cooling_windows_conduction_m_btu`` + +- ``component_load_cooling_windows_solar_m_btu`` + +- ``component_load_cooling_skylights_conduction_m_btu`` + +- ``component_load_cooling_skylights_solar_m_btu`` + +- ``component_load_cooling_floors_m_btu`` + +- ``component_load_cooling_slabs_m_btu`` + +- ``component_load_cooling_internal_mass_m_btu`` + +- ``component_load_cooling_infiltration_m_btu`` + +- ``component_load_cooling_natural_ventilation_m_btu`` + +- ``component_load_cooling_mechanical_ventilation_m_btu`` + +- ``component_load_cooling_whole_house_fan_m_btu`` + +- ``component_load_cooling_ducts_m_btu`` + +- ``component_load_cooling_internal_gains_m_btu`` + +- ``component_load_cooling_lighting_m_btu`` + +- ``hot_water_clothes_washer_gal`` + +- ``hot_water_dishwasher_gal`` + +- ``hot_water_fixtures_gal`` + +- ``hot_water_distribution_waste_gal`` + +- ``resilience_battery_hr`` + + diff --git a/ReportSimulationOutput/measure.xml b/ReportSimulationOutput/measure.xml index d3f0a25e6b..9154fd44f3 100644 --- a/ReportSimulationOutput/measure.xml +++ b/ReportSimulationOutput/measure.xml @@ -3,8 +3,8 @@ 3.1 report_simulation_output df9d170c-c21a-4130-866d-0d46b06073fd - c711b3fd-66c2-4d05-ade1-8822d5e96da3 - 2023-11-08T22:40:39Z + be0a8583-ee3d-4ba1-b96a-5670a43777ae + 2023-11-17T15:16:05Z 9BF1E6AC ReportSimulationOutput HPXML Simulation Output Report @@ -1929,13 +1929,13 @@ measure.rb rb script - 6E0C5161 + 86EC8E47
test_report_sim_output.rb rb test - CFAF52E1 + 637B509E diff --git a/ReportUtilityBills/README.md b/ReportUtilityBills/README.md new file mode 100644 index 0000000000..a0d880bb1c --- /dev/null +++ b/ReportUtilityBills/README.md @@ -0,0 +1,87 @@ + +###### (Automatically generated documentation) + +# Utility Bills Report + +## Description +Calculates and reports utility bills for residential HPXML-based models. + +Calculate electric/gas utility bills based on monthly fixed charges and marginal rates. Calculate other utility bills based on marginal rates for oil, propane, wood cord, wood pellets, and coal. User can specify PV compensation types of 'Net-Metering' or 'Feed-In Tariff', along with corresponding rates and connection fees. + +## Arguments + + +**Output Format** + +The file format of the annual (and timeseries, if requested) outputs. + +- **Name:** ``output_format`` +- **Type:** ``Choice`` + +- **Required:** ``false`` + +- **Choices:** `csv`, `json`, `msgpack` + +
+ +**Generate Annual Utility Bills** + +Generates annual utility bills. + +- **Name:** ``include_annual_bills`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Monthly Utility Bills** + +Generates monthly utility bills. + +- **Name:** ``include_monthly_bills`` +- **Type:** ``Boolean`` + +- **Required:** ``false`` + +
+ +**Generate Monthly Output: Timestamp Convention** + +Determines whether monthly timestamps use the start-of-period or end-of-period convention. + +- **Name:** ``monthly_timestamp_convention`` +- **Type:** ``Choice`` + +- **Required:** ``false`` + +- **Choices:** `start`, `end` + +
+ +**Annual Output File Name** + +If not provided, defaults to 'results_bills.csv' (or 'results_bills.json' or 'results_bills.msgpack'). + +- **Name:** ``annual_output_file_name`` +- **Type:** ``String`` + +- **Required:** ``false`` + +
+ +**Monthly Output File Name** + +If not provided, defaults to 'results_bills_monthly.csv' (or 'results_bills_monthly.json' or 'results_bills_monthly.msgpack'). + +- **Name:** ``monthly_output_file_name`` +- **Type:** ``String`` + +- **Required:** ``false`` + +
+ + + + + diff --git a/ReportUtilityBills/measure.xml b/ReportUtilityBills/measure.xml index a2e8953b69..2f5cff8ec0 100644 --- a/ReportUtilityBills/measure.xml +++ b/ReportUtilityBills/measure.xml @@ -3,8 +3,8 @@ 3.1 report_utility_bills ca88a425-e59a-4bc4-af51-c7e7d1e960fe - f0cf0ead-74b8-477b-943f-b6ebdd45a11d - 2023-11-08T22:40:40Z + 00195856-fc00-4476-b601-ab53286b33cf + 2023-11-17T15:16:06Z 15BF4E57 ReportUtilityBills Utility Bills Report @@ -322,7 +322,7 @@ test_report_utility_bills.rb rb test - 217F2392 + 07F2D0DB diff --git a/tasks.rb b/tasks.rb index ba278eeb57..8eaa184e60 100644 --- a/tasks.rb +++ b/tasks.rb @@ -2561,7 +2561,8 @@ def display_usage(command_list) puts 'Updating measure.xmls...' Dir['**/measure.xml'].each do |measure_xml| measure_dir = File.dirname(measure_xml) - command = "#{OpenStudio.getOpenStudioCLI} measure -u '#{measure_dir}'" + # Using classic to work around https://github.com/NREL/OpenStudio/issues/5045 + command = "#{OpenStudio.getOpenStudioCLI} classic measure -u '#{measure_dir}'" system(command, [:out, :err] => File::NULL) end