HPXML to Home Energy Score Documentation¶
Introduction¶
HPXML is a flexible way to transfer home energy audit and retrofit data via a standardized schema. This flexibility, one if its greatest strengths, is also a weakness. Home Energy Score (HEScore) requires very specific data points to be reported as inputs to the API. Many of those data points can be represented in the HPXML syntax in multiple ways due to the flexibility of the standard. The purpose of this guide is to document the assumptions that are made in the translation of HPXML data elements into HEScore software inputs.
Usage Instructions¶
The HPXML to Home Energy Score (HEScore) translator can be run hosted through the HEScore API or directly on your local machine. Most users will find that the HEScore API is the preferred method since it easily fits into the API workflow and automates the process. The stand alone method is mostly for developers needing to debug and track down problems in the translation as well as for those who want to make modifications to the translation assumptions and code.
Home Energy Score API¶
The HEScore API provides the most generally applicable way use HPXML to generate a Home Energy Score. Generally in the API is used by doing the following steps, calling each API method in order:
submit_address
- Creates a new building and assessment date.submit_inputs
- Submit a detailed house description in a format specific to Home Energy Score.calculate_base_building
- Calculates the energy use of the as-described building.commit_results
- Locks the inputs and marks them as being accurate by the Qualified Assessor.calculate_package_building
- Analyzes a set of retrofit upgrades that are screened against standardized costs, and determines the most cost effective ones.generate_label
- Creates a PDF and PNG Home Energy Score label.
There are other options and reports available, but that is the general gist of it.
The HPXML translator is made available through a separate API method: submit_hpxml_inputs
.
It replaces the first two steps above, alleviating the need to translate data elements from your data structure into the HEScore data structure.
submit_hpxml_inputs
accepts an HPXML file as a Base64 encoded payload, so you will need to convert it.
An example of how to do this in Python is:
import base64
with open('path/to/hpxmlfile.xml','r') as f:
hpxml_as_base64 = base64.standard_b64encode(f.read())
Similar libraries and functionality exist in many languages.
Much more information on how to use the HEScore API including the submit_hpxml_inputs
method is available on the Home Energy Scoring Tool API Documentation site.
Stand Alone¶
The HPXML to HEScore translator that is used within the Home Energy Score API can be used independently as well.
It is a Python script that accepts an HPXML file as input and returns a JSON file with HEScore inputs arranged like the HEScore API call submit_inputs
expects.
It it useful to run it this way for debugging a translation of your particular flavor of HPXML file or for development of the translator.
Set Up¶
The program runs using Python 2.7. The instructions below will help you set up Python on your platform and get the translator installed.
Windows¶
- Download Python 2.7.x (not the 3.x version) from python.org and Install.
- Add
C:\Python27
to your path. Here’s how. - Follow instructions for All Platforms.
Mac OS X¶
- Install Homebrew.
- Open a terminal.
- Install Python 2.7 using homebrew:
brew install python
- Follow instructions for All Platforms.
Linux¶
- Install Python 2.7 using the package manager for your platform.
- Follow instructions for All Platforms.
All Platforms¶
Optionally install and activate a virtual environment. Instructions here.
Install the package using pip
:
pip install hescore-hpxml
Alternatively, you can install the latest and greatest directly from GitHub, which is useful if you’re going to do some development on the translator. To do so, get a copy of the source code from GitHub, using your preferred method. If you’re not sure, just click “Download ZIP”.
Open a terminal and use pip
to install it in developer mode:
cd path/to/hescore-hpxml
pip install -e .[dev]
Running the Translator¶
The best way to figure out how to run the translator is to call it with the -h
flag.
hpxml2hescore -h
Translation Assumptions¶
Contents:
Address and Requesting a New Session¶
Table of Contents
The first step in starting a HEScore transaction is to call the
submit_address
API call.
Address¶
The building address is found in HPXML under the Building/Site/Address
element. The sub elements there easily translate into the expected address
format for HEScore.
<HPXML>
...
<Building>
<Site>
<SiteID id="id1"/>
<Address>
<Address1>123 Main St.</Address1>
<Address2></Address2>
<CityMunicipality>Anywhere</CityMunicipality>
<StateCode>CA</StateCode>
<ZipCode>90000</ZipCode>
</Address>
</Site>
</Building>
</HPXML>
HPXML allows for two lines of address elements. If both are used, the lines will
be concatenated with a space between for submission to the HEScore
building_address.address
field. All of the HPXML elements shown in the above
code snippet are required with the exception of Address2
. Additionally, if a
zip plus 4 code is entered in HPXML, it will be trimmed to just the 5 digit zip
code before being passed to HEScore.
Assessment Type¶
To begin a HEScore session an assessment type must be selected. The assessment type
is determined from HPXML via the
XMLTransactionHeaderInformation/Transaction
and
Building/ProjectStatus/EventType
element using the following mapping:
XML Transaction Type | HPXML Event Type | HEScore Assessment Type |
---|---|---|
create | audit | initial |
proposed workscope | alternative | |
approved workscope | alternative | |
construction-period testing/daily test out | test | |
job completion testing/final inspection | final | |
quality assurance/monitoring | qa | |
preconstruction | preconstruction | |
update | any | corrected |
Mentor Assessment Type¶
In v2015 HEScore introduced a new assessment type called “mentor”.
It is used for new assessors in training when an assessment is supervised by a
more qualified assessor.
There is no equivalent way to communicate this scenario in HPXML.
To work around this issue, the translator will look for a specifically named
element in the extension
of Building/ProjectStatus
:
<ProjectStatus>
<EventType>audit</EventType>
<Date>2014-12-18</Date>
<extension>
<HEScoreMentorAssessment/>
</extension>
</ProjectStatus>
Upon finding this HEScoreMentorAssessment
element, the HEScore assessment
type will be set to “mentor” regardless of the mapping above.
External Building ID¶
The value of Building/extension/HESExternalID
or
Building/BuildingID/SendingSystemIdentifierValue
, if present, is copied into the
building_address.external_building_id
field in HEScore.
Preference is given to the extension element if both are present.
This is optional, but may be useful for those wanting to pass an additional building identifier for their own tracking purposes.
Home Performance with Energy Star¶
Inputs for the Home Energy Score submit_hpwes API call can be retrieved from an HPXML file as described below.
Identifying HPwES Projects¶
To trigger data collection for HPwES project, the following elements need to be included depending on HPXML version used.
HPXML v2¶
To translate the HPwES fields, the Project/ProgramCertificate
must be
present and equal to Home Performance with Energy Star
.
HPXML v3¶
In HPXML v3.0+, ProgramCertificate
no longer exists and a new element of
path
Building/BuildingDetails/GreenBuildingVerifications/GreenBuildingVerification
is used. Similarly, GreenBuildingVerification
must be present as
Home Performance with ENERGY STAR
.
Project¶
To get the Home Performance with Energy Star (HPwES) data
from an HPXML file a Project
node needs to be included.
The following elements are required under the Project
node:
<Project>
<ProjectDetails>
<ProjectSystemIdentifiers id="projectid"/>
<!-- HPXML v2 only --><ProgramCertificate>Home Performance with Energy Star</ProgramCertificate>
<StartDate>2018-08-20</StartDate>
<CompleteDateActual>2018-12-14</CompleteDateActual>
</projectDetails>
</Project>
If more than one Project
element exists, the first one will be used. The
user can override this by passing the --projectid
argument to the translator
command line.
The project fields are mapped as follows:
HPXML ProjectDetails |
submit_hpwes API value |
---|---|
StartDate |
improvement_installation_start_date |
CompleteDateActual |
improvement_installation_completion_date |
Contractor¶
A Contractor
element is also required with at minimum the following
elements:
<Contractor>
<ContractorDetails>
<SystemIdentifier id="contractor1"/>
<BusinessInfo>
<SystemIdentifier id="contractor1businessinfo"/>
<BusinessName>My HPwES Contractor Business</BusinessName>
<extension>
<ZipCode>12345</ZipCode>
</extension>
</BusinessInfo>
</ContractorDetails>
</Contractor>
If there are more than one Contractor
elements, the contractor with the id
passed in the --contractorid
command line argument is used. If no contracter
id is specified by the user, the contractor listed in the
Building/ContractorID
will be used. If that element isn’t available, the
first Contractor
element will be used.
The contractor fields are mapped as follows:
HPXML Contractor |
submit_hpwes API value |
---|---|
ContractorDetails/BusinessInfo/BusinessName |
contractor_business_name |
ContractorDetails/BusinessInfo/extension/ZipCode |
contractor_zip_code |
About¶
Table of Contents
Assessment Date¶
HEScore requires an assessment date. If a date is stored in the element
Building/ProjectStatus/Date
, that date is used. If not, the current date is
used.
Building Shape¶
HEScore requires specifying whether the building is a detached house or a town
house through their building.shape
input. HPXML can specify this (and a
variety of other house types) through the
Building/BuildingSummary/BuildingConstruction/ResidentialFacilitytype
data
element. Not all facility types in HPXML can be modeled in HEScore. The table
below shows how the possible enumerations of the HPXML field are translated
into HEScore.
HPXML | HEScore |
---|---|
single-family detached | rectangle |
single-family attached | town_house |
manufactured home | not translated |
2-4 unit building | not translated |
5+ unit building | not translated |
multi-family - uncategorized | not translated |
multi-family - town homes | town_house |
multi-family - condos | not translated |
apartment unit | not translated |
studio unit | not translated |
other | not translated |
unknown | not translated |
Note
For enumerations that are not translated the HPXML file will fail to run in HEScore.
For town houses HEScore requires a town_house_walls
input to be specified.
This is available in HPXML in the
Building/BuildingSummary/Site/Surroundings
element. The translation of the
enumerations is as follows:
HPXML | HEScore |
---|---|
stand-alone | not translated |
attached on one side | back_right_front or back_front_left |
attached on two sides | back_front |
attached on three sides | not translated |
If the HPXML enumeration of attached on one side
is present the translation
will determine which HEScore enumeration to select based on which side of the
house is missing windows.
Warning
- If windows are found on a shared town house wall, the translation will fail.
- HEScore cannot model townhouses that are “attached on three sides” or “stand-alone”. Using one of those inputs will result in a translation error.
Year Built, Stories, Bedrooms, Floor Height, and Floor Area¶
The HEScore inputs year_built
, number_bedrooms
,
num_floor_above_grade
, floor_to_ceiling_height
, and
conditioned_floor_area
are each retrieved from their corresponding HPXML
elements shown below.
<HPXML>
...
<Building>
...
<BuildingDetails>
<BuildingSummary>
<BuildingConstruction>
<YearBuilt>1998</YearBuilt>
<ConditionedFloorArea>2400</ConditionedFloorArea>
<NumberofConditionedFloorsAboveGrade>2</NumberofConditionedFloorsAboveGrade>
<AverageCeilingHeight>8</AverageCeilingHeight>
<NumberofBedrooms>3</NumberofBedrooms>
</BuildingConstruction>
</BuildingSummary>
</BuildingDetails>
</Building>
</HPXML>
The HEScore input floor_to_ceiling_height
will be calculated by dividing
ConditionedBuildingVolume
by ConditionedFloorArea
if
AverageCeilingHeight
is omitted.
House Orientation¶
In HPXML the orientation of a house and orientations in general can be specified
as either a compass direction (‘North’,’Southwest’,etc.) or an azimuth measured
in degrees clockwise from North. HEScore requires a compass direction for the
orientation of the front of the house. If the azimuth is available in
Building/BuildingDetails/BuildingSummary/Site/AzimuthOfFrontOfHome
the
nearest compass direction is chosen. If the azimuth is omitted from HPXML but
the OrientationOfFronOfHome
element exists, the orientation is used.
Infiltration¶
HPXML allows the specification of multiple
Building/BuildingDetails/Enclosure/AirInfiltration/AirInfiltrationMeasurement
elements, which can contain either a blower door test or a qualitative
assessment of “leakiness”. HPXML also allows the specification of multiple
Building/BuildingDetails/Enclosure/AirInfiltration/AirSealing
elements,
which can contain a qualitative assessment of “leakiness”.
Either of the elements above is required.
HEScore can be used with either a measurement from a
blower door test or by specifying whether the house has been air sealed or
not (boolean). Preference is given to a blower door test measurement when it
is available in HPXML.
Blower Door Test¶
The translator first looks for an AirInfiltrationMeasurement
with units
of CFM50. If more than one of the AirInfiltrationMeasurement
elements have units in CFM50, the last one to appear in the document is
used. If there are no measurements in CFM50, it will look for one in
ACH50. If more than one of the AirInfiltrationMeasurement
elements
have units in ACH50, the last one to appear in the document is used. If
the UnitofMeasure
element has a value of ACH, then the value is converted
to CFM using the building volume calculated by the floor area and floor height.
An example of the minimum expected elements in HPXML follows:
<AirInfiltrationMeasurement>
<SystemIdentifier id="infilt1"/>
<HousePressure>50</HousePressure><!-- Must be 50 -->
<BuildingAirLeakage>
<UnitofMeasure>CFM<!-- or ACH --></UnitofMeasure>
<AirLeakage>1234</AirLeakage>
</BuildingAirLeakage>
</AirInfiltrationMeasurement>
Air Sealing Present¶
When a blower door test is not available the translator looks for an
AirInfiltrationMeasurement
or AirSealing
that specifies an estimate of leakage.
An example of the minimum expected elements in that case looks like:
<AirInfiltrationMeasurement>
<SystemIdentifier id="infilt2"/>
<LeakinessDescription>tight</LeakinessDescription>
</AirInfiltrationMeasurement>
<AirSealing>
<SystemIdentifier id="infilt3"/>
</AirSealing>
If more than one AirInfiltrationMeasurement
is found that have the above
elements, the last one to appear in the document is used. Whether the house is
marked as having air sealing present is determined according to the following
mapping from LeakinessDescription
:
Leakiness Description | Air Sealing Present |
---|---|
very tight | True |
tight | True |
average | False |
leaky | False |
very leaky | False |
If AirSealing
is found, the enclosure of the house is assumed to be air-sealed.
Comments¶
The hpxml-hescore translator allows passing through comments. Since there’s no equivalent way to communicate this
information in HPXML under the Building
node, the translator will look for a specifically named element in extension
of Building
:
<Building>
<extension>
<Comments>Any comment</Comments>
</extension>
</Building>
If there’s no comment found in extension
element, the translator will look for the Project/ProjectDetails/Notes
element for comments. Only the first Project
node will be selected. For complicated cases
where buildings are assigned to multiple projects, using the extension element is recommended.
Roof and Attic¶
Table of Contents
HPXML allows the specification of multiple Attic
elements, each of which
relates to one (HPXML v2) or more (HPXML v3) Roof
elements. That relation is
optional in HPXML, but is required for HEScore because it is important to know
which roof relates to each attic space.
Attic/Roof Type¶
Each Attic
is considered and the AtticType
is mapped into a HEScore roof
type according to the following mapping.
HPXML | HEScore |
---|---|
cape cod | cath_ceiling |
cathedral ceiling | cath_ceiling |
flat roof | cath_ceiling |
unvented attic | vented_attic |
vented attic | vented_attic |
venting unknown attic | vented_attic |
other | not translated |
HPXML | HEScore |
---|---|
CathedralCeiling | cath_ceiling |
FlatRoof | cath_ceiling |
Attic/CapeCod = ‘true’ | cath_ceiling |
Attic/Conditioned = ‘true’ | cath_ceiling |
Attic | vented_attic |
Other | not translated |
Note
The attic/roof type cond_attic
has been removed from HEScore as of Q1
2022. Homes with conditioned attics should be described in a way that
translates to a cathedral ceiling. In HPXML v3, the conditioned attic type is
automatically translated to cathedral ceiling. In HPXML v2, the extension
workaround to specify a conditioned attic has been removed and the user will
need to identify the house as having an attic type that translates to
cathedral ceiling to achieve the desired effect.
HEScore can accept up to two attic/roof constructions. If there are more than
two specified in HPXML, the properties of the Attic
elements with
the same roof type are combined. For variables with a discrete selection the
value that covers the greatest combined area is used. For R-values a
calculation is performed to determine the equivalent overall R-value for the
attic. This is discussed in more detail in Roof R-value.
Note
Starting from HPXML v3, HPXML allows multiple floors/roofs attached to a single attic. The properties of the floors/roofs attached to the same attic are combined into a single one.
Attic and Roof Area¶
Home Energy Score needs to know the area of the thermal boundary between the living space and unconditioned spaces. The areas needed depend on which Attic/Roof Type is selected.
It’s best practice to provide areas for all roof and attic floor surfaces regardless of Attic/Roof type.
Vented Attic¶
The thermal boundary for a vented attic is at the floor of the attic. In HPXML
v2 that area is attached to the
Building/BuildingDetails/Enclosure/AtticAndRoof/Attics/Attic
element:
<Attic>
<SystemIdentifier id="attic1"/>
<AttachedToRoof idref="roof1"/>
<AtticType>vented attic</AtticType>
<AtticFloorInsulation>
<SystemIdentifier id="attic1flrins"/>
<Layer>
<NominalRValue>49</NominalRValue>
</Layer>
</AtticFloorInsulation>
<AtticRoofInsulation>
<SystemIdentifier id="attic1roofins"/>
<Layer>
<NominalRValue>0</NominalRValue>
</Layer>
</AtticRoofInsulation>
<Area>1200</Area>
</Attic>
In HPXML v3 that area is retrieved from a referenced FrameFloor
element
from the Building/BuildingDetails/Enclosure/Attics/Attic
element:
<Attic>
<SystemIdentifier id="attic1"/>
<AtticType>
<Attic>
<Vented>true</Vented>
</Attic>
</AtticType>
<AttachedToRoof idref="roof1"/>
<AttachedToFrameFloor idref="framefloor1"/>
</Attic>
<FrameFloor>
<SystemIdentifier id="framefloor1"/>
<Area>1200</Area>
<Insulation>
<SystemIdentifier id="attic1flrins"/>
<Layer>
<NominalRValue>49</NominalRValue>
</Layer>
</Insulation>
</FrameFloor>
If there are more than one Roof
elements attached to an attic (HPXML v3
since HPXML v2 only allows one roof to be referenced per Attic
), you will
need to provide an area for each one so that the most common roof color and
exterior finishes may be selected.
Cathedral Ceiling¶
The thermal boundary for a cathedral ceiling is the roof deck, so the area of the roofs attached to the attic are used.
In HPXML v2 a single Roof
can be referenced by the Attic
and the
area of that roof is used.
<AtticAndRoof>
<Roofs>
<Roof>
<SystemIdentifier id="roof1"/>
<RoofColor>medium</RoofColor>
<RoofType>slate or tile shingles</RoofType>
<RoofArea>679</RoofArea>
</Roof>
</Roofs>
<Attics>
<Attic>
<SystemIdentifier id="attic1"/>
<AttachedToRoof idref="roof1"/>
<AtticType>cathedral ceiling</AtticType>
<AtticRoofInsulation>
<SystemIdentifier id="ceilins1"/>
<Layer>
<NominalRValue>15</NominalRValue>
</Layer>
</AtticRoofInsulation>
</Attic>
</Attics>
</AtticAndRoof>
In HPXML v3 multiple Roof
elements can be referenced by the Attic
and the sum of those ares is used. The properties of the roofs will be area
weighted as described below.
<Enclosure>
<Attics>
<Attic>
<SystemIdentifier id="attic1"/>
<AtticType>
<CathedralCeiling/>
</AtticType>
<AttachedToRoof idref="roof1"/>
</Attic>
</Attics>
<Roofs>
<Roof>
<SystemIdentifier id="roof1"/>
<Area>679</Area>
<RoofType>slate or tile shingles</RoofType>
<RoofColor>medium</RoofColor>
<Insulation>
<SystemIdentifier id="ceilins1"/>
<Layer>
<NominalRValue>15</NominalRValue>
</Layer>
</Insulation>
</Roof>
</Roofs>
</Enclosure>
Roof Color¶
Roof color in HEScore is mapped from the HPXML Roof/RoofColor
element
according to the following mapping.
HPXML | HEScore |
---|---|
light | light |
medium | medium |
medium dark | medium_dark |
dark | dark |
reflective | white |
If the Roof/SolarAbsorptance
element is present, the HEScore roof color is
set to “cool_color” and the recorded absorptance will be sent to HEScore under
the “roof_absorptance” element.
Note
Starting from HPXML v3, if there’re more than one roof attached to the same attic, the roof color of that covers greatest area will be selected.
Exterior Finish¶
HPXML stores the exterior finish information in the Roof/RoofType
element.
This is translated into the HEScore exterior finish variable according to the
following mapping.
HPXML | HEScore |
---|---|
shingles | composition shingles |
slate or tile shingles | concrete tile |
wood shingles or shakes | wood shakes |
asphalt or fiberglass shingles | composition shingles |
metal surfacing | composition shingles |
expanded polystyrene sheathing | not translated |
plastic/rubber/synthetic sheeting | tar and gravel |
concrete | concrete tile |
cool roof | not translated |
green roof | not translated |
no one major type | not translated |
other | not translated |
Note
Items where the HEScore translation indicates not translated above will result in a translation error.
Rigid Foam Sheathing¶
If the AtticRoofInsulation
element has a Layer
with the “continuous”
InstallationType
, InsulationMaterial/Rigid
, and a NominalRValue
greater than zero, the roof is determined to have rigid foam sheathing and one
of the construction codes is selected accordingly. Otherwise one of the
standard wood frame construction codes is selected.
HPXML v2¶
<Attic>
<SystemIdentifier id="attic5"/>
<AttachedToRoof idref="roof3"/>
<AtticType>cathedral ceiling</AtticType>
<AtticRoofInsulation>
<SystemIdentifier id="attic5roofins"/>
<Layer>
<InstallationType>continuous</InstallationType>
<InsulationMaterial>
<Rigid>eps</Rigid>
</InsulationMaterial>
<NominalRValue>10</NominalRValue>
</Layer>
</AtticRoofInsulation>
<Area>2500</Area>
</Attic>
HPXML v3¶
<Atics>
<Attic>
<SystemIdentifier id="attic5"/>
<AtticType>
<CathedralCeiling/>
</AtticType>
<AttachedToRoof idref="roof3"/>
</Attic>
</Attics>
<Roofs>
<Roof>
<SystemIdentifier id="roof3"/>
<Area>2500</Area>
<Insulation>
<SystemIdentifier id="attic5roofins"/>
<Layer>
<InstallationType>continuous</InstallationType>
<InsulationMaterial>
<Rigid>eps</Rigid>
</InsulationMaterial>
<NominalRValue>10</NominalRValue>
</Layer>
</Insulation>
</Roof>
<Roofs>
Radiant Barrier¶
If the Roof/RadiantBarrier
element exists and has a “true” value and roof deck insulation R-value is 0,
the attic is assumed to have a radiant barrier according to the construction codes available in HEScore.
If the Roof/RadiantBarrier
element exists and has a “true” value but roof deck insulation R-value greater than 0,
the roof will be modeled as a roof with no radiant barrier.
Roof R-value¶
The roof R-value can be described by using NominalRValue
or AssemblyRValue
.
If a user wishes to use a nominal R-value, NominalRValue
elements for all layers need to be provided.
Otherwise, AssemblyRValue
elements for each layer need to be provided.
If nominal R-value is used, the R-value is summed for all insulation layers. If the roof construction was determined to have Rigid Foam Sheathing, an R-value of 5 is subtracted from the roof R-value sum to account for the R-value of the sheathing in the HEScore construction. The nearest discrete R-value from the list of possible R-values for that roof type is used to determine an assembly code. Then, the assembly R-value of the corresponding assembly code from the lookup table is used. The lookup table can be found at hescorehpxml\lookups\lu_roof_eff_rvalue.csv.
If assembly R-value is used, the discrete R-value nearest to assembly R-value from the lookup table is used. The lookup table can be found at hescorehpxml\lookups\lu_roof_eff_rvalue.csv.
If the attic has more than one Roof
element and/or if multiple attics of the
same type and their associated roofs are to be combined, a weighted average
assembly R-value is determined by weighting the U-values by area. Then the
discrete R-value nearest to the weighted average assembly R-value from the
lookup table is used.
Then the nearest discrete R-value to the weighted average R-value from the lookup table is used. The lookup table can be found at hescorehpxml\lookups\lu_roof_eff_rvalue.csv.
Attic R-value¶
Determining the attic floor insulation levels uses the same procedure as Roof R-value except the lookup table is different.
If nominal R-value is used, the attic floor center-of-cavity R-values are each R-0.5 greater than the nominal R-values in the enumeration list.
If assembly R-value is used, the lookup table at hescorehpxml\lookups\lu_ceiling_eff_rvalue.csv is used.
If the primary roof type is determined to be a cathedral ceiling, then an attic R-value is not calculated.
Knee Walls¶
The Home Energy Score Q1 2022 release includes the ability to directly model knee walls. As such, the workaround of adding knee wall area to attic floor area is no longer used. Knee walls are now directly translated and passed to Home Energy Score as follows:
In HPXML v2, knee walls are specified via the Attic/AtticKneeWall
element.
In HPXML v3, knee walls are specified via wall attachment in
Attic/AttachedToWall
. The attached wall must have AtticWallType
of “knee
wall”. See below an example:
<Attics>
<Attic>
<SystemIdentifier id="attic5"/>
<AtticType>
<Attic>
<Vented>true</Vented>
</Attic>
</AtticType>
<AttachedToRoof idref="roof3"/>
<AttachedToWall idref="kneewall"/>
<AttachedToFrameFloor idref="framefloor"/>
</Attic>
</Attics>
<Walls>
<Wall>
<SystemIdentifier id="kneewall"/>
<ExteriorAdjacentTo>attic</ExteriorAdjacentTo>
<AtticWallType>knee wall</AtticWallType>
<WallType>
<WoodStud/>
</WallType>
<Area>200</Area>
<Insulation>
<SystemIdentifier id="kneewallins"/>
<Layer>
<InstallationType>cavity</InstallationType>
<NominalRValue>11</NominalRValue>
</Layer>
</Insulation>
</Wall>
<Walls>
The knee walls R-value can be described by nominal R-value or assembly R-value.
If nominal R-value is used, the nearest assembly code by R-value in the code is selected and the assembly R-value is looked up for that code.
If assembly R-value is used, the nearest assembly code by assembly R-value is looked up from that table.
doe2code | U-value | Eff-R-value |
---|---|---|
kwwf00 | 0.346 | 2.9 |
kwwf03 | 0.154 | 6.5 |
kwwf07 | 0.101 | 9.9 |
kwwf11 | 0.083 | 12.1 |
kwwf13 | 0.075 | 13.4 |
kwwf15 | 0.068 | 14.7 |
kwwf19 | 0.055 | 18.1 |
kwwf21 | 0.050 | 20.1 |
If an attic has more than one knee wall and/or if multiple attics of the same type need to be combined, the area weighted average assembly effective R-value is calculated from all the associated knee walls. The areas of all the knee walls are summed. The assembly code with the nearest assembly effective R-value is chosed to represent the knee walls.
Foundation Insulation¶
Table of Contents
Determining the primary foundation¶
HEScore permits the specification of two foundations.
The two foundations that cover the largest area are selected.
This is determined by summing up the area of the FrameFloor
or
Slab
elements (depending on what kind of foundation it is).
Area
elements are required for all foundations unless there is only one
foundation, then it is assumed to be the footprint area of the building.
If there are more than two foundations, the areas of the largest two are scaled
up to encompass the area of the remaining foundations while maintaining their
respective area fractions relative to each other.
Foundation Type¶
Once a foundation is selected, the HEScore foundation type is selected from HPXML according to the following table.
HPXML Foundation Type | HEScore Foundation Type | |
---|---|---|
Basement | Conditioned=”true” | cond_basement |
Conditioned=”false” or omitted | uncond_basement | |
Crawlspace | Vented=”true” | vented_crawl |
Vented=”false” or omitted | unvented_crawl | |
SlabOnGrade | slab_on_grade | |
Garage | unvented_crawl | |
AboveApartment | not translated | |
Combination | not translated | |
Ambient | vented_crawl | |
RubbleStone | not translated | |
Other | not translated |
Warning
For foundation types that are not translated the translation will return an error.
Foundation wall insulation R-value¶
If the foundation type is a basement or crawlspace, an area weighted average
R-value is calculated for the foundation walls. The area is obtained from the
Area
element, if present, or calculated from the Length
and Height
elements. The R-value is the sum of the
FoundationWall/Insulation/Layer/NominalRValue
element values for each
foundation wall. For each foundation wall, an effective R-value is looked up
based on the nearest R-value in the following table.
Insulation Level | Effective R-value |
---|---|
R-0 | 4 |
R-11 | 11.6 |
R-19 | 16.9 |
Then a weighted average R-value is calculated by weighting the U-values by area.
The effective R-value of the R-0 insulation level is then subtracted.
Finally, the nearest insulation level is selected from the enumeration list.
Slab insulation R-value¶
If the foundation type is a slab on grade, an area weighted average R-value is
calculated using the value of ExposedPerimeter
as the area. (The units work
out, the depth in the area drops out of the equation.) The R-value is the sum
of the Slab/PerimeterInsulation/Layer/NominalRValue
element values for each
foundation wall. For each slab, an effective R-value is looked up based on the
nearest R-value in the following table.
Insulation Level | Effective R-value |
---|---|
R-0 | 4 |
R-5 | 7.9 |
Then a weighted average R-value is calculated by weighting the U-values by area.
The effective R-value of the R-0 insulation level is then subtracted.
Finally, the nearest insulation level is selected from the enumeration list.
Floor insulation above basement or crawlspace¶
If the foundation type is a basement or crawlspace, for each frame floor above
the foundation, a weighted average using the floor area and R-value are
calculated. The area is obtained from the Area
element.
The floor R-value can be described by using NominalRValue
or AssemblyRValue
.
If a user wishes to use a nominal R-value, NominalRValue
elements for all layers need to be provided.
Otherwise, AssemblyRValue
elements for each layer need to be provided.
If nominal R-value is used, the R-value is the sum of the FrameFloor/Insulation/Layer/NominalRValue
element values
for each frame floor. The nearest discrete R-value from the list of possible R-values for that floor type
is used to determine an assembly code.
Then, the assembly R-value of the corresponding assembly code from the lookup table is used.
The lookup table can be found at hescorehpxml\lookups\lu_floor_eff_rvalue.csv.
If assembly R-value is used, the discrete R-value nearest to assembly R-value from the lookup table is used. The lookup table can be found at hescorehpxml\lookups\lu_floor_eff_rvalue.csv.
When more than one HPXML FrameFloor
element must be combined into one floor
construction for HEScore, a weighted average assembly R-value is determined by weighting the U-values by area.
Then the discrete R-value nearest to the weighted average assembly R-value from the lookup table is used.
Walls¶
Table of Contents
Wall Orientation¶
The flexibility of HPXML allows specification of any number of walls and windows facing any direction. HEScore expects only one wall/window specification for each side of the building (front, back, left, right).
Each wall in the HPXML document that has an ExteriorAdjacentTo='ambient'
(HPXML v2) or ExteriorAdjacentTo='outside'
(HPXML v3) or is missing the
ExteriorAdjacentTo
subelement (assumed to be ambient/outside) is considered
for translation to HEScore. This excludes attic knee walls (see
Knee Walls), interior walls, walls between living space and a garage,
etc. since HEScore does not model those walls. The translator then attempts to
assign each wall to the nearest side of the building, which is relative to the
orientation of the front of the building. The wall construction and exterior
finish of the largest wall by area on each side of the building are used to
define the properties sent to HEScore. An area weighted R-value of all the walls
on each side of the building is calculated as well as described in
Area Weighted Wall R-value. If there is only one wall on any side of the house, the area
is not required for that side. If a wall falls exactly between two sides of the
house the area of the wall is divided by two and half of the wall is assigned to
either side.
HEScore also allows the specification of one wall for all sides of the building. If none of the walls in HPXML have orientation (or azimuth) data, the wall construction and exterior finish of the largest wall by area on each side of the building are used to define the properties sent to HEScore. An area weighted R-value of all the walls on each side of the building is calculated as well as described in Area Weighted Wall R-value. If there is only one wall and no area specified, that wall is used to determine the wall construction.
Note
The following conditions must be met for the wall translation to succeed:
- If there is more than one wall on each side of the building each wall on that side of the building must have an
Area
specified.- Either all walls must have an
Azimuth
and/orOrientation
or none of them must.
Wall Construction¶
HEScore uses a selection of construction codes to describe wall construction type, insulation levels, and siding. HPXML, as usual, uses a more flexible approach defining wall types: layers of insulation materials that each include an R-value, thickness, wall cavity information, etc. To translate the inputs from HPXML to HEScore approximations need to be made to condense the continuous inputs in HPXML to discrete inputs required for HEScore.
The wall R-value can be described by using nominal R-value or assembly R-value. If a user wishes to use a nominal R-value, nominal R-value for all layers need to be provided. Otherwise, assembly R-values for each layer need to be provided.
If nominal R-value is used, the R-value is summed for all insulation layers. If the wall construction was determined to have Rigid Foam Sheathing, an R-value of 5 is subtracted from the wall R-value sum to account for the R-value of the sheathing in the HEScore construction. The nearest discrete R-value from the list of possible R-values for that wall type is used to determine an assembly code. Then, the assembly R-value of the corresponding assembly code from the lookup table is used. The lookup table can be found at hescorehpxml\lookups\lu_wall_eff_rvalue.csv.
If assembly R-value is used, the discrete R-value nearest to assembly R-value from the lookup table for that wall type is used. The lookup table can be found at hescorehpxml\lookups\lu_wall_eff_rvalue.csv.
Wood Frame Walls¶
If WallType/WoodStud
is selected in HPXML, each layer of the wall insulation
is parsed and if a continuous layer is found, or if the subelement
WallType/WoodStud/ExpandedPolyStyreneSheathing
is found, the wall is
specified in HEScore as “Wood Frame with Rigid Foam Sheathing.”
<Wall>
<SystemIdentifier id="wall1"/>
<WallType>
<WoodStud>
<!-- Either this element needs to be here or continuous insulation below -->
<ExpandedPolystyreneSheathing>true</ExpandedPolystyreneSheathing>
</WoodStud>
</WallType>
<Insulation>
<SystemIdentifier id="wall1ins"/>
<Layer>
<InstallationType>continuous</InstallationType>
<NominalRValue>5</NominalRValue>
</Layer>
...
</Insulation>
</Wall>
Otherwise, if the OptimumValueEngineering
boolean element is set to
true
, the “Wood Frame with Optimal Value Engineering” wall type in HEScore
is selected.
<Wall>
<SystemIdentifier id="wall2"/>
<WallType>
<WoodStud>
<OptimumValueEngineering>true</OptimumValueEngineering>
</WoodStud>
<Insulation>
...
</Insulation>
</WallType>
</Wall>
Note
The OptimumValueEngineering
flag needs to be set in HPXML to
translate to this wall type. The translator will not infer this from stud
spacing.
Finally, if neither of the above conditions are met, the wall is specified as simply “Wood Frame” in HEScore.
Siding is selected according to the siding map.
Structural Brick¶
If WallType/StructuralBrick
is found in HPXML, one of the structural brick
codes in HEScore is specified.
<Wall>
<SystemIdentifier id="wall3"/>
<WallType>
<StructuralBrick/>
</WallType>
<Insulation>
<SystemIdentifier id="wall3ins"/>
<Layer>
<NominalRValue>5</NominalRValue>
</Layer>
<Layer>
<NominalRValue>5</NominalRValue>
</Layer>
<!-- This would have a summed R-value of 10 -->
</Insulation>
</Wall>
Concrete Block or Stone¶
If WallType/ConcreteMasonryUnit
or WallType/Stone
is found, one of the
concrete block construction codes is used in HEScore. The siding is
translated using the same assumptions as wood stud walls
with the exception that vinyl, wood, or aluminum siding is not available and if
those are specified in the HPXML an error will result.
Straw Bale¶
If WallType/StrawBale
is found in the HPXML wall, the straw bale wall
assembly code in HEScore is selected.
Exterior Finish¶
Siding mapping is done from the Wall/Siding
element in HPXML. Siding is
specified as the last two characters of the construction code in HEScore.
HPXML | HEScore |
---|---|
wood siding | wo |
stucco | st |
synthetic stucco | st |
vinyl siding | vi |
aluminum siding | al |
brick veneer | br |
asbestos siding | wo |
fiber cement siding | wo |
composite shingle siding | wo |
masonite siding | wo |
other | not translated |
Note
not translated means the translation will fail for that house.
Area Weighted Wall R-value¶
When more than one HPXML Wall
element must be combined into one wall
construction for HEScore, the wall construction code is determined for each
HPXMl Wall
as described in Wall Construction. The wall construction
and exterior finish that represent the largest combined area are used to
represent the side of the house.
Whether nominal R-value or assembly R-value is used, a weighted average R-value is calculated
using assembly R-value for each Wall
.
The weighted average is calculated by weighting the U-values by area.
Then the nearest discrete R-value to the weighted average R-value from the lookup table is used. The lookup table can be found at hescorehpxml\lookups\lu_wall_eff_rvalue.csv.
Windows and Skylights¶
Table of Contents
Window Orientation¶
HEScore requires that a window area be specified for each side of the building.
To determine the window area on each side of the building, each Window
element in HPXML must have an Area
subelement. The Area
subelement is
assumed to mean the sum of the areas of the windows that the Window
element
represents. Each Window
is then assigned to a side of the building in one of
two ways:
- By inspecting the azimuth or orientation of the window.
- By association with a particular wall.
If there is an Orientation
or Azimuth
element, the side is determined
via the one of those elements with preference given to the Azimuth
if
present. If the window falls between two sides of the house, the window area is
divided between the sides of the house evenly.
If Orientation
or Azimuth
are missing and the HPXML window has the
AttachedToWall
element, the id reference in that element is used to find the
associated wall and the side of the building that the window faces is inferred
from the wall orientation. If the window is attached to
a foundation wall, the orientation/azimuth must be provided on the Window
element because foundation walls do not have orientation or azimuth elements
available.
The areas on each side of the house are summed and the Window Properties are
determined independently for each side of the house. Since HPXML requires that
window properties be assigned to each direction, the
window_construction_same
option in HEScore will always be false and all
windows will be specified separately.
Skylights in HEScore do not have an orientation that can be set, therefore orientation/azimuth information about skylights is ignored. Use AttachedToRoof to specify which HPXML roof each skylight is attached to. If not specified, skylights will be assigned to the first hescore roof.
Window Properties¶
Windows can be specified in one of two different ways in HEScore:
- NFRC rated window specifications U-Factor and Solar Heat Gain Coefficient (SHGC)
- Generic window types defined by the number of panes of glass, frame material, and glazing type.
Preference is given to the first choice above if those values are available in the HPXML document. If U-Factor and SHGC are not available, then one of the window codes is chosen based on the other properties of the windows. Since HPXML stores the window properties for each window, the properties for the windows on each side of the house must be aggregated across all of the windows on that side. The processes described below are done independently for the windows on each side of the house.
Defining windows using NFRC specifications¶
When there is at least one window on a side of the house that has U-Factor and SHGC values available, those are used. The values are aggregated across all the windows on a particular side of the house by taking an area weighted average omitting any windows that do not have U-Factor and SHGC values.
Defining windows by selecting a window type¶
When none of the windows on a side of the house have U-Factor and SHGC data elements, a window code is selected based on other properties of each window. Then the most predominant window code by area on each side of the house is selected.
Unfortunately there is not a 1-to-1 correlation of the HPXML data elements to HEScore for these selections and it is possible to define windows in HPXML that are impossible to input into HEScore. In these cases the translation will fail.
Windows are first sorted by frame type. The mapping of HPXML FrameType
to
HEScore frame type is performed thusly.
HPXML | HEScore |
---|---|
Aluminum | Aluminum |
Composite | Wood or Vinyl |
Fiberglass | Wood or Vinyl |
Metal | Aluminum |
Vinyl | Wood or Vinyl |
Wood | Wood or Vinyl |
Other | not translated |
Warning
If a FrameType
of Other
is selected in HPXML, the
translation will fail.
Both the Aluminum
and Metal
frame types in HPXML have optional
ThermalBreak
subelements that specify whether there is a thermal break in
the frame. If ThermalBreak
is true then the “Aluminum with Thermal Break”
frame type is selected.
Depending on the frame type selected in HEScore, different options become available for number of panes and glass type. The following sections explain the logic for each frame type.
Aluminum¶
The aluminum frame type allows for single- and double-paned windows, but not more than that. According to the HEScore documentation, single-pane windows with storm windows should be considered double-pane.
HPXML Glass Layers | HEScore |
---|---|
single-pane | single-pane |
double-pane | double-pane |
triple-pane | not translated |
multi-layered | not translated |
single-paned with storms | double-pane |
single-paned with low-e storms | double-pane |
other | not translated |
HPXML Glass Layers | HEScore |
---|---|
single-pane | single-pane |
double-pane | double-pane |
triple-pane | not translated |
multi-layered | not translated |
other | not translated |
Note
Starting from HPXML v3, “single-paned with storms” and “single-paned with low-e storms” enumerations
are removed. Instead, translator searches Window/StormWindow
element for storm existence.
If the storm window is a low-e window, specify Window/StormWindow/GlassType
to be equal to “low-e”.
StormWindow
is only used when single-pane
window is specified.
- HPXML v2 “single-paned with storms” equivalence(mapped to double-pane) in HPXML v3:
Window/GlassLayers
“single-pane” +Window/StormWindow
.
- HPXML v2 “single-paned with low-e storms” equivalence(mapped to double-pane) in HPXML v3:
Window/GlassLayers
“single-pane” +Window/StormWindow/GlassType
to be “low-e”.
Warning
If a window has the “Aluminum” frame type, the GlassLayers
must be
single-pane, double-pane, or a single-pane with storm windows (or specify
Window/StormWindow
with “single-pane” in HPXML v3+) or the translation
will fail.
Single-pane¶
Single-paned windows can be either tinted or clear. If the GlassType
element
is either “tinted” or “tinted/reflective”, “Single-pane, tinted” is selected.
Otherwise, “Single-pane, clear” is selected.
HPXML Glass Type | HEScore Glazing Type |
---|---|
low-e | Single-pane, tinted |
tinted | Single-pane, tinted |
reflective | Single-pane, clear |
tinted/reflective | Single-pane, tinted |
other | Single-pane, clear |
element missing | Single-pane, clear |
Double-pane¶
Double-paned windows have a solar control low-e option in addition to the tinted and clear options.
HPXML Glass Type | HEScore Glazing Type |
---|---|
low-e | Double-pane, solar-control low-E |
tinted | Double-pane, tinted |
reflective | Double-pane, solar-control low-E |
tinted/reflective | Double-pane, solar-control low-E |
other | Double-pane, clear |
element missing | Double-pane, clear |
Aluminum with Thermal Break¶
Only double paned window options are available for the aluminum with thermal break frame type. According to the HEScore documentation, single-pane windows with storm windows should be considered double-pane.
HPXML Glass Layers | HEScore |
---|---|
single-pane | not translated |
double-pane | double-pane |
triple-pane | not translated |
multi-layered | not translated |
single-paned with storms | double-pane |
single-paned with low-e storms | double-pane |
other | not translated |
HPXML Glass Layers | HEScore |
---|---|
single-pane | not translated |
double-pane | double-pane |
triple-pane | not translated |
multi-layered | not translated |
other | not translated |
Note
Starting from HPXML v3, “single-paned with storms” and “single-paned with low-e storms” enumerations
are removed. Instead, translator searches Window/StormWindow
element for storm existence.
If the storm window is a low-e window, specify Window/StormWindow/GlassType
to be equal to “low-e”.
StormWindow
is only used when single-pane
window is specified.
- HPXML v2 “single-paned with storms” equivalence(mapped to double-pane) in HPXML v3:
Window/GlassLayers
“single-pane” +Window/StormWindow
.
- HPXML v2 “single-paned with low-e storms” equivalence(mapped to double-pane) in HPXML v3:
Window/GlassLayers
“single-pane” +Window/StormWindow/GlassType
to be “low-e”.
Warning
If a window has the “Aluminum with Thermal Break” frame type, the
GlassLayers
must be double-pane or single-pane with storms (or specify
Window/StormWindow
with “single-pane” in HPXML v3+) or the translation
will fail.
Double-pane¶
To get the “Double-pane, insulating low-E, argon gas fill” option, you need to specify the window elements as highlighted below. Storm windows will not work because it is impossible to have an argon gas fill between the window and the storm window.
<Window>
<SystemIdentifier id="id1"/>
<Area>30</Area>
<Orientation>east</Orientation>
<FrameType>
<Aluminum><!-- or Metal -->
<ThermalBreak>true</ThermalBreak>
</Aluminum>
</FrameType>
<GlassLayers>double-pane</GlassLayers>
<GlassType>low-e</GlassType>
<GasFill>argon</GasFill>
</Window>
“Double-pane, solar-control low-E” can be specified as highlighted in the
following code block. Using “reflective” in GlassType
is assumed to be the
same as solar control low-e.
<Window>
<SystemIdentifier id="id2"/>
<Area>30</Area>
<Orientation>east</Orientation>
<FrameType>
<Aluminum><!-- or Metal -->
<ThermalBreak>true</ThermalBreak>
</Aluminum>
</FrameType>
<GlassLayers>double-pane</GlassLayers><!-- or other double-pane mapped options mentioned above -->
<GlassType>reflective</GlassType>
</Window>
Warning
Is “reflective” the same as solar control low-e or close enough? I’m running on the assumption that low-e means insulating low-e.
To specify the “Double-pane, tinted” option in HEScore, the GlassType
needs
to be either “tinted” or “tinted/reflective.”
<Window>
<SystemIdentifier id="window1"/>
<Area>30</Area>
<Orientation>east</Orientation>
<FrameType>
<Aluminum>
<ThermalBreak>true</ThermalBreak>
</Aluminum>
</FrameType>
<GlassLayers>double-pane</GlassLayers><!-- or 'single-paned with storms', 'single-paned with low-e storms' -->
<GlassType>tinted</GlassType><!-- or tinted/reflective -->
</Window>
All other double-pane windows will be translated as “Double-pane, clear.”
Wood or Vinyl¶
In HEScore wood or vinyl framed windows can have 1, 2, or 3 panes. According to
the HEScore documentation, single-pane windows with storm windows should be
considered double-pane. The HPXML GlassLayers
maps into HEScore number of
panes as follows:
HPXML Glass Layers | HEScore |
---|---|
single-pane | single-pane |
double-pane | double-pane |
triple-pane | triple-pane |
multi-layered | not translated |
single-paned with storms | double-pane |
single-paned with low-e storms | double-pane |
other | not translated |
HPXML Glass Layers | HEScore |
---|---|
single-pane | single-pane |
double-pane | double-pane |
triple-pane | triple-pane |
multi-layered | not translated |
other | not translated |
Note
Starting from HPXML v3, “single-paned with storms” and “single-paned with low-e storms” enumerations
are removed. Instead, translator searches Window/StormWindow
element for storm existence.
If the storm window is a low-e window, specify Window/StormWindow/GlassType
to be equal to “low-e”.
StormWindow
is only used when single-pane
window is specified.
- HPXML v2 “single-paned with storms” equivalence(mapped to double-pane) in HPXML v3:
Window/GlassLayers
“single-pane” +Window/StormWindow
.
- HPXML v2 “single-paned with low-e storms” equivalence(mapped to double-pane) in HPXML v3:
Window/GlassLayers
“single-pane” +Window/StormWindow/GlassType
to be “low-e”.
Single-pane¶
Single-pane windows can be either tinted or not. If the GlassType
element is
either “tinted” or “tinted/reflective”, “Single-pane, tinted” is selected.
Otherwise, “Single-pane, clear” is selected.
HPXML Glass Type | HEScore Glazing Type |
---|---|
low-e | Single-pane, tinted |
tinted | Single-pane, tinted |
reflective | Single-pane, clear |
tinted/reflective | Single-pane, tinted |
other | Single-pane, clear |
element missing | Single-pane, clear |
Double-pane¶
Double-pane windows can be either clear, tinted, insulating low-E with or without argon gas fill, and solar control low-E with or without argon gas fill. According to the HEScore documentation, single-pane windows with storm windows should be considered double-pane. The double-pane mapping is a bit more complicated as it needs to use multiple elements to determine the glazing type for HEScore. We will address each possible HEScore combination and how it is expected to be represented in HPXML.
To get a insulating low-E double-pane wood or vinyl framed window,
GlassLayers
needs to be “double-pane” and the GlassType
needs to be
“low-e” or GlassLayers
needs to be “single-paned with low-e storms” (or
GlassLayers “single-pane” + Window/StormWindow/GlassType
equal to “low-e” in
HPXML v3+). If GasFill
is argon, it will be argon filled. For instance, to
get a double-pane low-E with argon fill, the HPXML window element would look
like:
<Window>
<SystemIdentifier id="window1"/>
<Area>30</Area>
<Orientation>east</Orientation>
<FrameType>
<Vinyl/>
</FrameType>
<GlassLayers>double-pane</GlassLayers>
<GlassType>low-e</GlassType>
<GasFill>argon</GasFill>
</Window>
Translating a Single-pane window with a low-E storm window into the HEScore type of double-pane with insulating low-E the HPXML window element would look like:
- HPXML v2:
<Window>
<SystemIdentifier id="window53"/>
<Area>30</Area>
<Orientation>east</Orientation>
<FrameType>
<Vinyl/>
</FrameType>
<GlassLayers>single-paned with low-e storms</GlassLayers>
</Window>
- HPXML v3:
<Window>
<SystemIdentifier id="window53"/>
<Area>30</Area>
<Orientation>east</Orientation>
<FrameType>
<Vinyl/>
</FrameType>
<GlassLayers>single-pane</GlassLayers>
<StormWindow>
<SystemIdentifier id="windowstorm"/>
<GlassType>low-e</GlassType>
</StormWindow>
</Window>
Note the missing GlassType
element. It is ignored when it’s a single-paned
window with low-e storms. The translation will also ignore GasFill
for
single-paned window because it’s impossible to have argon between a single pane
window and storm window.
To specify a solar-control low-E double-pane wood or vinyl framed window a
GlassType
of “reflective” must be specified. Setting GasFill
as “argon”
or not indicates whether the argon gas fill type is chosen in HEScore.
Warning
The HPXML GlassType
of reflective is assumed to mean solar
control low-E when translated into HEScore parlance.
For instance, to get a “Double-pane, solar-control low-E” glazing type, the HPXML window element would look like:
<Window>
<SystemIdentifier id="window53"/>
<Area>30</Area>
<Orientation>east</Orientation>
<FrameType>
<Wood/>
</FrameType>
<GlassLayers>double-pane</GlassLayers>
<GlassType>reflective</GlassType>
</Window>
For argon filled, you would add <GasFill>argon</GasFill>
before the
</Window>
.
If the GlassType
is “tinted” or “tinted/reflective” the “Double-pane,
tinted” HEScore glazing type is selected.
Finally, if the window is double-pane (or single-pane with storm window) and doesn’t meet the above criteria, then the “Double-pane, clear” glazing type is chosen for HEScore.
Triple-pane¶
If the GlassLayers
in HPXML specifies a “triple-paned” window, the HEScore
“Triple-pane, insulating low-E, argon gas fill” glazing type is selected. The
GlassType
and GasFill
elements are not considered since this is the
only triple-pane glazing option in HEScore.
Solar Screens¶
For each side of the house in HEScore, solar screens may be present.
To determine if solar screens should be specified, the translator looks for either
of the following subelements of Window
or Skylight
:
HPXML v2:
<ExteriorShading>solar screens</ExteriorShading>
<Treatments>solar screen</Treatments>
HPXML v3:
<ExteriorShading><Type>solar screens</Type></ExteriorShading>
If the majority of the window area on a side of the house (or skylights facing upwards) meet that criteria, that side of the house will have solar screens in the HEScore model. This determination is made independent of whether the other window properties were set using NFRC specifications or inferred based on window type.
HVAC Systems¶
HEScore allows the definition of up to two HVAC systems which can each include a
heating system, cooling system, and duct system. To determine which HPXML
elements are associated, the DistributionSystem
subelement of
HeatingSystem
, CoolingSystem
, HeatPump
is used to find the link to
HVACDistributionSystem
. Systems that share the same
HVACDistributionSystem
are determined to be the same HVAC system for
HEScore.
Sometimes an HVAC system will not share ducts, for instance a central air
conditioner and boiler. In that case, if each of those systems serve a fraction
of the home’s load within 5% of each other they will be combined into the same
HVAC system for HEScore. If a HeatingSystem
and CoolingSystem
that are
associated with the same HVACDistributionSystem
serve differing portions of
the house’s heating and cooling load, that weight is averaged to find the
combined system weight.
If either a heating or cooling system meets all of the load and two systems of the opposite (cooling or heating, respectively) are required to meet the same fraction of the load, the larger system is split into two for input into HEScore.
To determine the fraction of the home’s heating and cooling load each system
serves, each HPXML heating and cooling system is required to have
FloorAreaServed
or, alternatively FracLoadServed
. The two combined HVAC
systems that serve the greatest portion of the house’s load are sent to HEScore.
For details about how each kind of HeatingSystem
, CoolingSystem
,
HeatPump
, and HVACDistributionSystem
are translated into HEScore inputs,
see the appropriate subsection:
Heating¶
Table of Contents
Heating system type¶
HPXML provides two difference HVAC system elements that can provide heating:
HeatingSystem
that only provides heating and HeatPump
which can provide
heating and cooling.
Heat Pump¶
The HeatPump
element in HPXML can represent either an air-source heat pump
or ground source heat pump in HEScore. Which is specified in HEScore is
determined by the HeatPumpType
element in HPXML according to the following
mapping.
HPXML Heat Pump Type | HEScore Heating Type |
---|---|
water-to-air | gchp |
water-to-water | gchp |
air-to-air | heat_pump |
mini-split | mini_split |
ground-to-air | gchp |
The primary heating fuel is assumed to be electric.
Note
Prior to HEScore v2016 mini-split heat pumps were translated as ducted air-source heat pumps with ducts in conditioned space. With the addition of mini split heat pumps in HEScore v2016, they are now categorized appropriately.
If a heat pump has a FractionCoolLoadServed set to zero, the heat pump is assumed to provide only space heating. If the heat pump is connected to the same distribution system as a separate cooling system and serves the same portion of the house, the house will translate but fail in Home Energy Score because that configuration is not supported.
Heating System¶
The HeatingSystem
element in HPXML is used to describe any system that
provides heating that is not a heat pump. The HeatingSystemType
subelement
is used to determine what kind of heating system to specify for HEScore. This
is done according to the following mapping.
HPXML Heating System Type | HEScore Heating Type |
---|---|
Furnace | central_furnace |
WallFurnace | wall_furnace |
FloorFurnace | wall_furnace |
Boiler | boiler |
ElectricResistance | baseboard |
Stove | wood_stove |
Note
HPXML supports other values for the HeatingSystemType
element
not in the list above, but HEScore does not. Other heating system
types will result in a translation error.
A primary heating fuel is selected from the HeatingSystemFuel
subelement of
the primary heating system. The fuel types are mapped as follows.
HPXML | HEScore |
---|---|
electricity | electric |
renewable electricity | electric |
natural gas | natural_gas |
renewable natural gas | natural_gas |
fuel oil | fuel_oil |
fuel oil 1 | fuel_oil |
fuel oil 2 | fuel_oil |
fuel oil 4 | fuel_oil |
fuel oil 5/6 | fuel_oil |
propane | lpg |
wood | cord_wood |
wood pellets | pellet_wood |
Warning
HPXML supports other fuel types that could not be mapped into existing HEScore fuel types (i.e. coal, wood). Encountering an unsupported fuel type will result in a translation error.
Heating Efficiency¶
Heating efficiency can be described in HEScore by either the rated efficiency (AFUE, HSPF, COP), or if that is unavailable, the year installed/manufactured from which HEScore estimates the efficiency based on shipment weighted efficiencies by year. The translator follows this methodology and looks for the rated efficiency first and if it cannot be found sends the year installed.
Wood stoves and electric furnaces and baseboard heating do not use the efficiency input in HEScore. Therefore, for these heating types an efficiency is not determined.
Rated Efficiency¶
HEScore expects efficiency to be described in different units depending on the heating system type.
Heating Type | Efficiency Units |
---|---|
heat_pump | HSPF |
mini_split | HSPF |
central_furnace | AFUE |
wall_furnace | AFUE |
boiler | AFUE |
gchp | COP |
The translator searches the HeatingSystem/AnnualHeatingEfficiency
or
HeatPump/AnnualHeatEfficiency
(HPXML v2) or HeatPump/AnnualHeatingEfficiency
(HPXML v3)
elements of the primary heating system and uses the first one that has the correct units.
Shipment Weighted Efficiency¶
When an appropriate rated efficiency cannot be found, HEScore can accept the
year the equipment was installed and estimate the efficiency based on that. The
year is retrieved from the YearInstalled
element, and if that is not
present the ModelYear
element.
Cooling¶
Table of Contents
Cooling system type¶
HPXML provides two difference HVAC system elements that can provide cooling:
CoolingSystem
that only provides cooling and HeatPump
which can provide
heating and cooling.
Heat Pump¶
The HeatPump
element in HPXML can represent either an air-source heat pump
or ground source heat pump in HEScore. Which is specified in HEScore is
determined by the HeatPumpType
element in HPXML according to the following
mapping.
HPXML Heat Pump Type | HEScore Cooling Type |
---|---|
water-to-air | gchp |
water-to-water | gchp |
air-to-air | heat_pump |
mini-split | mini_split |
ground-to-air | gchp |
Note
Prior to HEScore v2016 mini-split heat pumps were translated as ducted air-source heat pumps with ducts in conditioned space. With the addition of mini split heat pumps in HEScore v2016, they are now categorized appropriately.
If a heat pump has a FractionHeatlLoadServed set to zero, the heat pump is assumed to provide only space cooling. If the heat pump is connected to the same distribution system as a separate heating system and serves the same portion of the house, the house will translate but fail in Home Energy Score because that configuration is not supported.
Cooling System¶
The CoolingSystem
element in HPXML is used to describe any system that
provides cooling that is not a heat pump. The CoolingSystemType
subelement
is used to determine what kind of cooling system to specify for HEScore. This
is done according to the following mapping.
HPXML Cooling System Type | HEScore Cooling Type |
---|---|
central air conditioner (HPXML V3) | split_dx |
central air conditioning (HPXML V2) | split_dx |
room air conditioner | packaged_dx |
mini-split | mini_split |
evaporative cooler | dec |
other | not translated |
Warning
If an HPXML cooling system type maps to not translated the translation will fail.
Note
Prior to v2016, HEScore did not have an evaporative cooler type and these were translated as high efficiency split_dx
systems.
Now that evaporative cooling has been added in HEScore v2016, they are categorized accordingly.
Note
Starting from HPXML version 3.0, the enumeration “central air conditioning” is renamed as “central air conditioner”. They’re equivalent in translation.
Cooling Efficiency¶
Cooling efficiency can be described in HEScore by either the rated efficiency (SEER, EER), or if that is unavailable, the year installed/manufactured from which HEScore estimates the efficiency based on shipment weighted efficiencies by year. The translator follows this methodology and looks for the rated efficiency first and if it cannot be found sends the year installed. Evaporative coolers do not require an efficiency input in HEScore, and it is therefore omitted.
Rated Efficiency¶
HEScore expects efficiency to be described in different units depending on the cooling system type.
Cooling Type | Efficiency Units |
---|---|
split_dx | SEER |
packaged_dx | EER |
heat_pump | SEER |
mini_split | SEER |
gchp | EER |
The translator searches the CoolingSystem/AnnualCoolingEfficiency
or
HeatPump/AnnualCoolEfficiency
(HPXML v2) or HeatPump/AnnualCoolingEfficiency
(HPXML v3)
elements of the primary cooling system and uses the first one that has the correct units.
Shipment Weighted Efficiency¶
When an appropriate rated efficiency cannot be found, HEScore can accept the
year the equipment was installed and estimate the efficiency based on that. The
year is retrieved from the YearInstalled
element, and if that is not
present the ModelYear
element.
HVAC Distribution¶
Table of Contents
In HPXML multiple HVACDistribution
elements can be associated with a heating
or cooling system. For the purposes of this translator, it is required that only one HVACDistribution
element be linked.
That element can then describe a ducted system, a hydronic
system, or an open ended other system. For the translation to HEScore, only
HVACDistribution
elements that are ducted are considered.
Duct Location Mapping¶
For each Ducts
element in each air distribution system, the location of the
duct mapped from HPXML enumerations to HEScore enumerations according to the
following mapping.
HPXML | HEScore |
---|---|
conditioned space | cond_space |
unconditioned space | not translated |
unconditioned basement | uncond_basement |
unvented crawlspace | unvented_crawl |
vented crawlspace | vented_crawl |
crawlspace | not translated |
unconditioned attic | uncond_attic |
interstitial space | not translated |
garage | unvented_crawl |
outside | outside |
HPXML | HEScore Hierarchy |
---|---|
living space | cond_space |
unconditioned space | uncond_basement, vented_crawl, unvented_crawl, uncond_attic |
under slab | under_slab |
basement | uncond_basement, cond_space |
basement - unconditioned | uncond_basement |
basement - conditioned | cond_space |
crawlspace - unvented | unvented_crawl |
crawlspace - vented | vented_crawl |
crawlspace - unconditioned | vented_crawl, unvented_crawl |
crawlspace - conditioned | cond_space |
crawlspace | vented_crawl, unvented_crawl, cond_space |
exterior wall | exterior_wall |
attic | uncond_attic, cond_space |
attic - unconditioned | uncond_attic |
attic - conditioned | cond_space |
attic - unvented | uncond_attic |
attic - vented | uncond_attic |
interstitial space | not translated |
garage | unvented_crawl |
garage - conditioned | cond_space |
garage - unconditioned | unvented_crawl |
roof deck | outside |
outside | outside |
Warning
If an HPXML duct location maps to not translated above, the translation for the house will fail.
Duct Fractions¶
For each Ducts
element with the same insulation level in an air distribution system
the FracDuctArea
is summed by HEScore duct location.
Duct Insulation¶
If the any of the Ducts
elements in a particular
location have a DuctInsulationRValue
or
DuctInsulationThickness
that is greater than zero or have a DuctInsulationMaterial
that is not None
,
all of the ducts in that location are considered insulated.
Duct Leakage Measurements¶
Duct leakage measurements are associated with an AirDistribution
element.
It can be specified quantitatively or qualitatively.
To quantitatively specify the duct leakage to outside in CFM25 of an AirDistribution
system
(e.g., duct blaster measurement), the translator expects to find the following elements:
DuctLeakageMeasurement[not(DuctType)]/DuctLeakage[TotalOrToOutside="to outside" and Units="CFM25"]/Value
element with the numeric value- If the above element is not found, the values of the elements
DuctLeakageMeasurement[DuctType="supply"]/DuctLeakage[TotalOrToOutside="to outside" and Units="CFM25"]/Value
andDuctLeakageMeasurement[DuctType="return"]/DuctLeakage[TotalOrToOutside="to outside" and Units="CFM25"]/Value
will be summed and used.
If quantitative duct leakage measurement is not specified, the translator expects to find either of the following qualitatively specified duct leakage measurement elements:
DuctLeakageMeasurement/LeakinessObservedVisualInspection
element with the value of “connections sealed w mastic”.HVACDistribution/HVACDistributionImprovement/DuctSystemSealed
element with the value of “true”.
If neither qualitative nor quantitative element is specified, it will result in an “unsealed” designation.
Domestic Hot Water¶
Table of Contents
Determining the primary water heating system¶
HPXML allows for the specification of several WaterHeatingSystem
elements.
HEScore only allows one to be specified. If there are more than one water
heaters present in the HPXML file, the one that serves the largest fraction of
the the load is selected based on the value of FractionDHWLoadServed
. If
not all of the WaterHeatingSystem
elements have FractionDHWServed
subelements (or if none of them do), the first WaterHeatingSystem
is
selected.
Water heater type¶
The water heater type is mapped from HPXML to HEScore accordingly:
HPXML | HEScore | |
---|---|---|
WaterHeaterType | DHW Category | DHW Type |
storage water heater | unit | storage |
dedicated boiler with storage tank | ||
instantaneous water heater | unit | tankless |
heat pump water heater | unit | heat_pump |
space-heating boiler with storage tank | combined | indirect |
space-heating boiler with tankless coil | combined | tankless_coil |
The fuel type is mapped according to the same mapping used in Primary Heating System Fuel mapping.
Water heating efficiency¶
If the WaterHeating/UniformEnergyFactor
element exists, that is passed to
HEScore with an efficiency method of “uef”.
Otherwise if the WaterHeatingSystem/EnergyFactor
element exists, that energy factor is
sent to HEScore along with an efficiency method of “user”, which tells it that to interpret it
as a traditional energy factor.
When an energy factor cannot be found, HEScore can accept the
year the equipment was installed and estimate the efficiency based on that. The
year is retrieved from the YearInstalled
element, and if that is not
present the ModelYear
element.
If the DHW type is tankless, only energy factor or unified energy factor could be used to describe efficiency, the estimation based on installed year is no longer available.
Generation¶
Solar Electric¶
HEScore allows for a single photovoltaic system to be included as of v2016. In
HPXML, multiple PVSystem
elements can be specified to represent the PV
systems on the house. The translator combines multiple systems and generates the
appropriate HEScore inputs as follows:
Capacity Known¶
If each PVSystem
has a MaxPowerOutput
, this is true. If each
PVSystem
has a NumberOfPanels
or if each has CollectorArea
, this is
false. Preference is given to known capacity if available. Either a
MaxPowerOutput
must be specified for every PVSystem
or CollectorArea
must be specified for every PVSystem
.
DC Capacity¶
If each PVSystem
has a MaxPowerOutput
, the system capacity is known. The
system_capacity
in HEScore is calculated by summing all the
MaxPowerOutput
elements in HPXML.
Number of Panels¶
If MaxPowerOutput
is missing from any PVSystem
, the translator will
check to see if every system has NumberOfPanels
and calculate the total
number of panels.
If NumberOfPanels
isn’t available on every system, the translator will look
for CollectorArea
on every PVSystem. The number of panels is calculated by
summing all the collector area, dividing by 17.6 sq.ft., and rounding to the
nearest whole number.
Weighted Averages¶
The below quantities are calculated using weighted averages. The weights used are in priority order:
MaxPowerOutput
NumberOfPanels
CollectorArea
Which is the same data elements used to determine the PV sizing inputs above.
Year Installed¶
For each PVSystem
the YearInverterManufactured
and
YearModulesManufactured
element values are retrieved, and the greater of the
two is assumed to be the year that system was installed. When there are multiple
PVSystem
elements, a weighted average is calculated and used.
Panel Orientation (Azimuth)¶
For each PVSystem
the ArrayAzimuth
(degrees clockwise from north) is
retrieved. If ArrayAzimuth
is not available, ArrayOrientation
(north,
northwest, etc) is converted into an azimuth. A weighted average azimuth is
calculated and converted into the nearest cardinal direction (north, northwest,
etc) for submission into the array_azimuth
HEScore input (which expects a
direction, not a numeric azimuth).
Panel Tilt¶
For each PVSystem
the ArrayTilt
(in degrees from horizontal) is
retrieved. A weighted average tilt is calculated and submitted to the
array_tilt
HEScore input (which expects an enumeration, not a numeric tilt).
The tilt is mapped to HEScore as follows:
HPXML | HEScore |
---|---|
0 - 7° | flat |
8 - 22° | low_slope |
23 - 37° | medium_slope |
38 - 90° | steep_slope |
Glossary of Terms¶
- ACH50
- Air changes per hour at 50 Pascals pressure.
- API
- Application Programming Interface. An API is a documented way for different software to interact with each other. In the context of this document, the API referred to specifically is the HEScore API. Specific documentation is available on the LBNL website.
- CFM50
- Cubic feet per minute at 50 Pascals pressure.
- HEScore
- Home Energy Scoring Tool. The Home Energy Score is similar to a vehicle’s mile-per-gallon rating. The Home Energy Score allows homeowners to compare the energy performance of their homes to other homes nationwide. It also provides homeowners with suggestions for improving their homes’ efficiency. The process starts with a Home Energy Score Qualified Assessor collecting energy information during a brief home walk-through. Using the Home Energy Scoring Tool, developed by the Lawrence Berkeley National Laboratory, the Qualified Assessor then scores the home on a scale of 1 to 10. A score of 10 indicates that the home has excellent energy performance. A score of 1 indicates the home needs extensive energy improvements. In addition to providing the Score, the Qualified Assessor provides the homeowner with a list of recommended energy improvements and the associated cost savings estimates. [1]
- HPXML
- Home Performance XML. BPI-2100 is designed to facilitate communication and the exchange of information and data among all actors in the home performance industry by providing an extensible mark-up language (XML) standard for transferring information related to whole-house energy efficiency upgrades. The standard is informally known as Home Performance XML, or HPXML. BPI-2100 is a companion standard to BPI-2200 (Standard for Home Performance-Related Data Collection). Each of the data elements defined in BPI-2200 can be transferred via HPXML. [2]
- XML
- eXtensible Markup Language. XML is a markup language that defines a set of rules for encoding documents in a format that is both human-readable and machine-readable. It is defined in the XML 1.0 Specification produced by the W3C, and several other related specifications, all free open standards. [3]
Footnotes
[1] | http://energy.gov/eere/buildings/home-energy-score |
[2] | http://hpxmlonline.com/ |
[3] | http://en.wikipedia.org/wiki/XML |
Changelogs¶
v6.2 to v7.0¶
This release is coordinated with OpenStudio-HEScore v2.0.
What’s New¶
Envelope¶
- EPS wall type will now be selected if there is any continuous insulation on
the wall, not just if it has the
InsulationMaterial/Rigid
subelement. See Wood Frame Walls. - Assembly R-values can be used in for floors, attics, roofs, and walls.
- More R-values are now available in the HEScore construction codes for floors, attics, roofs, and walls. No action is required. Existing HPXML elements will be translated accordingly.
- A blower door test no longer requires the
AirInfiltrationMeasurement/TypeOfInfiltrationMeasurement
element. If a CFM50 or ACH50 value is reported, it will be used. See Blower Door Test. - Added support for knee walls. See Knee Walls.
- Either an
AirInfiltrationMeasurement
orAirSealingMeasurement
element is now required. - Ducts in the garage will now be translated to unvented crawlspace in HEScore. See Duct Location Mapping.
HVAC¶
- Insulated ducts can now be specified by either the
DuctInsulationThickness
or theDuctInsulationMaterial
elements. See Duct Insulation. - Additional duct locations are now available. See Duct Location Mapping.
- Duct blaster measurements can be used to describe duct leakage. See Duct Leakage Measurements.
Water Heating¶
- The maximum allowed EF for a tank type water heater is now 0.95, and the maximum allowed EF for a tankless water heater is 0.99. Electric heat pump water heaters will continue to allow EFs between 1.0 and 4.0 inclusive.
PV¶
- PV Tilt is translated and used in HEScore. See Panel Tilt.
- Number of Panels is now being translated from HPXML v3 files. See Number of Panels.
Changelog¶
- Move external_building_id to building_address element by @bpark1327 in #149
- Update issue templates by @nmerket in #153
- Adding github workflow for CI by @nmerket in #154
- Ignoring gable walls in hpxml v3 files by @nmerket in #152
- JSON Schema by @bpark1327 in #144
- Failing CI on broken tests for all versions by @nmerket in #159
- Wall translation fixes and water heater EF rounding by @bpark1327 in #164
- Update duct insulation mapping by @bpark1327 in #163
- JSON Schema, take 2 by @bpark1327 in #161
- Handle zip+4 in hpxml by @nmerket in #169
- not allowing R-value to go past zero for walls with XPS by @nmerket in #170
- PV Tilt by @shorowit in #172
- Update schema for townhouse walls by @bpark1327 in #175
- PV Number of Panels by @nmerket in #179
- Additional duct locations by @shorowit in #177
- Duct blaster measurements by @bpark1327 in #168
- Update hpxml2hescore duct validation by @bpark1327 in #173
- Update duct blaster measurement by @bpark1327 in #183
- Adding effective R-value lookup by @nmerket in #160
- Low-e storms by @bpark1327 in #176
- CEE HVAC efficiency levels by @yzhou601 in #185
- Increase granularity of construction codes by @bpark1327 in #187
- Improve air infiltration measurement translation by @bpark1327 in #190
- Knee walls by @nmerket in #184
- Fix inappropriate water heater EFs by @bpark1327 in #191
- Remove old wall construction codes by @bpark1327 in #195
- Improve multiple ducts translation by @bpark1327 in #194
- Improve air infiltration measurement translation, Take 2 by @bpark1327 in #193
- Updating garage duct location to unvented_crawl by @nmerket in #197
Full Changelog: https://github.com/NREL/hescore-hpxml/compare/v6.2..v7.0