Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Zone design loads #1705

Merged
merged 44 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
e434cf4
Initial progress.
shorowit May 1, 2024
af06dc6
Calculate block design loads at the HPXML Zone level. If no HPXML Zon…
shorowit May 2, 2024
0b26d0d
Bugfix.
shorowit May 2, 2024
1a6e423
Another bugfix.
shorowit May 2, 2024
b62a3bd
Another pass.
shorowit May 2, 2024
ac4500a
Latest results.
May 2, 2024
587fdea
Update outputs; design loads now created on each in.xml Zone element …
shorowit May 3, 2024
b4f98d1
Merge branch 'zone_design_loads' of https://github.com/NREL/OpenStudi…
shorowit May 3, 2024
b8c9f8a
Simplify code. Address buildings without cooling/heating.
shorowit May 3, 2024
cca9076
More robust logic for AttachedToSpace/AttachedToZone elements. Start …
shorowit May 3, 2024
91f97a3
Fix CI failure.
shorowit May 3, 2024
52294e6
Need to exclude HVAC Zone Design Load too.
shorowit May 4, 2024
fcaedce
Latest results.
May 4, 2024
a7e7bfc
Small changes. [ci skip]
shorowit May 6, 2024
b2fd3f5
Update docs, etc.
shorowit May 6, 2024
983f695
Document AttachedToSpace/AttachedToZone.
shorowit May 6, 2024
e243895
Update error checking and add validation tests.
shorowit May 6, 2024
4a2e930
Address regressions for e.g. partial HVAC systems.
shorowit May 7, 2024
897cef4
Latest results.
May 7, 2024
048d93b
Update changelog [ci skip]
shorowit May 7, 2024
8a05f4b
Merge branch 'room-by-room-sizing' of https://github.com/NREL/OpenStu…
shorowit May 9, 2024
192034b
Merge branch 'zone_design_loads' of https://github.com/NREL/OpenStudi…
shorowit May 9, 2024
4eef071
Bugfixes.
shorowit May 9, 2024
6ba7944
Merge branch 'room-by-room-sizing' of https://github.com/NREL/OpenStu…
shorowit May 9, 2024
e17fa5c
Merge branch 'room-by-room-sizing' of https://github.com/NREL/OpenStu…
yzhou601 May 14, 2024
371eb7d
Latest results.
May 14, 2024
97dec98
Merge branch 'room-by-room-sizing' of https://github.com/NREL/OpenStu…
shorowit May 14, 2024
c2de286
Add sample file and unit tests. Fix zone AED curves.
shorowit May 15, 2024
3f446f8
Latest results.
May 15, 2024
0b3df9b
Revert change to WAR; should be gross wall area, not net wall area. M…
shorowit May 15, 2024
dfbeb5f
Merge branch 'zone_design_loads' of https://github.com/NREL/OpenStudi…
shorowit May 15, 2024
21cb116
Fixed duct load apportioning.
shorowit May 15, 2024
c4d0228
Latest results.
May 15, 2024
161f2ef
minor cleanup for window, no diff expected
yzhou601 May 15, 2024
3f3c2a8
Add a warning if a skylight is not connected to conditioned space. Fi…
shorowit May 15, 2024
9d3237a
Rename attributes to be more consistent w/ HPXML. Minor refactor. No …
shorowit May 15, 2024
a2d89a2
Bugfix.
shorowit May 15, 2024
c54e7d9
Latest results.
May 15, 2024
c70466f
Merge branch 'zone_design_loads' of https://github.com/NREL/OpenStudi…
shorowit May 15, 2024
c00e1b7
Oops, missed these two.
shorowit May 15, 2024
a7798ec
Address review comments.
shorowit May 15, 2024
90bddbf
I like this better.
shorowit May 15, 2024
1470350
Merge branch 'zone_design_loads' of https://github.com/NREL/OpenStudi…
shorowit May 15, 2024
1206d19
Merge pull request #1713 from NREL/hpxml_subsurface_attrs
shorowit May 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
102 changes: 48 additions & 54 deletions BuildResidentialHPXML/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4970,13 +4970,21 @@ def self.set_skylights(hpxml_bldg, args, sorted_subsurfaces)
roof_idref = @surface_ids[surface.name.to_s]
next if roof_idref.nil?

roof = hpxml_bldg.roofs.find { |roof| roof.id == roof_idref }
if roof.interior_adjacent_to != HPXML::LocationConditionedSpace
# This is the roof of an attic, so the skylight must have a shaft; attach it to the attic floor as well.
floor = hpxml_bldg.floors.find { |floor| floor.interior_adjacent_to == HPXML::LocationConditionedSpace && floor.exterior_adjacent_to == roof.interior_adjacent_to }
floor_idref = floor.id
end

hpxml_bldg.skylights.add(id: "Skylight#{hpxml_bldg.skylights.size + 1}",
area: UnitConversions.convert(sub_surface.grossArea, 'm^2', 'ft^2'),
azimuth: azimuth,
ufactor: args[:skylight_ufactor],
shgc: args[:skylight_shgc],
storm_type: args[:skylight_storm_type],
roof_idref: roof_idref)
roof_idref: roof_idref,
floor_idref: floor_idref)
end
end

Expand Down Expand Up @@ -6554,72 +6562,58 @@ def self.collapse_surfaces(hpxml_bldg, args)
end

# After surfaces are collapsed, round all areas
(hpxml_bldg.roofs +
hpxml_bldg.rim_joists +
hpxml_bldg.walls +
hpxml_bldg.foundation_walls +
hpxml_bldg.floors +
hpxml_bldg.slabs +
hpxml_bldg.windows +
hpxml_bldg.skylights +
hpxml_bldg.doors).each do |s|
(hpxml_bldg.surfaces + hpxml_bldg.subsurfaces).each do |s|
s.area = s.area.round(1)
end
end

def self.renumber_hpxml_ids(hpxml_bldg)
# Renumber surfaces
{ hpxml_bldg.walls => 'Wall',
hpxml_bldg.foundation_walls => 'FoundationWall',
hpxml_bldg.rim_joists => 'RimJoist',
hpxml_bldg.floors => 'Floor',
hpxml_bldg.roofs => 'Roof',
hpxml_bldg.slabs => 'Slab',
hpxml_bldg.windows => 'Window',
hpxml_bldg.doors => 'Door',
hpxml_bldg.skylights => 'Skylight' }.each do |surfs, surf_name|
surfs.each_with_index do |surf, i|
(hpxml_bldg.attics + hpxml_bldg.foundations).each do |attic_or_fnd|
if attic_or_fnd.respond_to?(:attached_to_roof_idrefs) && !attic_or_fnd.attached_to_roof_idrefs.nil? && !attic_or_fnd.attached_to_roof_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_roof_idrefs << "#{surf_name}#{i + 1}"
end
if attic_or_fnd.respond_to?(:attached_to_wall_idrefs) && !attic_or_fnd.attached_to_wall_idrefs.nil? && !attic_or_fnd.attached_to_wall_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_wall_idrefs << "#{surf_name}#{i + 1}"
end
if attic_or_fnd.respond_to?(:attached_to_rim_joist_idrefs) && !attic_or_fnd.attached_to_rim_joist_idrefs.nil? && !attic_or_fnd.attached_to_rim_joist_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_rim_joist_idrefs << "#{surf_name}#{i + 1}"
end
if attic_or_fnd.respond_to?(:attached_to_floor_idrefs) && !attic_or_fnd.attached_to_floor_idrefs.nil? && !attic_or_fnd.attached_to_floor_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_floor_idrefs << "#{surf_name}#{i + 1}"
end
if attic_or_fnd.respond_to?(:attached_to_slab_idrefs) && !attic_or_fnd.attached_to_slab_idrefs.nil? && !attic_or_fnd.attached_to_slab_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_slab_idrefs << "#{surf_name}#{i + 1}"
end
if attic_or_fnd.respond_to?(:attached_to_foundation_wall_idrefs) && !attic_or_fnd.attached_to_foundation_wall_idrefs.nil? && !attic_or_fnd.attached_to_foundation_wall_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_foundation_wall_idrefs << "#{surf_name}#{i + 1}"
end
indexes = {}
(hpxml_bldg.surfaces + hpxml_bldg.subsurfaces).each do |surf|
surf_name = surf.class.to_s.gsub('HPXML::', '')
indexes[surf_name] = 0 if indexes[surf_name].nil?
indexes[surf_name] += 1
(hpxml_bldg.attics + hpxml_bldg.foundations).each do |attic_or_fnd|
if attic_or_fnd.respond_to?(:attached_to_roof_idrefs) && !attic_or_fnd.attached_to_roof_idrefs.nil? && !attic_or_fnd.attached_to_roof_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_roof_idrefs << "#{surf_name}#{indexes[surf_name]}"
end
(hpxml_bldg.windows + hpxml_bldg.doors).each do |subsurf|
if subsurf.respond_to?(:wall_idref) && (subsurf.wall_idref == surf.id)
subsurf.wall_idref = "#{surf_name}#{i + 1}"
end
if attic_or_fnd.respond_to?(:attached_to_wall_idrefs) && !attic_or_fnd.attached_to_wall_idrefs.nil? && !attic_or_fnd.attached_to_wall_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_wall_idrefs << "#{surf_name}#{indexes[surf_name]}"
end
hpxml_bldg.skylights.each do |subsurf|
if subsurf.respond_to?(:roof_idref) && (subsurf.roof_idref == surf.id)
subsurf.roof_idref = "#{surf_name}#{i + 1}"
end
if attic_or_fnd.respond_to?(:attached_to_rim_joist_idrefs) && !attic_or_fnd.attached_to_rim_joist_idrefs.nil? && !attic_or_fnd.attached_to_rim_joist_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_rim_joist_idrefs << "#{surf_name}#{indexes[surf_name]}"
end
if attic_or_fnd.respond_to?(:attached_to_floor_idrefs) && !attic_or_fnd.attached_to_floor_idrefs.nil? && !attic_or_fnd.attached_to_floor_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_floor_idrefs << "#{surf_name}#{indexes[surf_name]}"
end
surf.id = "#{surf_name}#{i + 1}"
if surf.respond_to? :insulation_id
surf.insulation_id = "#{surf_name}#{i + 1}Insulation"
if attic_or_fnd.respond_to?(:attached_to_slab_idrefs) && !attic_or_fnd.attached_to_slab_idrefs.nil? && !attic_or_fnd.attached_to_slab_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_slab_idrefs << "#{surf_name}#{indexes[surf_name]}"
end
if surf.respond_to? :perimeter_insulation_id
surf.perimeter_insulation_id = "#{surf_name}#{i + 1}PerimeterInsulation"
if attic_or_fnd.respond_to?(:attached_to_foundation_wall_idrefs) && !attic_or_fnd.attached_to_foundation_wall_idrefs.nil? && !attic_or_fnd.attached_to_foundation_wall_idrefs.delete(surf.id).nil?
attic_or_fnd.attached_to_foundation_wall_idrefs << "#{surf_name}#{indexes[surf_name]}"
end
end
(hpxml_bldg.windows + hpxml_bldg.doors).each do |subsurf|
if subsurf.respond_to?(:wall_idref) && (subsurf.wall_idref == surf.id)
subsurf.wall_idref = "#{surf_name}#{indexes[surf_name]}"
end
if surf.respond_to? :under_slab_insulation_id
surf.under_slab_insulation_id = "#{surf_name}#{i + 1}UnderSlabInsulation"
end
hpxml_bldg.skylights.each do |subsurf|
if subsurf.respond_to?(:roof_idref) && (subsurf.roof_idref == surf.id)
subsurf.roof_idref = "#{surf_name}#{indexes[surf_name]}"
end
end
surf.id = "#{surf_name}#{indexes[surf_name]}"
if surf.respond_to? :insulation_id
surf.insulation_id = "#{surf_name}#{indexes[surf_name]}Insulation"
end
if surf.respond_to? :perimeter_insulation_id
surf.perimeter_insulation_id = "#{surf_name}#{indexes[surf_name]}PerimeterInsulation"
end
if surf.respond_to? :under_slab_insulation_id
surf.under_slab_insulation_id = "#{surf_name}#{indexes[surf_name]}UnderSlabInsulation"
end
end
end
end
Expand Down
6 changes: 3 additions & 3 deletions BuildResidentialHPXML/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>build_residential_hpxml</name>
<uid>a13a8983-2b01-4930-8af2-42030b6e4233</uid>
<version_id>b0604dc5-b6a6-4e72-b423-b3c4e25ae1fc</version_id>
<version_modified>2024-05-07T13:37:00Z</version_modified>
<version_id>69e84962-9885-4b98-b680-25de32699148</version_id>
<version_modified>2024-05-09T18:54:37Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildResidentialHPXML</class_name>
<display_name>HPXML Builder</display_name>
Expand Down Expand Up @@ -7342,7 +7342,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>58EF2442</checksum>
<checksum>FA8D2459</checksum>
</file>
<file>
<filename>geometry.rb</filename>
Expand Down
3 changes: 2 additions & 1 deletion Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ __New Features__
- Allows optional ground diffusivity input.
- Updates to using G-Functions from the [G-Function Library for Modeling Vertical Bore Ground Heat Exchanger](https://gdr.openei.org/submissions/1325).
- Updated heating/cooling performance curves to reflect newer equipment.
- Skylights with shafts or sun tunnels should include the `Skylight/AttachedToFloor` element.
- Allows optional `Ducts/DuctShape` and `Ducts/DuctFractionRectangular` inputs, which affect duct effective R-value used for modeling.
- Allows optional `HeatingAutosizingFactor`, `CoolingAutosizingFactor`, `BackupHeatingAutosizingFactor` inputs to scale HVAC capacities for autosized equipment.
- Allows optional `HeatingAutosizingLimit`, `CoolingAutosizingLimit`, `BackupHeatingAutosizingLimit` inputs to set maximum HVAC capacities ceiling for autosized equipment.
Expand All @@ -51,8 +52,8 @@ __New Features__
- HVAC Manual J design load calculations:
- **Breaking change**: Outputs for "Infiltration/Ventilation" category disaggregated into "Infiltration" and "Ventilation".
- **Breaking change**: Outputs for "Windows" category no longer includes AED excursion; now a separate "AED Excursion" category.
- Allows optional zone-level and space-level design load calculations using HPXML `Zones/Zone[ZoneType="conditioned"]/Spaces/Space` elements.
- Allows additional outdoor design condition inputs: `DailyTemperatureRange` and `HumidityDifference`.
- Allows optional room-by-room design load calculations using HPXML `Space` elements.
- Adds a new detailed output file with block/space load details by surface, AED curves, etc.
- Miscellaneous improvements.
- Improves heating/cooling component loads; for timesteps where there is no heating/cooling load, assigns heat transfer to heating or cooling by comparing indoor temperature to the average of heating/cooling setpoints.
Expand Down
18 changes: 12 additions & 6 deletions HPXMLtoOpenStudio/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,8 @@ def run(model, runner, user_arguments)
unavailable_periods: hpxml.header.unavailable_periods,
output_path: File.join(args[:output_dir], in_schedules_csv))
HPXMLDefaults.apply(runner, hpxml, hpxml_bldg, eri_version, weather, epw_file: epw_file, schedules_file: schedules_file,
design_load_details_output_file_path: design_load_details_output_file_path,
output_format: args[:output_format])
design_load_details_output_file_path: design_load_details_output_file_path,
output_format: args[:output_format])
hpxml_sch_map[hpxml_bldg] = schedules_file
end
validate_emissions_files(hpxml.header)
Expand Down Expand Up @@ -474,7 +474,7 @@ def create_unit_model(hpxml, hpxml_bldg, runner, model, epw_path, epw_file, weat
add_foundation_walls_slabs(runner, model, weather, spaces)
add_windows(model, spaces)
add_doors(model, spaces)
add_skylights(model, spaces)
add_skylights(runner, model, spaces)
add_conditioned_floor_area(model, spaces)
add_thermal_mass(model, spaces)
Geometry.set_zone_volumes(spaces, @hpxml_bldg, @apply_ashrae140_assumptions)
Expand Down Expand Up @@ -867,7 +867,9 @@ def add_rim_joists(runner, model, spaces)

def add_floors(runner, model, spaces)
@hpxml_bldg.floors.each do |floor|
area = floor.area
next if floor.net_area < 1.0 # skip modeling net surface area for surfaces comprised entirely of subsurface area

area = floor.net_area
width = Math::sqrt(area)
length = area / width
if floor.interior_adjacent_to.include?('attic') || floor.exterior_adjacent_to.include?('attic')
Expand Down Expand Up @@ -1402,11 +1404,15 @@ def add_windows(model, spaces)
apply_adiabatic_construction(model, surfaces, 'wall')
end

def add_skylights(model, spaces)
def add_skylights(runner, model, spaces)
surfaces = []
shading_schedules = {}

@hpxml_bldg.skylights.each do |skylight|
if not skylight.is_conditioned
runner.registerWarning("Skylight '#{skylight.id}' not connected to conditioned space; if it's a skylight with a shaft or sun tunnel, use AttachedToFloor to connect it to conditioned space.")
end

tilt = skylight.roof.pitch / 12.0
width = Math::sqrt(skylight.area)
length = skylight.area / width
Expand All @@ -1424,7 +1430,7 @@ def add_skylights(model, spaces)
surface.additionalProperties.setFeature('SurfaceType', 'Skylight')
surface.setName("surface #{skylight.id}")
surface.setSurfaceType('RoofCeiling')
surface.setSpace(create_or_get_space(model, spaces, HPXML::LocationConditionedSpace)) # Ensures it is included in Manual J sizing
surface.setSpace(create_or_get_space(model, spaces, skylight.roof.interior_adjacent_to))
surface.setOutsideBoundaryCondition('Outdoors') # cannot be adiabatic because subsurfaces won't be created
surfaces << surface

Expand Down
38 changes: 20 additions & 18 deletions HPXMLtoOpenStudio/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>hpxm_lto_openstudio</name>
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
<version_id>f4cf339e-31ed-40e5-9a6c-b1c248284b79</version_id>
<version_modified>2024-05-07T19:12:03Z</version_modified>
<version_id>e8c7e333-0779-4802-bc3a-125ca12908c1</version_id>
<version_modified>2024-05-15T18:16:49Z</version_modified>
<xml_checksum>D8922A73</xml_checksum>
<class_name>HPXMLtoOpenStudio</class_name>
<display_name>HPXML to OpenStudio Translator</display_name>
Expand Down Expand Up @@ -57,6 +57,7 @@
<type>String</type>
<required>false</required>
<model_dependent>false</model_dependent>
<default_value>results_annual</default_value>
</argument>
<argument>
<name>design_load_details_output_file_name</name>
Expand All @@ -65,6 +66,7 @@
<type>String</type>
<required>false</required>
<model_dependent>false</model_dependent>
<default_value>results_design_load_details</default_value>
</argument>
<argument>
<name>add_component_loads</name>
Expand Down Expand Up @@ -181,13 +183,13 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>A5631403</checksum>
<checksum>D013D7A2</checksum>
</file>
<file>
<filename>airflow.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>81518569</checksum>
<checksum>93C49D9A</checksum>
</file>
<file>
<filename>battery.rb</filename>
Expand All @@ -199,7 +201,7 @@
<filename>constants.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>2568BDAC</checksum>
<checksum>CEFA8921</checksum>
</file>
<file>
<filename>constructions.rb</filename>
Expand Down Expand Up @@ -331,7 +333,7 @@
<filename>geometry.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>21C2553F</checksum>
<checksum>D9A7A70C</checksum>
</file>
<file>
<filename>hotwater_appliances.rb</filename>
Expand All @@ -343,13 +345,13 @@
<filename>hpxml.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>BF0AECDE</checksum>
<checksum>4CC21E47</checksum>
</file>
<file>
<filename>hpxml_defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>E867E20F</checksum>
<checksum>603839D1</checksum>
</file>
<file>
<filename>hpxml_schema/HPXML.xsd</filename>
Expand All @@ -367,7 +369,7 @@
<filename>hpxml_schematron/EPvalidator.xml</filename>
<filetype>xml</filetype>
<usage_type>resource</usage_type>
<checksum>1C16F062</checksum>
<checksum>0E53F8FE</checksum>
</file>
<file>
<filename>hpxml_schematron/iso-schematron.xsd</filename>
Expand All @@ -385,7 +387,7 @@
<filename>hvac_sizing.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>7E376CCC</checksum>
<checksum>6AB4D0ED</checksum>
</file>
<file>
<filename>lighting.rb</filename>
Expand All @@ -409,7 +411,7 @@
<filename>meta_measure.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>F2828055</checksum>
<checksum>24807304</checksum>
</file>
<file>
<filename>minitest_helper.rb</filename>
Expand All @@ -427,7 +429,7 @@
<filename>output.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>625C9086</checksum>
<checksum>2988F957</checksum>
</file>
<file>
<filename>psychrometrics.rb</filename>
Expand Down Expand Up @@ -583,7 +585,7 @@
<filename>util.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>6D409347</checksum>
<checksum>79EA8844</checksum>
</file>
<file>
<filename>utility_bills.rb</filename>
Expand All @@ -595,13 +597,13 @@
<filename>version.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>6A05B3F0</checksum>
<checksum>02782C5B</checksum>
</file>
<file>
<filename>waterheater.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>80D00EE1</checksum>
<checksum>FFCEC636</checksum>
</file>
<file>
<filename>weather.rb</filename>
Expand Down Expand Up @@ -667,7 +669,7 @@
<filename>test_hvac_sizing.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>BEBC1797</checksum>
<checksum>161455D1</checksum>
</file>
<file>
<filename>test_lighting.rb</filename>
Expand Down Expand Up @@ -709,13 +711,13 @@
<filename>test_validation.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>E6748D36</checksum>
<checksum>7E81BB89</checksum>
</file>
<file>
<filename>test_water_heater.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>485EE23B</checksum>
<checksum>AEF9864A</checksum>
</file>
<file>
<filename>test_weather.rb</filename>
Expand Down