Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Latest OS-HPXML #1347

Draft
wants to merge 7 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ jobs:

- name: Run buildstockbatch
run: |
pip install git+https://github.com/NREL/buildstockbatch.git@develop
pip install git+https://github.com/NREL/buildstockbatch.git@output-meters

buildstock_local project_national/national_baseline.yml
buildstock_local project_testing/testing_baseline.yml
Expand Down
2 changes: 1 addition & 1 deletion project_national/national_baseline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ sampler:
workflow_generator:
# ResStock HPXML workflow generator
type: residential_hpxml
version: 2025.01.29
version: 2025.02.05
args:
# Annual simulation and timestep
build_existing_model:
Expand Down
2 changes: 1 addition & 1 deletion project_national/sdr_upgrades_tmy3.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ postprocessing:
workflow_generator:
# ResStock HPXML workflow generator
type: residential_hpxml
version: 2025.01.29
version: 2025.02.05

args:
# Annual simulation and timestep
Expand Down
4 changes: 3 additions & 1 deletion project_testing/testing_baseline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ sampler:
workflow_generator:
# ResStock HPXML workflow generator
type: residential_hpxml
version: 2025.01.29
version: 2025.02.05
args:
# Annual simulation and timestep
build_existing_model:
Expand Down Expand Up @@ -122,6 +122,8 @@ workflow_generator:
timeseries_num_decimal_places: 4
output_variables:
- name: Zone People Occupant Count
output_meters:
- name: Electricity:Facility
include_monthly_bills: true

# Other reporting measures to run
Expand Down
2 changes: 1 addition & 1 deletion resources/buildstock.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
module Version
ResStock_Version = '3.4.0' # Version of ResStock
BuildStockBatch_Version = '2023.10.0' # Minimum required version of BuildStockBatch
WorkflowGenerator_Version = '2025.01.29' # Version of buildstockbatch workflow generator
WorkflowGenerator_Version = '2025.02.05' # Version of buildstockbatch workflow generator

def self.check_buildstockbatch_version
if ENV.keys.include?('BUILDSTOCKBATCH_VERSION') # buildstockbatch is installed
Expand Down
3 changes: 2 additions & 1 deletion resources/data/dictionary/inputs.csv
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,8 @@ report_simulation_output.timeseries_timestamp_convention,Determines whether time
report_simulation_output.timeseries_num_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."
report_simulation_output.add_timeseries_dst_column,"Optionally add, in addition to the default local standard Time column, a local clock TimeDST column. Requires that daylight saving time is enabled."
report_simulation_output.add_timeseries_utc_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."
report_simulation_output.user_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"""
report_simulation_output.user_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""
report_simulation_output.user_output_variables,"Optionally generates timeseries EnergyPlus output meters. If multiple output meters are desired, use a comma-separated list. Example: "Electricity:Facility, HeatingCoils:EnergyTransfer""
report_utility_bills.applicable,The measure was applied to the workflow.
report_utility_bills.output_format,"The file format of the annual (and timeseries, if requested) outputs."
report_utility_bills.include_annual_bills,Generates output file containing annual utility bills.
Expand Down
37 changes: 19 additions & 18 deletions resources/data/dictionary/outputs.csv
Original file line number Diff line number Diff line change
Expand Up @@ -489,21 +489,22 @@ Row Index,Sums To,Annual Name,Annual Units,Timeseries ResStock Name,Timeseries B
488,,,,Weather: Wind Speed,weather__wind_speed__mph,mph,"Weather file data including outdoor temperatures, relative humidity, wind speed, and solar."
489,,,,Weather: Diffuse Solar Radiation,weather__diffuse_solar_radiation__btu/(hr*ft^2),Btu/(hr*ft^2),"Weather file data including outdoor temperatures, relative humidity, wind speed, and solar."
490,,,,Weather: Direct Solar Radiation,weather__direct_solar_radiation__btu/(hr*ft^2),Btu/(hr*ft^2),"Weather file data including outdoor temperatures, relative humidity, wind speed, and solar."
491,,,,Zone People Occupant Count: Conditioned Space,zone_people_occupant_count__conditioned_space,,User-requested EnergyPlus output variable.
492,,,,,schedules_ceiling_fan,frac,Ceiling fan energy use schedule.
493,,,,,schedules_clothes_dryer,frac,Clothes dryer energy use schedule.
494,,,,,schedules_clothes_washer,frac,Clothes washer energy use schedule.
495,,,,,schedules_cooking_range,frac,Cooking range & oven energy use schedule.
496,,,,,schedules_dishwasher,frac,Dishwasher energy use schedule.
497,,,,,schedules_hot_water_clothes_washer,frac,Clothes washer hot water use schedule.
498,,,,,schedules_hot_water_dishwasher,frac,Dishwasher hot water use schedule.
499,,,,,schedules_hot_water_fixtures,frac,"Fixtures (sinks, showers, baths) hot water use schedule."
500,,,,,schedules_lighting_garage,frac,Garage lighting energy use schedule.
501,,,,,schedules_lighting_interior,frac,Interior lighting energy use schedule.
502,,,,,schedules_no_space_cooling,,Unavailable period.
503,,,,,schedules_no_space_heating,,Unavailable period.
504,,,,,schedules_occupants,frac,Occupant heat gain schedule.
505,,,,,schedules_plug_loads_other,frac,Other plug load energy use schedule.
506,,,,,schedules_plug_loads_tv,frac,Television plug load energy use schedule.
507,,,,,schedules_power_outage,,Unavailable period.
508,,,,,schedules_vacancy,,Unavailable period.
491,,,,Zone People Occupant Count: Conditioned Space,zone_people_occupant_count__conditioned_space,,"Any user-specified EnergyPlus output variables/meters (e.g., "Zone People Occupant Count", "MainsWater:Facility")."
492,,,,Electricity:Facility,electricity_facility__j,J,"Any user-specified EnergyPlus output variables/meters (e.g., "Zone People Occupant Count", "MainsWater:Facility")."
493,,,,,schedules_ceiling_fan,frac,Ceiling fan energy use schedule.
494,,,,,schedules_clothes_dryer,frac,Clothes dryer energy use schedule.
495,,,,,schedules_clothes_washer,frac,Clothes washer energy use schedule.
496,,,,,schedules_cooking_range,frac,Cooking range & oven energy use schedule.
497,,,,,schedules_dishwasher,frac,Dishwasher energy use schedule.
498,,,,,schedules_hot_water_clothes_washer,frac,Clothes washer hot water use schedule.
499,,,,,schedules_hot_water_dishwasher,frac,Dishwasher hot water use schedule.
500,,,,,schedules_hot_water_fixtures,frac,"Fixtures (sinks, showers, baths) hot water use schedule."
501,,,,,schedules_lighting_garage,frac,Garage lighting energy use schedule.
502,,,,,schedules_lighting_interior,frac,Interior lighting energy use schedule.
503,,,,,schedules_no_space_cooling,,Unavailable period.
504,,,,,schedules_no_space_heating,,Unavailable period.
505,,,,,schedules_occupants,frac,Occupant heat gain schedule.
506,,,,,schedules_plug_loads_other,frac,Other plug load energy use schedule.
507,,,,,schedules_plug_loads_tv,frac,Television plug load energy use schedule.
508,,,,,schedules_power_outage,,Unavailable period.
509,,,,,schedules_vacancy,,Unavailable period.
1 change: 1 addition & 0 deletions resources/hpxml-measures/Changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
## OpenStudio-HPXML v1.10.0

__New Features__
- Allows requesting timeseries EnergyPlus output meters (e.g., `--hourly "MainsWater:Facility"`), similar to requesting EnergyPlus output variables.

__Bugfixes__
- Fixes zero occupants specified for one unit in a whole MF building from being treated like zero occupants for every unit.
Expand Down
12 changes: 8 additions & 4 deletions resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -396,11 +396,15 @@ def init(model, hpxml_bldg, hpxml_header)
hpxml_bldg.delete_adiabatic_subsurfaces() # EnergyPlus doesn't allow this

# Hidden feature: Version of the ANSI/RESNET/ICC 301 Standard to use for equations/assumptions
if hpxml_header.eri_calculation_version.nil?
hpxml_header.eri_calculation_version = 'latest'
if hpxml_header.eri_calculation_versions.size > 1
fail 'Only a single ERI version is supported.'
end
if hpxml_header.eri_calculation_version == 'latest'
hpxml_header.eri_calculation_version = Constants::ERIVersions[-1]

if hpxml_header.eri_calculation_versions.empty?
hpxml_header.eri_calculation_versions = ['latest']
end
if hpxml_header.eri_calculation_versions == ['latest']
hpxml_header.eri_calculation_versions = [Constants::ERIVersions[-1]]
end

# Hidden feature: Whether to override certain assumptions to better match the ASHRAE 140 specification
Expand Down
20 changes: 10 additions & 10 deletions resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>hpxm_lto_openstudio</name>
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
<version_id>ddf8813a-f35c-400b-890b-d26121d86506</version_id>
<version_modified>2025-01-17T00:21:50Z</version_modified>
<version_id>bd5c3b3f-ccda-4dd5-b16a-1b4f7a4d69e4</version_id>
<version_modified>2025-02-03T19:22:20Z</version_modified>
<xml_checksum>D8922A73</xml_checksum>
<class_name>HPXMLtoOpenStudio</class_name>
<display_name>HPXML to OpenStudio Translator</display_name>
Expand Down Expand Up @@ -183,13 +183,13 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>28965567</checksum>
<checksum>1EEA4B7B</checksum>
</file>
<file>
<filename>airflow.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>29D991BE</checksum>
<checksum>23B7B4AC</checksum>
</file>
<file>
<filename>battery.rb</filename>
Expand Down Expand Up @@ -327,7 +327,7 @@
<filename>defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>EB4D5A1A</checksum>
<checksum>CF7C5504</checksum>
</file>
<file>
<filename>energyplus.rb</filename>
Expand All @@ -351,13 +351,13 @@
<filename>hotwater_appliances.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>0B205523</checksum>
<checksum>FA4DA1B3</checksum>
</file>
<file>
<filename>hpxml.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>270F2EEB</checksum>
<checksum>89899516</checksum>
</file>
<file>
<filename>hpxml_schema/HPXML.xsd</filename>
Expand Down Expand Up @@ -405,7 +405,7 @@
<filename>lighting.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>7B7F6D4C</checksum>
<checksum>74899E6B</checksum>
</file>
<file>
<filename>location.rb</filename>
Expand Down Expand Up @@ -633,7 +633,7 @@
<filename>waterheater.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>ECEBF85F</checksum>
<checksum>A8560A5A</checksum>
</file>
<file>
<filename>weather.rb</filename>
Expand Down Expand Up @@ -669,7 +669,7 @@
<filename>test_defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>7E9FC2FA</checksum>
<checksum>45AEFA27</checksum>
</file>
<file>
<filename>test_enclosure.rb</filename>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -550,8 +550,8 @@ def self.apply_natural_ventilation_and_whole_house_fan(runner, model, spaces, hp
vent_program.addLine("Set Tnvsp = (#{htg_sp_sensor.name} + #{clg_sp_sensor.name}) / 2")
else
# No HVAC system; use the average of defaulted heating/cooling setpoints.
htg_weekday_setpoints, htg_weekend_setpoints = Defaults.get_heating_setpoint(HPXML::HVACControlTypeManual, hpxml_header.eri_calculation_version)
clg_weekday_setpoints, clg_weekend_setpoints = Defaults.get_cooling_setpoint(HPXML::HVACControlTypeManual, hpxml_header.eri_calculation_version)
htg_weekday_setpoints, htg_weekend_setpoints = Defaults.get_heating_setpoint(HPXML::HVACControlTypeManual, hpxml_header.eri_calculation_versions[0])
clg_weekday_setpoints, clg_weekend_setpoints = Defaults.get_cooling_setpoint(HPXML::HVACControlTypeManual, hpxml_header.eri_calculation_versions[0])
if htg_weekday_setpoints.split(', ').uniq.size == 1 && htg_weekend_setpoints.split(', ').uniq.size == 1 && htg_weekday_setpoints.split(', ').uniq == htg_weekend_setpoints.split(', ').uniq
default_htg_sp = UnitConversions.convert(htg_weekend_setpoints.split(', ').uniq[0].to_f, 'F', 'C')
else
Expand Down Expand Up @@ -2391,14 +2391,14 @@ def self.apply_infiltration_adjustment_to_conditioned(runner, model, spaces, hpx
infil_program.addLine('Set Qfan_with_ducts = (@Max Qexhaust Qsupply)')

# Total combined air exchange
if Constants::ERIVersions.index(hpxml_header.eri_calculation_version) >= Constants::ERIVersions.index('2022')
if Constants::ERIVersions.index(hpxml_header.eri_calculation_versions[0]) >= Constants::ERIVersions.index('2022')
infil_program.addLine('Set Qimb = (@Abs (Qsupply - Qexhaust))')
infil_program.addLine('If Qinf + Qimb > 0')
infil_program.addLine(' Set Qtot = Qfan_with_ducts + (Qinf^2) / (Qinf + Qimb)')
infil_program.addLine('Else')
infil_program.addLine(' Set Qtot = Qfan_with_ducts')
infil_program.addLine('EndIf')
elsif Constants::ERIVersions.index(hpxml_header.eri_calculation_version) >= Constants::ERIVersions.index('2019')
elsif Constants::ERIVersions.index(hpxml_header.eri_calculation_versions[0]) >= Constants::ERIVersions.index('2019')
# Follow ASHRAE 62.2-2016, Normative Appendix C equations for time-varying total airflow
infil_program.addLine('If Qfan_with_ducts > 0')
# Balanced system if the total supply airflow and total exhaust airflow are within 10% of their average.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ module Defaults
# @param convert_shared_systems [Boolean] Whether to convert shared systems to equivalent in-unit systems per ANSI/RESNET/ICC 301
# @return [Array<Hash, Hash>] Maps of HPXML::Zones => DesignLoadValues object, HPXML::Spaces => DesignLoadValues object
def self.apply(runner, hpxml, hpxml_bldg, weather, schedules_file: nil, convert_shared_systems: true)
eri_version = hpxml.header.eri_calculation_version
if eri_version.nil?
if hpxml.header.eri_calculation_versions.nil? || hpxml.header.eri_calculation_versions.empty?
eri_version = 'latest'
else
eri_version = hpxml.header.eri_calculation_versions[0]
end
if eri_version == 'latest'
eri_version = Constants::ERIVersions[-1]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def self.apply(runner, model, weather, spaces, hpxml_bldg, hpxml_header, schedul
nbeds = hpxml_bldg.building_construction.number_of_bedrooms
n_occ = hpxml_bldg.building_occupancy.number_of_residents
unit_type = hpxml_bldg.building_construction.residential_facility_type
eri_version = hpxml_header.eri_calculation_version
eri_version = hpxml_header.eri_calculation_versions[0]
unit_multiplier = hpxml_bldg.building_construction.number_of_units

# Get appliances, etc.
Expand Down
Loading
Loading