urbanopt-cli 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -1
- data/CMakeLists.txt +8 -8
- data/LICENSE.md +11 -1
- data/Rakefile +16 -6
- data/example_files/example_project_combined.json +100 -5
- data/example_files/mappers/Baseline.rb +31 -18
- data/example_files/mappers/CreateBar.rb +16 -6
- data/example_files/mappers/EvCharging.rb +20 -10
- data/example_files/mappers/Floorspace.rb +16 -6
- data/example_files/mappers/HighEfficiencyCreateBar.rb +16 -6
- data/example_files/mappers/HighEfficiencyFloorspace.rb +16 -6
- data/example_files/mappers/ThermalStorage.rb +16 -6
- data/example_files/measures/BuildResidentialModel/measure.rb +211 -129
- data/example_files/residential/clothes_dryer.tsv +7 -7
- data/example_files/residential/clothes_washer.tsv +1 -1
- data/example_files/residential/cooling_system.tsv +42 -22
- data/example_files/residential/dishwasher.tsv +1 -1
- data/example_files/residential/exhaust.tsv +3 -0
- data/example_files/residential/heat_pump.tsv +62 -40
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +1 -0
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +23 -0
- data/example_files/resources/hpxml-measures/.gitignore +1 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +633 -1188
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +1524 -1211
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +424 -335
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules.rb +104 -62
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +613 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-50percent.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +36 -60
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +32 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +32 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +31 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +32 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +32 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +31 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-plug-loads-additional-multipliers.osw → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw} +36 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +338 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +340 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +32 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +32 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +32 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +32 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +31 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +40 -64
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +44 -68
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +39 -65
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +32 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +29 -53
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +29 -53
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +29 -53
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +30 -54
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-vacancy-6-months.osw → base-schedules-stochastic-vacant.osw} +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +57 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +341 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +339 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +336 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-fireplace.osw → extra-second-heating-system-fireplace-to-heating-system.osw} +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{extra-second-heating-system-portable-heater.osw → extra-second-heating-system-portable-heater-to-heating-system.osw} +32 -56
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +34 -58
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/{multipliers-without-plug-loads.osw → multipliers-without-tv-plug-loads.osw} +35 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +33 -57
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +31 -55
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +337 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +8761 -0
- data/example_files/resources/hpxml-measures/Changelog.md +238 -0
- data/example_files/resources/hpxml-measures/Gemfile +4 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +265 -838
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +135 -114
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +5 -97
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +573 -193
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +2 -28
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +114 -22
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +107 -176
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +12 -180
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +481 -94
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +2 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +23 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +27 -25
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +735 -453
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +417 -105
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1377 -1335
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +1393 -1467
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +2 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +20 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +64 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +2 -22
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +1 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +15 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +7 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +2 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +3 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +31 -30
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +4 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_constructions.rb +62 -16
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +507 -628
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +3 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +4 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +321 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +3 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +3 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +3 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +3 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +25 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +3 -0
- data/example_files/resources/hpxml-measures/README.md +4 -4
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +111 -37
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.xml +318 -490
- data/example_files/resources/hpxml-measures/SimulationOutputReport/tests/output_report_test.rb +237 -183
- data/example_files/resources/hpxml-measures/docs/source/conf.py +4 -1
- data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +2 -2
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +3 -105
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +476 -351
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +154 -130
- data/example_files/resources/hpxml-measures/tasks.rb +1287 -511
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_HI_Honolulu.Intl.AP.911820_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_MT_Helena.Rgnl.AP.727720_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/USA_OR_Portland.Intl.AP.726980_TMY3.epw +8768 -0
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +23 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-50percent.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +534 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +20 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +27 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +27 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +20 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +20 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +22 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +20 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +2 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +14 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +563 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +6 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +600 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2474 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-enclosure-windows-interior-shading.xml → base-enclosure-windows-shading.xml} +576 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +643 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +555 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +561 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +552 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +557 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-1-speed.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml} +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-2-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-2-speed.xml} +556 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml} +559 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-air-to-air-heat-pump-var-speed-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed.xml} +556 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-elec-only-autosize.xml → base-hvac-autosize-boiler-elec-only.xml} +517 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-central-ac-1-speed-autosize.xml → base-hvac-autosize-boiler-gas-central-ac-1-speed.xml} +568 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-boiler-gas-only-autosize.xml → base-hvac-autosize-boiler-gas-only.xml} +518 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-1-speed-autosize.xml → base-hvac-autosize-central-ac-only-1-speed.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-2-speed-autosize.xml → base-hvac-autosize-central-ac-only-2-speed.xml} +546 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-only-var-speed-autosize.xml → base-hvac-autosize-central-ac-only-var-speed.xml} +546 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-central-ac-plus-air-to-air-heat-pump-heating-autosize.xml → base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml} +1 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-autosize.xml → base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-dual-fuel-mini-split-heat-pump-ducted-autosize.xml → base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-elec-resistance-only-autosize.xml → base-hvac-autosize-elec-resistance-only.xml} +508 -509
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-evap-cooler-furnace-gas-autosize.xml → base-hvac-autosize-evap-cooler-furnace-gas.xml} +552 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-floor-furnace-propane-only-autosize.xml → base-hvac-autosize-floor-furnace-propane-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-elec-only-autosize.xml → base-hvac-autosize-furnace-elec-only.xml} +546 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-2-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-2-speed.xml} +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-central-ac-var-speed-autosize.xml → base-hvac-autosize-furnace-gas-central-ac-var-speed.xml} +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +547 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-room-ac-autosize.xml → base-hvac-autosize-furnace-gas-room-ac.xml} +557 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +554 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +559 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml} +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-ground-to-air-heat-pump-autosize.xml → base-hvac-autosize-ground-to-air-heat-pump.xml} +558 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +546 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-cooling-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-heating-only-autosize.xml → base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize-manual-s-oversize-allowances.xml → base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml} +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +556 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-room-ac-only-autosize.xml → base-hvac-autosize-room-ac-only.xml} +507 -508
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-stove-oil-only-autosize.xml → base-hvac-autosize-stove-oil-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-wall-furnace-elec-only-autosize.xml → base-hvac-autosize-wall-furnace-elec-only.xml} +511 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-autosize.xml → base-hvac-autosize.xml} +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +1 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +1 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +10 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +563 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +547 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +547 -550
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +556 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +561 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/slab-zero-exposed-perimeter.xml → base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml} +567 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/heat-pump-mixed-fixed-and-autosize-capacities2.xml → base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml} +565 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml +566 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-misc-shelter-coefficient.xml → base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml} +570 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml +571 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml +571 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-furnace-gas-only-autosize.xml → base-hvac-install-quality-all-furnace-gas-only.xml} +551 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-all-ground-to-air-heat-pump.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-air-conditioner-only-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml} +551 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/{hvac_autosizing/base-hvac-mini-split-heat-pump-ducted-autosize.xml → base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml} +564 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml +568 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml +565 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml +569 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +0 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +0 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +916 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple2.xml +837 -834
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +563 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +512 -513
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-detailed.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +34 -23
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +34 -23
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +516 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +516 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +576 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +10 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +2 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +1 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +5 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +9 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +5 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1654 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +563 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/boiler-invalid-afue.xml +519 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cfis-with-hydronic-distribution.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +534 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +534 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +447 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-roof-ceiling.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +11 -58
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +759 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +758 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +760 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +758 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +459 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-output-greater-than-consumption.xml +578 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +916 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +916 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-return-duct-leakage-missing.xml +2 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +916 -913
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-invalid-distribution-system-type.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +2 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-surfaces.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-foundation-wall-properties.xml +573 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id.xml +590 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +590 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +464 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +562 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +450 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-dhw-indirect.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +472 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +6 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +912 -909
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-surface.xml +12 -2
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +1654 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +1654 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ideal-air.xml → invalid_files/multiple-shared-cooling-systems.xml} +431 -498
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +434 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +1 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-solar-thermal-system.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +1 -1
- data/example_files/resources/hpxml-measures/workflow/template.osw +4 -1
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +0 -3
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +232 -360
- data/example_files/{measures/BuildResidentialModel/resources → resources}/measure-info.json +0 -0
- data/example_files/{measures/BuildResidentialModel/resources → resources}/meta_measure.rb +53 -44
- data/lib/uo_cli.rb +187 -44
- data/lib/uo_cli/version.rb +17 -7
- data/requirements.txt +2 -0
- data/uo_cli.gemspec +2 -2
- metadata +248 -64
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.rb +0 -1005
- data/example_files/measures/ResidentialGeometryCreateMultifamily/measure.xml +0 -326
- data/example_files/measures/ResidentialGeometryCreateMultifamily/tests/create_residential_multifamily_geometry_test.rb +0 -477
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.rb +0 -1039
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/measure.xml +0 -393
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyAttached/tests/create_residential_single_family_attached_geometry_test.rb +0 -456
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.rb +0 -979
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/measure.xml +0 -388
- data/example_files/measures/ResidentialGeometryCreateSingleFamilyDetached/tests/create_residential_single_family_detached_geometry_test.rb +0 -704
- data/example_files/resources/hpxml-measures/.circleci/config.yml +0 -20
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/location.rb +0 -24
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-hvac-programmable-thermostat.osw +0 -369
@@ -9,9 +9,7 @@ class Generator
|
|
9
9
|
annual_output_kwh = generator.annual_output_kwh
|
10
10
|
else
|
11
11
|
# Apportion to single dwelling unit by # bedrooms
|
12
|
-
if generator.number_of_bedrooms_served.to_f <= nbeds.to_f
|
13
|
-
fail "Shared Generator number of bedrooms served (#{generator.number_of_bedrooms_served}) must be greater than the number of bedrooms in the dwelling unit (#{nbeds})."
|
14
|
-
end
|
12
|
+
fail if generator.number_of_bedrooms_served.to_f <= nbeds.to_f # EPvalidator.xml should prevent this
|
15
13
|
annual_consumption_kbtu = generator.annual_consumption_kbtu * nbeds.to_f / generator.number_of_bedrooms_served.to_f
|
16
14
|
annual_output_kwh = generator.annual_output_kwh * nbeds.to_f / generator.number_of_bedrooms_served.to_f
|
17
15
|
end
|
@@ -19,9 +17,7 @@ class Generator
|
|
19
17
|
input_w = UnitConversions.convert(annual_consumption_kbtu, 'kBtu', 'Wh') / 8760.0
|
20
18
|
output_w = UnitConversions.convert(annual_output_kwh, 'kWh', 'Wh') / 8760.0
|
21
19
|
efficiency = output_w / input_w
|
22
|
-
if efficiency > 1.0
|
23
|
-
fail 'Generator Annual Consumption must be greater than Annual Output.'
|
24
|
-
end
|
20
|
+
fail if efficiency > 1.0 # EPvalidator.xml should prevent this
|
25
21
|
|
26
22
|
curve_biquadratic_constant = create_curve_biquadratic_constant(model)
|
27
23
|
curve_cubic_constant = create_curve_cubic_constant(model)
|
@@ -60,15 +60,6 @@ class Geometry
|
|
60
60
|
return maxzs.max - minzs.min
|
61
61
|
end
|
62
62
|
|
63
|
-
def self.get_max_z_of_spaces(spaces)
|
64
|
-
maxzs = []
|
65
|
-
spaces.each do |space|
|
66
|
-
zvalues = getSurfaceZValues(space.surfaces)
|
67
|
-
maxzs << zvalues.max + UnitConversions.convert(space.zOrigin, 'm', 'ft')
|
68
|
-
end
|
69
|
-
return maxzs.max
|
70
|
-
end
|
71
|
-
|
72
63
|
# Return an array of z values for surfaces passed in. The values will be relative to the parent origin. This was intended for spaces.
|
73
64
|
def self.getSurfaceZValues(surfaceArray)
|
74
65
|
zValueArray = []
|
@@ -137,8 +128,16 @@ class Geometry
|
|
137
128
|
end
|
138
129
|
end
|
139
130
|
|
140
|
-
def self.process_occupants(model, num_occ,
|
141
|
-
|
131
|
+
def self.process_occupants(model, num_occ, cfa, space, schedules_file)
|
132
|
+
occ_gain, hrs_per_day, sens_frac, lat_frac = Geometry.get_occupancy_default_values()
|
133
|
+
weekday_sch = Schedule.OccupantsWeekdayFractions
|
134
|
+
weekday_sch_sum = weekday_sch.split(',').map(&:to_f).sum(0.0)
|
135
|
+
if (weekday_sch_sum - hrs_per_day).abs > 0.1
|
136
|
+
fail 'Occupancy schedule inconsistent with hrs_per_day.'
|
137
|
+
end
|
138
|
+
|
139
|
+
weekend_sch = Schedule.OccupantsWeekendFractions
|
140
|
+
monthly_sch = Schedule.OccupantsMonthlyMultipliers
|
142
141
|
|
143
142
|
# Error checking
|
144
143
|
if (sens_frac < 0) || (sens_frac > 1)
|
@@ -208,4 +207,17 @@ class Geometry
|
|
208
207
|
lat_frac = lat_gains / tot_gains
|
209
208
|
return heat_gain, hrs_per_day, sens_frac, lat_frac
|
210
209
|
end
|
210
|
+
|
211
|
+
def self.tear_down_model(model, runner)
|
212
|
+
# Tear down the existing model if it exists
|
213
|
+
has_existing_objects = (model.getThermalZones.size > 0)
|
214
|
+
handles = OpenStudio::UUIDVector.new
|
215
|
+
model.objects.each do |obj|
|
216
|
+
handles << obj.handle
|
217
|
+
end
|
218
|
+
model.removeObjects(handles)
|
219
|
+
if has_existing_objects
|
220
|
+
runner.registerWarning('The model contains existing objects and is being reset.')
|
221
|
+
end
|
222
|
+
end
|
211
223
|
end
|
data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb
CHANGED
@@ -1,28 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class HotWaterAndAppliances
|
4
|
-
def self.apply(model, runner, weather,
|
5
|
-
cfa, nbeds, ncfl, has_uncond_bsmnt, clothes_washers,
|
6
|
-
clothes_dryers, dishwashers, refrigerators,
|
7
|
-
freezers, cooking_ranges, ovens, water_heating,
|
8
|
-
water_heating_systems, hot_water_distribution, water_fixtures,
|
4
|
+
def self.apply(model, runner, hpxml, weather, spaces, hot_water_distribution,
|
9
5
|
solar_thermal_system, eri_version, dhw_map, schedules_file)
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
cfa = hpxml.building_construction.conditioned_floor_area
|
8
|
+
nbeds = hpxml.building_construction.number_of_bedrooms
|
9
|
+
ncfl = hpxml.building_construction.number_of_conditioned_floors
|
10
|
+
has_uncond_bsmnt = hpxml.has_space_type(HPXML::LocationBasementUnconditioned)
|
11
|
+
fixtures_usage_multiplier = hpxml.water_heating.water_fixtures_usage_multiplier
|
12
|
+
living_space = spaces[HPXML::LocationLivingSpace]
|
13
|
+
|
14
|
+
# Get appliances, etc.
|
15
|
+
if not hpxml.clothes_washers.empty?
|
16
|
+
clothes_washer = hpxml.clothes_washers[0]
|
14
17
|
end
|
15
|
-
if not clothes_dryers.empty?
|
16
|
-
clothes_dryer = clothes_dryers[0]
|
18
|
+
if not hpxml.clothes_dryers.empty?
|
19
|
+
clothes_dryer = hpxml.clothes_dryers[0]
|
17
20
|
end
|
18
|
-
if not dishwashers.empty?
|
19
|
-
dishwasher = dishwashers[0]
|
21
|
+
if not hpxml.dishwashers.empty?
|
22
|
+
dishwasher = hpxml.dishwashers[0]
|
20
23
|
end
|
21
|
-
if not cooking_ranges.empty?
|
22
|
-
cooking_range = cooking_ranges[0]
|
24
|
+
if not hpxml.cooking_ranges.empty?
|
25
|
+
cooking_range = hpxml.cooking_ranges[0]
|
23
26
|
end
|
24
|
-
if not ovens.empty?
|
25
|
-
oven = ovens[0]
|
27
|
+
if not hpxml.ovens.empty?
|
28
|
+
oven = hpxml.ovens[0]
|
26
29
|
end
|
27
30
|
|
28
31
|
# For each water heater (plant loop):
|
@@ -106,7 +109,7 @@ class HotWaterAndAppliances
|
|
106
109
|
end
|
107
110
|
|
108
111
|
# Refrigerator(s) energy
|
109
|
-
refrigerators.each do |refrigerator|
|
112
|
+
hpxml.refrigerators.each do |refrigerator|
|
110
113
|
rf_annual_kwh, rf_frac_sens, rf_frac_lat = calc_refrigerator_or_freezer_energy(refrigerator, refrigerator.additional_properties.space.nil?)
|
111
114
|
|
112
115
|
if not schedules_file.nil?
|
@@ -127,7 +130,7 @@ class HotWaterAndAppliances
|
|
127
130
|
end
|
128
131
|
|
129
132
|
# Freezer(s) energy
|
130
|
-
freezers.each do |freezer|
|
133
|
+
hpxml.freezers.each do |freezer|
|
131
134
|
fz_annual_kwh, fz_frac_sens, fz_frac_lat = calc_refrigerator_or_freezer_energy(freezer, freezer.additional_properties.space.nil?)
|
132
135
|
|
133
136
|
if not schedules_file.nil?
|
@@ -173,7 +176,7 @@ class HotWaterAndAppliances
|
|
173
176
|
|
174
177
|
if not hot_water_distribution.nil?
|
175
178
|
fixtures_all_low_flow = true
|
176
|
-
water_fixtures.each do |water_fixture|
|
179
|
+
hpxml.water_fixtures.each do |water_fixture|
|
177
180
|
next unless [HPXML::WaterFixtureTypeShowerhead, HPXML::WaterFixtureTypeFaucet].include? water_fixture.water_fixture_type
|
178
181
|
|
179
182
|
fixtures_all_low_flow = false if not water_fixture.low_flow
|
@@ -182,7 +185,7 @@ class HotWaterAndAppliances
|
|
182
185
|
# Calculate mixed water fractions
|
183
186
|
t_mix = 105.0 # F, Temperature of mixed water at fixtures
|
184
187
|
avg_setpoint_temp = 0.0 # WH Setpoint: Weighted average by fraction DHW load served
|
185
|
-
water_heating_systems.each do |water_heating_system|
|
188
|
+
hpxml.water_heating_systems.each do |water_heating_system|
|
186
189
|
avg_setpoint_temp += water_heating_system.temperature * water_heating_system.fraction_dhw_load_served
|
187
190
|
end
|
188
191
|
daily_wh_inlet_temperatures = calc_water_heater_daily_inlet_temperatures(weather, nbeds, hot_water_distribution, fixtures_all_low_flow)
|
@@ -210,14 +213,14 @@ class HotWaterAndAppliances
|
|
210
213
|
end
|
211
214
|
end
|
212
215
|
|
213
|
-
water_heating_systems.each do |water_heating_system|
|
216
|
+
hpxml.water_heating_systems.each do |water_heating_system|
|
214
217
|
non_solar_fraction = 1.0 - Waterheater.get_water_heater_solar_fraction(water_heating_system, solar_thermal_system)
|
215
218
|
|
216
219
|
gpd_frac = water_heating_system.fraction_dhw_load_served # Fixtures fraction
|
217
220
|
if gpd_frac > 0
|
218
221
|
|
219
|
-
fx_gpd = get_fixtures_gpd(eri_version, nbeds, fixtures_all_low_flow, daily_mw_fractions,
|
220
|
-
w_gpd = get_dist_waste_gpd(eri_version, nbeds, has_uncond_bsmnt, cfa, ncfl, hot_water_distribution, fixtures_all_low_flow,
|
222
|
+
fx_gpd = get_fixtures_gpd(eri_version, nbeds, fixtures_all_low_flow, daily_mw_fractions, fixtures_usage_multiplier)
|
223
|
+
w_gpd = get_dist_waste_gpd(eri_version, nbeds, has_uncond_bsmnt, cfa, ncfl, hot_water_distribution, fixtures_all_low_flow, fixtures_usage_multiplier)
|
221
224
|
|
222
225
|
if not schedules_file.nil?
|
223
226
|
fx_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: 'fixtures', daily_water: fx_gpd)
|
@@ -435,8 +438,7 @@ class HotWaterAndAppliances
|
|
435
438
|
|
436
439
|
def self.get_clothes_dryer_default_values(eri_version, fuel_type)
|
437
440
|
if Constants.ERIVersions.index(eri_version) >= Constants.ERIVersions.index('2019A')
|
438
|
-
return { combined_energy_factor: 3.01
|
439
|
-
control_type: HPXML::ClothesDryerControlTypeTimer }
|
441
|
+
return { combined_energy_factor: 3.01 }
|
440
442
|
else
|
441
443
|
if fuel_type == HPXML::FuelTypeElectricity
|
442
444
|
return { combined_energy_factor: 2.62,
|
@@ -43,6 +43,7 @@ XMLHelper.write_file(hpxml.to_oga, "out.xml")
|
|
43
43
|
'''
|
44
44
|
|
45
45
|
require_relative 'version'
|
46
|
+
require 'ostruct'
|
46
47
|
|
47
48
|
# FUTURE: Remove all idref attributes, make object attributes instead
|
48
49
|
# E.g., in class Window, :wall_idref => :wall
|
@@ -51,20 +52,23 @@ class HPXML < Object
|
|
51
52
|
HPXML_ATTRS = [:header, :site, :neighbor_buildings, :building_occupancy, :building_construction,
|
52
53
|
:climate_and_risk_zones, :air_infiltration_measurements, :attics, :foundations,
|
53
54
|
:roofs, :rim_joists, :walls, :foundation_walls, :frame_floors, :slabs, :windows,
|
54
|
-
:skylights, :doors, :heating_systems, :cooling_systems, :heat_pumps, :
|
55
|
-
:hvac_distributions, :ventilation_fans, :water_heating_systems,
|
56
|
-
:water_fixtures, :water_heating, :solar_thermal_systems,
|
57
|
-
:
|
58
|
-
:
|
59
|
-
:plug_loads, :fuel_loads]
|
55
|
+
:skylights, :doors, :heating_systems, :cooling_systems, :heat_pumps, :hvac_plant,
|
56
|
+
:hvac_controls, :hvac_distributions, :ventilation_fans, :water_heating_systems,
|
57
|
+
:hot_water_distributions, :water_fixtures, :water_heating, :solar_thermal_systems,
|
58
|
+
:pv_systems, :generators, :clothes_washers, :clothes_dryers, :dishwashers, :refrigerators,
|
59
|
+
:freezers, :dehumidifiers, :cooking_ranges, :ovens, :lighting_groups, :lighting,
|
60
|
+
:ceiling_fans, :pools, :hot_tubs, :plug_loads, :fuel_loads]
|
60
61
|
attr_reader(*HPXML_ATTRS, :doc, :errors, :warnings)
|
61
62
|
|
62
63
|
# Constants
|
64
|
+
# FUTURE: Move some of these to within child classes (e.g., HPXML::Attic class)
|
65
|
+
AirTypeFanCoil = 'fan coil'
|
63
66
|
AtticTypeCathedral = 'CathedralCeiling'
|
64
67
|
AtticTypeConditioned = 'ConditionedAttic'
|
65
68
|
AtticTypeFlatRoof = 'FlatRoof'
|
66
69
|
AtticTypeUnvented = 'UnventedAttic'
|
67
70
|
AtticTypeVented = 'VentedAttic'
|
71
|
+
CertificationEnergyStar = 'Energy Star'
|
68
72
|
ClothesDryerControlTypeMoisture = 'moisture'
|
69
73
|
ClothesDryerControlTypeTimer = 'timer'
|
70
74
|
ColorDark = 'dark'
|
@@ -89,6 +93,7 @@ class HPXML < Object
|
|
89
93
|
DuctTypeSupply = 'supply'
|
90
94
|
DWHRFacilitiesConnectedAll = 'all'
|
91
95
|
DWHRFacilitiesConnectedOne = 'one'
|
96
|
+
ExteriorShadingTypeSolarScreens = 'solar screens'
|
92
97
|
FoundationTypeAmbient = 'Ambient'
|
93
98
|
FoundationTypeBasementConditioned = 'ConditionedBasement'
|
94
99
|
FoundationTypeBasementUnconditioned = 'UnconditionedBasement'
|
@@ -127,7 +132,6 @@ class HPXML < Object
|
|
127
132
|
HVACDistributionTypeAir = 'AirDistribution'
|
128
133
|
HVACDistributionTypeDSE = 'DSE'
|
129
134
|
HVACDistributionTypeHydronic = 'HydronicDistribution'
|
130
|
-
HVACDistributionTypeHydronicAndAir = 'HydronicAndAirDistribution'
|
131
135
|
HVACTypeBoiler = 'Boiler'
|
132
136
|
HVACTypeCentralAirConditioner = 'central air conditioner'
|
133
137
|
HVACTypeChiller = 'chiller'
|
@@ -147,12 +151,11 @@ class HPXML < Object
|
|
147
151
|
HVACTypeRoomAirConditioner = 'room air conditioner'
|
148
152
|
HVACTypeStove = 'Stove'
|
149
153
|
HVACTypeWallFurnace = 'WallFurnace'
|
150
|
-
HydronicAndAirTypeFanCoil = 'fan coil'
|
151
|
-
HydronicAndAirTypeWaterLoopHeatPump = 'water loop heat pump'
|
152
154
|
HydronicTypeBaseboard = 'baseboard'
|
153
155
|
HydronicTypeRadiantCeiling = 'radiant ceiling'
|
154
156
|
HydronicTypeRadiantFloor = 'radiant floor'
|
155
157
|
HydronicTypeRadiator = 'radiator'
|
158
|
+
HydronicTypeWaterLoop = 'water loop'
|
156
159
|
LeakinessTight = 'tight'
|
157
160
|
LeakinessAverage = 'average'
|
158
161
|
LightingTypeCFL = 'CompactFluorescent'
|
@@ -217,6 +220,9 @@ class HPXML < Object
|
|
217
220
|
RoofTypeMetal = 'metal surfacing'
|
218
221
|
RoofTypePlasticRubber = 'plastic/rubber/synthetic sheeting'
|
219
222
|
RoofTypeWoodShingles = 'wood shingles or shakes'
|
223
|
+
ShieldingExposed = 'exposed'
|
224
|
+
ShieldingNormal = 'normal'
|
225
|
+
ShieldingWellShielded = 'well-shielded'
|
220
226
|
SidingTypeAluminum = 'aluminum siding'
|
221
227
|
SidingTypeBrick = 'brick veneer'
|
222
228
|
SidingTypeFiberCement = 'fiber cement siding'
|
@@ -233,6 +239,8 @@ class HPXML < Object
|
|
233
239
|
SolarThermalTypeEvacuatedTube = 'evacuated tube'
|
234
240
|
SolarThermalTypeICS = 'integrated collector storage'
|
235
241
|
SolarThermalTypeSingleGlazing = 'single glazing black'
|
242
|
+
TypeNone = 'none'
|
243
|
+
TypeUnknown = 'unknown'
|
236
244
|
UnitsACH = 'ACH'
|
237
245
|
UnitsACHNatural = 'ACHnatural'
|
238
246
|
UnitsAFUE = 'AFUE'
|
@@ -267,6 +275,10 @@ class HPXML < Object
|
|
267
275
|
WaterHeaterTypeTankless = 'instantaneous water heater'
|
268
276
|
WaterHeaterTypeStorage = 'storage water heater'
|
269
277
|
WindowFrameTypeAluminum = 'Aluminum'
|
278
|
+
WindowFrameTypeComposite = 'Composite'
|
279
|
+
WindowFrameTypeFiberglass = 'Fiberglass'
|
280
|
+
WindowFrameTypeMetal = 'Metal'
|
281
|
+
WindowFrameTypeVinyl = 'Vinyl'
|
270
282
|
WindowFrameTypeWood = 'Wood'
|
271
283
|
WindowGasAir = 'air'
|
272
284
|
WindowGasArgon = 'argon'
|
@@ -277,7 +289,7 @@ class HPXML < Object
|
|
277
289
|
WindowLayersSinglePane = 'single-pane'
|
278
290
|
WindowLayersTriplePane = 'triple-pane'
|
279
291
|
|
280
|
-
def initialize(hpxml_path: nil, schematron_validators: [], collapse_enclosure: true)
|
292
|
+
def initialize(hpxml_path: nil, schematron_validators: [], collapse_enclosure: true, building_id: nil)
|
281
293
|
@doc = nil
|
282
294
|
@hpxml_path = hpxml_path
|
283
295
|
@errors = []
|
@@ -294,6 +306,25 @@ class HPXML < Object
|
|
294
306
|
# Validate against Schematron docs
|
295
307
|
@errors, @warnings = validate_against_schematron(schematron_validators: schematron_validators)
|
296
308
|
return unless @errors.empty?
|
309
|
+
|
310
|
+
# Handle multiple buildings
|
311
|
+
if XMLHelper.get_elements(hpxml, 'Building').size > 1
|
312
|
+
if building_id.nil?
|
313
|
+
@errors << 'Multiple Building elements defined in HPXML file; Building ID argument must be provided.'
|
314
|
+
return unless @errors.empty?
|
315
|
+
end
|
316
|
+
|
317
|
+
# Discard all Building elements except the one of interest
|
318
|
+
XMLHelper.get_elements(hpxml, 'Building').reverse_each do |building|
|
319
|
+
next if XMLHelper.get_attribute_value(XMLHelper.get_element(building, 'BuildingID'), 'id') == building_id
|
320
|
+
|
321
|
+
building.remove
|
322
|
+
end
|
323
|
+
if XMLHelper.get_elements(hpxml, 'Building').size == 0
|
324
|
+
@errors << "Could not find Building element with ID '#{building_id}'."
|
325
|
+
return unless @errors.empty?
|
326
|
+
end
|
327
|
+
end
|
297
328
|
end
|
298
329
|
|
299
330
|
# Create/populate child objects
|
@@ -516,6 +547,7 @@ class HPXML < Object
|
|
516
547
|
@heating_systems.to_oga(@doc)
|
517
548
|
@cooling_systems.to_oga(@doc)
|
518
549
|
@heat_pumps.to_oga(@doc)
|
550
|
+
@hvac_plant.to_oga(@doc)
|
519
551
|
@hvac_controls.to_oga(@doc)
|
520
552
|
@hvac_distributions.to_oga(@doc)
|
521
553
|
@ventilation_fans.to_oga(@doc)
|
@@ -566,6 +598,7 @@ class HPXML < Object
|
|
566
598
|
@heating_systems = HeatingSystems.new(self, hpxml)
|
567
599
|
@cooling_systems = CoolingSystems.new(self, hpxml)
|
568
600
|
@heat_pumps = HeatPumps.new(self, hpxml)
|
601
|
+
@hvac_plant = HVACPlant.new(self, hpxml)
|
569
602
|
@hvac_controls = HVACControls.new(self, hpxml)
|
570
603
|
@hvac_distributions = HVACDistributions.new(self, hpxml)
|
571
604
|
@ventilation_fans = VentilationFans.new(self, hpxml)
|
@@ -856,20 +889,20 @@ class HPXML < Object
|
|
856
889
|
@software_program_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/SoftwareProgramVersion', :string)
|
857
890
|
@eri_calculation_version = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ERICalculation/Version', :string)
|
858
891
|
@eri_design = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ERICalculation/Design', :string)
|
859
|
-
@timestep
|
860
|
-
@sim_begin_month
|
861
|
-
@sim_begin_day
|
862
|
-
@sim_end_month
|
863
|
-
@sim_end_day
|
864
|
-
@sim_calendar_year
|
865
|
-
@dst_enabled
|
866
|
-
@dst_begin_month
|
867
|
-
@dst_begin_day
|
868
|
-
@dst_end_month
|
869
|
-
@dst_end_day
|
892
|
+
@timestep = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/Timestep', :integer)
|
893
|
+
@sim_begin_month = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/BeginMonth', :integer)
|
894
|
+
@sim_begin_day = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/BeginDayOfMonth', :integer)
|
895
|
+
@sim_end_month = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/EndMonth', :integer)
|
896
|
+
@sim_end_day = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/EndDayOfMonth', :integer)
|
897
|
+
@sim_calendar_year = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/CalendarYear', :integer)
|
898
|
+
@dst_enabled = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/DaylightSaving/Enabled', :boolean)
|
899
|
+
@dst_begin_month = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/DaylightSaving/BeginMonth', :integer)
|
900
|
+
@dst_begin_day = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/DaylightSaving/BeginDayOfMonth', :integer)
|
901
|
+
@dst_end_month = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/DaylightSaving/EndMonth', :integer)
|
902
|
+
@dst_end_day = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SimulationControl/DaylightSaving/EndDayOfMonth', :integer)
|
870
903
|
@apply_ashrae140_assumptions = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ApplyASHRAE140Assumptions', :boolean)
|
871
|
-
@use_max_load_for_heat_pumps
|
872
|
-
@allow_increased_fixed_capacities
|
904
|
+
@use_max_load_for_heat_pumps = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/UseMaxLoadForHeatPumps', :boolean)
|
905
|
+
@allow_increased_fixed_capacities = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/AllowIncreasedFixedCapacities', :boolean)
|
873
906
|
@schedules_path = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/OccupancySchedulesCSVPath', :string)
|
874
907
|
@building_id = HPXML::get_id(hpxml, 'Building/BuildingID')
|
875
908
|
@event_type = XMLHelper.get_value(hpxml, 'Building/ProjectStatus/EventType', :string)
|
@@ -878,7 +911,7 @@ class HPXML < Object
|
|
878
911
|
end
|
879
912
|
|
880
913
|
class Site < BaseElement
|
881
|
-
ATTRS = [:site_type, :surroundings, :
|
914
|
+
ATTRS = [:site_type, :surroundings, :shielding_of_home, :orientation_of_front_of_home, :fuels]
|
882
915
|
attr_accessor(*ATTRS)
|
883
916
|
|
884
917
|
def check_for_errors
|
@@ -892,6 +925,7 @@ class HPXML < Object
|
|
892
925
|
site = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'BuildingSummary', 'Site'])
|
893
926
|
XMLHelper.add_element(site, 'SiteType', @site_type, :string, @site_type_isdefaulted) unless @site_type.nil?
|
894
927
|
XMLHelper.add_element(site, 'Surroundings', @surroundings, :string) unless @surroundings.nil?
|
928
|
+
XMLHelper.add_element(site, 'ShieldingofHome', @shielding_of_home, :string, @shielding_of_home_isdefaulted) unless @shielding_of_home.nil?
|
895
929
|
XMLHelper.add_element(site, 'OrientationOfFrontOfHome', @orientation_of_front_of_home, :string) unless @orientation_of_front_of_home.nil?
|
896
930
|
if (not @fuels.nil?) && (not @fuels.empty?)
|
897
931
|
fuel_types_available = XMLHelper.add_element(site, 'FuelTypesAvailable')
|
@@ -899,7 +933,6 @@ class HPXML < Object
|
|
899
933
|
XMLHelper.add_element(fuel_types_available, 'Fuel', fuel, :string)
|
900
934
|
end
|
901
935
|
end
|
902
|
-
XMLHelper.add_extension(site, 'ShelterCoefficient', @shelter_coefficient, :float, shelter_coefficient_isdefaulted) unless @shelter_coefficient.nil?
|
903
936
|
end
|
904
937
|
|
905
938
|
def from_oga(hpxml)
|
@@ -908,11 +941,11 @@ class HPXML < Object
|
|
908
941
|
site = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/BuildingSummary/Site')
|
909
942
|
return if site.nil?
|
910
943
|
|
911
|
-
@site_type
|
944
|
+
@site_type = XMLHelper.get_value(site, 'SiteType', :string)
|
912
945
|
@surroundings = XMLHelper.get_value(site, 'Surroundings', :string)
|
946
|
+
@shielding_of_home = XMLHelper.get_value(site, 'ShieldingofHome', :string)
|
913
947
|
@orientation_of_front_of_home = XMLHelper.get_value(site, 'OrientationOfFrontOfHome', :string)
|
914
948
|
@fuels = XMLHelper.get_values(site, 'FuelTypesAvailable/Fuel', :string)
|
915
|
-
@shelter_coefficient, @shelter_coefficient_isdefaulted = XMLHelper.get_value_and_defaulted(site, 'extension/ShelterCoefficient', :float)
|
916
949
|
end
|
917
950
|
end
|
918
951
|
|
@@ -980,15 +1013,15 @@ class HPXML < Object
|
|
980
1013
|
building_occupancy = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/BuildingSummary/BuildingOccupancy')
|
981
1014
|
return if building_occupancy.nil?
|
982
1015
|
|
983
|
-
@number_of_residents
|
1016
|
+
@number_of_residents = XMLHelper.get_value(building_occupancy, 'NumberofResidents', :float)
|
984
1017
|
end
|
985
1018
|
end
|
986
1019
|
|
987
1020
|
class BuildingConstruction < BaseElement
|
988
1021
|
ATTRS = [:year_built, :number_of_conditioned_floors, :number_of_conditioned_floors_above_grade,
|
989
1022
|
:average_ceiling_height, :number_of_bedrooms, :number_of_bathrooms,
|
990
|
-
:conditioned_floor_area, :conditioned_building_volume, :
|
991
|
-
:
|
1023
|
+
:conditioned_floor_area, :conditioned_building_volume, :residential_facility_type,
|
1024
|
+
:has_flue_or_chimney]
|
992
1025
|
attr_accessor(*ATTRS)
|
993
1026
|
|
994
1027
|
def check_for_errors
|
@@ -1000,6 +1033,7 @@ class HPXML < Object
|
|
1000
1033
|
return if nil?
|
1001
1034
|
|
1002
1035
|
building_construction = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'BuildingSummary', 'BuildingConstruction'])
|
1036
|
+
XMLHelper.add_element(building_construction, 'YearBuilt', @year_built, :integer) unless @year_built.nil?
|
1003
1037
|
XMLHelper.add_element(building_construction, 'ResidentialFacilityType', @residential_facility_type, :string) unless @residential_facility_type.nil?
|
1004
1038
|
XMLHelper.add_element(building_construction, 'NumberofConditionedFloors', @number_of_conditioned_floors, :float) unless @number_of_conditioned_floors.nil?
|
1005
1039
|
XMLHelper.add_element(building_construction, 'NumberofConditionedFloorsAboveGrade', @number_of_conditioned_floors_above_grade, :float) unless @number_of_conditioned_floors_above_grade.nil?
|
@@ -1008,7 +1042,6 @@ class HPXML < Object
|
|
1008
1042
|
XMLHelper.add_element(building_construction, 'NumberofBathrooms', @number_of_bathrooms, :integer, @number_of_bathrooms_isdefaulted) unless @number_of_bathrooms.nil?
|
1009
1043
|
XMLHelper.add_element(building_construction, 'ConditionedFloorArea', @conditioned_floor_area, :float) unless @conditioned_floor_area.nil?
|
1010
1044
|
XMLHelper.add_element(building_construction, 'ConditionedBuildingVolume', @conditioned_building_volume, :float, @conditioned_building_volume_isdefaulted) unless @conditioned_building_volume.nil?
|
1011
|
-
XMLHelper.add_extension(building_construction, 'UseOnlyIdealAirSystem', @use_only_ideal_air_system, :boolean) unless @use_only_ideal_air_system.nil?
|
1012
1045
|
XMLHelper.add_extension(building_construction, 'HasFlueOrChimney', @has_flue_or_chimney, :boolean, @has_flue_or_chimney_isdefaulted) unless @has_flue_or_chimney.nil?
|
1013
1046
|
end
|
1014
1047
|
|
@@ -1019,16 +1052,15 @@ class HPXML < Object
|
|
1019
1052
|
return if building_construction.nil?
|
1020
1053
|
|
1021
1054
|
@year_built = XMLHelper.get_value(building_construction, 'YearBuilt', :integer)
|
1055
|
+
@residential_facility_type = XMLHelper.get_value(building_construction, 'ResidentialFacilityType', :string)
|
1022
1056
|
@number_of_conditioned_floors = XMLHelper.get_value(building_construction, 'NumberofConditionedFloors', :float)
|
1023
1057
|
@number_of_conditioned_floors_above_grade = XMLHelper.get_value(building_construction, 'NumberofConditionedFloorsAboveGrade', :float)
|
1024
|
-
@average_ceiling_height
|
1058
|
+
@average_ceiling_height = XMLHelper.get_value(building_construction, 'AverageCeilingHeight', :float)
|
1025
1059
|
@number_of_bedrooms = XMLHelper.get_value(building_construction, 'NumberofBedrooms', :integer)
|
1026
|
-
@number_of_bathrooms
|
1060
|
+
@number_of_bathrooms = XMLHelper.get_value(building_construction, 'NumberofBathrooms', :integer)
|
1027
1061
|
@conditioned_floor_area = XMLHelper.get_value(building_construction, 'ConditionedFloorArea', :float)
|
1028
|
-
@conditioned_building_volume
|
1029
|
-
@
|
1030
|
-
@residential_facility_type = XMLHelper.get_value(building_construction, 'ResidentialFacilityType', :string)
|
1031
|
-
@has_flue_or_chimney, @has_flue_or_chimney_isdefaulted = XMLHelper.get_value_and_defaulted(building_construction, 'extension/HasFlueOrChimney', :boolean)
|
1062
|
+
@conditioned_building_volume = XMLHelper.get_value(building_construction, 'ConditionedBuildingVolume', :float)
|
1063
|
+
@has_flue_or_chimney = XMLHelper.get_value(building_construction, 'extension/HasFlueOrChimney', :boolean)
|
1032
1064
|
end
|
1033
1065
|
end
|
1034
1066
|
|
@@ -1096,7 +1128,7 @@ class HPXML < Object
|
|
1096
1128
|
end
|
1097
1129
|
|
1098
1130
|
class AirInfiltrationMeasurement < BaseElement
|
1099
|
-
ATTRS = [:id, :house_pressure, :unit_of_measure, :air_leakage, :effective_leakage_area,
|
1131
|
+
ATTRS = [:id, :house_pressure, :unit_of_measure, :air_leakage, :effective_leakage_area, :type,
|
1100
1132
|
:infiltration_volume, :leakiness_description, :infiltration_height, :a_ext]
|
1101
1133
|
attr_accessor(*ATTRS)
|
1102
1134
|
|
@@ -1112,7 +1144,9 @@ class HPXML < Object
|
|
1112
1144
|
air_infiltration_measurement = XMLHelper.add_element(air_infiltration, 'AirInfiltrationMeasurement')
|
1113
1145
|
sys_id = XMLHelper.add_element(air_infiltration_measurement, 'SystemIdentifier')
|
1114
1146
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1147
|
+
XMLHelper.add_element(air_infiltration_measurement, 'TypeOfInfiltrationMeasurement', @type, :string) unless @type.nil?
|
1115
1148
|
XMLHelper.add_element(air_infiltration_measurement, 'HousePressure', @house_pressure, :float) unless @house_pressure.nil?
|
1149
|
+
XMLHelper.add_element(air_infiltration_measurement, 'LeakinessDescription', @leakiness_description, :string) unless @leakiness_description.nil?
|
1116
1150
|
if (not @unit_of_measure.nil?) && (not @air_leakage.nil?)
|
1117
1151
|
building_air_leakage = XMLHelper.add_element(air_infiltration_measurement, 'BuildingAirLeakage')
|
1118
1152
|
XMLHelper.add_element(building_air_leakage, 'UnitofMeasure', @unit_of_measure, :string)
|
@@ -1128,12 +1162,13 @@ class HPXML < Object
|
|
1128
1162
|
return if air_infiltration_measurement.nil?
|
1129
1163
|
|
1130
1164
|
@id = HPXML::get_id(air_infiltration_measurement)
|
1165
|
+
@type = XMLHelper.get_value(air_infiltration_measurement, 'TypeOfInfiltrationMeasurement', :string)
|
1131
1166
|
@house_pressure = XMLHelper.get_value(air_infiltration_measurement, 'HousePressure', :float)
|
1167
|
+
@leakiness_description = XMLHelper.get_value(air_infiltration_measurement, 'LeakinessDescription', :string)
|
1132
1168
|
@unit_of_measure = XMLHelper.get_value(air_infiltration_measurement, 'BuildingAirLeakage/UnitofMeasure', :string)
|
1133
1169
|
@air_leakage = XMLHelper.get_value(air_infiltration_measurement, 'BuildingAirLeakage/AirLeakage', :float)
|
1134
1170
|
@effective_leakage_area = XMLHelper.get_value(air_infiltration_measurement, 'EffectiveLeakageArea', :float)
|
1135
|
-
@infiltration_volume
|
1136
|
-
@leakiness_description = XMLHelper.get_value(air_infiltration_measurement, 'LeakinessDescription', :string)
|
1171
|
+
@infiltration_volume = XMLHelper.get_value(air_infiltration_measurement, 'InfiltrationVolume', :float)
|
1137
1172
|
@infiltration_height = XMLHelper.get_value(air_infiltration_measurement, 'extension/InfiltrationHeight', :float)
|
1138
1173
|
@a_ext = XMLHelper.get_value(air_infiltration_measurement, 'extension/Aext', :float)
|
1139
1174
|
end
|
@@ -1214,12 +1249,12 @@ class HPXML < Object
|
|
1214
1249
|
sys_id = XMLHelper.add_element(attic, 'SystemIdentifier')
|
1215
1250
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1216
1251
|
if not @attic_type.nil?
|
1217
|
-
|
1252
|
+
attic_type_el = XMLHelper.add_element(attic, 'AtticType')
|
1218
1253
|
if @attic_type == AtticTypeUnvented
|
1219
|
-
attic_type_attic = XMLHelper.add_element(
|
1254
|
+
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
|
1220
1255
|
XMLHelper.add_element(attic_type_attic, 'Vented', false, :boolean)
|
1221
1256
|
elsif @attic_type == AtticTypeVented
|
1222
|
-
attic_type_attic = XMLHelper.add_element(
|
1257
|
+
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
|
1223
1258
|
XMLHelper.add_element(attic_type_attic, 'Vented', true, :boolean)
|
1224
1259
|
if not @vented_attic_sla.nil?
|
1225
1260
|
ventilation_rate = XMLHelper.add_element(attic, 'VentilationRate')
|
@@ -1231,10 +1266,10 @@ class HPXML < Object
|
|
1231
1266
|
XMLHelper.add_element(ventilation_rate, 'Value', @vented_attic_ach, :float)
|
1232
1267
|
end
|
1233
1268
|
elsif @attic_type == AtticTypeConditioned
|
1234
|
-
attic_type_attic = XMLHelper.add_element(
|
1269
|
+
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
|
1235
1270
|
XMLHelper.add_element(attic_type_attic, 'Conditioned', true, :boolean)
|
1236
1271
|
elsif (@attic_type == AtticTypeFlatRoof) || (@attic_type == AtticTypeCathedral)
|
1237
|
-
XMLHelper.add_element(
|
1272
|
+
XMLHelper.add_element(attic_type_el, @attic_type)
|
1238
1273
|
else
|
1239
1274
|
fail "Unhandled attic type '#{@attic_type}'."
|
1240
1275
|
end
|
@@ -1258,7 +1293,7 @@ class HPXML < Object
|
|
1258
1293
|
@attic_type = AtticTypeCathedral
|
1259
1294
|
end
|
1260
1295
|
if @attic_type == AtticTypeVented
|
1261
|
-
@vented_attic_sla
|
1296
|
+
@vented_attic_sla = XMLHelper.get_value(attic, "VentilationRate[UnitofMeasure='#{UnitsSLA}']/Value", :float)
|
1262
1297
|
@vented_attic_ach = XMLHelper.get_value(attic, "VentilationRate[UnitofMeasure='#{UnitsACHNatural}']/Value", :float)
|
1263
1298
|
end
|
1264
1299
|
@within_infiltration_volume = XMLHelper.get_value(attic, 'WithinInfiltrationVolume', :boolean)
|
@@ -1377,17 +1412,17 @@ class HPXML < Object
|
|
1377
1412
|
sys_id = XMLHelper.add_element(foundation, 'SystemIdentifier')
|
1378
1413
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1379
1414
|
if not @foundation_type.nil?
|
1380
|
-
|
1415
|
+
foundation_type_el = XMLHelper.add_element(foundation, 'FoundationType')
|
1381
1416
|
if [FoundationTypeSlab, FoundationTypeAmbient].include? @foundation_type
|
1382
|
-
XMLHelper.add_element(
|
1417
|
+
XMLHelper.add_element(foundation_type_el, @foundation_type)
|
1383
1418
|
elsif @foundation_type == FoundationTypeBasementConditioned
|
1384
|
-
basement = XMLHelper.add_element(
|
1419
|
+
basement = XMLHelper.add_element(foundation_type_el, 'Basement')
|
1385
1420
|
XMLHelper.add_element(basement, 'Conditioned', true, :boolean)
|
1386
1421
|
elsif @foundation_type == FoundationTypeBasementUnconditioned
|
1387
|
-
basement = XMLHelper.add_element(
|
1422
|
+
basement = XMLHelper.add_element(foundation_type_el, 'Basement')
|
1388
1423
|
XMLHelper.add_element(basement, 'Conditioned', false, :boolean)
|
1389
1424
|
elsif @foundation_type == FoundationTypeCrawlspaceVented
|
1390
|
-
crawlspace = XMLHelper.add_element(
|
1425
|
+
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
|
1391
1426
|
XMLHelper.add_element(crawlspace, 'Vented', true, :boolean)
|
1392
1427
|
if not @vented_crawlspace_sla.nil?
|
1393
1428
|
ventilation_rate = XMLHelper.add_element(foundation, 'VentilationRate')
|
@@ -1395,7 +1430,7 @@ class HPXML < Object
|
|
1395
1430
|
XMLHelper.add_element(ventilation_rate, 'Value', @vented_crawlspace_sla, :float, @vented_crawlspace_sla_isdefaulted)
|
1396
1431
|
end
|
1397
1432
|
elsif @foundation_type == FoundationTypeCrawlspaceUnvented
|
1398
|
-
crawlspace = XMLHelper.add_element(
|
1433
|
+
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
|
1399
1434
|
XMLHelper.add_element(crawlspace, 'Vented', false, :boolean)
|
1400
1435
|
else
|
1401
1436
|
fail "Unhandled foundation type '#{@foundation_type}'."
|
@@ -1422,7 +1457,7 @@ class HPXML < Object
|
|
1422
1457
|
@foundation_type = FoundationTypeAmbient
|
1423
1458
|
end
|
1424
1459
|
if @foundation_type == FoundationTypeCrawlspaceVented
|
1425
|
-
@vented_crawlspace_sla
|
1460
|
+
@vented_crawlspace_sla = XMLHelper.get_value(foundation, "VentilationRate[UnitofMeasure='#{UnitsSLA}']/Value", :float)
|
1426
1461
|
end
|
1427
1462
|
@within_infiltration_volume = XMLHelper.get_value(foundation, 'WithinInfiltrationVolume', :boolean)
|
1428
1463
|
@attached_to_slab_idrefs = []
|
@@ -1455,7 +1490,7 @@ class HPXML < Object
|
|
1455
1490
|
end
|
1456
1491
|
|
1457
1492
|
class Roof < BaseElement
|
1458
|
-
ATTRS = [:id, :interior_adjacent_to, :area, :azimuth, :roof_type,
|
1493
|
+
ATTRS = [:id, :interior_adjacent_to, :area, :azimuth, :orientation, :roof_type,
|
1459
1494
|
:roof_color, :solar_absorptance, :emittance, :pitch, :radiant_barrier,
|
1460
1495
|
:insulation_id, :insulation_assembly_r_value, :insulation_cavity_r_value,
|
1461
1496
|
:insulation_continuous_r_value, :radiant_barrier_grade]
|
@@ -1523,6 +1558,7 @@ class HPXML < Object
|
|
1523
1558
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1524
1559
|
XMLHelper.add_element(roof, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
1525
1560
|
XMLHelper.add_element(roof, 'Area', @area, :float) unless @area.nil?
|
1561
|
+
XMLHelper.add_element(roof, 'Orientation', @orientation, :string) unless @orientation.nil?
|
1526
1562
|
XMLHelper.add_element(roof, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
1527
1563
|
XMLHelper.add_element(roof, 'RoofType', @roof_type, :string, @roof_type_isdefaulted) unless @roof_type.nil?
|
1528
1564
|
XMLHelper.add_element(roof, 'RoofColor', @roof_color, :string, @roof_color_isdefaulted) unless @roof_color.nil?
|
@@ -1539,6 +1575,16 @@ class HPXML < Object
|
|
1539
1575
|
XMLHelper.add_attribute(sys_id, 'id', @id + 'Insulation')
|
1540
1576
|
end
|
1541
1577
|
XMLHelper.add_element(insulation, 'AssemblyEffectiveRValue', @insulation_assembly_r_value, :float) unless @insulation_assembly_r_value.nil?
|
1578
|
+
if not @insulation_cavity_r_value.nil?
|
1579
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
1580
|
+
XMLHelper.add_element(layer, 'InstallationType', 'cavity', :string)
|
1581
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_cavity_r_value, :float)
|
1582
|
+
end
|
1583
|
+
if not @insulation_continuous_r_value.nil?
|
1584
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
1585
|
+
XMLHelper.add_element(layer, 'InstallationType', 'continuous', :string)
|
1586
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_continuous_r_value, :float)
|
1587
|
+
end
|
1542
1588
|
end
|
1543
1589
|
|
1544
1590
|
def from_oga(roof)
|
@@ -1547,13 +1593,14 @@ class HPXML < Object
|
|
1547
1593
|
@id = HPXML::get_id(roof)
|
1548
1594
|
@interior_adjacent_to = XMLHelper.get_value(roof, 'InteriorAdjacentTo', :string)
|
1549
1595
|
@area = XMLHelper.get_value(roof, 'Area', :float)
|
1596
|
+
@orientation = XMLHelper.get_value(roof, 'Orientation', :string)
|
1550
1597
|
@azimuth = XMLHelper.get_value(roof, 'Azimuth', :integer)
|
1551
|
-
@roof_type
|
1552
|
-
@roof_color
|
1553
|
-
@solar_absorptance
|
1554
|
-
@emittance
|
1598
|
+
@roof_type = XMLHelper.get_value(roof, 'RoofType', :string)
|
1599
|
+
@roof_color = XMLHelper.get_value(roof, 'RoofColor', :string)
|
1600
|
+
@solar_absorptance = XMLHelper.get_value(roof, 'SolarAbsorptance', :float)
|
1601
|
+
@emittance = XMLHelper.get_value(roof, 'Emittance', :float)
|
1555
1602
|
@pitch = XMLHelper.get_value(roof, 'Pitch', :float)
|
1556
|
-
@radiant_barrier
|
1603
|
+
@radiant_barrier = XMLHelper.get_value(roof, 'RadiantBarrier', :boolean)
|
1557
1604
|
@radiant_barrier_grade = XMLHelper.get_value(roof, 'RadiantBarrierGrade', :integer)
|
1558
1605
|
insulation = XMLHelper.get_element(roof, 'Insulation')
|
1559
1606
|
if not insulation.nil?
|
@@ -1580,8 +1627,8 @@ class HPXML < Object
|
|
1580
1627
|
end
|
1581
1628
|
|
1582
1629
|
class RimJoist < BaseElement
|
1583
|
-
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :area, :
|
1584
|
-
:solar_absorptance, :emittance, :insulation_id, :insulation_assembly_r_value,
|
1630
|
+
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :area, :orientation, :azimuth, :siding,
|
1631
|
+
:color, :solar_absorptance, :emittance, :insulation_id, :insulation_assembly_r_value,
|
1585
1632
|
:insulation_cavity_r_value, :insulation_continuous_r_value]
|
1586
1633
|
attr_accessor(*ATTRS)
|
1587
1634
|
|
@@ -1628,6 +1675,7 @@ class HPXML < Object
|
|
1628
1675
|
XMLHelper.add_element(rim_joist, 'ExteriorAdjacentTo', @exterior_adjacent_to, :string) unless @exterior_adjacent_to.nil?
|
1629
1676
|
XMLHelper.add_element(rim_joist, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
1630
1677
|
XMLHelper.add_element(rim_joist, 'Area', @area, :float) unless @area.nil?
|
1678
|
+
XMLHelper.add_element(rim_joist, 'Orientation', @orientation, :string) unless @orientation.nil?
|
1631
1679
|
XMLHelper.add_element(rim_joist, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
1632
1680
|
XMLHelper.add_element(rim_joist, 'Siding', @siding, :string, @siding_isdefaulted) unless @siding.nil?
|
1633
1681
|
XMLHelper.add_element(rim_joist, 'Color', @color, :string, @color_isdefaulted) unless @color.nil?
|
@@ -1641,6 +1689,16 @@ class HPXML < Object
|
|
1641
1689
|
XMLHelper.add_attribute(sys_id, 'id', @id + 'Insulation')
|
1642
1690
|
end
|
1643
1691
|
XMLHelper.add_element(insulation, 'AssemblyEffectiveRValue', @insulation_assembly_r_value, :float) unless @insulation_assembly_r_value.nil?
|
1692
|
+
if not @insulation_cavity_r_value.nil?
|
1693
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
1694
|
+
XMLHelper.add_element(layer, 'InstallationType', 'cavity', :string)
|
1695
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_cavity_r_value, :float)
|
1696
|
+
end
|
1697
|
+
if not @insulation_continuous_r_value.nil?
|
1698
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
1699
|
+
XMLHelper.add_element(layer, 'InstallationType', 'continuous', :string)
|
1700
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_continuous_r_value, :float)
|
1701
|
+
end
|
1644
1702
|
end
|
1645
1703
|
|
1646
1704
|
def from_oga(rim_joist)
|
@@ -1650,11 +1708,12 @@ class HPXML < Object
|
|
1650
1708
|
@exterior_adjacent_to = XMLHelper.get_value(rim_joist, 'ExteriorAdjacentTo', :string)
|
1651
1709
|
@interior_adjacent_to = XMLHelper.get_value(rim_joist, 'InteriorAdjacentTo', :string)
|
1652
1710
|
@area = XMLHelper.get_value(rim_joist, 'Area', :float)
|
1711
|
+
@orientation = XMLHelper.get_value(rim_joist, 'Orientation', :string)
|
1653
1712
|
@azimuth = XMLHelper.get_value(rim_joist, 'Azimuth', :integer)
|
1654
|
-
@siding
|
1655
|
-
@color
|
1656
|
-
@solar_absorptance
|
1657
|
-
@emittance
|
1713
|
+
@siding = XMLHelper.get_value(rim_joist, 'Siding', :string)
|
1714
|
+
@color = XMLHelper.get_value(rim_joist, 'Color', :string)
|
1715
|
+
@solar_absorptance = XMLHelper.get_value(rim_joist, 'SolarAbsorptance', :float)
|
1716
|
+
@emittance = XMLHelper.get_value(rim_joist, 'Emittance', :float)
|
1658
1717
|
insulation = XMLHelper.get_element(rim_joist, 'Insulation')
|
1659
1718
|
if not insulation.nil?
|
1660
1719
|
@insulation_id = HPXML::get_id(insulation)
|
@@ -1756,10 +1815,14 @@ class HPXML < Object
|
|
1756
1815
|
XMLHelper.add_element(wall, 'ExteriorAdjacentTo', @exterior_adjacent_to, :string) unless @exterior_adjacent_to.nil?
|
1757
1816
|
XMLHelper.add_element(wall, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
1758
1817
|
if not @wall_type.nil?
|
1759
|
-
|
1760
|
-
XMLHelper.add_element(
|
1818
|
+
wall_type_el = XMLHelper.add_element(wall, 'WallType')
|
1819
|
+
wall_type = XMLHelper.add_element(wall_type_el, @wall_type)
|
1820
|
+
if @wall_type == HPXML::WallTypeWoodStud
|
1821
|
+
XMLHelper.add_element(wall_type, 'OptimumValueEngineering', @optimum_value_engineering, :boolean) unless @optimum_value_engineering.nil?
|
1822
|
+
end
|
1761
1823
|
end
|
1762
1824
|
XMLHelper.add_element(wall, 'Area', @area, :float) unless @area.nil?
|
1825
|
+
XMLHelper.add_element(wall, 'Orientation', @orientation, :string) unless @orientation.nil?
|
1763
1826
|
XMLHelper.add_element(wall, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
1764
1827
|
XMLHelper.add_element(wall, 'Siding', @siding, :string, @siding_isdefaulted) unless @siding.nil?
|
1765
1828
|
XMLHelper.add_element(wall, 'Color', @color, :string, @color_isdefaulted) unless @color.nil?
|
@@ -1773,6 +1836,16 @@ class HPXML < Object
|
|
1773
1836
|
XMLHelper.add_attribute(sys_id, 'id', @id + 'Insulation')
|
1774
1837
|
end
|
1775
1838
|
XMLHelper.add_element(insulation, 'AssemblyEffectiveRValue', @insulation_assembly_r_value, :float) unless @insulation_assembly_r_value.nil?
|
1839
|
+
if not @insulation_cavity_r_value.nil?
|
1840
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
1841
|
+
XMLHelper.add_element(layer, 'InstallationType', 'cavity', :string)
|
1842
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_cavity_r_value, :float)
|
1843
|
+
end
|
1844
|
+
if not @insulation_continuous_r_value.nil?
|
1845
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
1846
|
+
XMLHelper.add_element(layer, 'InstallationType', 'continuous', :string)
|
1847
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_continuous_r_value, :float)
|
1848
|
+
end
|
1776
1849
|
end
|
1777
1850
|
|
1778
1851
|
def from_oga(wall)
|
@@ -1782,14 +1855,16 @@ class HPXML < Object
|
|
1782
1855
|
@exterior_adjacent_to = XMLHelper.get_value(wall, 'ExteriorAdjacentTo', :string)
|
1783
1856
|
@interior_adjacent_to = XMLHelper.get_value(wall, 'InteriorAdjacentTo', :string)
|
1784
1857
|
@wall_type = XMLHelper.get_child_name(wall, 'WallType')
|
1785
|
-
@
|
1858
|
+
if @wall_type == HPXML::WallTypeWoodStud
|
1859
|
+
@optimum_value_engineering = XMLHelper.get_value(wall, 'WallType/WoodStud/OptimumValueEngineering', :boolean)
|
1860
|
+
end
|
1786
1861
|
@area = XMLHelper.get_value(wall, 'Area', :float)
|
1787
1862
|
@orientation = XMLHelper.get_value(wall, 'Orientation', :string)
|
1788
1863
|
@azimuth = XMLHelper.get_value(wall, 'Azimuth', :integer)
|
1789
|
-
@siding
|
1790
|
-
@color
|
1791
|
-
@solar_absorptance
|
1792
|
-
@emittance
|
1864
|
+
@siding = XMLHelper.get_value(wall, 'Siding', :string)
|
1865
|
+
@color = XMLHelper.get_value(wall, 'Color', :string)
|
1866
|
+
@solar_absorptance = XMLHelper.get_value(wall, 'SolarAbsorptance', :float)
|
1867
|
+
@emittance = XMLHelper.get_value(wall, 'Emittance', :float)
|
1793
1868
|
insulation = XMLHelper.get_element(wall, 'Insulation')
|
1794
1869
|
if not insulation.nil?
|
1795
1870
|
@insulation_id = HPXML::get_id(insulation)
|
@@ -1815,8 +1890,8 @@ class HPXML < Object
|
|
1815
1890
|
end
|
1816
1891
|
|
1817
1892
|
class FoundationWall < BaseElement
|
1818
|
-
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :height, :area, :
|
1819
|
-
:
|
1893
|
+
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :height, :area, :orientation, :azimuth,
|
1894
|
+
:thickness, :depth_below_grade, :insulation_id, :insulation_interior_r_value,
|
1820
1895
|
:insulation_interior_distance_to_top, :insulation_interior_distance_to_bottom,
|
1821
1896
|
:insulation_exterior_r_value, :insulation_exterior_distance_to_top,
|
1822
1897
|
:insulation_exterior_distance_to_bottom, :insulation_assembly_r_value,
|
@@ -1900,6 +1975,7 @@ class HPXML < Object
|
|
1900
1975
|
XMLHelper.add_element(foundation_wall, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
1901
1976
|
XMLHelper.add_element(foundation_wall, 'Height', @height, :float) unless @height.nil?
|
1902
1977
|
XMLHelper.add_element(foundation_wall, 'Area', @area, :float) unless @area.nil?
|
1978
|
+
XMLHelper.add_element(foundation_wall, 'Orientation', @orientation, :string) unless @orientation.nil?
|
1903
1979
|
XMLHelper.add_element(foundation_wall, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
1904
1980
|
XMLHelper.add_element(foundation_wall, 'Thickness', @thickness, :float, @thickness_isdefaulted) unless @thickness.nil?
|
1905
1981
|
XMLHelper.add_element(foundation_wall, 'DepthBelowGrade', @depth_below_grade, :float) unless @depth_below_grade.nil?
|
@@ -1935,21 +2011,21 @@ class HPXML < Object
|
|
1935
2011
|
@interior_adjacent_to = XMLHelper.get_value(foundation_wall, 'InteriorAdjacentTo', :string)
|
1936
2012
|
@height = XMLHelper.get_value(foundation_wall, 'Height', :float)
|
1937
2013
|
@area = XMLHelper.get_value(foundation_wall, 'Area', :float)
|
2014
|
+
@orientation = XMLHelper.get_value(foundation_wall, 'Orientation', :string)
|
1938
2015
|
@azimuth = XMLHelper.get_value(foundation_wall, 'Azimuth', :integer)
|
1939
|
-
@thickness
|
2016
|
+
@thickness = XMLHelper.get_value(foundation_wall, 'Thickness', :float)
|
1940
2017
|
@depth_below_grade = XMLHelper.get_value(foundation_wall, 'DepthBelowGrade', :float)
|
1941
2018
|
insulation = XMLHelper.get_element(foundation_wall, 'Insulation')
|
1942
2019
|
if not insulation.nil?
|
1943
2020
|
@insulation_id = HPXML::get_id(insulation)
|
1944
|
-
@
|
2021
|
+
@insulation_assembly_r_value = XMLHelper.get_value(insulation, 'AssemblyEffectiveRValue', :float)
|
2022
|
+
@insulation_continuous_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous']/NominalRValue", :float)
|
1945
2023
|
@insulation_interior_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/NominalRValue", :float)
|
1946
2024
|
@insulation_interior_distance_to_top = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/extension/DistanceToTopOfInsulation", :float)
|
1947
2025
|
@insulation_interior_distance_to_bottom = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/extension/DistanceToBottomOfInsulation", :float)
|
1948
2026
|
@insulation_exterior_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/NominalRValue", :float)
|
1949
2027
|
@insulation_exterior_distance_to_top = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/extension/DistanceToTopOfInsulation", :float)
|
1950
2028
|
@insulation_exterior_distance_to_bottom = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/extension/DistanceToBottomOfInsulation", :float)
|
1951
|
-
@insulation_continuous_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous']/NominalRValue", :float)
|
1952
|
-
@insulation_assembly_r_value = XMLHelper.get_value(insulation, 'AssemblyEffectiveRValue', :float)
|
1953
2029
|
end
|
1954
2030
|
end
|
1955
2031
|
end
|
@@ -2047,6 +2123,16 @@ class HPXML < Object
|
|
2047
2123
|
XMLHelper.add_attribute(sys_id, 'id', @id + 'Insulation')
|
2048
2124
|
end
|
2049
2125
|
XMLHelper.add_element(insulation, 'AssemblyEffectiveRValue', @insulation_assembly_r_value, :float) unless @insulation_assembly_r_value.nil?
|
2126
|
+
if not @insulation_cavity_r_value.nil?
|
2127
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
2128
|
+
XMLHelper.add_element(layer, 'InstallationType', 'cavity', :string)
|
2129
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_cavity_r_value, :float)
|
2130
|
+
end
|
2131
|
+
if not @insulation_continuous_r_value.nil?
|
2132
|
+
layer = XMLHelper.add_element(insulation, 'Layer')
|
2133
|
+
XMLHelper.add_element(layer, 'InstallationType', 'continuous', :string)
|
2134
|
+
XMLHelper.add_element(layer, 'NominalRValue', @insulation_continuous_r_value, :float)
|
2135
|
+
end
|
2050
2136
|
XMLHelper.add_extension(frame_floor, 'OtherSpaceAboveOrBelow', @other_space_above_or_below, :string) unless @other_space_above_or_below.nil?
|
2051
2137
|
end
|
2052
2138
|
|
@@ -2119,13 +2205,6 @@ class HPXML < Object
|
|
2119
2205
|
|
2120
2206
|
def check_for_errors
|
2121
2207
|
errors = []
|
2122
|
-
|
2123
|
-
if not @exposed_perimeter.nil?
|
2124
|
-
if @exposed_perimeter <= 0
|
2125
|
-
errors << "Exposed perimeter for Slab '#{@id}' must be greater than zero."
|
2126
|
-
end
|
2127
|
-
end
|
2128
|
-
|
2129
2208
|
return errors
|
2130
2209
|
end
|
2131
2210
|
|
@@ -2172,14 +2251,12 @@ class HPXML < Object
|
|
2172
2251
|
@id = HPXML::get_id(slab)
|
2173
2252
|
@interior_adjacent_to = XMLHelper.get_value(slab, 'InteriorAdjacentTo', :string)
|
2174
2253
|
@area = XMLHelper.get_value(slab, 'Area', :float)
|
2175
|
-
@thickness
|
2254
|
+
@thickness = XMLHelper.get_value(slab, 'Thickness', :float)
|
2176
2255
|
@exposed_perimeter = XMLHelper.get_value(slab, 'ExposedPerimeter', :float)
|
2177
2256
|
@perimeter_insulation_depth = XMLHelper.get_value(slab, 'PerimeterInsulationDepth', :float)
|
2178
2257
|
@under_slab_insulation_width = XMLHelper.get_value(slab, 'UnderSlabInsulationWidth', :float)
|
2179
2258
|
@under_slab_insulation_spans_entire_slab = XMLHelper.get_value(slab, 'UnderSlabInsulationSpansEntireSlab', :boolean)
|
2180
2259
|
@depth_below_grade = XMLHelper.get_value(slab, 'DepthBelowGrade', :float)
|
2181
|
-
@carpet_fraction, @carpet_fraction_isdefaulted = XMLHelper.get_value_and_defaulted(slab, 'extension/CarpetFraction', :float)
|
2182
|
-
@carpet_r_value, @carpet_r_value_isdefaulted = XMLHelper.get_value_and_defaulted(slab, 'extension/CarpetRValue', :float)
|
2183
2260
|
perimeter_insulation = XMLHelper.get_element(slab, 'PerimeterInsulation')
|
2184
2261
|
if not perimeter_insulation.nil?
|
2185
2262
|
@perimeter_insulation_id = HPXML::get_id(perimeter_insulation)
|
@@ -2190,6 +2267,8 @@ class HPXML < Object
|
|
2190
2267
|
@under_slab_insulation_id = HPXML::get_id(under_slab_insulation)
|
2191
2268
|
@under_slab_insulation_r_value = XMLHelper.get_value(under_slab_insulation, 'Layer/NominalRValue', :float)
|
2192
2269
|
end
|
2270
|
+
@carpet_fraction = XMLHelper.get_value(slab, 'extension/CarpetFraction', :float)
|
2271
|
+
@carpet_r_value = XMLHelper.get_value(slab, 'extension/CarpetRValue', :float)
|
2193
2272
|
end
|
2194
2273
|
end
|
2195
2274
|
|
@@ -2210,7 +2289,8 @@ class HPXML < Object
|
|
2210
2289
|
class Window < BaseElement
|
2211
2290
|
ATTRS = [:id, :area, :azimuth, :orientation, :frame_type, :aluminum_thermal_break, :glass_layers,
|
2212
2291
|
:glass_type, :gas_fill, :ufactor, :shgc, :interior_shading_factor_summer,
|
2213
|
-
:interior_shading_factor_winter, :
|
2292
|
+
:interior_shading_factor_winter, :interior_shading_type, :exterior_shading_factor_summer,
|
2293
|
+
:exterior_shading_factor_winter, :exterior_shading_type, :overhangs_depth,
|
2214
2294
|
:overhangs_distance_to_top_of_window, :overhangs_distance_to_bottom_of_window,
|
2215
2295
|
:fraction_operable, :wall_idref]
|
2216
2296
|
attr_accessor(*ATTRS)
|
@@ -2249,12 +2329,6 @@ class HPXML < Object
|
|
2249
2329
|
def check_for_errors
|
2250
2330
|
errors = []
|
2251
2331
|
begin; wall; rescue StandardError => e; errors << e.message; end
|
2252
|
-
if (not @overhangs_distance_to_top_of_window.nil?) && (not @overhangs_distance_to_bottom_of_window.nil?)
|
2253
|
-
if @overhangs_distance_to_bottom_of_window <= @overhangs_distance_to_top_of_window
|
2254
|
-
errors << "For Window '#{@id}', overhangs distance to bottom (#{@overhangs_distance_to_bottom_of_window}) must be greater than distance to top (#{@overhangs_distance_to_top_of_window})."
|
2255
|
-
end
|
2256
|
-
end
|
2257
|
-
|
2258
2332
|
return errors
|
2259
2333
|
end
|
2260
2334
|
|
@@ -2267,12 +2341,32 @@ class HPXML < Object
|
|
2267
2341
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
2268
2342
|
XMLHelper.add_element(window, 'Area', @area, :float) unless @area.nil?
|
2269
2343
|
XMLHelper.add_element(window, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2344
|
+
XMLHelper.add_element(window, 'Orientation', @orientation, :string) unless @orientation.nil?
|
2345
|
+
if not @frame_type.nil?
|
2346
|
+
frame_type_el = XMLHelper.add_element(window, 'FrameType')
|
2347
|
+
frame_type = XMLHelper.add_element(frame_type_el, @frame_type)
|
2348
|
+
if @frame_type == HPXML::WindowFrameTypeAluminum
|
2349
|
+
XMLHelper.add_element(frame_type, 'ThermalBreak', @aluminum_thermal_break, :boolean) unless @aluminum_thermal_break.nil?
|
2350
|
+
end
|
2351
|
+
end
|
2352
|
+
XMLHelper.add_element(window, 'GlassLayers', @glass_layers, :string) unless @glass_layers.nil?
|
2353
|
+
XMLHelper.add_element(window, 'GlassType', @glass_type, :string) unless @glass_type.nil?
|
2354
|
+
XMLHelper.add_element(window, 'GasFill', @gas_fill, :string) unless @gas_fill.nil?
|
2270
2355
|
XMLHelper.add_element(window, 'UFactor', @ufactor, :float) unless @ufactor.nil?
|
2271
2356
|
XMLHelper.add_element(window, 'SHGC', @shgc, :float) unless @shgc.nil?
|
2272
|
-
if (not @
|
2357
|
+
if (not @exterior_shading_type.nil?) || (not @exterior_shading_factor_summer.nil?) || (not @exterior_shading_factor_winter.nil?)
|
2358
|
+
exterior_shading = XMLHelper.add_element(window, 'ExteriorShading')
|
2359
|
+
sys_id = XMLHelper.add_element(exterior_shading, 'SystemIdentifier')
|
2360
|
+
XMLHelper.add_attribute(sys_id, 'id', "#{id}ExteriorShading")
|
2361
|
+
XMLHelper.add_element(exterior_shading, 'Type', @exterior_shading_type, :string) unless @exterior_shading_type.nil?
|
2362
|
+
XMLHelper.add_element(exterior_shading, 'SummerShadingCoefficient', @exterior_shading_factor_summer, :float, @exterior_shading_factor_summer_isdefaulted) unless @exterior_shading_factor_summer.nil?
|
2363
|
+
XMLHelper.add_element(exterior_shading, 'WinterShadingCoefficient', @exterior_shading_factor_winter, :float, @exterior_shading_factor_winter_isdefaulted) unless @exterior_shading_factor_winter.nil?
|
2364
|
+
end
|
2365
|
+
if (not @interior_shading_type.nil?) || (not @interior_shading_factor_summer.nil?) || (not @interior_shading_factor_winter.nil?)
|
2273
2366
|
interior_shading = XMLHelper.add_element(window, 'InteriorShading')
|
2274
2367
|
sys_id = XMLHelper.add_element(interior_shading, 'SystemIdentifier')
|
2275
2368
|
XMLHelper.add_attribute(sys_id, 'id', "#{id}InteriorShading")
|
2369
|
+
XMLHelper.add_element(interior_shading, 'Type', @interior_shading_type, :string) unless @interior_shading_type.nil?
|
2276
2370
|
XMLHelper.add_element(interior_shading, 'SummerShadingCoefficient', @interior_shading_factor_summer, :float, @interior_shading_factor_summer_isdefaulted) unless @interior_shading_factor_summer.nil?
|
2277
2371
|
XMLHelper.add_element(interior_shading, 'WinterShadingCoefficient', @interior_shading_factor_winter, :float, @interior_shading_factor_winter_isdefaulted) unless @interior_shading_factor_winter.nil?
|
2278
2372
|
end
|
@@ -2297,19 +2391,24 @@ class HPXML < Object
|
|
2297
2391
|
@azimuth = XMLHelper.get_value(window, 'Azimuth', :integer)
|
2298
2392
|
@orientation = XMLHelper.get_value(window, 'Orientation', :string)
|
2299
2393
|
@frame_type = XMLHelper.get_child_name(window, 'FrameType')
|
2300
|
-
|
2394
|
+
if not @frame_type.nil?
|
2395
|
+
@aluminum_thermal_break = XMLHelper.get_value(window, 'FrameType/Aluminum/ThermalBreak', :boolean)
|
2396
|
+
end
|
2301
2397
|
@glass_layers = XMLHelper.get_value(window, 'GlassLayers', :string)
|
2302
2398
|
@glass_type = XMLHelper.get_value(window, 'GlassType', :string)
|
2303
2399
|
@gas_fill = XMLHelper.get_value(window, 'GasFill', :string)
|
2304
2400
|
@ufactor = XMLHelper.get_value(window, 'UFactor', :float)
|
2305
2401
|
@shgc = XMLHelper.get_value(window, 'SHGC', :float)
|
2306
|
-
@
|
2307
|
-
@
|
2308
|
-
@
|
2402
|
+
@exterior_shading_type = XMLHelper.get_value(window, 'ExteriorShading/Type', :string)
|
2403
|
+
@exterior_shading_factor_summer = XMLHelper.get_value(window, 'ExteriorShading/SummerShadingCoefficient', :float)
|
2404
|
+
@exterior_shading_factor_winter = XMLHelper.get_value(window, 'ExteriorShading/WinterShadingCoefficient', :float)
|
2405
|
+
@interior_shading_type = XMLHelper.get_value(window, 'InteriorShading/Type', :string)
|
2406
|
+
@interior_shading_factor_summer = XMLHelper.get_value(window, 'InteriorShading/SummerShadingCoefficient', :float)
|
2407
|
+
@interior_shading_factor_winter = XMLHelper.get_value(window, 'InteriorShading/WinterShadingCoefficient', :float)
|
2309
2408
|
@overhangs_depth = XMLHelper.get_value(window, 'Overhangs/Depth', :float)
|
2310
2409
|
@overhangs_distance_to_top_of_window = XMLHelper.get_value(window, 'Overhangs/DistanceToTopOfWindow', :float)
|
2311
2410
|
@overhangs_distance_to_bottom_of_window = XMLHelper.get_value(window, 'Overhangs/DistanceToBottomOfWindow', :float)
|
2312
|
-
@fraction_operable
|
2411
|
+
@fraction_operable = XMLHelper.get_value(window, 'FractionOperable', :float)
|
2313
2412
|
@wall_idref = HPXML::get_idref(XMLHelper.get_element(window, 'AttachedToWall'))
|
2314
2413
|
end
|
2315
2414
|
end
|
@@ -2331,7 +2430,8 @@ class HPXML < Object
|
|
2331
2430
|
class Skylight < BaseElement
|
2332
2431
|
ATTRS = [:id, :area, :azimuth, :orientation, :frame_type, :aluminum_thermal_break, :glass_layers,
|
2333
2432
|
:glass_type, :gas_fill, :ufactor, :shgc, :interior_shading_factor_summer,
|
2334
|
-
:interior_shading_factor_winter, :
|
2433
|
+
:interior_shading_factor_winter, :interior_shading_type, :exterior_shading_factor_summer,
|
2434
|
+
:exterior_shading_factor_winter, :exterior_shading_type, :roof_idref]
|
2335
2435
|
attr_accessor(*ATTRS)
|
2336
2436
|
|
2337
2437
|
def roof
|
@@ -2380,12 +2480,32 @@ class HPXML < Object
|
|
2380
2480
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
2381
2481
|
XMLHelper.add_element(skylight, 'Area', @area, :float) unless @area.nil?
|
2382
2482
|
XMLHelper.add_element(skylight, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2483
|
+
XMLHelper.add_element(skylight, 'Orientation', @orientation, :string) unless @orientation.nil?
|
2484
|
+
if not @frame_type.nil?
|
2485
|
+
frame_type_el = XMLHelper.add_element(skylight, 'FrameType')
|
2486
|
+
frame_type = XMLHelper.add_element(frame_type_el, @frame_type)
|
2487
|
+
if @frame_type == HPXML::WindowFrameTypeAluminum
|
2488
|
+
XMLHelper.add_element(frame_type, 'ThermalBreak', @aluminum_thermal_break, :boolean) unless @aluminum_thermal_break.nil?
|
2489
|
+
end
|
2490
|
+
end
|
2491
|
+
XMLHelper.add_element(skylight, 'GlassLayers', @glass_layers, :string) unless @glass_layers.nil?
|
2492
|
+
XMLHelper.add_element(skylight, 'GlassType', @glass_type, :string) unless @glass_type.nil?
|
2493
|
+
XMLHelper.add_element(skylight, 'GasFill', @gas_fill, :string) unless @gas_fill.nil?
|
2383
2494
|
XMLHelper.add_element(skylight, 'UFactor', @ufactor, :float) unless @ufactor.nil?
|
2384
2495
|
XMLHelper.add_element(skylight, 'SHGC', @shgc, :float) unless @shgc.nil?
|
2385
|
-
if (not @
|
2496
|
+
if (not @exterior_shading_type.nil?) || (not @exterior_shading_factor_summer.nil?) || (not @exterior_shading_factor_winter.nil?)
|
2497
|
+
exterior_shading = XMLHelper.add_element(skylight, 'ExteriorShading')
|
2498
|
+
sys_id = XMLHelper.add_element(exterior_shading, 'SystemIdentifier')
|
2499
|
+
XMLHelper.add_attribute(sys_id, 'id', "#{id}ExteriorShading")
|
2500
|
+
XMLHelper.add_element(exterior_shading, 'Type', @exterior_shading_type, :string) unless @exterior_shading_type.nil?
|
2501
|
+
XMLHelper.add_element(exterior_shading, 'SummerShadingCoefficient', @exterior_shading_factor_summer, :float, @exterior_shading_factor_summer_isdefaulted) unless @exterior_shading_factor_summer.nil?
|
2502
|
+
XMLHelper.add_element(exterior_shading, 'WinterShadingCoefficient', @exterior_shading_factor_winter, :float, @exterior_shading_factor_winter_isdefaulted) unless @exterior_shading_factor_winter.nil?
|
2503
|
+
end
|
2504
|
+
if (not @interior_shading_type.nil?) || (not @interior_shading_factor_summer.nil?) || (not @interior_shading_factor_winter.nil?)
|
2386
2505
|
interior_shading = XMLHelper.add_element(skylight, 'InteriorShading')
|
2387
2506
|
sys_id = XMLHelper.add_element(interior_shading, 'SystemIdentifier')
|
2388
2507
|
XMLHelper.add_attribute(sys_id, 'id', "#{id}InteriorShading")
|
2508
|
+
XMLHelper.add_element(interior_shading, 'Type', @interior_shading_type, :string) unless @interior_shading_type.nil?
|
2389
2509
|
XMLHelper.add_element(interior_shading, 'SummerShadingCoefficient', @interior_shading_factor_summer, :float, @interior_shading_factor_summer_isdefaulted) unless @interior_shading_factor_summer.nil?
|
2390
2510
|
XMLHelper.add_element(interior_shading, 'WinterShadingCoefficient', @interior_shading_factor_winter, :float, @interior_shading_factor_winter_isdefaulted) unless @interior_shading_factor_winter.nil?
|
2391
2511
|
end
|
@@ -2409,9 +2529,12 @@ class HPXML < Object
|
|
2409
2529
|
@gas_fill = XMLHelper.get_value(skylight, 'GasFill', :string)
|
2410
2530
|
@ufactor = XMLHelper.get_value(skylight, 'UFactor', :float)
|
2411
2531
|
@shgc = XMLHelper.get_value(skylight, 'SHGC', :float)
|
2412
|
-
@
|
2413
|
-
@
|
2414
|
-
@
|
2532
|
+
@exterior_shading_type = XMLHelper.get_value(skylight, 'ExteriorShading/Type', :string)
|
2533
|
+
@exterior_shading_factor_summer = XMLHelper.get_value(skylight, 'ExteriorShading/SummerShadingCoefficient', :float)
|
2534
|
+
@exterior_shading_factor_winter = XMLHelper.get_value(skylight, 'ExteriorShading/WinterShadingCoefficient', :float)
|
2535
|
+
@interior_shading_type = XMLHelper.get_value(skylight, 'InteriorShading/Type', :string)
|
2536
|
+
@interior_shading_factor_summer = XMLHelper.get_value(skylight, 'InteriorShading/SummerShadingCoefficient', :float)
|
2537
|
+
@interior_shading_factor_winter = XMLHelper.get_value(skylight, 'InteriorShading/WinterShadingCoefficient', :float)
|
2415
2538
|
@roof_idref = HPXML::get_idref(XMLHelper.get_element(skylight, 'AttachedToRoof'))
|
2416
2539
|
end
|
2417
2540
|
end
|
@@ -2431,7 +2554,7 @@ class HPXML < Object
|
|
2431
2554
|
end
|
2432
2555
|
|
2433
2556
|
class Door < BaseElement
|
2434
|
-
ATTRS = [:id, :wall_idref, :area, :azimuth, :r_value]
|
2557
|
+
ATTRS = [:id, :wall_idref, :area, :azimuth, :orientation, :r_value]
|
2435
2558
|
attr_accessor(*ATTRS)
|
2436
2559
|
|
2437
2560
|
def wall
|
@@ -2484,6 +2607,7 @@ class HPXML < Object
|
|
2484
2607
|
end
|
2485
2608
|
XMLHelper.add_element(door, 'Area', @area, :float) unless @area.nil?
|
2486
2609
|
XMLHelper.add_element(door, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2610
|
+
XMLHelper.add_element(door, 'Orientation', @orientation, :string) unless @orientation.nil?
|
2487
2611
|
XMLHelper.add_element(door, 'RValue', @r_value, :float) unless @r_value.nil?
|
2488
2612
|
end
|
2489
2613
|
|
@@ -2494,6 +2618,7 @@ class HPXML < Object
|
|
2494
2618
|
@wall_idref = HPXML::get_idref(XMLHelper.get_element(door, 'AttachedToWall'))
|
2495
2619
|
@area = XMLHelper.get_value(door, 'Area', :float)
|
2496
2620
|
@azimuth = XMLHelper.get_value(door, 'Azimuth', :integer)
|
2621
|
+
@orientation = XMLHelper.get_value(door, 'Orientation', :string)
|
2497
2622
|
@r_value = XMLHelper.get_value(door, 'RValue', :float)
|
2498
2623
|
end
|
2499
2624
|
end
|
@@ -2520,9 +2645,10 @@ class HPXML < Object
|
|
2520
2645
|
ATTRS = [:id, :distribution_system_idref, :year_installed, :heating_system_type,
|
2521
2646
|
:heating_system_fuel, :heating_capacity, :heating_efficiency_afue,
|
2522
2647
|
:heating_efficiency_percent, :fraction_heat_load_served, :electric_auxiliary_energy,
|
2523
|
-
:
|
2524
|
-
:shared_loop_watts, :fan_coil_watts, :
|
2525
|
-
:
|
2648
|
+
:third_party_certification, :seed_id, :is_shared_system, :number_of_units_served,
|
2649
|
+
:shared_loop_watts, :fan_coil_watts, :fan_watts_per_cfm,
|
2650
|
+
:fan_power_not_tested, :airflow_defect_ratio, :airflow_not_tested,
|
2651
|
+
:fan_watts, :heating_airflow_cfm]
|
2526
2652
|
attr_accessor(*ATTRS)
|
2527
2653
|
|
2528
2654
|
def distribution_system
|
@@ -2569,6 +2695,8 @@ class HPXML < Object
|
|
2569
2695
|
heating_system = XMLHelper.add_element(hvac_plant, 'HeatingSystem')
|
2570
2696
|
sys_id = XMLHelper.add_element(heating_system, 'SystemIdentifier')
|
2571
2697
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
2698
|
+
XMLHelper.add_element(heating_system, 'YearInstalled', @year_installed, :integer) unless @year_installed.nil?
|
2699
|
+
XMLHelper.add_element(heating_system, 'ThirdPartyCertification', @third_party_certification, :string) unless @third_party_certification.nil?
|
2572
2700
|
if not @distribution_system_idref.nil?
|
2573
2701
|
distribution_system = XMLHelper.add_element(heating_system, 'DistributionSystem')
|
2574
2702
|
XMLHelper.add_attribute(distribution_system, 'idref', @distribution_system_idref)
|
@@ -2576,11 +2704,11 @@ class HPXML < Object
|
|
2576
2704
|
XMLHelper.add_element(heating_system, 'IsSharedSystem', @is_shared_system, :boolean) unless @is_shared_system.nil?
|
2577
2705
|
XMLHelper.add_element(heating_system, 'NumberofUnitsServed', @number_of_units_served, :integer) unless @number_of_units_served.nil?
|
2578
2706
|
if not @heating_system_type.nil?
|
2579
|
-
|
2580
|
-
XMLHelper.add_element(
|
2707
|
+
heating_system_type_el = XMLHelper.add_element(heating_system, 'HeatingSystemType')
|
2708
|
+
XMLHelper.add_element(heating_system_type_el, @heating_system_type)
|
2581
2709
|
end
|
2582
2710
|
XMLHelper.add_element(heating_system, 'HeatingSystemFuel', @heating_system_fuel, :string) unless @heating_system_fuel.nil?
|
2583
|
-
XMLHelper.add_element(heating_system, 'HeatingCapacity', @heating_capacity, :float) unless @heating_capacity.nil?
|
2711
|
+
XMLHelper.add_element(heating_system, 'HeatingCapacity', @heating_capacity, :float, @heating_capacity_isdefaulted) unless @heating_capacity.nil?
|
2584
2712
|
|
2585
2713
|
efficiency_units = nil
|
2586
2714
|
efficiency_value = nil
|
@@ -2596,27 +2724,26 @@ class HPXML < Object
|
|
2596
2724
|
XMLHelper.add_element(annual_efficiency, 'Units', efficiency_units, :string)
|
2597
2725
|
XMLHelper.add_element(annual_efficiency, 'Value', efficiency_value, :float)
|
2598
2726
|
end
|
2599
|
-
XMLHelper.add_element(heating_system, 'FractionHeatLoadServed', @fraction_heat_load_served, :float) unless @fraction_heat_load_served.nil?
|
2727
|
+
XMLHelper.add_element(heating_system, 'FractionHeatLoadServed', @fraction_heat_load_served, :float, @fraction_heat_load_served_isdefaulted) unless @fraction_heat_load_served.nil?
|
2600
2728
|
XMLHelper.add_element(heating_system, 'ElectricAuxiliaryEnergy', @electric_auxiliary_energy, :float, @electric_auxiliary_energy_isdefaulted) unless @electric_auxiliary_energy.nil?
|
2601
2729
|
XMLHelper.add_extension(heating_system, 'SharedLoopWatts', @shared_loop_watts, :float) unless @shared_loop_watts.nil?
|
2602
2730
|
XMLHelper.add_extension(heating_system, 'FanCoilWatts', @fan_coil_watts, :float) unless @fan_coil_watts.nil?
|
2603
2731
|
XMLHelper.add_extension(heating_system, 'FanPowerWattsPerCFM', @fan_watts_per_cfm, :float, @fan_watts_per_cfm_isdefaulted) unless @fan_watts_per_cfm.nil?
|
2604
2732
|
XMLHelper.add_extension(heating_system, 'FanPowerWatts', @fan_watts, :float, @fan_watts_isdefaulted) unless @fan_watts.nil?
|
2733
|
+
XMLHelper.add_extension(heating_system, 'FanPowerNotTested', @fan_power_not_tested, :boolean) unless @fan_power_not_tested.nil?
|
2734
|
+
XMLHelper.add_extension(heating_system, 'AirflowDefectRatio', @airflow_defect_ratio, :float, @airflow_defect_ratio_isdefaulted) unless @airflow_defect_ratio.nil?
|
2735
|
+
XMLHelper.add_extension(heating_system, 'AirflowNotTested', @airflow_not_tested, :boolean) unless @airflow_not_tested.nil?
|
2736
|
+
XMLHelper.add_extension(heating_system, 'HeatingAirflowCFM', @heating_airflow_cfm, :float, @heating_airflow_cfm_isdefaulted) unless @heating_airflow_cfm.nil?
|
2605
2737
|
XMLHelper.add_extension(heating_system, 'SeedId', @seed_id, :string) unless @seed_id.nil?
|
2606
|
-
if not @wlhp_heating_efficiency_cop.nil?
|
2607
|
-
wlhp = XMLHelper.create_elements_as_needed(heating_system, ['extension', 'WaterLoopHeatPump'])
|
2608
|
-
annual_efficiency = XMLHelper.add_element(wlhp, 'AnnualHeatingEfficiency')
|
2609
|
-
XMLHelper.add_element(annual_efficiency, 'Units', UnitsCOP, :string)
|
2610
|
-
XMLHelper.add_element(annual_efficiency, 'Value', @wlhp_heating_efficiency_cop, :float)
|
2611
|
-
end
|
2612
2738
|
end
|
2613
2739
|
|
2614
2740
|
def from_oga(heating_system)
|
2615
2741
|
return if heating_system.nil?
|
2616
2742
|
|
2617
2743
|
@id = HPXML::get_id(heating_system)
|
2618
|
-
@distribution_system_idref = HPXML::get_idref(XMLHelper.get_element(heating_system, 'DistributionSystem'))
|
2619
2744
|
@year_installed = XMLHelper.get_value(heating_system, 'YearInstalled', :integer)
|
2745
|
+
@third_party_certification = XMLHelper.get_value(heating_system, 'ThirdPartyCertification', :string)
|
2746
|
+
@distribution_system_idref = HPXML::get_idref(XMLHelper.get_element(heating_system, 'DistributionSystem'))
|
2620
2747
|
@is_shared_system = XMLHelper.get_value(heating_system, 'IsSharedSystem', :boolean)
|
2621
2748
|
@number_of_units_served = XMLHelper.get_value(heating_system, 'NumberofUnitsServed', :integer)
|
2622
2749
|
@heating_system_type = XMLHelper.get_child_name(heating_system, 'HeatingSystemType')
|
@@ -2628,14 +2755,16 @@ class HPXML < Object
|
|
2628
2755
|
@heating_efficiency_percent = XMLHelper.get_value(heating_system, "AnnualHeatingEfficiency[Units='Percent']/Value", :float)
|
2629
2756
|
end
|
2630
2757
|
@fraction_heat_load_served = XMLHelper.get_value(heating_system, 'FractionHeatLoadServed', :float)
|
2631
|
-
@electric_auxiliary_energy
|
2632
|
-
@energy_star = XMLHelper.get_values(heating_system, 'ThirdPartyCertification', :string).include?('Energy Star')
|
2633
|
-
@seed_id = XMLHelper.get_value(heating_system, 'extension/SeedId', :string)
|
2634
|
-
@fan_watts_per_cfm, @fan_watts_per_cfm_isdefaulted = XMLHelper.get_value_and_defaulted(heating_system, 'extension/FanPowerWattsPerCFM', :float)
|
2635
|
-
@fan_watts, @fan_watts_isdefaulted = XMLHelper.get_value_and_defaulted(heating_system, 'extension/FanPowerWatts', :float)
|
2758
|
+
@electric_auxiliary_energy = XMLHelper.get_value(heating_system, 'ElectricAuxiliaryEnergy', :float)
|
2636
2759
|
@shared_loop_watts = XMLHelper.get_value(heating_system, 'extension/SharedLoopWatts', :float)
|
2637
2760
|
@fan_coil_watts = XMLHelper.get_value(heating_system, 'extension/FanCoilWatts', :float)
|
2638
|
-
@
|
2761
|
+
@fan_watts_per_cfm = XMLHelper.get_value(heating_system, 'extension/FanPowerWattsPerCFM', :float)
|
2762
|
+
@fan_watts = XMLHelper.get_value(heating_system, 'extension/FanPowerWatts', :float)
|
2763
|
+
@fan_power_not_tested = XMLHelper.get_value(heating_system, 'extension/FanPowerNotTested', :boolean)
|
2764
|
+
@airflow_defect_ratio = XMLHelper.get_value(heating_system, 'extension/AirflowDefectRatio', :float)
|
2765
|
+
@airflow_not_tested = XMLHelper.get_value(heating_system, 'extension/AirflowNotTested', :boolean)
|
2766
|
+
@heating_airflow_cfm = XMLHelper.get_value(heating_system, 'extension/HeatingAirflowCFM', :float)
|
2767
|
+
@seed_id = XMLHelper.get_value(heating_system, 'extension/SeedId', :string)
|
2639
2768
|
end
|
2640
2769
|
end
|
2641
2770
|
|
@@ -2661,9 +2790,10 @@ class HPXML < Object
|
|
2661
2790
|
ATTRS = [:id, :distribution_system_idref, :year_installed, :cooling_system_type,
|
2662
2791
|
:cooling_system_fuel, :cooling_capacity, :compressor_type, :fraction_cool_load_served,
|
2663
2792
|
:cooling_efficiency_seer, :cooling_efficiency_eer, :cooling_efficiency_kw_per_ton,
|
2664
|
-
:cooling_shr, :
|
2665
|
-
:
|
2666
|
-
:
|
2793
|
+
:cooling_shr, :third_party_certification, :seed_id, :is_shared_system, :number_of_units_served,
|
2794
|
+
:shared_loop_watts, :fan_coil_watts, :airflow_defect_ratio, :fan_watts_per_cfm,
|
2795
|
+
:fan_power_not_tested, :airflow_not_tested, :charge_defect_ratio, :charge_not_tested,
|
2796
|
+
:cooling_airflow_cfm]
|
2667
2797
|
attr_accessor(*ATTRS)
|
2668
2798
|
|
2669
2799
|
def distribution_system
|
@@ -2710,6 +2840,8 @@ class HPXML < Object
|
|
2710
2840
|
cooling_system = XMLHelper.add_element(hvac_plant, 'CoolingSystem')
|
2711
2841
|
sys_id = XMLHelper.add_element(cooling_system, 'SystemIdentifier')
|
2712
2842
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
2843
|
+
XMLHelper.add_element(cooling_system, 'YearInstalled', @year_installed, :integer) unless @year_installed.nil?
|
2844
|
+
XMLHelper.add_element(cooling_system, 'ThirdPartyCertification', @third_party_certification, :string) unless @third_party_certification.nil?
|
2713
2845
|
if not @distribution_system_idref.nil?
|
2714
2846
|
distribution_system = XMLHelper.add_element(cooling_system, 'DistributionSystem')
|
2715
2847
|
XMLHelper.add_attribute(distribution_system, 'idref', @distribution_system_idref)
|
@@ -2718,9 +2850,9 @@ class HPXML < Object
|
|
2718
2850
|
XMLHelper.add_element(cooling_system, 'NumberofUnitsServed', @number_of_units_served, :integer) unless @number_of_units_served.nil?
|
2719
2851
|
XMLHelper.add_element(cooling_system, 'CoolingSystemType', @cooling_system_type, :string) unless @cooling_system_type.nil?
|
2720
2852
|
XMLHelper.add_element(cooling_system, 'CoolingSystemFuel', @cooling_system_fuel, :string) unless @cooling_system_fuel.nil?
|
2721
|
-
XMLHelper.add_element(cooling_system, 'CoolingCapacity', @cooling_capacity, :float) unless @cooling_capacity.nil?
|
2853
|
+
XMLHelper.add_element(cooling_system, 'CoolingCapacity', @cooling_capacity, :float, @cooling_capacity_isdefaulted) unless @cooling_capacity.nil?
|
2722
2854
|
XMLHelper.add_element(cooling_system, 'CompressorType', @compressor_type, :string, @compressor_type_isdefaulted) unless @compressor_type.nil?
|
2723
|
-
XMLHelper.add_element(cooling_system, 'FractionCoolLoadServed', @fraction_cool_load_served, :float) unless @fraction_cool_load_served.nil?
|
2855
|
+
XMLHelper.add_element(cooling_system, 'FractionCoolLoadServed', @fraction_cool_load_served, :float, @fraction_cool_load_served_isdefaulted) unless @fraction_cool_load_served.nil?
|
2724
2856
|
|
2725
2857
|
efficiency_units = nil
|
2726
2858
|
efficiency_value = nil
|
@@ -2740,33 +2872,31 @@ class HPXML < Object
|
|
2740
2872
|
XMLHelper.add_element(annual_efficiency, 'Value', efficiency_value, :float)
|
2741
2873
|
end
|
2742
2874
|
XMLHelper.add_element(cooling_system, 'SensibleHeatFraction', @cooling_shr, :float, @cooling_shr_isdefaulted) unless @cooling_shr.nil?
|
2875
|
+
XMLHelper.add_extension(cooling_system, 'AirflowDefectRatio', @airflow_defect_ratio, :float, @airflow_defect_ratio_isdefaulted) unless @airflow_defect_ratio.nil?
|
2876
|
+
XMLHelper.add_extension(cooling_system, 'ChargeDefectRatio', @charge_defect_ratio, :float, @charge_defect_ratio_isdefaulted) unless @charge_defect_ratio.nil?
|
2877
|
+
XMLHelper.add_extension(cooling_system, 'ChargeNotTested', @charge_not_tested, :boolean) unless @charge_not_tested.nil?
|
2743
2878
|
XMLHelper.add_extension(cooling_system, 'FanPowerWattsPerCFM', @fan_watts_per_cfm, :float, @fan_watts_per_cfm_isdefaulted) unless @fan_watts_per_cfm.nil?
|
2879
|
+
XMLHelper.add_extension(cooling_system, 'FanPowerNotTested', @fan_power_not_tested, :boolean) unless @fan_power_not_tested.nil?
|
2880
|
+
XMLHelper.add_extension(cooling_system, 'AirflowNotTested', @airflow_not_tested, :boolean) unless @airflow_not_tested.nil?
|
2881
|
+
XMLHelper.add_extension(cooling_system, 'CoolingAirflowCFM', @cooling_airflow_cfm, :float, @cooling_airflow_cfm_isdefaulted) unless @cooling_airflow_cfm.nil?
|
2744
2882
|
XMLHelper.add_extension(cooling_system, 'SharedLoopWatts', @shared_loop_watts, :float) unless @shared_loop_watts.nil?
|
2745
2883
|
XMLHelper.add_extension(cooling_system, 'FanCoilWatts', @fan_coil_watts, :float) unless @fan_coil_watts.nil?
|
2746
2884
|
XMLHelper.add_extension(cooling_system, 'SeedId', @seed_id, :string) unless @seed_id.nil?
|
2747
|
-
if (not @wlhp_cooling_capacity.nil?) || (not @wlhp_cooling_efficiency_eer.nil?)
|
2748
|
-
wlhp = XMLHelper.create_elements_as_needed(cooling_system, ['extension', 'WaterLoopHeatPump'])
|
2749
|
-
XMLHelper.add_element(wlhp, 'CoolingCapacity', @wlhp_cooling_capacity, :float) unless @wlhp_cooling_capacity.nil?
|
2750
|
-
if not @wlhp_cooling_efficiency_eer.nil?
|
2751
|
-
annual_efficiency = XMLHelper.add_element(wlhp, 'AnnualCoolingEfficiency')
|
2752
|
-
XMLHelper.add_element(annual_efficiency, 'Units', UnitsEER, :string)
|
2753
|
-
XMLHelper.add_element(annual_efficiency, 'Value', @wlhp_cooling_efficiency_eer, :float)
|
2754
|
-
end
|
2755
|
-
end
|
2756
2885
|
end
|
2757
2886
|
|
2758
2887
|
def from_oga(cooling_system)
|
2759
2888
|
return if cooling_system.nil?
|
2760
2889
|
|
2761
2890
|
@id = HPXML::get_id(cooling_system)
|
2762
|
-
@distribution_system_idref = HPXML::get_idref(XMLHelper.get_element(cooling_system, 'DistributionSystem'))
|
2763
2891
|
@year_installed = XMLHelper.get_value(cooling_system, 'YearInstalled', :integer)
|
2892
|
+
@third_party_certification = XMLHelper.get_value(cooling_system, 'ThirdPartyCertification', :string)
|
2893
|
+
@distribution_system_idref = HPXML::get_idref(XMLHelper.get_element(cooling_system, 'DistributionSystem'))
|
2764
2894
|
@is_shared_system = XMLHelper.get_value(cooling_system, 'IsSharedSystem', :boolean)
|
2765
2895
|
@number_of_units_served = XMLHelper.get_value(cooling_system, 'NumberofUnitsServed', :integer)
|
2766
2896
|
@cooling_system_type = XMLHelper.get_value(cooling_system, 'CoolingSystemType', :string)
|
2767
2897
|
@cooling_system_fuel = XMLHelper.get_value(cooling_system, 'CoolingSystemFuel', :string)
|
2768
2898
|
@cooling_capacity = XMLHelper.get_value(cooling_system, 'CoolingCapacity', :float)
|
2769
|
-
@compressor_type
|
2899
|
+
@compressor_type = XMLHelper.get_value(cooling_system, 'CompressorType', :string)
|
2770
2900
|
@fraction_cool_load_served = XMLHelper.get_value(cooling_system, 'FractionCoolLoadServed', :float)
|
2771
2901
|
if [HVACTypeCentralAirConditioner, HVACTypeMiniSplitAirConditioner].include? @cooling_system_type
|
2772
2902
|
@cooling_efficiency_seer = XMLHelper.get_value(cooling_system, "AnnualCoolingEfficiency[Units='#{UnitsSEER}']/Value", :float)
|
@@ -2775,14 +2905,17 @@ class HPXML < Object
|
|
2775
2905
|
elsif [HVACTypeChiller].include? @cooling_system_type
|
2776
2906
|
@cooling_efficiency_kw_per_ton = XMLHelper.get_value(cooling_system, "AnnualCoolingEfficiency[Units='#{UnitsKwPerTon}']/Value", :float)
|
2777
2907
|
end
|
2778
|
-
@cooling_shr
|
2779
|
-
@
|
2780
|
-
@
|
2781
|
-
@
|
2908
|
+
@cooling_shr = XMLHelper.get_value(cooling_system, 'SensibleHeatFraction', :float)
|
2909
|
+
@airflow_defect_ratio = XMLHelper.get_value(cooling_system, 'extension/AirflowDefectRatio', :float)
|
2910
|
+
@charge_defect_ratio = XMLHelper.get_value(cooling_system, 'extension/ChargeDefectRatio', :float)
|
2911
|
+
@charge_not_tested = XMLHelper.get_value(cooling_system, 'extension/ChargeNotTested', :boolean)
|
2912
|
+
@fan_watts_per_cfm = XMLHelper.get_value(cooling_system, 'extension/FanPowerWattsPerCFM', :float)
|
2913
|
+
@fan_power_not_tested = XMLHelper.get_value(cooling_system, 'extension/FanPowerNotTested', :boolean)
|
2914
|
+
@airflow_not_tested = XMLHelper.get_value(cooling_system, 'extension/AirflowNotTested', :boolean)
|
2915
|
+
@cooling_airflow_cfm = XMLHelper.get_value(cooling_system, 'extension/CoolingAirflowCFM', :float)
|
2782
2916
|
@shared_loop_watts = XMLHelper.get_value(cooling_system, 'extension/SharedLoopWatts', :float)
|
2783
2917
|
@fan_coil_watts = XMLHelper.get_value(cooling_system, 'extension/FanCoilWatts', :float)
|
2784
|
-
@
|
2785
|
-
@wlhp_cooling_efficiency_eer = XMLHelper.get_value(cooling_system, "extension/WaterLoopHeatPump/AnnualCoolingEfficiency[Units='#{UnitsEER}']/Value", :float)
|
2918
|
+
@seed_id = XMLHelper.get_value(cooling_system, 'extension/SeedId', :string)
|
2786
2919
|
end
|
2787
2920
|
end
|
2788
2921
|
|
@@ -2815,8 +2948,10 @@ class HPXML < Object
|
|
2815
2948
|
:backup_heating_efficiency_percent, :backup_heating_efficiency_afue,
|
2816
2949
|
:backup_heating_switchover_temp, :fraction_heat_load_served, :fraction_cool_load_served,
|
2817
2950
|
:cooling_efficiency_seer, :cooling_efficiency_eer, :heating_efficiency_hspf,
|
2818
|
-
:heating_efficiency_cop, :
|
2819
|
-
:is_shared_system, :number_of_units_served,
|
2951
|
+
:heating_efficiency_cop, :third_party_certification, :seed_id, :pump_watts_per_ton,
|
2952
|
+
:fan_watts_per_cfm, :fan_power_not_tested, :is_shared_system, :number_of_units_served,
|
2953
|
+
:shared_loop_watts, :airflow_defect_ratio, :airflow_not_tested, :charge_defect_ratio,
|
2954
|
+
:charge_not_tested, :heating_airflow_cfm, :cooling_airflow_cfm]
|
2820
2955
|
attr_accessor(*ATTRS)
|
2821
2956
|
|
2822
2957
|
def distribution_system
|
@@ -2852,6 +2987,8 @@ class HPXML < Object
|
|
2852
2987
|
heat_pump = XMLHelper.add_element(hvac_plant, 'HeatPump')
|
2853
2988
|
sys_id = XMLHelper.add_element(heat_pump, 'SystemIdentifier')
|
2854
2989
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
2990
|
+
XMLHelper.add_element(heat_pump, 'YearInstalled', @year_installed, :integer) unless @year_installed.nil?
|
2991
|
+
XMLHelper.add_element(heat_pump, 'ThirdPartyCertification', @third_party_certification, :string) unless @third_party_certification.nil?
|
2855
2992
|
if not @distribution_system_idref.nil?
|
2856
2993
|
distribution_system = XMLHelper.add_element(heat_pump, 'DistributionSystem')
|
2857
2994
|
XMLHelper.add_attribute(distribution_system, 'idref', @distribution_system_idref)
|
@@ -2860,27 +2997,25 @@ class HPXML < Object
|
|
2860
2997
|
XMLHelper.add_element(heat_pump, 'NumberofUnitsServed', @number_of_units_served, :integer) unless @number_of_units_served.nil?
|
2861
2998
|
XMLHelper.add_element(heat_pump, 'HeatPumpType', @heat_pump_type, :string) unless @heat_pump_type.nil?
|
2862
2999
|
XMLHelper.add_element(heat_pump, 'HeatPumpFuel', @heat_pump_fuel, :string) unless @heat_pump_fuel.nil?
|
2863
|
-
XMLHelper.add_element(heat_pump, 'HeatingCapacity', @heating_capacity, :float) unless @heating_capacity.nil?
|
3000
|
+
XMLHelper.add_element(heat_pump, 'HeatingCapacity', @heating_capacity, :float, @heating_capacity_isdefaulted) unless @heating_capacity.nil?
|
2864
3001
|
XMLHelper.add_element(heat_pump, 'HeatingCapacity17F', @heating_capacity_17F, :float) unless @heating_capacity_17F.nil?
|
2865
|
-
XMLHelper.add_element(heat_pump, 'CoolingCapacity', @cooling_capacity, :float) unless @cooling_capacity.nil?
|
3002
|
+
XMLHelper.add_element(heat_pump, 'CoolingCapacity', @cooling_capacity, :float, @cooling_capacity_isdefaulted) unless @cooling_capacity.nil?
|
2866
3003
|
XMLHelper.add_element(heat_pump, 'CompressorType', @compressor_type, :string, @compressor_type_isdefaulted) unless @compressor_type.nil?
|
2867
3004
|
XMLHelper.add_element(heat_pump, 'CoolingSensibleHeatFraction', @cooling_shr, :float, @cooling_shr_isdefaulted) unless @cooling_shr.nil?
|
2868
|
-
|
2869
|
-
|
2870
|
-
|
2871
|
-
|
2872
|
-
|
2873
|
-
|
2874
|
-
|
2875
|
-
|
2876
|
-
|
2877
|
-
XMLHelper.add_element(backup_eff, 'Value', value, :float)
|
2878
|
-
end
|
2879
|
-
XMLHelper.add_element(heat_pump, 'BackupHeatingCapacity', @backup_heating_capacity, :float) unless @backup_heating_capacity.nil?
|
2880
|
-
XMLHelper.add_element(heat_pump, 'BackupHeatingSwitchoverTemperature', @backup_heating_switchover_temp, :float) unless @backup_heating_switchover_temp.nil?
|
3005
|
+
XMLHelper.add_element(heat_pump, 'BackupSystemFuel', @backup_heating_fuel, :string) unless @backup_heating_fuel.nil?
|
3006
|
+
efficiencies = { 'Percent' => @backup_heating_efficiency_percent,
|
3007
|
+
UnitsAFUE => @backup_heating_efficiency_afue }
|
3008
|
+
efficiencies.each do |units, value|
|
3009
|
+
next if value.nil?
|
3010
|
+
|
3011
|
+
backup_eff = XMLHelper.add_element(heat_pump, 'BackupAnnualHeatingEfficiency')
|
3012
|
+
XMLHelper.add_element(backup_eff, 'Units', units, :string)
|
3013
|
+
XMLHelper.add_element(backup_eff, 'Value', value, :float)
|
2881
3014
|
end
|
2882
|
-
XMLHelper.add_element(heat_pump, '
|
2883
|
-
XMLHelper.add_element(heat_pump, '
|
3015
|
+
XMLHelper.add_element(heat_pump, 'BackupHeatingCapacity', @backup_heating_capacity, :float, @backup_heating_capacity_isdefaulted) unless @backup_heating_capacity.nil?
|
3016
|
+
XMLHelper.add_element(heat_pump, 'BackupHeatingSwitchoverTemperature', @backup_heating_switchover_temp, :float) unless @backup_heating_switchover_temp.nil?
|
3017
|
+
XMLHelper.add_element(heat_pump, 'FractionHeatLoadServed', @fraction_heat_load_served, :float, @fraction_heat_load_served_isdefaulted) unless @fraction_heat_load_served.nil?
|
3018
|
+
XMLHelper.add_element(heat_pump, 'FractionCoolLoadServed', @fraction_cool_load_served, :float, @fraction_cool_load_served_isdefaulted) unless @fraction_cool_load_served.nil?
|
2884
3019
|
|
2885
3020
|
clg_efficiency_units = nil
|
2886
3021
|
clg_efficiency_value = nil
|
@@ -2891,7 +3026,7 @@ class HPXML < Object
|
|
2891
3026
|
clg_efficiency_value = @cooling_efficiency_seer
|
2892
3027
|
htg_efficiency_units = UnitsHSPF
|
2893
3028
|
htg_efficiency_value = @heating_efficiency_hspf
|
2894
|
-
elsif [HVACTypeHeatPumpGroundToAir].include? @heat_pump_type
|
3029
|
+
elsif [HVACTypeHeatPumpGroundToAir, HVACTypeHeatPumpWaterLoopToAir].include? @heat_pump_type
|
2895
3030
|
clg_efficiency_units = UnitsEER
|
2896
3031
|
clg_efficiency_value = @cooling_efficiency_eer
|
2897
3032
|
htg_efficiency_units = UnitsCOP
|
@@ -2907,7 +3042,14 @@ class HPXML < Object
|
|
2907
3042
|
XMLHelper.add_element(annual_efficiency, 'Units', htg_efficiency_units, :string)
|
2908
3043
|
XMLHelper.add_element(annual_efficiency, 'Value', htg_efficiency_value, :float)
|
2909
3044
|
end
|
3045
|
+
XMLHelper.add_extension(heat_pump, 'AirflowDefectRatio', @airflow_defect_ratio, :float, @airflow_defect_ratio_isdefaulted) unless @airflow_defect_ratio.nil?
|
3046
|
+
XMLHelper.add_extension(heat_pump, 'ChargeDefectRatio', @charge_defect_ratio, :float, @charge_defect_ratio_isdefaulted) unless @charge_defect_ratio.nil?
|
3047
|
+
XMLHelper.add_extension(heat_pump, 'ChargeNotTested', @charge_not_tested, :boolean) unless @charge_not_tested.nil?
|
2910
3048
|
XMLHelper.add_extension(heat_pump, 'FanPowerWattsPerCFM', @fan_watts_per_cfm, :float, @fan_watts_per_cfm_isdefaulted) unless @fan_watts_per_cfm.nil?
|
3049
|
+
XMLHelper.add_extension(heat_pump, 'FanPowerNotTested', @fan_power_not_tested, :boolean) unless @fan_power_not_tested.nil?
|
3050
|
+
XMLHelper.add_extension(heat_pump, 'AirflowNotTested', @airflow_not_tested, :boolean) unless @airflow_not_tested.nil?
|
3051
|
+
XMLHelper.add_extension(heat_pump, 'HeatingAirflowCFM', @heating_airflow_cfm, :float, @heating_airflow_cfm_isdefaulted) unless @heating_airflow_cfm.nil?
|
3052
|
+
XMLHelper.add_extension(heat_pump, 'CoolingAirflowCFM', @cooling_airflow_cfm, :float, @cooling_airflow_cfm_isdefaulted) unless @cooling_airflow_cfm.nil?
|
2911
3053
|
XMLHelper.add_extension(heat_pump, 'PumpPowerWattsPerTon', @pump_watts_per_ton, :float, @pump_watts_per_ton_isdefaulted) unless @pump_watts_per_ton.nil?
|
2912
3054
|
XMLHelper.add_extension(heat_pump, 'SharedLoopWatts', @shared_loop_watts, :float) unless @shared_loop_watts.nil?
|
2913
3055
|
XMLHelper.add_extension(heat_pump, 'SeedId', @seed_id, :string) unless @seed_id.nil?
|
@@ -2917,8 +3059,9 @@ class HPXML < Object
|
|
2917
3059
|
return if heat_pump.nil?
|
2918
3060
|
|
2919
3061
|
@id = HPXML::get_id(heat_pump)
|
2920
|
-
@distribution_system_idref = HPXML::get_idref(XMLHelper.get_element(heat_pump, 'DistributionSystem'))
|
2921
3062
|
@year_installed = XMLHelper.get_value(heat_pump, 'YearInstalled', :integer)
|
3063
|
+
@third_party_certification = XMLHelper.get_value(heat_pump, 'ThirdPartyCertification', :string)
|
3064
|
+
@distribution_system_idref = HPXML::get_idref(XMLHelper.get_element(heat_pump, 'DistributionSystem'))
|
2922
3065
|
@is_shared_system = XMLHelper.get_value(heat_pump, 'IsSharedSystem', :boolean)
|
2923
3066
|
@number_of_units_served = XMLHelper.get_value(heat_pump, 'NumberofUnitsServed', :integer)
|
2924
3067
|
@heat_pump_type = XMLHelper.get_value(heat_pump, 'HeatPumpType', :string)
|
@@ -2926,30 +3069,112 @@ class HPXML < Object
|
|
2926
3069
|
@heating_capacity = XMLHelper.get_value(heat_pump, 'HeatingCapacity', :float)
|
2927
3070
|
@heating_capacity_17F = XMLHelper.get_value(heat_pump, 'HeatingCapacity17F', :float)
|
2928
3071
|
@cooling_capacity = XMLHelper.get_value(heat_pump, 'CoolingCapacity', :float)
|
2929
|
-
@compressor_type
|
2930
|
-
@cooling_shr
|
3072
|
+
@compressor_type = XMLHelper.get_value(heat_pump, 'CompressorType', :string)
|
3073
|
+
@cooling_shr = XMLHelper.get_value(heat_pump, 'CoolingSensibleHeatFraction', :float)
|
2931
3074
|
@backup_heating_fuel = XMLHelper.get_value(heat_pump, 'BackupSystemFuel', :string)
|
2932
|
-
@backup_heating_capacity = XMLHelper.get_value(heat_pump, 'BackupHeatingCapacity', :float)
|
2933
3075
|
@backup_heating_efficiency_percent = XMLHelper.get_value(heat_pump, "BackupAnnualHeatingEfficiency[Units='Percent']/Value", :float)
|
2934
3076
|
@backup_heating_efficiency_afue = XMLHelper.get_value(heat_pump, "BackupAnnualHeatingEfficiency[Units='#{UnitsAFUE}']/Value", :float)
|
3077
|
+
@backup_heating_capacity = XMLHelper.get_value(heat_pump, 'BackupHeatingCapacity', :float)
|
2935
3078
|
@backup_heating_switchover_temp = XMLHelper.get_value(heat_pump, 'BackupHeatingSwitchoverTemperature', :float)
|
2936
3079
|
@fraction_heat_load_served = XMLHelper.get_value(heat_pump, 'FractionHeatLoadServed', :float)
|
2937
3080
|
@fraction_cool_load_served = XMLHelper.get_value(heat_pump, 'FractionCoolLoadServed', :float)
|
2938
3081
|
if [HVACTypeHeatPumpAirToAir, HVACTypeHeatPumpMiniSplit].include? @heat_pump_type
|
2939
3082
|
@cooling_efficiency_seer = XMLHelper.get_value(heat_pump, "AnnualCoolingEfficiency[Units='#{UnitsSEER}']/Value", :float)
|
2940
|
-
elsif [HVACTypeHeatPumpGroundToAir].include? @heat_pump_type
|
3083
|
+
elsif [HVACTypeHeatPumpGroundToAir, HVACTypeHeatPumpWaterLoopToAir].include? @heat_pump_type
|
2941
3084
|
@cooling_efficiency_eer = XMLHelper.get_value(heat_pump, "AnnualCoolingEfficiency[Units='#{UnitsEER}']/Value", :float)
|
2942
3085
|
end
|
2943
3086
|
if [HVACTypeHeatPumpAirToAir, HVACTypeHeatPumpMiniSplit].include? @heat_pump_type
|
2944
3087
|
@heating_efficiency_hspf = XMLHelper.get_value(heat_pump, "AnnualHeatingEfficiency[Units='#{UnitsHSPF}']/Value", :float)
|
2945
|
-
elsif [HVACTypeHeatPumpGroundToAir].include? @heat_pump_type
|
3088
|
+
elsif [HVACTypeHeatPumpGroundToAir, HVACTypeHeatPumpWaterLoopToAir].include? @heat_pump_type
|
2946
3089
|
@heating_efficiency_cop = XMLHelper.get_value(heat_pump, "AnnualHeatingEfficiency[Units='#{UnitsCOP}']/Value", :float)
|
2947
3090
|
end
|
2948
|
-
@
|
2949
|
-
@
|
2950
|
-
@
|
2951
|
-
@
|
3091
|
+
@airflow_defect_ratio = XMLHelper.get_value(heat_pump, 'extension/AirflowDefectRatio', :float)
|
3092
|
+
@charge_defect_ratio = XMLHelper.get_value(heat_pump, 'extension/ChargeDefectRatio', :float)
|
3093
|
+
@charge_not_tested = XMLHelper.get_value(heat_pump, 'extension/ChargeNotTested', :boolean)
|
3094
|
+
@fan_watts_per_cfm = XMLHelper.get_value(heat_pump, 'extension/FanPowerWattsPerCFM', :float)
|
3095
|
+
@fan_power_not_tested = XMLHelper.get_value(heat_pump, 'extension/FanPowerNotTested', :boolean)
|
3096
|
+
@airflow_not_tested = XMLHelper.get_value(heat_pump, 'extension/AirflowNotTested', :boolean)
|
3097
|
+
@heating_airflow_cfm = XMLHelper.get_value(heat_pump, 'extension/HeatingAirflowCFM', :float)
|
3098
|
+
@cooling_airflow_cfm = XMLHelper.get_value(heat_pump, 'extension/CoolingAirflowCFM', :float)
|
3099
|
+
@pump_watts_per_ton = XMLHelper.get_value(heat_pump, 'extension/PumpPowerWattsPerTon', :float)
|
2952
3100
|
@shared_loop_watts = XMLHelper.get_value(heat_pump, 'extension/SharedLoopWatts', :float)
|
3101
|
+
@seed_id = XMLHelper.get_value(heat_pump, 'extension/SeedId', :string)
|
3102
|
+
end
|
3103
|
+
end
|
3104
|
+
|
3105
|
+
class HVACPlant < BaseElement
|
3106
|
+
HDL_ATTRS = { hdl_total: 'Total',
|
3107
|
+
hdl_ducts: 'Ducts',
|
3108
|
+
hdl_windows: 'Windows',
|
3109
|
+
hdl_skylights: 'Skylights',
|
3110
|
+
hdl_doors: 'Doors',
|
3111
|
+
hdl_walls: 'Walls',
|
3112
|
+
hdl_roofs: 'Roofs',
|
3113
|
+
hdl_floors: 'Floors',
|
3114
|
+
hdl_slabs: 'Slabs',
|
3115
|
+
hdl_ceilings: 'Ceilings',
|
3116
|
+
hdl_infilvent: 'InfilVent' }
|
3117
|
+
CDL_SENS_ATTRS = { cdl_sens_total: 'Total',
|
3118
|
+
cdl_sens_ducts: 'Ducts',
|
3119
|
+
cdl_sens_windows: 'Windows',
|
3120
|
+
cdl_sens_skylights: 'Skylights',
|
3121
|
+
cdl_sens_doors: 'Doors',
|
3122
|
+
cdl_sens_walls: 'Walls',
|
3123
|
+
cdl_sens_roofs: 'Roofs',
|
3124
|
+
cdl_sens_floors: 'Floors',
|
3125
|
+
cdl_sens_slabs: 'Slabs',
|
3126
|
+
cdl_sens_ceilings: 'Ceilings',
|
3127
|
+
cdl_sens_infilvent: 'InfilVent',
|
3128
|
+
cdl_sens_intgains: 'InternalGains' }
|
3129
|
+
CDL_LAT_ATTRS = { cdl_lat_total: 'Total',
|
3130
|
+
cdl_lat_ducts: 'Ducts',
|
3131
|
+
cdl_lat_infilvent: 'InfilVent',
|
3132
|
+
cdl_lat_intgains: 'InternalGains' }
|
3133
|
+
ATTRS = HDL_ATTRS.keys + CDL_SENS_ATTRS.keys + CDL_LAT_ATTRS.keys
|
3134
|
+
attr_accessor(*ATTRS)
|
3135
|
+
|
3136
|
+
def check_for_errors
|
3137
|
+
errors = []
|
3138
|
+
return errors
|
3139
|
+
end
|
3140
|
+
|
3141
|
+
def to_oga(doc)
|
3142
|
+
return if nil?
|
3143
|
+
|
3144
|
+
hvac_plant = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant'])
|
3145
|
+
if not @hdl_total.nil?
|
3146
|
+
dl_extension = XMLHelper.create_elements_as_needed(hvac_plant, ['extension', 'DesignLoads'])
|
3147
|
+
XMLHelper.add_attribute(dl_extension, 'dataSource', 'software')
|
3148
|
+
hdl = XMLHelper.add_element(dl_extension, 'Heating')
|
3149
|
+
HDL_ATTRS.each do |attr, element_name|
|
3150
|
+
XMLHelper.add_element(hdl, element_name, send(attr), :float)
|
3151
|
+
end
|
3152
|
+
cdl_sens = XMLHelper.add_element(dl_extension, 'CoolingSensible')
|
3153
|
+
CDL_SENS_ATTRS.each do |attr, element_name|
|
3154
|
+
XMLHelper.add_element(cdl_sens, element_name, send(attr), :float)
|
3155
|
+
end
|
3156
|
+
cdl_lat = XMLHelper.add_element(dl_extension, 'CoolingLatent')
|
3157
|
+
CDL_LAT_ATTRS.each do |attr, element_name|
|
3158
|
+
XMLHelper.add_element(cdl_lat, element_name, send(attr), :float)
|
3159
|
+
end
|
3160
|
+
end
|
3161
|
+
end
|
3162
|
+
|
3163
|
+
def from_oga(hpxml)
|
3164
|
+
return if hpxml.nil?
|
3165
|
+
|
3166
|
+
hvac_plant = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Systems/HVAC/HVACPlant')
|
3167
|
+
return if hvac_plant.nil?
|
3168
|
+
|
3169
|
+
HDL_ATTRS.each do |attr, element_name|
|
3170
|
+
send("#{attr.to_s}=", XMLHelper.get_value(hvac_plant, "extension/DesignLoads/Heating/#{element_name}", :float))
|
3171
|
+
end
|
3172
|
+
CDL_SENS_ATTRS.each do |attr, element_name|
|
3173
|
+
send("#{attr.to_s}=", XMLHelper.get_value(hvac_plant, "extension/DesignLoads/CoolingSensible/#{element_name}", :float))
|
3174
|
+
end
|
3175
|
+
CDL_LAT_ATTRS.each do |attr, element_name|
|
3176
|
+
send("#{attr.to_s}=", XMLHelper.get_value(hvac_plant, "extension/DesignLoads/CoolingLatent/#{element_name}", :float))
|
3177
|
+
end
|
2953
3178
|
end
|
2954
3179
|
end
|
2955
3180
|
|
@@ -3016,11 +3241,11 @@ class HPXML < Object
|
|
3016
3241
|
@heating_setpoint_temp = XMLHelper.get_value(hvac_control, 'SetpointTempHeatingSeason', :float)
|
3017
3242
|
@heating_setback_temp = XMLHelper.get_value(hvac_control, 'SetbackTempHeatingSeason', :float)
|
3018
3243
|
@heating_setback_hours_per_week = XMLHelper.get_value(hvac_control, 'TotalSetbackHoursperWeekHeating', :integer)
|
3019
|
-
@heating_setback_start_hour, @heating_setback_start_hour_isdefaulted = XMLHelper.get_value_and_defaulted(hvac_control, 'extension/SetbackStartHourHeating', :integer)
|
3020
|
-
@cooling_setpoint_temp = XMLHelper.get_value(hvac_control, 'SetpointTempCoolingSeason', :float)
|
3021
3244
|
@cooling_setup_temp = XMLHelper.get_value(hvac_control, 'SetupTempCoolingSeason', :float)
|
3245
|
+
@cooling_setpoint_temp = XMLHelper.get_value(hvac_control, 'SetpointTempCoolingSeason', :float)
|
3022
3246
|
@cooling_setup_hours_per_week = XMLHelper.get_value(hvac_control, 'TotalSetupHoursperWeekCooling', :integer)
|
3023
|
-
@
|
3247
|
+
@heating_setback_start_hour = XMLHelper.get_value(hvac_control, 'extension/SetbackStartHourHeating', :integer)
|
3248
|
+
@cooling_setup_start_hour = XMLHelper.get_value(hvac_control, 'extension/SetupStartHourCooling', :integer)
|
3024
3249
|
@ceiling_fan_cooling_setpoint_temp_offset = XMLHelper.get_value(hvac_control, 'extension/CeilingFanSetpointTempCoolingSeasonOffset', :float)
|
3025
3250
|
@weekday_heating_setpoints = XMLHelper.get_value(hvac_control, 'extension/WeekdaySetpointTempsHeatingSeason', :string)
|
3026
3251
|
@weekend_heating_setpoints = XMLHelper.get_value(hvac_control, 'extension/WeekendSetpointTempsHeatingSeason', :string)
|
@@ -3051,7 +3276,7 @@ class HPXML < Object
|
|
3051
3276
|
end
|
3052
3277
|
ATTRS = [:id, :distribution_system_type, :annual_heating_dse, :annual_cooling_dse,
|
3053
3278
|
:duct_system_sealed, :duct_leakage_to_outside_testing_exemption, :conditioned_floor_area_served,
|
3054
|
-
:number_of_return_registers, :
|
3279
|
+
:number_of_return_registers, :air_type, :hydronic_type]
|
3055
3280
|
attr_accessor(*ATTRS)
|
3056
3281
|
attr_reader(:duct_leakage_measurements, :ducts)
|
3057
3282
|
|
@@ -3089,6 +3314,18 @@ class HPXML < Object
|
|
3089
3314
|
return list
|
3090
3315
|
end
|
3091
3316
|
|
3317
|
+
def total_unconditioned_duct_areas
|
3318
|
+
areas = { HPXML::DuctTypeSupply => 0,
|
3319
|
+
HPXML::DuctTypeReturn => 0 }
|
3320
|
+
@ducts.each do |duct|
|
3321
|
+
next if [HPXML::LocationLivingSpace, HPXML::LocationBasementConditioned].include? duct.duct_location
|
3322
|
+
next if duct.duct_type.nil?
|
3323
|
+
|
3324
|
+
areas[duct.duct_type] += duct.duct_surface_area
|
3325
|
+
end
|
3326
|
+
return areas
|
3327
|
+
end
|
3328
|
+
|
3092
3329
|
def delete
|
3093
3330
|
@hpxml_object.hvac_distributions.delete(self)
|
3094
3331
|
(@hpxml_object.heating_systems + @hpxml_object.cooling_systems + @hpxml_object.heat_pumps).each do |hvac_system|
|
@@ -3119,12 +3356,12 @@ class HPXML < Object
|
|
3119
3356
|
hvac_distribution = XMLHelper.add_element(hvac, 'HVACDistribution')
|
3120
3357
|
sys_id = XMLHelper.add_element(hvac_distribution, 'SystemIdentifier')
|
3121
3358
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
3122
|
-
|
3123
|
-
if [HVACDistributionTypeAir, HVACDistributionTypeHydronic
|
3124
|
-
XMLHelper.add_element(
|
3359
|
+
distribution_system_type_el = XMLHelper.add_element(hvac_distribution, 'DistributionSystemType')
|
3360
|
+
if [HVACDistributionTypeAir, HVACDistributionTypeHydronic].include? @distribution_system_type
|
3361
|
+
XMLHelper.add_element(distribution_system_type_el, @distribution_system_type)
|
3125
3362
|
XMLHelper.add_element(hvac_distribution, 'ConditionedFloorAreaServed', @conditioned_floor_area_served, :float) unless @conditioned_floor_area_served.nil?
|
3126
3363
|
elsif [HVACDistributionTypeDSE].include? @distribution_system_type
|
3127
|
-
XMLHelper.add_element(
|
3364
|
+
XMLHelper.add_element(distribution_system_type_el, 'Other', @distribution_system_type, :string)
|
3128
3365
|
XMLHelper.add_element(hvac_distribution, 'AnnualHeatingDistributionSystemEfficiency', @annual_heating_dse, :float) unless @annual_heating_dse.nil?
|
3129
3366
|
XMLHelper.add_element(hvac_distribution, 'AnnualCoolingDistributionSystemEfficiency', @annual_cooling_dse, :float) unless @annual_cooling_dse.nil?
|
3130
3367
|
else
|
@@ -3135,21 +3372,19 @@ class HPXML < Object
|
|
3135
3372
|
distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/HydronicDistribution')
|
3136
3373
|
XMLHelper.add_element(distribution, 'HydronicDistributionType', @hydronic_type, :string) unless @hydronic_type.nil?
|
3137
3374
|
end
|
3138
|
-
if [HPXML::
|
3139
|
-
distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/
|
3140
|
-
XMLHelper.add_element(distribution, '
|
3141
|
-
end
|
3142
|
-
if [HPXML::HVACDistributionTypeAir, HPXML::HVACDistributionTypeHydronicAndAir].include? @distribution_system_type
|
3143
|
-
if @distribution_system_type == HPXML::HVACDistributionTypeAir
|
3144
|
-
distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/AirDistribution')
|
3145
|
-
elsif @distribution_system_type == HPXML::HVACDistributionTypeHydronicAndAir
|
3146
|
-
distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/HydronicAndAirDistribution')
|
3147
|
-
end
|
3375
|
+
if [HPXML::HVACDistributionTypeAir].include? @distribution_system_type
|
3376
|
+
distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/AirDistribution')
|
3377
|
+
XMLHelper.add_element(distribution, 'AirDistributionType', @air_type, :string) unless @air_type.nil?
|
3148
3378
|
@duct_leakage_measurements.to_oga(distribution)
|
3149
3379
|
@ducts.to_oga(distribution)
|
3150
3380
|
XMLHelper.add_element(distribution, 'NumberofReturnRegisters', @number_of_return_registers, :integer, @number_of_return_registers_isdefaulted) unless @number_of_return_registers.nil?
|
3151
3381
|
XMLHelper.add_extension(distribution, 'DuctLeakageToOutsideTestingExemption', @duct_leakage_to_outside_testing_exemption, :boolean) unless @duct_leakage_to_outside_testing_exemption.nil?
|
3152
3382
|
end
|
3383
|
+
|
3384
|
+
if not @duct_system_sealed.nil?
|
3385
|
+
dist_impr_el = XMLHelper.add_element(hvac_distribution, 'HVACDistributionImprovement')
|
3386
|
+
XMLHelper.add_element(dist_impr_el, 'DuctSystemSealed', @duct_system_sealed, :boolean)
|
3387
|
+
end
|
3153
3388
|
end
|
3154
3389
|
|
3155
3390
|
def from_oga(hvac_distribution)
|
@@ -3167,21 +3402,16 @@ class HPXML < Object
|
|
3167
3402
|
|
3168
3403
|
air_distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/AirDistribution')
|
3169
3404
|
hydronic_distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/HydronicDistribution')
|
3170
|
-
hydronic_and_air_distribution = XMLHelper.get_element(hvac_distribution, 'DistributionSystemType/HydronicAndAirDistribution')
|
3171
3405
|
|
3172
3406
|
if not hydronic_distribution.nil?
|
3173
3407
|
@hydronic_type = XMLHelper.get_value(hydronic_distribution, 'HydronicDistributionType', :string)
|
3174
3408
|
end
|
3175
|
-
if not
|
3176
|
-
@
|
3177
|
-
|
3178
|
-
|
3179
|
-
|
3180
|
-
|
3181
|
-
@number_of_return_registers, @number_of_return_registers_isdefaulted = XMLHelper.get_value_and_defaulted(distribution, 'NumberofReturnRegisters', :integer)
|
3182
|
-
@duct_leakage_to_outside_testing_exemption = XMLHelper.get_value(distribution, 'extension/DuctLeakageToOutsideTestingExemption', :boolean)
|
3183
|
-
@duct_leakage_measurements.from_oga(distribution)
|
3184
|
-
@ducts.from_oga(distribution)
|
3409
|
+
if not air_distribution.nil?
|
3410
|
+
@air_type = XMLHelper.get_value(air_distribution, 'AirDistributionType', :string)
|
3411
|
+
@number_of_return_registers = XMLHelper.get_value(air_distribution, 'NumberofReturnRegisters', :integer)
|
3412
|
+
@duct_leakage_to_outside_testing_exemption = XMLHelper.get_value(air_distribution, 'extension/DuctLeakageToOutsideTestingExemption', :boolean)
|
3413
|
+
@duct_leakage_measurements.from_oga(air_distribution)
|
3414
|
+
@ducts.from_oga(air_distribution)
|
3185
3415
|
end
|
3186
3416
|
end
|
3187
3417
|
end
|
@@ -3221,6 +3451,7 @@ class HPXML < Object
|
|
3221
3451
|
def to_oga(air_distribution)
|
3222
3452
|
duct_leakage_measurement_el = XMLHelper.add_element(air_distribution, 'DuctLeakageMeasurement')
|
3223
3453
|
XMLHelper.add_element(duct_leakage_measurement_el, 'DuctType', @duct_type, :string) unless @duct_type.nil?
|
3454
|
+
XMLHelper.add_element(duct_leakage_measurement_el, 'DuctLeakageTestMethod', @duct_leakage_test_method, :string) unless @duct_leakage_test_method.nil?
|
3224
3455
|
if not @duct_leakage_value.nil?
|
3225
3456
|
duct_leakage_el = XMLHelper.add_element(duct_leakage_measurement_el, 'DuctLeakage')
|
3226
3457
|
XMLHelper.add_element(duct_leakage_el, 'Units', @duct_leakage_units, :string) unless @duct_leakage_units.nil?
|
@@ -3275,8 +3506,13 @@ class HPXML < Object
|
|
3275
3506
|
def to_oga(air_distribution)
|
3276
3507
|
ducts_el = XMLHelper.add_element(air_distribution, 'Ducts')
|
3277
3508
|
XMLHelper.add_element(ducts_el, 'DuctType', @duct_type, :string) unless @duct_type.nil?
|
3509
|
+
if not @duct_insulation_material.nil?
|
3510
|
+
ins_material_el = XMLHelper.add_element(ducts_el, 'DuctInsulationMaterial')
|
3511
|
+
XMLHelper.add_element(ins_material_el, @duct_insulation_material)
|
3512
|
+
end
|
3278
3513
|
XMLHelper.add_element(ducts_el, 'DuctInsulationRValue', @duct_insulation_r_value, :float) unless @duct_insulation_r_value.nil?
|
3279
3514
|
XMLHelper.add_element(ducts_el, 'DuctLocation', @duct_location, :string, @duct_location_isdefaulted) unless @duct_location.nil?
|
3515
|
+
XMLHelper.add_element(ducts_el, 'FractionDuctArea', @duct_fraction_area, :float) unless @duct_fraction_area.nil?
|
3280
3516
|
XMLHelper.add_element(ducts_el, 'DuctSurfaceArea', @duct_surface_area, :float, @duct_surface_area_isdefaulted) unless @duct_surface_area.nil?
|
3281
3517
|
end
|
3282
3518
|
|
@@ -3284,11 +3520,11 @@ class HPXML < Object
|
|
3284
3520
|
return if duct.nil?
|
3285
3521
|
|
3286
3522
|
@duct_type = XMLHelper.get_value(duct, 'DuctType', :string)
|
3287
|
-
@duct_insulation_r_value = XMLHelper.get_value(duct, 'DuctInsulationRValue', :float)
|
3288
3523
|
@duct_insulation_material = XMLHelper.get_child_name(duct, 'DuctInsulationMaterial')
|
3289
|
-
@
|
3524
|
+
@duct_insulation_r_value = XMLHelper.get_value(duct, 'DuctInsulationRValue', :float)
|
3525
|
+
@duct_location = XMLHelper.get_value(duct, 'DuctLocation', :string)
|
3290
3526
|
@duct_fraction_area = XMLHelper.get_value(duct, 'FractionDuctArea', :float)
|
3291
|
-
@duct_surface_area
|
3527
|
+
@duct_surface_area = XMLHelper.get_value(duct, 'DuctSurfaceArea', :float)
|
3292
3528
|
end
|
3293
3529
|
end
|
3294
3530
|
|
@@ -3384,9 +3620,6 @@ class HPXML < Object
|
|
3384
3620
|
ratio = @in_unit_flow_rate / @rated_flow_rate
|
3385
3621
|
end
|
3386
3622
|
return if ratio.nil?
|
3387
|
-
if ratio >= 1.0
|
3388
|
-
fail "The in-unit flow rate of shared fan '#{@id}' must be less than the system flow rate."
|
3389
|
-
end
|
3390
3623
|
|
3391
3624
|
return ratio
|
3392
3625
|
end
|
@@ -3463,9 +3696,7 @@ class HPXML < Object
|
|
3463
3696
|
XMLHelper.add_element(ventilation_fan, 'UsedForWholeBuildingVentilation', @used_for_whole_building_ventilation, :boolean) unless @used_for_whole_building_ventilation.nil?
|
3464
3697
|
XMLHelper.add_element(ventilation_fan, 'UsedForSeasonalCoolingLoadReduction', @used_for_seasonal_cooling_load_reduction, :boolean) unless @used_for_seasonal_cooling_load_reduction.nil?
|
3465
3698
|
XMLHelper.add_element(ventilation_fan, 'IsSharedSystem', @is_shared_system, :boolean, @is_shared_system_isdefaulted) unless @is_shared_system.nil?
|
3466
|
-
|
3467
|
-
XMLHelper.add_element(ventilation_fan, 'FractionRecirculation', @fraction_recirculation, :float) unless @fraction_recirculation.nil?
|
3468
|
-
end
|
3699
|
+
XMLHelper.add_element(ventilation_fan, 'FractionRecirculation', @fraction_recirculation, :float) unless @fraction_recirculation.nil?
|
3469
3700
|
XMLHelper.add_element(ventilation_fan, 'TotalRecoveryEfficiency', @total_recovery_efficiency, :float) unless @total_recovery_efficiency.nil?
|
3470
3701
|
XMLHelper.add_element(ventilation_fan, 'SensibleRecoveryEfficiency', @sensible_recovery_efficiency, :float) unless @sensible_recovery_efficiency.nil?
|
3471
3702
|
XMLHelper.add_element(ventilation_fan, 'AdjustedTotalRecoveryEfficiency', @total_recovery_efficiency_adjusted, :float) unless @total_recovery_efficiency_adjusted.nil?
|
@@ -3476,24 +3707,22 @@ class HPXML < Object
|
|
3476
3707
|
XMLHelper.add_attribute(attached_to_hvac_distribution_system, 'idref', @distribution_system_idref)
|
3477
3708
|
end
|
3478
3709
|
XMLHelper.add_extension(ventilation_fan, 'StartHour', @start_hour, :integer, @start_hour_isdefaulted) unless @start_hour.nil?
|
3479
|
-
|
3480
|
-
|
3481
|
-
|
3482
|
-
|
3483
|
-
|
3484
|
-
|
3485
|
-
|
3486
|
-
|
3487
|
-
|
3488
|
-
|
3489
|
-
|
3490
|
-
|
3491
|
-
|
3492
|
-
|
3493
|
-
|
3494
|
-
|
3495
|
-
XMLHelper.add_element(precond_clg, 'FractionVentilationCoolLoadServed', @precooling_fraction_load_served, :float) unless @precooling_fraction_load_served.nil?
|
3496
|
-
end
|
3710
|
+
XMLHelper.add_extension(ventilation_fan, 'InUnitFlowRate', @in_unit_flow_rate, :float) unless @in_unit_flow_rate.nil?
|
3711
|
+
if (not @preheating_fuel.nil?) && (not @preheating_efficiency_cop.nil?)
|
3712
|
+
precond_htg = XMLHelper.create_elements_as_needed(ventilation_fan, ['extension', 'PreHeating'])
|
3713
|
+
XMLHelper.add_element(precond_htg, 'Fuel', @preheating_fuel, :string) unless @preheating_fuel.nil?
|
3714
|
+
eff = XMLHelper.add_element(precond_htg, 'AnnualHeatingEfficiency') unless @preheating_efficiency_cop.nil?
|
3715
|
+
XMLHelper.add_element(eff, 'Value', @preheating_efficiency_cop, :float) unless eff.nil?
|
3716
|
+
XMLHelper.add_element(eff, 'Units', UnitsCOP, :string) unless eff.nil?
|
3717
|
+
XMLHelper.add_element(precond_htg, 'FractionVentilationHeatLoadServed', @preheating_fraction_load_served, :float) unless @preheating_fraction_load_served.nil?
|
3718
|
+
end
|
3719
|
+
if (not @precooling_fuel.nil?) && (not @precooling_efficiency_cop.nil?)
|
3720
|
+
precond_clg = XMLHelper.create_elements_as_needed(ventilation_fan, ['extension', 'PreCooling'])
|
3721
|
+
XMLHelper.add_element(precond_clg, 'Fuel', @precooling_fuel, :string) unless @precooling_fuel.nil?
|
3722
|
+
eff = XMLHelper.add_element(precond_clg, 'AnnualCoolingEfficiency') unless @precooling_efficiency_cop.nil?
|
3723
|
+
XMLHelper.add_element(eff, 'Value', @precooling_efficiency_cop, :float) unless eff.nil?
|
3724
|
+
XMLHelper.add_element(eff, 'Units', UnitsCOP, :string) unless eff.nil?
|
3725
|
+
XMLHelper.add_element(precond_clg, 'FractionVentilationCoolLoadServed', @precooling_fraction_load_served, :float) unless @precooling_fraction_load_served.nil?
|
3497
3726
|
end
|
3498
3727
|
XMLHelper.add_extension(ventilation_fan, 'FlowRateNotTested', @flow_rate_not_tested, :boolean) unless @flow_rate_not_tested.nil?
|
3499
3728
|
XMLHelper.add_extension(ventilation_fan, 'FanPowerDefaulted', @fan_power_defaulted, :boolean) unless @fan_power_defaulted.nil?
|
@@ -3503,35 +3732,33 @@ class HPXML < Object
|
|
3503
3732
|
return if ventilation_fan.nil?
|
3504
3733
|
|
3505
3734
|
@id = HPXML::get_id(ventilation_fan)
|
3506
|
-
@quantity
|
3735
|
+
@quantity = XMLHelper.get_value(ventilation_fan, 'Quantity', :integer)
|
3507
3736
|
@fan_type = XMLHelper.get_value(ventilation_fan, 'FanType', :string)
|
3508
|
-
@
|
3509
|
-
@rated_flow_rate, @rated_flow_rate_isdefaulted = XMLHelper.get_value_and_defaulted(ventilation_fan, 'RatedFlowRate', :float)
|
3737
|
+
@rated_flow_rate = XMLHelper.get_value(ventilation_fan, 'RatedFlowRate', :float)
|
3510
3738
|
@tested_flow_rate = XMLHelper.get_value(ventilation_fan, 'TestedFlowRate', :float)
|
3511
|
-
@
|
3512
|
-
@fan_power, @fan_power_isdefaulted = XMLHelper.get_value_and_defaulted(ventilation_fan, 'FanPower', :float)
|
3513
|
-
@fan_power_defaulted = XMLHelper.get_value(ventilation_fan, 'extension/FanPowerDefaulted', :boolean)
|
3514
|
-
if @is_shared_system
|
3515
|
-
@fraction_recirculation = XMLHelper.get_value(ventilation_fan, 'FractionRecirculation', :float)
|
3516
|
-
@in_unit_flow_rate = XMLHelper.get_value(ventilation_fan, 'extension/InUnitFlowRate', :float)
|
3517
|
-
@preheating_fuel = XMLHelper.get_value(ventilation_fan, 'extension/PreHeating/Fuel', :string)
|
3518
|
-
@preheating_efficiency_cop = XMLHelper.get_value(ventilation_fan, "extension/PreHeating/AnnualHeatingEfficiency[Units='#{UnitsCOP}']/Value", :float)
|
3519
|
-
@preheating_fraction_load_served = XMLHelper.get_value(ventilation_fan, 'extension/PreHeating/FractionVentilationHeatLoadServed', :float)
|
3520
|
-
@precooling_fuel = XMLHelper.get_value(ventilation_fan, 'extension/PreCooling/Fuel', :string)
|
3521
|
-
@precooling_efficiency_cop = XMLHelper.get_value(ventilation_fan, "extension/PreCooling/AnnualCoolingEfficiency[Units='#{UnitsCOP}']/Value", :float)
|
3522
|
-
@precooling_fraction_load_served = XMLHelper.get_value(ventilation_fan, 'extension/PreCooling/FractionVentilationCoolLoadServed', :float)
|
3523
|
-
end
|
3524
|
-
@hours_in_operation, @hours_in_operation_isdefaulted = XMLHelper.get_value_and_defaulted(ventilation_fan, 'HoursInOperation', :float)
|
3739
|
+
@hours_in_operation = XMLHelper.get_value(ventilation_fan, 'HoursInOperation', :float)
|
3525
3740
|
@fan_location = XMLHelper.get_value(ventilation_fan, 'FanLocation', :string)
|
3526
3741
|
@used_for_local_ventilation = XMLHelper.get_value(ventilation_fan, 'UsedForLocalVentilation', :boolean)
|
3527
3742
|
@used_for_whole_building_ventilation = XMLHelper.get_value(ventilation_fan, 'UsedForWholeBuildingVentilation', :boolean)
|
3528
3743
|
@used_for_seasonal_cooling_load_reduction = XMLHelper.get_value(ventilation_fan, 'UsedForSeasonalCoolingLoadReduction', :boolean)
|
3744
|
+
@is_shared_system = XMLHelper.get_value(ventilation_fan, 'IsSharedSystem', :boolean)
|
3745
|
+
@fraction_recirculation = XMLHelper.get_value(ventilation_fan, 'FractionRecirculation', :float)
|
3529
3746
|
@total_recovery_efficiency = XMLHelper.get_value(ventilation_fan, 'TotalRecoveryEfficiency', :float)
|
3530
|
-
@total_recovery_efficiency_adjusted = XMLHelper.get_value(ventilation_fan, 'AdjustedTotalRecoveryEfficiency', :float)
|
3531
3747
|
@sensible_recovery_efficiency = XMLHelper.get_value(ventilation_fan, 'SensibleRecoveryEfficiency', :float)
|
3748
|
+
@total_recovery_efficiency_adjusted = XMLHelper.get_value(ventilation_fan, 'AdjustedTotalRecoveryEfficiency', :float)
|
3532
3749
|
@sensible_recovery_efficiency_adjusted = XMLHelper.get_value(ventilation_fan, 'AdjustedSensibleRecoveryEfficiency', :float)
|
3750
|
+
@fan_power = XMLHelper.get_value(ventilation_fan, 'FanPower', :float)
|
3533
3751
|
@distribution_system_idref = HPXML::get_idref(XMLHelper.get_element(ventilation_fan, 'AttachedToHVACDistributionSystem'))
|
3534
|
-
@start_hour
|
3752
|
+
@start_hour = XMLHelper.get_value(ventilation_fan, 'extension/StartHour', :integer)
|
3753
|
+
@in_unit_flow_rate = XMLHelper.get_value(ventilation_fan, 'extension/InUnitFlowRate', :float)
|
3754
|
+
@preheating_fuel = XMLHelper.get_value(ventilation_fan, 'extension/PreHeating/Fuel', :string)
|
3755
|
+
@preheating_efficiency_cop = XMLHelper.get_value(ventilation_fan, "extension/PreHeating/AnnualHeatingEfficiency[Units='#{UnitsCOP}']/Value", :float)
|
3756
|
+
@preheating_fraction_load_served = XMLHelper.get_value(ventilation_fan, 'extension/PreHeating/FractionVentilationHeatLoadServed', :float)
|
3757
|
+
@precooling_fuel = XMLHelper.get_value(ventilation_fan, 'extension/PreCooling/Fuel', :string)
|
3758
|
+
@precooling_efficiency_cop = XMLHelper.get_value(ventilation_fan, "extension/PreCooling/AnnualCoolingEfficiency[Units='#{UnitsCOP}']/Value", :float)
|
3759
|
+
@precooling_fraction_load_served = XMLHelper.get_value(ventilation_fan, 'extension/PreCooling/FractionVentilationCoolLoadServed', :float)
|
3760
|
+
@flow_rate_not_tested = XMLHelper.get_value(ventilation_fan, 'extension/FlowRateNotTested', :boolean)
|
3761
|
+
@fan_power_defaulted = XMLHelper.get_value(ventilation_fan, 'extension/FanPowerDefaulted', :boolean)
|
3535
3762
|
end
|
3536
3763
|
end
|
3537
3764
|
|
@@ -3553,7 +3780,7 @@ class HPXML < Object
|
|
3553
3780
|
ATTRS = [:id, :year_installed, :fuel_type, :water_heater_type, :location, :performance_adjustment,
|
3554
3781
|
:tank_volume, :fraction_dhw_load_served, :heating_capacity, :energy_factor,
|
3555
3782
|
:uniform_energy_factor, :first_hour_rating, :recovery_efficiency, :uses_desuperheater, :jacket_r_value,
|
3556
|
-
:related_hvac_idref, :
|
3783
|
+
:related_hvac_idref, :third_party_certification, :standby_loss, :temperature, :is_shared_system,
|
3557
3784
|
:number_of_units_served]
|
3558
3785
|
attr_accessor(*ATTRS)
|
3559
3786
|
|
@@ -3593,9 +3820,11 @@ class HPXML < Object
|
|
3593
3820
|
XMLHelper.add_element(water_heating_system, 'FuelType', @fuel_type, :string) unless @fuel_type.nil?
|
3594
3821
|
XMLHelper.add_element(water_heating_system, 'WaterHeaterType', @water_heater_type, :string) unless @water_heater_type.nil?
|
3595
3822
|
XMLHelper.add_element(water_heating_system, 'Location', @location, :string, @location_isdefaulted) unless @location.nil?
|
3823
|
+
XMLHelper.add_element(water_heating_system, 'YearInstalled', @year_installed, :integer) unless @year_installed.nil?
|
3596
3824
|
XMLHelper.add_element(water_heating_system, 'IsSharedSystem', @is_shared_system, :boolean, @is_shared_system_isdefaulted) unless @is_shared_system.nil?
|
3597
3825
|
XMLHelper.add_element(water_heating_system, 'NumberofUnitsServed', @number_of_units_served, :integer) unless @number_of_units_served.nil?
|
3598
3826
|
XMLHelper.add_element(water_heating_system, 'PerformanceAdjustment', @performance_adjustment, :float, @performance_adjustment_isdefaulted) unless @performance_adjustment.nil?
|
3827
|
+
XMLHelper.add_element(water_heating_system, 'ThirdPartyCertification', @third_party_certification, :string) unless @third_party_certification.nil?
|
3599
3828
|
XMLHelper.add_element(water_heating_system, 'TankVolume', @tank_volume, :float, @tank_volume_isdefaulted) unless @tank_volume.nil?
|
3600
3829
|
XMLHelper.add_element(water_heating_system, 'FractionDHWLoadServed', @fraction_dhw_load_served, :float) unless @fraction_dhw_load_served.nil?
|
3601
3830
|
XMLHelper.add_element(water_heating_system, 'HeatingCapacity', @heating_capacity, :float, @heating_capacity_isdefaulted) unless @heating_capacity.nil?
|
@@ -3621,26 +3850,26 @@ class HPXML < Object
|
|
3621
3850
|
return if water_heating_system.nil?
|
3622
3851
|
|
3623
3852
|
@id = HPXML::get_id(water_heating_system)
|
3624
|
-
@year_installed = XMLHelper.get_value(water_heating_system, 'YearInstalled', :integer)
|
3625
3853
|
@fuel_type = XMLHelper.get_value(water_heating_system, 'FuelType', :string)
|
3626
3854
|
@water_heater_type = XMLHelper.get_value(water_heating_system, 'WaterHeaterType', :string)
|
3627
|
-
@location
|
3628
|
-
@
|
3855
|
+
@location = XMLHelper.get_value(water_heating_system, 'Location', :string)
|
3856
|
+
@year_installed = XMLHelper.get_value(water_heating_system, 'YearInstalled', :integer)
|
3857
|
+
@is_shared_system = XMLHelper.get_value(water_heating_system, 'IsSharedSystem', :boolean)
|
3629
3858
|
@number_of_units_served = XMLHelper.get_value(water_heating_system, 'NumberofUnitsServed', :integer)
|
3630
|
-
@performance_adjustment
|
3631
|
-
@
|
3859
|
+
@performance_adjustment = XMLHelper.get_value(water_heating_system, 'PerformanceAdjustment', :float)
|
3860
|
+
@third_party_certification = XMLHelper.get_value(water_heating_system, 'ThirdPartyCertification', :string)
|
3861
|
+
@tank_volume = XMLHelper.get_value(water_heating_system, 'TankVolume', :float)
|
3632
3862
|
@fraction_dhw_load_served = XMLHelper.get_value(water_heating_system, 'FractionDHWLoadServed', :float)
|
3633
|
-
@heating_capacity
|
3863
|
+
@heating_capacity = XMLHelper.get_value(water_heating_system, 'HeatingCapacity', :float)
|
3634
3864
|
@energy_factor = XMLHelper.get_value(water_heating_system, 'EnergyFactor', :float)
|
3635
3865
|
@uniform_energy_factor = XMLHelper.get_value(water_heating_system, 'UniformEnergyFactor', :float)
|
3636
3866
|
@first_hour_rating = XMLHelper.get_value(water_heating_system, 'FirstHourRating', :float)
|
3637
|
-
@recovery_efficiency
|
3638
|
-
@uses_desuperheater = XMLHelper.get_value(water_heating_system, 'UsesDesuperheater', :boolean)
|
3867
|
+
@recovery_efficiency = XMLHelper.get_value(water_heating_system, 'RecoveryEfficiency', :float)
|
3639
3868
|
@jacket_r_value = XMLHelper.get_value(water_heating_system, 'WaterHeaterInsulation/Jacket/JacketRValue', :float)
|
3869
|
+
@standby_loss = XMLHelper.get_value(water_heating_system, 'StandbyLoss', :float)
|
3870
|
+
@temperature = XMLHelper.get_value(water_heating_system, 'HotWaterTemperature', :float)
|
3871
|
+
@uses_desuperheater = XMLHelper.get_value(water_heating_system, 'UsesDesuperheater', :boolean)
|
3640
3872
|
@related_hvac_idref = HPXML::get_idref(XMLHelper.get_element(water_heating_system, 'RelatedHVACSystem'))
|
3641
|
-
@energy_star = XMLHelper.get_values(water_heating_system, 'ThirdPartyCertification', :string).include?('Energy Star')
|
3642
|
-
@standby_loss, @standby_loss_isdefaulted = XMLHelper.get_value_and_defaulted(water_heating_system, 'StandbyLoss', :float)
|
3643
|
-
@temperature, @temperature_isdefaulted = XMLHelper.get_value_and_defaulted(water_heating_system, 'HotWaterTemperature', :float)
|
3644
3873
|
end
|
3645
3874
|
end
|
3646
3875
|
|
@@ -3683,12 +3912,12 @@ class HPXML < Object
|
|
3683
3912
|
sys_id = XMLHelper.add_element(hot_water_distribution, 'SystemIdentifier')
|
3684
3913
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
3685
3914
|
if not @system_type.nil?
|
3686
|
-
|
3915
|
+
system_type_el = XMLHelper.add_element(hot_water_distribution, 'SystemType')
|
3687
3916
|
if @system_type == DHWDistTypeStandard
|
3688
|
-
standard = XMLHelper.add_element(
|
3917
|
+
standard = XMLHelper.add_element(system_type_el, @system_type)
|
3689
3918
|
XMLHelper.add_element(standard, 'PipingLength', @standard_piping_length, :float, @standard_piping_length_isdefaulted) unless @standard_piping_length.nil?
|
3690
3919
|
elsif system_type == DHWDistTypeRecirc
|
3691
|
-
recirculation = XMLHelper.add_element(
|
3920
|
+
recirculation = XMLHelper.add_element(system_type_el, @system_type)
|
3692
3921
|
XMLHelper.add_element(recirculation, 'ControlType', @recirculation_control_type, :string) unless @recirculation_control_type.nil?
|
3693
3922
|
XMLHelper.add_element(recirculation, 'RecirculationPipingLoopLength', @recirculation_piping_length, :float, @recirculation_piping_length_isdefaulted) unless @recirculation_piping_length.nil?
|
3694
3923
|
XMLHelper.add_element(recirculation, 'BranchPipingLoopLength', @recirculation_branch_piping_length, :float, @recirculation_branch_piping_length_isdefaulted) unless @recirculation_branch_piping_length.nil?
|
@@ -3721,22 +3950,22 @@ class HPXML < Object
|
|
3721
3950
|
|
3722
3951
|
@id = HPXML::get_id(hot_water_distribution)
|
3723
3952
|
@system_type = XMLHelper.get_child_name(hot_water_distribution, 'SystemType')
|
3724
|
-
@pipe_r_value, @pipe_r_value_isdefaulted = XMLHelper.get_value_and_defaulted(hot_water_distribution, 'PipeInsulation/PipeRValue', :float)
|
3725
3953
|
if @system_type == 'Standard'
|
3726
|
-
@standard_piping_length
|
3954
|
+
@standard_piping_length = XMLHelper.get_value(hot_water_distribution, 'SystemType/Standard/PipingLength', :float)
|
3727
3955
|
elsif @system_type == 'Recirculation'
|
3728
3956
|
@recirculation_control_type = XMLHelper.get_value(hot_water_distribution, 'SystemType/Recirculation/ControlType', :string)
|
3729
|
-
@recirculation_piping_length
|
3730
|
-
@recirculation_branch_piping_length
|
3731
|
-
@recirculation_pump_power
|
3957
|
+
@recirculation_piping_length = XMLHelper.get_value(hot_water_distribution, 'SystemType/Recirculation/RecirculationPipingLoopLength', :float)
|
3958
|
+
@recirculation_branch_piping_length = XMLHelper.get_value(hot_water_distribution, 'SystemType/Recirculation/BranchPipingLoopLength', :float)
|
3959
|
+
@recirculation_pump_power = XMLHelper.get_value(hot_water_distribution, 'SystemType/Recirculation/PumpPower', :float)
|
3732
3960
|
end
|
3961
|
+
@pipe_r_value = XMLHelper.get_value(hot_water_distribution, 'PipeInsulation/PipeRValue', :float)
|
3733
3962
|
@dwhr_facilities_connected = XMLHelper.get_value(hot_water_distribution, 'DrainWaterHeatRecovery/FacilitiesConnected', :string)
|
3734
3963
|
@dwhr_equal_flow = XMLHelper.get_value(hot_water_distribution, 'DrainWaterHeatRecovery/EqualFlow', :boolean)
|
3735
3964
|
@dwhr_efficiency = XMLHelper.get_value(hot_water_distribution, 'DrainWaterHeatRecovery/Efficiency', :float)
|
3736
3965
|
@has_shared_recirculation = XMLHelper.has_element(hot_water_distribution, 'extension/SharedRecirculation')
|
3737
3966
|
if @has_shared_recirculation
|
3738
3967
|
@shared_recirculation_number_of_units_served = XMLHelper.get_value(hot_water_distribution, 'extension/SharedRecirculation/NumberofUnitsServed', :integer)
|
3739
|
-
@shared_recirculation_pump_power
|
3968
|
+
@shared_recirculation_pump_power = XMLHelper.get_value(hot_water_distribution, 'extension/SharedRecirculation/PumpPower', :float)
|
3740
3969
|
@shared_recirculation_control_type = XMLHelper.get_value(hot_water_distribution, 'extension/SharedRecirculation/ControlType', :string)
|
3741
3970
|
end
|
3742
3971
|
end
|
@@ -3811,7 +4040,7 @@ class HPXML < Object
|
|
3811
4040
|
water_heating = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Systems/WaterHeating')
|
3812
4041
|
return if water_heating.nil?
|
3813
4042
|
|
3814
|
-
@water_fixtures_usage_multiplier
|
4043
|
+
@water_fixtures_usage_multiplier = XMLHelper.get_value(water_heating, 'extension/WaterFixturesUsageMultiplier', :float)
|
3815
4044
|
end
|
3816
4045
|
end
|
3817
4046
|
|
@@ -3886,12 +4115,12 @@ class HPXML < Object
|
|
3886
4115
|
@system_type = XMLHelper.get_value(solar_thermal_system, 'SystemType', :string)
|
3887
4116
|
@collector_area = XMLHelper.get_value(solar_thermal_system, 'CollectorArea', :float)
|
3888
4117
|
@collector_loop_type = XMLHelper.get_value(solar_thermal_system, 'CollectorLoopType', :string)
|
3889
|
-
@collector_azimuth = XMLHelper.get_value(solar_thermal_system, 'CollectorAzimuth', :integer)
|
3890
4118
|
@collector_type = XMLHelper.get_value(solar_thermal_system, 'CollectorType', :string)
|
4119
|
+
@collector_azimuth = XMLHelper.get_value(solar_thermal_system, 'CollectorAzimuth', :integer)
|
3891
4120
|
@collector_tilt = XMLHelper.get_value(solar_thermal_system, 'CollectorTilt', :float)
|
3892
4121
|
@collector_frta = XMLHelper.get_value(solar_thermal_system, 'CollectorRatedOpticalEfficiency', :float)
|
3893
4122
|
@collector_frul = XMLHelper.get_value(solar_thermal_system, 'CollectorRatedThermalLosses', :float)
|
3894
|
-
@storage_volume
|
4123
|
+
@storage_volume = XMLHelper.get_value(solar_thermal_system, 'StorageVolume', :float)
|
3895
4124
|
@water_heating_system_idref = HPXML::get_idref(XMLHelper.get_element(solar_thermal_system, 'ConnectedTo'))
|
3896
4125
|
@solar_fraction = XMLHelper.get_value(solar_thermal_system, 'SolarFraction', :float)
|
3897
4126
|
end
|
@@ -3937,9 +4166,11 @@ class HPXML < Object
|
|
3937
4166
|
XMLHelper.add_element(pv_system, 'Location', @location, :string, @location_isdefaulted) unless @location.nil?
|
3938
4167
|
XMLHelper.add_element(pv_system, 'ModuleType', @module_type, :string, @module_type_isdefaulted) unless @module_type.nil?
|
3939
4168
|
XMLHelper.add_element(pv_system, 'Tracking', @tracking, :string, @tracking_isdefaulted) unless @tracking.nil?
|
4169
|
+
XMLHelper.add_element(pv_system, 'ArrayOrientation', @array_orientation, :string) unless @array_orientation.nil?
|
3940
4170
|
XMLHelper.add_element(pv_system, 'ArrayAzimuth', @array_azimuth, :integer) unless @array_azimuth.nil?
|
3941
4171
|
XMLHelper.add_element(pv_system, 'ArrayTilt', @array_tilt, :float) unless @array_tilt.nil?
|
3942
4172
|
XMLHelper.add_element(pv_system, 'MaxPowerOutput', @max_power_output, :float) unless @max_power_output.nil?
|
4173
|
+
XMLHelper.add_element(pv_system, 'NumberOfPanels', @number_of_panels, :integer) unless @number_of_panels.nil?
|
3943
4174
|
XMLHelper.add_element(pv_system, 'InverterEfficiency', @inverter_efficiency, :float, @inverter_efficiency_isdefaulted) unless @inverter_efficiency.nil?
|
3944
4175
|
XMLHelper.add_element(pv_system, 'SystemLossesFraction', @system_losses_fraction, :float, @system_losses_fraction_isdefaulted) unless @system_losses_fraction.nil?
|
3945
4176
|
XMLHelper.add_element(pv_system, 'YearModulesManufactured', @year_modules_manufactured, :integer) unless @year_modules_manufactured.nil?
|
@@ -3950,17 +4181,17 @@ class HPXML < Object
|
|
3950
4181
|
return if pv_system.nil?
|
3951
4182
|
|
3952
4183
|
@id = HPXML::get_id(pv_system)
|
3953
|
-
@is_shared_system
|
3954
|
-
@location
|
3955
|
-
@module_type
|
3956
|
-
@tracking
|
4184
|
+
@is_shared_system = XMLHelper.get_value(pv_system, 'IsSharedSystem', :boolean)
|
4185
|
+
@location = XMLHelper.get_value(pv_system, 'Location', :string)
|
4186
|
+
@module_type = XMLHelper.get_value(pv_system, 'ModuleType', :string)
|
4187
|
+
@tracking = XMLHelper.get_value(pv_system, 'Tracking', :string)
|
3957
4188
|
@array_orientation = XMLHelper.get_value(pv_system, 'ArrayOrientation', :string)
|
3958
4189
|
@array_azimuth = XMLHelper.get_value(pv_system, 'ArrayAzimuth', :integer)
|
3959
4190
|
@array_tilt = XMLHelper.get_value(pv_system, 'ArrayTilt', :float)
|
3960
4191
|
@max_power_output = XMLHelper.get_value(pv_system, 'MaxPowerOutput', :float)
|
3961
|
-
@inverter_efficiency, @inverter_efficiency_isdefaulted = XMLHelper.get_value_and_defaulted(pv_system, 'InverterEfficiency', :float)
|
3962
|
-
@system_losses_fraction, @system_losses_fraction_isdefaulted = XMLHelper.get_value_and_defaulted(pv_system, 'SystemLossesFraction', :float)
|
3963
4192
|
@number_of_panels = XMLHelper.get_value(pv_system, 'NumberOfPanels', :integer)
|
4193
|
+
@inverter_efficiency = XMLHelper.get_value(pv_system, 'InverterEfficiency', :float)
|
4194
|
+
@system_losses_fraction = XMLHelper.get_value(pv_system, 'SystemLossesFraction', :float)
|
3964
4195
|
@year_modules_manufactured = XMLHelper.get_value(pv_system, 'YearModulesManufactured', :integer)
|
3965
4196
|
@number_of_bedrooms_served = XMLHelper.get_value(pv_system, 'extension/NumberofBedroomsServed', :integer)
|
3966
4197
|
end
|
@@ -4011,7 +4242,7 @@ class HPXML < Object
|
|
4011
4242
|
return if generator.nil?
|
4012
4243
|
|
4013
4244
|
@id = HPXML::get_id(generator)
|
4014
|
-
@is_shared_system
|
4245
|
+
@is_shared_system = XMLHelper.get_value(generator, 'IsSharedSystem', :boolean)
|
4015
4246
|
@fuel_type = XMLHelper.get_value(generator, 'FuelType', :string)
|
4016
4247
|
@annual_consumption_kbtu = XMLHelper.get_value(generator, 'AnnualConsumptionkBtu', :float)
|
4017
4248
|
@annual_output_kwh = XMLHelper.get_value(generator, 'AnnualOutputkWh', :float)
|
@@ -4092,19 +4323,19 @@ class HPXML < Object
|
|
4092
4323
|
|
4093
4324
|
@id = HPXML::get_id(clothes_washer)
|
4094
4325
|
@number_of_units = XMLHelper.get_value(clothes_washer, 'NumberofUnits', :integer)
|
4095
|
-
@is_shared_appliance
|
4326
|
+
@is_shared_appliance = XMLHelper.get_value(clothes_washer, 'IsSharedAppliance', :boolean)
|
4096
4327
|
@number_of_units_served = XMLHelper.get_value(clothes_washer, 'NumberofUnitsServed', :integer)
|
4097
|
-
@location, @location_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'Location', :string)
|
4098
|
-
@modified_energy_factor = XMLHelper.get_value(clothes_washer, 'ModifiedEnergyFactor', :float)
|
4099
|
-
@integrated_modified_energy_factor, @integrated_modified_energy_factor_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'IntegratedModifiedEnergyFactor', :float)
|
4100
|
-
@rated_annual_kwh, @rated_annual_kwh_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'RatedAnnualkWh', :float)
|
4101
|
-
@label_electric_rate, @label_electric_rate_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'LabelElectricRate', :float)
|
4102
|
-
@label_gas_rate, @label_gas_rate_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'LabelGasRate', :float)
|
4103
|
-
@label_annual_gas_cost, @label_annual_gas_cost_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'LabelAnnualGasCost', :float)
|
4104
|
-
@label_usage, @label_usage_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'LabelUsage', :float)
|
4105
|
-
@capacity, @capacity_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'Capacity', :float)
|
4106
|
-
@usage_multiplier, @usage_multiplier_isdefaulted = XMLHelper.get_value_and_defaulted(clothes_washer, 'extension/UsageMultiplier', :float)
|
4107
4328
|
@water_heating_system_idref = HPXML::get_idref(XMLHelper.get_element(clothes_washer, 'AttachedToWaterHeatingSystem'))
|
4329
|
+
@location = XMLHelper.get_value(clothes_washer, 'Location', :string)
|
4330
|
+
@modified_energy_factor = XMLHelper.get_value(clothes_washer, 'ModifiedEnergyFactor', :float)
|
4331
|
+
@integrated_modified_energy_factor = XMLHelper.get_value(clothes_washer, 'IntegratedModifiedEnergyFactor', :float)
|
4332
|
+
@rated_annual_kwh = XMLHelper.get_value(clothes_washer, 'RatedAnnualkWh', :float)
|
4333
|
+
@label_electric_rate = XMLHelper.get_value(clothes_washer, 'LabelElectricRate', :float)
|
4334
|
+
@label_gas_rate = XMLHelper.get_value(clothes_washer, 'LabelGasRate', :float)
|
4335
|
+
@label_annual_gas_cost = XMLHelper.get_value(clothes_washer, 'LabelAnnualGasCost', :float)
|
4336
|
+
@label_usage = XMLHelper.get_value(clothes_washer, 'LabelUsage', :float)
|
4337
|
+
@capacity = XMLHelper.get_value(clothes_washer, 'Capacity', :float)
|
4338
|
+
@usage_multiplier = XMLHelper.get_value(clothes_washer, 'extension/UsageMultiplier', :float)
|
4108
4339
|
end
|
4109
4340
|
end
|
4110
4341
|
|
@@ -4162,16 +4393,16 @@ class HPXML < Object
|
|
4162
4393
|
|
4163
4394
|
@id = HPXML::get_id(clothes_dryer)
|
4164
4395
|
@number_of_units = XMLHelper.get_value(clothes_dryer, 'NumberofUnits', :integer)
|
4165
|
-
@is_shared_appliance
|
4396
|
+
@is_shared_appliance = XMLHelper.get_value(clothes_dryer, 'IsSharedAppliance', :boolean)
|
4166
4397
|
@number_of_units_served = XMLHelper.get_value(clothes_dryer, 'NumberofUnitsServed', :integer)
|
4167
|
-
@location
|
4398
|
+
@location = XMLHelper.get_value(clothes_dryer, 'Location', :string)
|
4168
4399
|
@fuel_type = XMLHelper.get_value(clothes_dryer, 'FuelType', :string)
|
4169
4400
|
@energy_factor = XMLHelper.get_value(clothes_dryer, 'EnergyFactor', :float)
|
4170
|
-
@combined_energy_factor
|
4171
|
-
@control_type
|
4172
|
-
@usage_multiplier
|
4173
|
-
@is_vented
|
4174
|
-
@vented_flow_rate
|
4401
|
+
@combined_energy_factor = XMLHelper.get_value(clothes_dryer, 'CombinedEnergyFactor', :float)
|
4402
|
+
@control_type = XMLHelper.get_value(clothes_dryer, 'ControlType', :string)
|
4403
|
+
@usage_multiplier = XMLHelper.get_value(clothes_dryer, 'extension/UsageMultiplier', :float)
|
4404
|
+
@is_vented = XMLHelper.get_value(clothes_dryer, 'extension/IsVented', :boolean)
|
4405
|
+
@vented_flow_rate = XMLHelper.get_value(clothes_dryer, 'extension/VentedFlowRate', :float)
|
4175
4406
|
end
|
4176
4407
|
end
|
4177
4408
|
|
@@ -4243,17 +4474,17 @@ class HPXML < Object
|
|
4243
4474
|
return if dishwasher.nil?
|
4244
4475
|
|
4245
4476
|
@id = HPXML::get_id(dishwasher)
|
4246
|
-
@is_shared_appliance
|
4247
|
-
@location, @location_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'Location', :string)
|
4248
|
-
@rated_annual_kwh, @rated_annual_kwh_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'RatedAnnualkWh', :float)
|
4249
|
-
@energy_factor = XMLHelper.get_value(dishwasher, 'EnergyFactor', :float)
|
4250
|
-
@place_setting_capacity, @place_setting_capacity_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'PlaceSettingCapacity', :integer)
|
4251
|
-
@label_electric_rate, @label_electric_rate_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'LabelElectricRate', :float)
|
4252
|
-
@label_gas_rate, @label_gas_rate_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'LabelGasRate', :float)
|
4253
|
-
@label_annual_gas_cost, @label_annual_gas_cost_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'LabelAnnualGasCost', :float)
|
4254
|
-
@label_usage, @label_usage_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'LabelUsage', :float)
|
4255
|
-
@usage_multiplier, @usage_multiplier_isdefaulted = XMLHelper.get_value_and_defaulted(dishwasher, 'extension/UsageMultiplier', :float)
|
4477
|
+
@is_shared_appliance = XMLHelper.get_value(dishwasher, 'IsSharedAppliance', :boolean)
|
4256
4478
|
@water_heating_system_idref = HPXML::get_idref(XMLHelper.get_element(dishwasher, 'AttachedToWaterHeatingSystem'))
|
4479
|
+
@location = XMLHelper.get_value(dishwasher, 'Location', :string)
|
4480
|
+
@rated_annual_kwh = XMLHelper.get_value(dishwasher, 'RatedAnnualkWh', :float)
|
4481
|
+
@energy_factor = XMLHelper.get_value(dishwasher, 'EnergyFactor', :float)
|
4482
|
+
@place_setting_capacity = XMLHelper.get_value(dishwasher, 'PlaceSettingCapacity', :integer)
|
4483
|
+
@label_electric_rate = XMLHelper.get_value(dishwasher, 'LabelElectricRate', :float)
|
4484
|
+
@label_gas_rate = XMLHelper.get_value(dishwasher, 'LabelGasRate', :float)
|
4485
|
+
@label_annual_gas_cost = XMLHelper.get_value(dishwasher, 'LabelAnnualGasCost', :float)
|
4486
|
+
@label_usage = XMLHelper.get_value(dishwasher, 'LabelUsage', :float)
|
4487
|
+
@usage_multiplier = XMLHelper.get_value(dishwasher, 'extension/UsageMultiplier', :float)
|
4257
4488
|
end
|
4258
4489
|
end
|
4259
4490
|
|
@@ -4306,14 +4537,14 @@ class HPXML < Object
|
|
4306
4537
|
return if refrigerator.nil?
|
4307
4538
|
|
4308
4539
|
@id = HPXML::get_id(refrigerator)
|
4309
|
-
@location
|
4310
|
-
@rated_annual_kwh
|
4311
|
-
@primary_indicator
|
4540
|
+
@location = XMLHelper.get_value(refrigerator, 'Location', :string)
|
4541
|
+
@rated_annual_kwh = XMLHelper.get_value(refrigerator, 'RatedAnnualkWh', :float)
|
4542
|
+
@primary_indicator = XMLHelper.get_value(refrigerator, 'PrimaryIndicator', :boolean)
|
4312
4543
|
@adjusted_annual_kwh = XMLHelper.get_value(refrigerator, 'extension/AdjustedAnnualkWh', :float)
|
4313
|
-
@usage_multiplier
|
4314
|
-
@weekday_fractions
|
4315
|
-
@weekend_fractions
|
4316
|
-
@monthly_multipliers
|
4544
|
+
@usage_multiplier = XMLHelper.get_value(refrigerator, 'extension/UsageMultiplier', :float)
|
4545
|
+
@weekday_fractions = XMLHelper.get_value(refrigerator, 'extension/WeekdayScheduleFractions', :string)
|
4546
|
+
@weekend_fractions = XMLHelper.get_value(refrigerator, 'extension/WeekendScheduleFractions', :string)
|
4547
|
+
@monthly_multipliers = XMLHelper.get_value(refrigerator, 'extension/MonthlyScheduleMultipliers', :string)
|
4317
4548
|
end
|
4318
4549
|
end
|
4319
4550
|
|
@@ -4365,13 +4596,13 @@ class HPXML < Object
|
|
4365
4596
|
return if freezer.nil?
|
4366
4597
|
|
4367
4598
|
@id = HPXML::get_id(freezer)
|
4368
|
-
@location
|
4369
|
-
@rated_annual_kwh
|
4599
|
+
@location = XMLHelper.get_value(freezer, 'Location', :string)
|
4600
|
+
@rated_annual_kwh = XMLHelper.get_value(freezer, 'RatedAnnualkWh', :float)
|
4370
4601
|
@adjusted_annual_kwh = XMLHelper.get_value(freezer, 'extension/AdjustedAnnualkWh', :float)
|
4371
|
-
@usage_multiplier
|
4372
|
-
@weekday_fractions
|
4373
|
-
@weekend_fractions
|
4374
|
-
@monthly_multipliers
|
4602
|
+
@usage_multiplier = XMLHelper.get_value(freezer, 'extension/UsageMultiplier', :float)
|
4603
|
+
@weekday_fractions = XMLHelper.get_value(freezer, 'extension/WeekdayScheduleFractions', :string)
|
4604
|
+
@weekend_fractions = XMLHelper.get_value(freezer, 'extension/WeekendScheduleFractions', :string)
|
4605
|
+
@monthly_multipliers = XMLHelper.get_value(freezer, 'extension/MonthlyScheduleMultipliers', :string)
|
4375
4606
|
end
|
4376
4607
|
end
|
4377
4608
|
|
@@ -4390,7 +4621,8 @@ class HPXML < Object
|
|
4390
4621
|
end
|
4391
4622
|
|
4392
4623
|
class Dehumidifier < BaseElement
|
4393
|
-
ATTRS = [:id, :type, :capacity, :energy_factor, :integrated_energy_factor, :rh_setpoint, :fraction_served
|
4624
|
+
ATTRS = [:id, :type, :capacity, :energy_factor, :integrated_energy_factor, :rh_setpoint, :fraction_served,
|
4625
|
+
:location]
|
4394
4626
|
attr_accessor(*ATTRS)
|
4395
4627
|
|
4396
4628
|
def delete
|
@@ -4410,6 +4642,7 @@ class HPXML < Object
|
|
4410
4642
|
sys_id = XMLHelper.add_element(dehumidifier, 'SystemIdentifier')
|
4411
4643
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
4412
4644
|
XMLHelper.add_element(dehumidifier, 'Type', @type, :string) unless @type.nil?
|
4645
|
+
XMLHelper.add_element(dehumidifier, 'Location', @location, :string) unless @location.nil?
|
4413
4646
|
XMLHelper.add_element(dehumidifier, 'Capacity', @capacity, :float) unless @capacity.nil?
|
4414
4647
|
XMLHelper.add_element(dehumidifier, 'EnergyFactor', @energy_factor, :float) unless @energy_factor.nil?
|
4415
4648
|
XMLHelper.add_element(dehumidifier, 'IntegratedEnergyFactor', @integrated_energy_factor, :float) unless @integrated_energy_factor.nil?
|
@@ -4422,6 +4655,7 @@ class HPXML < Object
|
|
4422
4655
|
|
4423
4656
|
@id = HPXML::get_id(dehumidifier)
|
4424
4657
|
@type = XMLHelper.get_value(dehumidifier, 'Type', :string)
|
4658
|
+
@location = XMLHelper.get_value(dehumidifier, 'Location', :string)
|
4425
4659
|
@capacity = XMLHelper.get_value(dehumidifier, 'Capacity', :float)
|
4426
4660
|
@energy_factor = XMLHelper.get_value(dehumidifier, 'EnergyFactor', :float)
|
4427
4661
|
@integrated_energy_factor = XMLHelper.get_value(dehumidifier, 'IntegratedEnergyFactor', :float)
|
@@ -4478,13 +4712,13 @@ class HPXML < Object
|
|
4478
4712
|
return if cooking_range.nil?
|
4479
4713
|
|
4480
4714
|
@id = HPXML::get_id(cooking_range)
|
4481
|
-
@location
|
4715
|
+
@location = XMLHelper.get_value(cooking_range, 'Location', :string)
|
4482
4716
|
@fuel_type = XMLHelper.get_value(cooking_range, 'FuelType', :string)
|
4483
|
-
@is_induction
|
4484
|
-
@usage_multiplier
|
4485
|
-
@weekday_fractions
|
4486
|
-
@weekend_fractions
|
4487
|
-
@monthly_multipliers
|
4717
|
+
@is_induction = XMLHelper.get_value(cooking_range, 'IsInduction', :boolean)
|
4718
|
+
@usage_multiplier = XMLHelper.get_value(cooking_range, 'extension/UsageMultiplier', :float)
|
4719
|
+
@weekday_fractions = XMLHelper.get_value(cooking_range, 'extension/WeekdayScheduleFractions', :string)
|
4720
|
+
@weekend_fractions = XMLHelper.get_value(cooking_range, 'extension/WeekendScheduleFractions', :string)
|
4721
|
+
@monthly_multipliers = XMLHelper.get_value(cooking_range, 'extension/MonthlyScheduleMultipliers', :string)
|
4488
4722
|
end
|
4489
4723
|
end
|
4490
4724
|
|
@@ -4529,7 +4763,7 @@ class HPXML < Object
|
|
4529
4763
|
return if oven.nil?
|
4530
4764
|
|
4531
4765
|
@id = HPXML::get_id(oven)
|
4532
|
-
@is_convection
|
4766
|
+
@is_convection = XMLHelper.get_value(oven, 'IsConvection', :boolean)
|
4533
4767
|
end
|
4534
4768
|
end
|
4535
4769
|
|
@@ -4637,27 +4871,27 @@ class HPXML < Object
|
|
4637
4871
|
lighting = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Lighting')
|
4638
4872
|
return if lighting.nil?
|
4639
4873
|
|
4640
|
-
@interior_usage_multiplier
|
4641
|
-
@garage_usage_multiplier
|
4642
|
-
@exterior_usage_multiplier
|
4643
|
-
@interior_weekday_fractions
|
4644
|
-
@interior_weekend_fractions
|
4645
|
-
@interior_monthly_multipliers
|
4646
|
-
@garage_weekday_fractions
|
4647
|
-
@garage_weekend_fractions
|
4648
|
-
@garage_monthly_multipliers
|
4649
|
-
@exterior_weekday_fractions
|
4650
|
-
@exterior_weekend_fractions
|
4651
|
-
@exterior_monthly_multipliers
|
4874
|
+
@interior_usage_multiplier = XMLHelper.get_value(lighting, 'extension/InteriorUsageMultiplier', :float)
|
4875
|
+
@garage_usage_multiplier = XMLHelper.get_value(lighting, 'extension/GarageUsageMultiplier', :float)
|
4876
|
+
@exterior_usage_multiplier = XMLHelper.get_value(lighting, 'extension/ExteriorUsageMultiplier', :float)
|
4877
|
+
@interior_weekday_fractions = XMLHelper.get_value(lighting, 'extension/InteriorWeekdayScheduleFractions', :string)
|
4878
|
+
@interior_weekend_fractions = XMLHelper.get_value(lighting, 'extension/InteriorWeekendScheduleFractions', :string)
|
4879
|
+
@interior_monthly_multipliers = XMLHelper.get_value(lighting, 'extension/InteriorMonthlyScheduleMultipliers', :string)
|
4880
|
+
@garage_weekday_fractions = XMLHelper.get_value(lighting, 'extension/GarageWeekdayScheduleFractions', :string)
|
4881
|
+
@garage_weekend_fractions = XMLHelper.get_value(lighting, 'extension/GarageWeekendScheduleFractions', :string)
|
4882
|
+
@garage_monthly_multipliers = XMLHelper.get_value(lighting, 'extension/GarageMonthlyScheduleMultipliers', :string)
|
4883
|
+
@exterior_weekday_fractions = XMLHelper.get_value(lighting, 'extension/ExteriorWeekdayScheduleFractions', :string)
|
4884
|
+
@exterior_weekend_fractions = XMLHelper.get_value(lighting, 'extension/ExteriorWeekendScheduleFractions', :string)
|
4885
|
+
@exterior_monthly_multipliers = XMLHelper.get_value(lighting, 'extension/ExteriorMonthlyScheduleMultipliers', :string)
|
4652
4886
|
if not XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Lighting/extension/ExteriorHolidayLighting').nil?
|
4653
4887
|
@holiday_exists = true
|
4654
|
-
@holiday_kwh_per_day
|
4655
|
-
@holiday_period_begin_month
|
4656
|
-
@holiday_period_begin_day
|
4657
|
-
@holiday_period_end_month
|
4658
|
-
@holiday_period_end_day
|
4659
|
-
@holiday_weekday_fractions
|
4660
|
-
@holiday_weekend_fractions
|
4888
|
+
@holiday_kwh_per_day = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/Load[Units="kWh/day"]/Value', :float)
|
4889
|
+
@holiday_period_begin_month = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/PeriodBeginMonth', :integer)
|
4890
|
+
@holiday_period_begin_day = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/PeriodBeginDayOfMonth', :integer)
|
4891
|
+
@holiday_period_end_month = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/PeriodEndMonth', :integer)
|
4892
|
+
@holiday_period_end_day = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/PeriodEndDayOfMonth', :integer)
|
4893
|
+
@holiday_weekday_fractions = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/WeekdayScheduleFractions', :string)
|
4894
|
+
@holiday_weekend_fractions = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/WeekendScheduleFractions', :string)
|
4661
4895
|
else
|
4662
4896
|
@holiday_exists = false
|
4663
4897
|
end
|
@@ -4708,8 +4942,8 @@ class HPXML < Object
|
|
4708
4942
|
|
4709
4943
|
def from_oga(ceiling_fan)
|
4710
4944
|
@id = HPXML::get_id(ceiling_fan)
|
4711
|
-
@efficiency
|
4712
|
-
@quantity
|
4945
|
+
@efficiency = XMLHelper.get_value(ceiling_fan, "Airflow[FanSpeed='medium']/Efficiency", :float)
|
4946
|
+
@quantity = XMLHelper.get_value(ceiling_fan, 'Quantity', :integer)
|
4713
4947
|
end
|
4714
4948
|
end
|
4715
4949
|
|
@@ -4728,8 +4962,8 @@ class HPXML < Object
|
|
4728
4962
|
end
|
4729
4963
|
|
4730
4964
|
class Pool < BaseElement
|
4731
|
-
ATTRS = [:id, :heater_id, :heater_type, :heater_load_units, :heater_load_value, :heater_usage_multiplier,
|
4732
|
-
:pump_id, :pump_kwh_per_year, :pump_usage_multiplier,
|
4965
|
+
ATTRS = [:id, :type, :heater_id, :heater_type, :heater_load_units, :heater_load_value, :heater_usage_multiplier,
|
4966
|
+
:pump_id, :pump_type, :pump_kwh_per_year, :pump_usage_multiplier,
|
4733
4967
|
:heater_weekday_fractions, :heater_weekend_fractions, :heater_monthly_multipliers,
|
4734
4968
|
:pump_weekday_fractions, :pump_weekend_fractions, :pump_monthly_multipliers]
|
4735
4969
|
attr_accessor(*ATTRS)
|
@@ -4750,24 +4984,28 @@ class HPXML < Object
|
|
4750
4984
|
pool = XMLHelper.add_element(pools, 'Pool')
|
4751
4985
|
sys_id = XMLHelper.add_element(pool, 'SystemIdentifier')
|
4752
4986
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
4753
|
-
|
4754
|
-
|
4755
|
-
|
4756
|
-
|
4757
|
-
XMLHelper.
|
4758
|
-
|
4759
|
-
|
4760
|
-
|
4761
|
-
|
4762
|
-
|
4763
|
-
XMLHelper.add_element(
|
4764
|
-
|
4765
|
-
|
4766
|
-
|
4767
|
-
|
4768
|
-
|
4769
|
-
|
4770
|
-
|
4987
|
+
XMLHelper.add_element(pool, 'Type', @type, :string) unless @type.nil?
|
4988
|
+
if @type != HPXML::TypeNone
|
4989
|
+
pumps = XMLHelper.add_element(pool, 'PoolPumps')
|
4990
|
+
pool_pump = XMLHelper.add_element(pumps, 'PoolPump')
|
4991
|
+
sys_id = XMLHelper.add_element(pool_pump, 'SystemIdentifier')
|
4992
|
+
if not @pump_id.nil?
|
4993
|
+
XMLHelper.add_attribute(sys_id, 'id', @pump_id)
|
4994
|
+
else
|
4995
|
+
XMLHelper.add_attribute(sys_id, 'id', @id + 'Pump')
|
4996
|
+
end
|
4997
|
+
XMLHelper.add_element(pool_pump, 'Type', @pump_type, :string)
|
4998
|
+
if @pump_type != HPXML::TypeNone
|
4999
|
+
if not @pump_kwh_per_year.nil?
|
5000
|
+
load = XMLHelper.add_element(pool_pump, 'Load')
|
5001
|
+
XMLHelper.add_element(load, 'Units', UnitsKwhPerYear, :string)
|
5002
|
+
XMLHelper.add_element(load, 'Value', @pump_kwh_per_year, :float, @pump_kwh_per_year_isdefaulted)
|
5003
|
+
end
|
5004
|
+
XMLHelper.add_extension(pool_pump, 'UsageMultiplier', @pump_usage_multiplier, :float, @pump_usage_multiplier_isdefaulted) unless @pump_usage_multiplier.nil?
|
5005
|
+
XMLHelper.add_extension(pool_pump, 'WeekdayScheduleFractions', @pump_weekday_fractions, :string, @pump_weekday_fractions_isdefaulted) unless @pump_weekday_fractions.nil?
|
5006
|
+
XMLHelper.add_extension(pool_pump, 'WeekendScheduleFractions', @pump_weekend_fractions, :string, @pump_weekend_fractions_isdefaulted) unless @pump_weekend_fractions.nil?
|
5007
|
+
XMLHelper.add_extension(pool_pump, 'MonthlyScheduleMultipliers', @pump_monthly_multipliers, :string, @pump_monthly_multipliers_isdefaulted) unless @pump_monthly_multipliers.nil?
|
5008
|
+
end
|
4771
5009
|
heater = XMLHelper.add_element(pool, 'Heater')
|
4772
5010
|
sys_id = XMLHelper.add_element(heater, 'SystemIdentifier')
|
4773
5011
|
if not @heater_id.nil?
|
@@ -4776,37 +5014,43 @@ class HPXML < Object
|
|
4776
5014
|
XMLHelper.add_attribute(sys_id, 'id', @id + 'Heater')
|
4777
5015
|
end
|
4778
5016
|
XMLHelper.add_element(heater, 'Type', @heater_type, :string)
|
4779
|
-
if
|
4780
|
-
|
4781
|
-
|
4782
|
-
|
5017
|
+
if @heater_type != HPXML::TypeNone
|
5018
|
+
if (not @heater_load_units.nil?) && (not @heater_load_value.nil?)
|
5019
|
+
load = XMLHelper.add_element(heater, 'Load')
|
5020
|
+
XMLHelper.add_element(load, 'Units', @heater_load_units, :string)
|
5021
|
+
XMLHelper.add_element(load, 'Value', @heater_load_value, :float, @heater_load_value_isdefaulted)
|
5022
|
+
end
|
5023
|
+
XMLHelper.add_extension(heater, 'UsageMultiplier', @heater_usage_multiplier, :float, @heater_usage_multiplier_isdefaulted) unless @heater_usage_multiplier.nil?
|
5024
|
+
XMLHelper.add_extension(heater, 'WeekdayScheduleFractions', @heater_weekday_fractions, :string, @heater_weekday_fractions_isdefaulted) unless @heater_weekday_fractions.nil?
|
5025
|
+
XMLHelper.add_extension(heater, 'WeekendScheduleFractions', @heater_weekend_fractions, :string, @heater_weekend_fractions_isdefaulted) unless @heater_weekend_fractions.nil?
|
5026
|
+
XMLHelper.add_extension(heater, 'MonthlyScheduleMultipliers', @heater_monthly_multipliers, :string, @heater_monthly_multipliers_isdefaulted) unless @heater_monthly_multipliers.nil?
|
4783
5027
|
end
|
4784
|
-
XMLHelper.add_extension(heater, 'UsageMultiplier', @heater_usage_multiplier, :float, @heater_usage_multiplier_isdefaulted) unless @heater_usage_multiplier.nil?
|
4785
|
-
XMLHelper.add_extension(heater, 'WeekdayScheduleFractions', @heater_weekday_fractions, :string, @heater_weekday_fractions_isdefaulted) unless @heater_weekday_fractions.nil?
|
4786
|
-
XMLHelper.add_extension(heater, 'WeekendScheduleFractions', @heater_weekend_fractions, :string, @heater_weekend_fractions_isdefaulted) unless @heater_weekend_fractions.nil?
|
4787
|
-
XMLHelper.add_extension(heater, 'MonthlyScheduleMultipliers', @heater_monthly_multipliers, :string, @heater_monthly_multipliers_isdefaulted) unless @heater_monthly_multipliers.nil?
|
4788
5028
|
end
|
4789
5029
|
end
|
4790
5030
|
|
4791
5031
|
def from_oga(pool)
|
4792
5032
|
@id = HPXML::get_id(pool)
|
5033
|
+
@type = XMLHelper.get_value(pool, 'Type', :string)
|
4793
5034
|
pool_pump = XMLHelper.get_element(pool, 'PoolPumps/PoolPump')
|
4794
|
-
|
4795
|
-
|
4796
|
-
|
4797
|
-
|
4798
|
-
|
4799
|
-
|
5035
|
+
if not pool_pump.nil?
|
5036
|
+
@pump_id = HPXML::get_id(pool_pump)
|
5037
|
+
@pump_type = XMLHelper.get_value(pool_pump, 'Type', :string)
|
5038
|
+
@pump_kwh_per_year = XMLHelper.get_value(pool_pump, "Load[Units='#{UnitsKwhPerYear}']/Value", :float)
|
5039
|
+
@pump_usage_multiplier = XMLHelper.get_value(pool_pump, 'extension/UsageMultiplier', :float)
|
5040
|
+
@pump_weekday_fractions = XMLHelper.get_value(pool_pump, 'extension/WeekdayScheduleFractions', :string)
|
5041
|
+
@pump_weekend_fractions = XMLHelper.get_value(pool_pump, 'extension/WeekendScheduleFractions', :string)
|
5042
|
+
@pump_monthly_multipliers = XMLHelper.get_value(pool_pump, 'extension/MonthlyScheduleMultipliers', :string)
|
5043
|
+
end
|
4800
5044
|
heater = XMLHelper.get_element(pool, 'Heater')
|
4801
5045
|
if not heater.nil?
|
4802
5046
|
@heater_id = HPXML::get_id(heater)
|
4803
5047
|
@heater_type = XMLHelper.get_value(heater, 'Type', :string)
|
4804
5048
|
@heater_load_units = XMLHelper.get_value(heater, 'Load/Units', :string)
|
4805
|
-
@heater_load_value
|
4806
|
-
@heater_usage_multiplier
|
4807
|
-
@heater_weekday_fractions
|
4808
|
-
@heater_weekend_fractions
|
4809
|
-
@heater_monthly_multipliers
|
5049
|
+
@heater_load_value = XMLHelper.get_value(heater, 'Load/Value', :float)
|
5050
|
+
@heater_usage_multiplier = XMLHelper.get_value(heater, 'extension/UsageMultiplier', :float)
|
5051
|
+
@heater_weekday_fractions = XMLHelper.get_value(heater, 'extension/WeekdayScheduleFractions', :string)
|
5052
|
+
@heater_weekend_fractions = XMLHelper.get_value(heater, 'extension/WeekendScheduleFractions', :string)
|
5053
|
+
@heater_monthly_multipliers = XMLHelper.get_value(heater, 'extension/MonthlyScheduleMultipliers', :string)
|
4810
5054
|
end
|
4811
5055
|
end
|
4812
5056
|
end
|
@@ -4826,8 +5070,8 @@ class HPXML < Object
|
|
4826
5070
|
end
|
4827
5071
|
|
4828
5072
|
class HotTub < BaseElement
|
4829
|
-
ATTRS = [:id, :heater_id, :heater_type, :heater_load_units, :heater_load_value, :heater_usage_multiplier,
|
4830
|
-
:pump_id, :pump_kwh_per_year, :pump_usage_multiplier,
|
5073
|
+
ATTRS = [:id, :type, :heater_id, :heater_type, :heater_load_units, :heater_load_value, :heater_usage_multiplier,
|
5074
|
+
:pump_id, :pump_type, :pump_kwh_per_year, :pump_usage_multiplier,
|
4831
5075
|
:heater_weekday_fractions, :heater_weekend_fractions, :heater_monthly_multipliers,
|
4832
5076
|
:pump_weekday_fractions, :pump_weekend_fractions, :pump_monthly_multipliers]
|
4833
5077
|
attr_accessor(*ATTRS)
|
@@ -4848,24 +5092,28 @@ class HPXML < Object
|
|
4848
5092
|
hot_tub = XMLHelper.add_element(hot_tubs, 'HotTub')
|
4849
5093
|
sys_id = XMLHelper.add_element(hot_tub, 'SystemIdentifier')
|
4850
5094
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
4851
|
-
|
4852
|
-
|
4853
|
-
|
4854
|
-
|
4855
|
-
XMLHelper.
|
4856
|
-
|
4857
|
-
|
4858
|
-
|
4859
|
-
|
4860
|
-
|
4861
|
-
XMLHelper.add_element(
|
4862
|
-
|
4863
|
-
|
4864
|
-
|
4865
|
-
|
4866
|
-
|
4867
|
-
|
4868
|
-
|
5095
|
+
XMLHelper.add_element(hot_tub, 'Type', @type, :string) unless @type.nil?
|
5096
|
+
if @type != HPXML::TypeNone
|
5097
|
+
pumps = XMLHelper.add_element(hot_tub, 'HotTubPumps')
|
5098
|
+
hot_tub_pump = XMLHelper.add_element(pumps, 'HotTubPump')
|
5099
|
+
sys_id = XMLHelper.add_element(hot_tub_pump, 'SystemIdentifier')
|
5100
|
+
if not @pump_id.nil?
|
5101
|
+
XMLHelper.add_attribute(sys_id, 'id', @pump_id)
|
5102
|
+
else
|
5103
|
+
XMLHelper.add_attribute(sys_id, 'id', @id + 'Pump')
|
5104
|
+
end
|
5105
|
+
XMLHelper.add_element(hot_tub_pump, 'Type', @pump_type, :string)
|
5106
|
+
if @pump_type != HPXML::TypeNone
|
5107
|
+
if not @pump_kwh_per_year.nil?
|
5108
|
+
load = XMLHelper.add_element(hot_tub_pump, 'Load')
|
5109
|
+
XMLHelper.add_element(load, 'Units', UnitsKwhPerYear, :string)
|
5110
|
+
XMLHelper.add_element(load, 'Value', @pump_kwh_per_year, :float, @pump_kwh_per_year_isdefaulted)
|
5111
|
+
end
|
5112
|
+
XMLHelper.add_extension(hot_tub_pump, 'UsageMultiplier', @pump_usage_multiplier, :float, @pump_usage_multiplier_isdefaulted) unless @pump_usage_multiplier.nil?
|
5113
|
+
XMLHelper.add_extension(hot_tub_pump, 'WeekdayScheduleFractions', @pump_weekday_fractions, :string, @pump_weekday_fractions_isdefaulted) unless @pump_weekday_fractions.nil?
|
5114
|
+
XMLHelper.add_extension(hot_tub_pump, 'WeekendScheduleFractions', @pump_weekend_fractions, :string, @pump_weekend_fractions_isdefaulted) unless @pump_weekend_fractions.nil?
|
5115
|
+
XMLHelper.add_extension(hot_tub_pump, 'MonthlyScheduleMultipliers', @pump_monthly_multipliers, :string, @pump_monthly_multipliers_isdefaulted) unless @pump_monthly_multipliers.nil?
|
5116
|
+
end
|
4869
5117
|
heater = XMLHelper.add_element(hot_tub, 'Heater')
|
4870
5118
|
sys_id = XMLHelper.add_element(heater, 'SystemIdentifier')
|
4871
5119
|
if not @heater_id.nil?
|
@@ -4874,37 +5122,43 @@ class HPXML < Object
|
|
4874
5122
|
XMLHelper.add_attribute(sys_id, 'id', @id + 'Heater')
|
4875
5123
|
end
|
4876
5124
|
XMLHelper.add_element(heater, 'Type', @heater_type, :string)
|
4877
|
-
if
|
4878
|
-
|
4879
|
-
|
4880
|
-
|
5125
|
+
if @heater_type != HPXML::TypeNone
|
5126
|
+
if (not @heater_load_units.nil?) && (not @heater_load_value.nil?)
|
5127
|
+
load = XMLHelper.add_element(heater, 'Load')
|
5128
|
+
XMLHelper.add_element(load, 'Units', @heater_load_units, :string)
|
5129
|
+
XMLHelper.add_element(load, 'Value', @heater_load_value, :float, @heater_load_value_isdefaulted)
|
5130
|
+
end
|
5131
|
+
XMLHelper.add_extension(heater, 'UsageMultiplier', @heater_usage_multiplier, :float, @heater_usage_multiplier_isdefaulted) unless @heater_usage_multiplier.nil?
|
5132
|
+
XMLHelper.add_extension(heater, 'WeekdayScheduleFractions', @heater_weekday_fractions, :string, @heater_weekday_fractions_isdefaulted) unless @heater_weekday_fractions.nil?
|
5133
|
+
XMLHelper.add_extension(heater, 'WeekendScheduleFractions', @heater_weekend_fractions, :string, @heater_weekend_fractions_isdefaulted) unless @heater_weekend_fractions.nil?
|
5134
|
+
XMLHelper.add_extension(heater, 'MonthlyScheduleMultipliers', @heater_monthly_multipliers, :string, @heater_monthly_multipliers_isdefaulted) unless @heater_monthly_multipliers.nil?
|
4881
5135
|
end
|
4882
|
-
XMLHelper.add_extension(heater, 'UsageMultiplier', @heater_usage_multiplier, :float, @heater_usage_multiplier_isdefaulted) unless @heater_usage_multiplier.nil?
|
4883
|
-
XMLHelper.add_extension(heater, 'WeekdayScheduleFractions', @heater_weekday_fractions, :string, @heater_weekday_fractions_isdefaulted) unless @heater_weekday_fractions.nil?
|
4884
|
-
XMLHelper.add_extension(heater, 'WeekendScheduleFractions', @heater_weekend_fractions, :string, @heater_weekend_fractions_isdefaulted) unless @heater_weekend_fractions.nil?
|
4885
|
-
XMLHelper.add_extension(heater, 'MonthlyScheduleMultipliers', @heater_monthly_multipliers, :string, @heater_monthly_multipliers_isdefaulted) unless @heater_monthly_multipliers.nil?
|
4886
5136
|
end
|
4887
5137
|
end
|
4888
5138
|
|
4889
5139
|
def from_oga(hot_tub)
|
4890
5140
|
@id = HPXML::get_id(hot_tub)
|
5141
|
+
@type = XMLHelper.get_value(hot_tub, 'Type', :string)
|
4891
5142
|
hot_tub_pump = XMLHelper.get_element(hot_tub, 'HotTubPumps/HotTubPump')
|
4892
|
-
|
4893
|
-
|
4894
|
-
|
4895
|
-
|
4896
|
-
|
4897
|
-
|
5143
|
+
if not hot_tub_pump.nil?
|
5144
|
+
@pump_id = HPXML::get_id(hot_tub_pump)
|
5145
|
+
@pump_type = XMLHelper.get_value(hot_tub_pump, 'Type', :string)
|
5146
|
+
@pump_kwh_per_year = XMLHelper.get_value(hot_tub_pump, "Load[Units='#{UnitsKwhPerYear}']/Value", :float)
|
5147
|
+
@pump_usage_multiplier = XMLHelper.get_value(hot_tub_pump, 'extension/UsageMultiplier', :float)
|
5148
|
+
@pump_weekday_fractions = XMLHelper.get_value(hot_tub_pump, 'extension/WeekdayScheduleFractions', :string)
|
5149
|
+
@pump_weekend_fractions = XMLHelper.get_value(hot_tub_pump, 'extension/WeekendScheduleFractions', :string)
|
5150
|
+
@pump_monthly_multipliers = XMLHelper.get_value(hot_tub_pump, 'extension/MonthlyScheduleMultipliers', :string)
|
5151
|
+
end
|
4898
5152
|
heater = XMLHelper.get_element(hot_tub, 'Heater')
|
4899
5153
|
if not heater.nil?
|
4900
5154
|
@heater_id = HPXML::get_id(heater)
|
4901
5155
|
@heater_type = XMLHelper.get_value(heater, 'Type', :string)
|
4902
5156
|
@heater_load_units = XMLHelper.get_value(heater, 'Load/Units', :string)
|
4903
|
-
@heater_load_value
|
4904
|
-
@heater_usage_multiplier
|
4905
|
-
@heater_weekday_fractions
|
4906
|
-
@heater_weekend_fractions
|
4907
|
-
@heater_monthly_multipliers
|
5157
|
+
@heater_load_value = XMLHelper.get_value(heater, 'Load/Value', :float)
|
5158
|
+
@heater_usage_multiplier = XMLHelper.get_value(heater, 'extension/UsageMultiplier', :float)
|
5159
|
+
@heater_weekday_fractions = XMLHelper.get_value(heater, 'extension/WeekdayScheduleFractions', :string)
|
5160
|
+
@heater_weekend_fractions = XMLHelper.get_value(heater, 'extension/WeekendScheduleFractions', :string)
|
5161
|
+
@heater_monthly_multipliers = XMLHelper.get_value(heater, 'extension/MonthlyScheduleMultipliers', :string)
|
4908
5162
|
end
|
4909
5163
|
end
|
4910
5164
|
end
|
@@ -4961,13 +5215,13 @@ class HPXML < Object
|
|
4961
5215
|
def from_oga(plug_load)
|
4962
5216
|
@id = HPXML::get_id(plug_load)
|
4963
5217
|
@plug_load_type = XMLHelper.get_value(plug_load, 'PlugLoadType', :string)
|
4964
|
-
@kWh_per_year
|
4965
|
-
@frac_sensible
|
4966
|
-
@frac_latent
|
4967
|
-
@usage_multiplier
|
4968
|
-
@weekday_fractions
|
4969
|
-
@weekend_fractions
|
4970
|
-
@monthly_multipliers
|
5218
|
+
@kWh_per_year = XMLHelper.get_value(plug_load, "Load[Units='#{UnitsKwhPerYear}']/Value", :float)
|
5219
|
+
@frac_sensible = XMLHelper.get_value(plug_load, 'extension/FracSensible', :float)
|
5220
|
+
@frac_latent = XMLHelper.get_value(plug_load, 'extension/FracLatent', :float)
|
5221
|
+
@usage_multiplier = XMLHelper.get_value(plug_load, 'extension/UsageMultiplier', :float)
|
5222
|
+
@weekday_fractions = XMLHelper.get_value(plug_load, 'extension/WeekdayScheduleFractions', :string)
|
5223
|
+
@weekend_fractions = XMLHelper.get_value(plug_load, 'extension/WeekendScheduleFractions', :string)
|
5224
|
+
@monthly_multipliers = XMLHelper.get_value(plug_load, 'extension/MonthlyScheduleMultipliers', :string)
|
4971
5225
|
end
|
4972
5226
|
end
|
4973
5227
|
|
@@ -5024,14 +5278,14 @@ class HPXML < Object
|
|
5024
5278
|
def from_oga(fuel_load)
|
5025
5279
|
@id = HPXML::get_id(fuel_load)
|
5026
5280
|
@fuel_load_type = XMLHelper.get_value(fuel_load, 'FuelLoadType', :string)
|
5027
|
-
@therm_per_year
|
5281
|
+
@therm_per_year = XMLHelper.get_value(fuel_load, "Load[Units='#{UnitsThermPerYear}']/Value", :float)
|
5028
5282
|
@fuel_type = XMLHelper.get_value(fuel_load, 'FuelType', :string)
|
5029
|
-
@frac_sensible
|
5030
|
-
@frac_latent
|
5031
|
-
@usage_multiplier
|
5032
|
-
@weekday_fractions
|
5033
|
-
@weekend_fractions
|
5034
|
-
@monthly_multipliers
|
5283
|
+
@frac_sensible = XMLHelper.get_value(fuel_load, 'extension/FracSensible', :float)
|
5284
|
+
@frac_latent = XMLHelper.get_value(fuel_load, 'extension/FracLatent', :float)
|
5285
|
+
@usage_multiplier = XMLHelper.get_value(fuel_load, 'extension/UsageMultiplier', :float)
|
5286
|
+
@weekday_fractions = XMLHelper.get_value(fuel_load, 'extension/WeekdayScheduleFractions', :string)
|
5287
|
+
@weekend_fractions = XMLHelper.get_value(fuel_load, 'extension/WeekendScheduleFractions', :string)
|
5288
|
+
@monthly_multipliers = XMLHelper.get_value(fuel_load, 'extension/MonthlyScheduleMultipliers', :string)
|
5035
5289
|
end
|
5036
5290
|
end
|
5037
5291
|
|
@@ -5178,7 +5432,7 @@ class HPXML < Object
|
|
5178
5432
|
# Check for errors across objects #
|
5179
5433
|
# ------------------------------- #
|
5180
5434
|
|
5181
|
-
# Check for globally unique SystemIdentifier IDs
|
5435
|
+
# Check for globally unique SystemIdentifier IDs and empty IDs
|
5182
5436
|
sys_ids = {}
|
5183
5437
|
self.class::HPXML_ATTRS.each do |attribute|
|
5184
5438
|
hpxml_obj = send(attribute)
|
@@ -5189,6 +5443,8 @@ class HPXML < Object
|
|
5189
5443
|
|
5190
5444
|
sys_ids[obj.id] = 0 if sys_ids[obj.id].nil?
|
5191
5445
|
sys_ids[obj.id] += 1
|
5446
|
+
|
5447
|
+
errors << "Empty SystemIdentifier ID ('#{obj.id}') detected for #{attribute}." if !obj.id || obj.id.size == 0
|
5192
5448
|
end
|
5193
5449
|
end
|
5194
5450
|
sys_ids.each do |sys_id, cnt|
|
@@ -5205,6 +5461,12 @@ class HPXML < Object
|
|
5205
5461
|
errors << "Expected FractionHeatLoadServed to sum to <= 1, but calculated sum is #{total_fraction_heat_load_served.round(2)}."
|
5206
5462
|
end
|
5207
5463
|
|
5464
|
+
# Check sum of dehumidifier FractionDehumidificationLoadServed <= 1
|
5465
|
+
total_fraction_dehum_load_served = @dehumidifiers.map { |d| d.fraction_served }.sum(0.0)
|
5466
|
+
if total_fraction_dehum_load_served > 1.01 # Use 1.01 in case of rounding
|
5467
|
+
errors << "Expected FractionDehumidificationLoadServed to sum to <= 1, but calculated sum is #{total_fraction_dehum_load_served.round(2)}."
|
5468
|
+
end
|
5469
|
+
|
5208
5470
|
# Check sum of HVAC FractionDHWLoadServed == 1
|
5209
5471
|
frac_dhw_load = @water_heating_systems.map { |dhw| dhw.fraction_dhw_load_served.to_f }.sum(0.0)
|
5210
5472
|
if (frac_dhw_load > 0) && ((frac_dhw_load < 0.99) || (frac_dhw_load > 1.01)) # Use 0.99/1.01 in case of rounding
|
@@ -5220,9 +5482,9 @@ class HPXML < Object
|
|
5220
5482
|
ltg_fracs[lighting_group.location] += lighting_group.fraction_of_units_in_location
|
5221
5483
|
end
|
5222
5484
|
ltg_fracs.each do |location, sum|
|
5223
|
-
next if sum <= 1
|
5485
|
+
next if sum <= 1.01 # Use 1.01 in case of rounding
|
5224
5486
|
|
5225
|
-
|
5487
|
+
errors << "Sum of fractions of #{location} lighting (#{sum}) is greater than 1."
|
5226
5488
|
end
|
5227
5489
|
|
5228
5490
|
# Check for HVAC systems referenced by multiple water heating systems
|
@@ -5241,7 +5503,7 @@ class HPXML < Object
|
|
5241
5503
|
|
5242
5504
|
# Check for the sum of CFA served by distribution systems <= CFA
|
5243
5505
|
if not @building_construction.conditioned_floor_area.nil?
|
5244
|
-
air_distributions = @hvac_distributions.select { |dist| dist if
|
5506
|
+
air_distributions = @hvac_distributions.select { |dist| dist if HPXML::HVACDistributionTypeAir == dist.distribution_system_type }
|
5245
5507
|
heating_dist = []
|
5246
5508
|
cooling_dist = []
|
5247
5509
|
air_distributions.each do |dist|
|
@@ -5256,10 +5518,10 @@ class HPXML < Object
|
|
5256
5518
|
end
|
5257
5519
|
heating_total_dist_cfa_served = heating_dist.map { |htg_dist| htg_dist.conditioned_floor_area_served.to_f }.sum(0.0)
|
5258
5520
|
cooling_total_dist_cfa_served = cooling_dist.map { |clg_dist| clg_dist.conditioned_floor_area_served.to_f }.sum(0.0)
|
5259
|
-
if (heating_total_dist_cfa_served > @building_construction.conditioned_floor_area)
|
5521
|
+
if (heating_total_dist_cfa_served > @building_construction.conditioned_floor_area + 1.0) # Allow 1 ft2 of tolerance
|
5260
5522
|
errors << 'The total conditioned floor area served by the HVAC distribution system(s) for heating is larger than the conditioned floor area of the building.'
|
5261
5523
|
end
|
5262
|
-
if (cooling_total_dist_cfa_served > @building_construction.conditioned_floor_area)
|
5524
|
+
if (cooling_total_dist_cfa_served > @building_construction.conditioned_floor_area + 1.0) # Allow 1 ft2 of tolerance
|
5263
5525
|
errors << 'The total conditioned floor area served by the HVAC distribution system(s) for cooling is larger than the conditioned floor area of the building.'
|
5264
5526
|
end
|
5265
5527
|
end
|
@@ -5299,6 +5561,26 @@ class HPXML < Object
|
|
5299
5561
|
end
|
5300
5562
|
end
|
5301
5563
|
|
5564
|
+
# Check for at most 1 shared heating system and 1 shared cooling system
|
5565
|
+
num_htg_shared = 0
|
5566
|
+
num_clg_shared = 0
|
5567
|
+
(@heating_systems + @heat_pumps).each do |hvac_system|
|
5568
|
+
next unless hvac_system.is_shared_system
|
5569
|
+
|
5570
|
+
num_htg_shared += 1
|
5571
|
+
end
|
5572
|
+
(@cooling_systems + @heat_pumps).each do |hvac_system|
|
5573
|
+
next unless hvac_system.is_shared_system
|
5574
|
+
|
5575
|
+
num_clg_shared += 1
|
5576
|
+
end
|
5577
|
+
if num_htg_shared > 1
|
5578
|
+
errors << 'More than one shared heating system found.'
|
5579
|
+
end
|
5580
|
+
if num_clg_shared > 1
|
5581
|
+
errors << 'More than one shared cooling system found.'
|
5582
|
+
end
|
5583
|
+
|
5302
5584
|
errors.map! { |e| "#{@hpxml_path}: #{e}" }
|
5303
5585
|
|
5304
5586
|
return errors
|