urbanopt-cli 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/LICENSE.md +1 -1
- data/Rakefile +1 -1
- data/example_files/mappers/Baseline.rb +1 -1
- data/example_files/mappers/ClassProject.rb +1 -1
- data/example_files/mappers/CreateBar.rb +1 -1
- data/example_files/mappers/EvCharging.rb +1 -1
- data/example_files/mappers/FlexibleHotWater.rb +1 -1
- data/example_files/mappers/Floorspace.rb +1 -1
- data/example_files/mappers/HighEfficiency.rb +1 -1
- data/example_files/mappers/HighEfficiencyCreateBar.rb +1 -1
- data/example_files/mappers/HighEfficiencyFloorspace.rb +1 -1
- data/example_files/mappers/PeakHoursMelsShedding.rb +1 -1
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +1 -1
- data/example_files/mappers/ThermalStorage.rb +1 -1
- data/example_files/measures/BuildResidentialModel/measure.xml +3 -3
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +7 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +18 -10
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +15 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +53 -5
- data/example_files/resources/hpxml-measures/Changelog.md +39 -28
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +27 -27
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +9 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +5 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +5 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +28 -10
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +6 -1
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +3 -3
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +2 -1
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +14 -10
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +4 -4
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +64 -0
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +2 -2
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +12 -12
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +36 -110
- data/lib/uo_cli/version.rb +2 -2
- data/lib/uo_cli.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d1403126b59a00ca08656510c8f97147cf88dc7b58be19d63944f99120c27d73
|
|
4
|
+
data.tar.gz: c5502d2e07c64a04908e4939ad83d7c312a790b06e0842dd053809263b05ab06
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6f4482a92fc524b4d104764f9a654b62a2aeda1c78183c3f96a59e755645ba67b73b27ac667881f8bf436e8ad99f4ff5d1c8b3caaeed1b75a5b14bb9144f9443
|
|
7
|
+
data.tar.gz: 6862733daffd4901ec5ab6dc0f23ad5957c566fb86faa8b10ca8f5b89745bee6b351d5f3a6a9a596f97570a5624d0fa575dfc3e2334603e9253d7198ee3f2986
|
data/CHANGELOG.md
CHANGED
data/LICENSE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# License
|
|
2
2
|
|
|
3
|
-
URBANopt™, Copyright (c) 2019-
|
|
3
|
+
URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
4
4
|
contributors. All rights reserved.
|
|
5
5
|
|
|
6
6
|
Redistribution and use in source and binary forms, with or without modification,
|
data/Rakefile
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# *********************************************************************************
|
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
|
3
3
|
# contributors. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
<schema_version>3.0</schema_version>
|
|
4
4
|
<name>build_residential_model</name>
|
|
5
5
|
<uid>259dc35f-65e8-47d4-913f-69efede5a267</uid>
|
|
6
|
-
<version_id>
|
|
7
|
-
<version_modified>
|
|
6
|
+
<version_id>b3c7ec2e-10f5-45d9-9a10-7527fec4565a</version_id>
|
|
7
|
+
<version_modified>20230105T165234Z</version_modified>
|
|
8
8
|
<xml_checksum>2C38F48B</xml_checksum>
|
|
9
9
|
<class_name>BuildResidentialModel</class_name>
|
|
10
10
|
<display_name>Build Residential Model</display_name>
|
|
@@ -6597,7 +6597,7 @@
|
|
|
6597
6597
|
<filename>measure.rb</filename>
|
|
6598
6598
|
<filetype>rb</filetype>
|
|
6599
6599
|
<usage_type>script</usage_type>
|
|
6600
|
-
<checksum>
|
|
6600
|
+
<checksum>A1FFBF5C</checksum>
|
|
6601
6601
|
</file>
|
|
6602
6602
|
</files>
|
|
6603
6603
|
</measure>
|
|
@@ -51,6 +51,11 @@ class BuildResidentialScheduleFile < OpenStudio::Measure::ModelMeasure
|
|
|
51
51
|
arg.setDefaultValue('smooth')
|
|
52
52
|
args << arg
|
|
53
53
|
|
|
54
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_column_names', false)
|
|
55
|
+
arg.setDisplayName('Schedules: Column Names')
|
|
56
|
+
arg.setDescription("A comma-separated list of the column names to generate. If not provided, defaults to all columns. Possible column names are: #{SchedulesFile.OccupancyColumnNames.join(', ')}.")
|
|
57
|
+
args << arg
|
|
58
|
+
|
|
54
59
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_vacancy_period', false)
|
|
55
60
|
arg.setDisplayName('Schedules: Vacancy Period')
|
|
56
61
|
arg.setDescription('Specifies the vacancy period. Enter a date like "Dec 15 - Jan 15".')
|
|
@@ -161,6 +166,7 @@ class BuildResidentialScheduleFile < OpenStudio::Measure::ModelMeasure
|
|
|
161
166
|
info_msgs << "RandomSeed=#{args[:random_seed]}" if args[:schedules_random_seed].is_initialized
|
|
162
167
|
info_msgs << "GeometryNumOccupants=#{args[:geometry_num_occupants]}"
|
|
163
168
|
info_msgs << "VacancyPeriod=#{args[:schedules_vacancy_period].get}" if args[:schedules_vacancy_period].is_initialized
|
|
169
|
+
info_msgs << "ColumnNames=#{args[:column_names]}" if args[:schedules_column_names].is_initialized
|
|
164
170
|
|
|
165
171
|
runner.registerInfo("Created #{args[:schedules_type]} schedule with #{info_msgs.join(', ')}")
|
|
166
172
|
|
|
@@ -188,6 +194,7 @@ class BuildResidentialScheduleFile < OpenStudio::Measure::ModelMeasure
|
|
|
188
194
|
args[:state] = hpxml.header.state_code if !hpxml.header.state_code.nil?
|
|
189
195
|
|
|
190
196
|
args[:random_seed] = args[:schedules_random_seed].get if args[:schedules_random_seed].is_initialized
|
|
197
|
+
args[:column_names] = args[:schedules_column_names].get.split(',').map(&:strip) if args[:schedules_column_names].is_initialized
|
|
191
198
|
|
|
192
199
|
if hpxml.building_occupancy.number_of_residents.nil?
|
|
193
200
|
args[:geometry_num_occupants] = Geometry.get_occupancy_default_num(hpxml.building_construction.number_of_bedrooms)
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
<schema_version>3.0</schema_version>
|
|
4
4
|
<name>build_residential_schedule_file</name>
|
|
5
5
|
<uid>f770b2db-1a9f-4e99-99a7-7f3161a594b1</uid>
|
|
6
|
-
<version_id>
|
|
7
|
-
<version_modified>
|
|
6
|
+
<version_id>3a88a262-1431-4bb9-a577-cd235aed6b1e</version_id>
|
|
7
|
+
<version_modified>20221201T013247Z</version_modified>
|
|
8
8
|
<xml_checksum>03F02484</xml_checksum>
|
|
9
9
|
<class_name>BuildResidentialScheduleFile</class_name>
|
|
10
10
|
<display_name>Schedule File Builder</display_name>
|
|
@@ -38,6 +38,14 @@
|
|
|
38
38
|
</choice>
|
|
39
39
|
</choices>
|
|
40
40
|
</argument>
|
|
41
|
+
<argument>
|
|
42
|
+
<name>schedules_column_names</name>
|
|
43
|
+
<display_name>Schedules: Column Names</display_name>
|
|
44
|
+
<description>A comma-separated list of the column names to generate. If not provided, defaults to all columns. Possible column names are: occupants, lighting_interior, lighting_exterior, lighting_garage, lighting_exterior_holiday, cooking_range, refrigerator, extra_refrigerator, freezer, dishwasher, clothes_washer, clothes_dryer, ceiling_fan, plug_loads_other, plug_loads_tv, plug_loads_vehicle, plug_loads_well_pump, fuel_loads_grill, fuel_loads_lighting, fuel_loads_fireplace, pool_pump, pool_heater, hot_tub_pump, hot_tub_heater, hot_water_dishwasher, hot_water_clothes_washer, hot_water_fixtures.</description>
|
|
45
|
+
<type>String</type>
|
|
46
|
+
<required>false</required>
|
|
47
|
+
<model_dependent>false</model_dependent>
|
|
48
|
+
</argument>
|
|
41
49
|
<argument>
|
|
42
50
|
<name>schedules_vacancy_period</name>
|
|
43
51
|
<display_name>Schedules: Vacancy Period</display_name>
|
|
@@ -890,11 +898,17 @@
|
|
|
890
898
|
<usage_type>resource</usage_type>
|
|
891
899
|
<checksum>127D96AC</checksum>
|
|
892
900
|
</file>
|
|
901
|
+
<file>
|
|
902
|
+
<filename>schedules.rb</filename>
|
|
903
|
+
<filetype>rb</filetype>
|
|
904
|
+
<usage_type>resource</usage_type>
|
|
905
|
+
<checksum>AC348B70</checksum>
|
|
906
|
+
</file>
|
|
893
907
|
<file>
|
|
894
908
|
<filename>build_residential_schedule_file_test.rb</filename>
|
|
895
909
|
<filetype>rb</filetype>
|
|
896
910
|
<usage_type>test</usage_type>
|
|
897
|
-
<checksum>
|
|
911
|
+
<checksum>10DD8842</checksum>
|
|
898
912
|
</file>
|
|
899
913
|
<file>
|
|
900
914
|
<version>
|
|
@@ -905,13 +919,7 @@
|
|
|
905
919
|
<filename>measure.rb</filename>
|
|
906
920
|
<filetype>rb</filetype>
|
|
907
921
|
<usage_type>script</usage_type>
|
|
908
|
-
<checksum>
|
|
909
|
-
</file>
|
|
910
|
-
<file>
|
|
911
|
-
<filename>schedules.rb</filename>
|
|
912
|
-
<filetype>rb</filetype>
|
|
913
|
-
<usage_type>resource</usage_type>
|
|
914
|
-
<checksum>F2E6EBB8</checksum>
|
|
922
|
+
<checksum>3D8ADC7F</checksum>
|
|
915
923
|
</file>
|
|
916
924
|
</files>
|
|
917
925
|
</measure>
|
data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb
CHANGED
|
@@ -8,6 +8,7 @@ class ScheduleGenerator
|
|
|
8
8
|
def initialize(runner:,
|
|
9
9
|
epw_file:,
|
|
10
10
|
state:,
|
|
11
|
+
column_names: nil,
|
|
11
12
|
random_seed: nil,
|
|
12
13
|
minutes_per_step:,
|
|
13
14
|
steps_in_day:,
|
|
@@ -21,6 +22,7 @@ class ScheduleGenerator
|
|
|
21
22
|
@runner = runner
|
|
22
23
|
@epw_file = epw_file
|
|
23
24
|
@state = state
|
|
25
|
+
@column_names = column_names
|
|
24
26
|
@random_seed = random_seed
|
|
25
27
|
@minutes_per_step = minutes_per_step
|
|
26
28
|
@steps_in_day = steps_in_day
|
|
@@ -60,6 +62,16 @@ class ScheduleGenerator
|
|
|
60
62
|
def create(args:)
|
|
61
63
|
initialize_schedules
|
|
62
64
|
|
|
65
|
+
if @column_names.nil?
|
|
66
|
+
@column_names = SchedulesFile.ColumnNames
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
invalid_columns = (@column_names - SchedulesFile.ColumnNames)
|
|
70
|
+
invalid_columns.each do |invalid_column|
|
|
71
|
+
@runner.registerError("Invalid column name specified: '#{invalid_column}'.")
|
|
72
|
+
end
|
|
73
|
+
return false unless invalid_columns.empty?
|
|
74
|
+
|
|
63
75
|
success = create_average_schedules
|
|
64
76
|
return false if not success
|
|
65
77
|
|
|
@@ -963,6 +975,9 @@ class ScheduleGenerator
|
|
|
963
975
|
end
|
|
964
976
|
|
|
965
977
|
def export(schedules_path:)
|
|
978
|
+
(SchedulesFile.ColumnNames - @column_names).each do |col_to_remove|
|
|
979
|
+
@schedules.delete(col_to_remove)
|
|
980
|
+
end
|
|
966
981
|
CSV.open(schedules_path, 'w') do |csv|
|
|
967
982
|
csv << @schedules.keys
|
|
968
983
|
rows = @schedules.values.transpose
|
|
@@ -180,6 +180,51 @@ class BuildResidentialScheduleFileTest < Minitest::Test
|
|
|
180
180
|
assert(!sf.schedules.keys.include?(SchedulesFile::ColumnVacancy))
|
|
181
181
|
end
|
|
182
182
|
|
|
183
|
+
def test_stochastic_subset_of_columns
|
|
184
|
+
hpxml = _create_hpxml('base.xml')
|
|
185
|
+
XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
|
|
186
|
+
|
|
187
|
+
columns = [SchedulesFile::ColumnCookingRange,
|
|
188
|
+
SchedulesFile::ColumnDishwasher,
|
|
189
|
+
SchedulesFile::ColumnHotWaterDishwasher,
|
|
190
|
+
SchedulesFile::ColumnClothesWasher,
|
|
191
|
+
SchedulesFile::ColumnHotWaterClothesWasher,
|
|
192
|
+
SchedulesFile::ColumnClothesDryer,
|
|
193
|
+
SchedulesFile::ColumnHotWaterFixtures]
|
|
194
|
+
|
|
195
|
+
@args_hash['schedules_type'] = 'stochastic'
|
|
196
|
+
@args_hash['output_csv_path'] = File.absolute_path(File.join(@tmp_output_path, 'occupancy-stochastic.csv'))
|
|
197
|
+
@args_hash['schedules_column_names'] = columns.join(', ')
|
|
198
|
+
model, hpxml, result = _test_measure()
|
|
199
|
+
|
|
200
|
+
info_msgs = result.info.map { |x| x.logMessage }
|
|
201
|
+
assert(info_msgs.any? { |info_msg| info_msg.include?('ColumnNames') })
|
|
202
|
+
|
|
203
|
+
sf = SchedulesFile.new(model: model, schedules_paths: hpxml.header.schedules_filepaths)
|
|
204
|
+
sf.validate_schedules(year: 2007)
|
|
205
|
+
|
|
206
|
+
columns.each do |column|
|
|
207
|
+
assert(sf.schedules.keys.include?(column))
|
|
208
|
+
end
|
|
209
|
+
(SchedulesFile.ColumnNames - columns).each do |column|
|
|
210
|
+
assert(!sf.schedules.keys.include?(column))
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_stochastic_subset_of_columns_invalid_name
|
|
215
|
+
hpxml = _create_hpxml('base.xml')
|
|
216
|
+
XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
|
|
217
|
+
|
|
218
|
+
@args_hash['schedules_type'] = 'stochastic'
|
|
219
|
+
@args_hash['output_csv_path'] = File.absolute_path(File.join(@tmp_output_path, 'occupancy-stochastic.csv'))
|
|
220
|
+
@args_hash['schedules_column_names'] = "foobar, #{SchedulesFile::ColumnCookingRange}, foobar2"
|
|
221
|
+
_model, _hpxml, result = _test_measure(expect_fail: true)
|
|
222
|
+
|
|
223
|
+
error_msgs = result.errors.map { |x| x.logMessage }
|
|
224
|
+
assert(error_msgs.any? { |error_msg| error_msg.include?("Invalid column name specified: 'foobar'.") })
|
|
225
|
+
assert(error_msgs.any? { |error_msg| error_msg.include?("Invalid column name specified: 'foobar2'.") })
|
|
226
|
+
end
|
|
227
|
+
|
|
183
228
|
def test_stochastic_vacancy
|
|
184
229
|
hpxml = _create_hpxml('base.xml')
|
|
185
230
|
XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
|
|
@@ -508,7 +553,7 @@ class BuildResidentialScheduleFileTest < Minitest::Test
|
|
|
508
553
|
end
|
|
509
554
|
end
|
|
510
555
|
|
|
511
|
-
def _test_measure()
|
|
556
|
+
def _test_measure(expect_fail: false)
|
|
512
557
|
# create an instance of the measure
|
|
513
558
|
measure = BuildResidentialScheduleFile.new
|
|
514
559
|
|
|
@@ -532,11 +577,14 @@ class BuildResidentialScheduleFileTest < Minitest::Test
|
|
|
532
577
|
measure.run(model, runner, argument_map)
|
|
533
578
|
result = runner.result
|
|
534
579
|
|
|
535
|
-
# show the output
|
|
536
|
-
show_output(result) unless result.value.valueName == 'Success'
|
|
537
|
-
|
|
538
580
|
# assert that it ran correctly
|
|
539
|
-
|
|
581
|
+
if expect_fail
|
|
582
|
+
show_output(result) unless result.value.valueName == 'Fail'
|
|
583
|
+
assert_equal('Fail', result.value.valueName)
|
|
584
|
+
else
|
|
585
|
+
show_output(result) unless result.value.valueName == 'Success'
|
|
586
|
+
assert_equal('Success', result.value.valueName)
|
|
587
|
+
end
|
|
540
588
|
|
|
541
589
|
hpxml = HPXML.new(hpxml_path: @tmp_hpxml_path)
|
|
542
590
|
|
|
@@ -1,20 +1,31 @@
|
|
|
1
|
+
## OpenStudio-HPXML v1.5.1
|
|
2
|
+
|
|
3
|
+
__New Features__
|
|
4
|
+
- When `Battery/Location` not provided, now defaults to garage if present, otherwise outside.
|
|
5
|
+
- BuildResidentialScheduleFile measure:
|
|
6
|
+
- Allows requesting a subset of end uses (columns) to be generated.
|
|
7
|
+
|
|
8
|
+
__Bugfixes__
|
|
9
|
+
- Fixes total/net electricity timeseries outputs to include battery charging/discharging energy.
|
|
10
|
+
- Fixes error when a non-electric water heater has jacket insulation and the UEF metric is used.
|
|
11
|
+
|
|
1
12
|
## OpenStudio-HPXML v1.5.0
|
|
2
13
|
|
|
3
14
|
__New Features__
|
|
4
15
|
- Updates to OpenStudio 3.5.0/EnergyPlus 22.2.
|
|
5
16
|
- Updates to newer proposed HPXML v4.0:
|
|
6
|
-
- **Breaking
|
|
17
|
+
- **Breaking change**: Replaces `FrameFloors/FrameFloor` with `Floors/Floor`.
|
|
7
18
|
- **Breaking change**: `Floor/FloorType` (WoodFrame, StructuralInsulatedPanel, SteelFrame, or SolidConcrete) is a required input.
|
|
8
|
-
- **Breaking
|
|
9
|
-
- **Breaking
|
|
19
|
+
- **Breaking change**: All `Ducts` must now have a `SystemIdentifier`.
|
|
20
|
+
- **Breaking change**: Replaces `WallType/StructurallyInsulatedPanel` with `WallType/StructuralInsulatedPanel`.
|
|
10
21
|
- **Breaking change**: Replaces `SoftwareInfo/extension/SimulationControl/DaylightSaving/Enabled` with `Building/Site/TimeZone/DSTObserved`.
|
|
11
|
-
- **Breaking
|
|
12
|
-
- **Breaking
|
|
13
|
-
- **Breaking
|
|
22
|
+
- **Breaking change**: Replaces `StandbyLoss` with `StandbyLoss[Units="F/hr"]/Value` for an indirect water heater.
|
|
23
|
+
- **Breaking change**: Replaces `BranchPipingLoopLength` with `BranchPipingLength` for a hot water recirculation system.
|
|
24
|
+
- **Breaking change**: Replaces `Floor/extension/OtherSpaceAboveOrBelow` with `Floor/FloorOrCeiling`.
|
|
14
25
|
- **Breaking change**: For PTAC with heating, replaces `HeatingSystem` of type PackagedTerminalAirConditionerHeating with `CoolingSystem/IntegratedHeating*` elements.
|
|
15
|
-
- **Breaking
|
|
16
|
-
- **Breaking
|
|
17
|
-
- **Breaking
|
|
26
|
+
- **Breaking change**: Now performs full HPXML XSD schema validation (previously just limited checks); yields runtime speed improvements.
|
|
27
|
+
- **Breaking change**: HVAC/DHW equipment efficiencies can no longer be defaulted (e.g., based on age of equipment); they are now required.
|
|
28
|
+
- **Breaking change**: Deprecates ReportHPXMLOutput measure; HVAC autosized capacities & design loads moved to `results_annual.csv`.
|
|
18
29
|
- **Breaking change**: BuildResidentialHPXML measure: Replaces arguments using 'auto' for defaults with optional arguments of the appropriate data type.
|
|
19
30
|
- Utility bill calculations:
|
|
20
31
|
- **Breaking change**: Removes utility rate and PV related arguments from the ReportUtilityBills measure in lieu of HPXML file inputs.
|
|
@@ -305,7 +316,7 @@ __Bugfixes__
|
|
|
305
316
|
|
|
306
317
|
__New Features__
|
|
307
318
|
- New [Schematron](http://schematron.com) validation (EPvalidator.xml) replaces custom ruby validation (EPvalidator.rb)
|
|
308
|
-
- **[Breaking
|
|
319
|
+
- **[Breaking change]** `BuildingConstruction/ResidentialFacilityType` ("single-family detached", "single-family attached", "apartment unit", or "manufactured home") is a required input
|
|
309
320
|
- Ability to model shared systems for Attached/Multifamily dwelling units
|
|
310
321
|
- Shared HVAC systems (cooling towers, chillers, central boilers, water loop heat pumps, fan coils, ground source heat pumps on shared hydronic circulation loops)
|
|
311
322
|
- Shared water heaters serving either A) multiple dwelling units' service hot water or B) a shared laundry/equipment room, as well as hot water recirculation systems
|
|
@@ -313,7 +324,7 @@ __New Features__
|
|
|
313
324
|
- Shared hot water recirculation systems
|
|
314
325
|
- Shared ventilation systems (optionally with preconditioning equipment and recirculation)
|
|
315
326
|
- Shared PV systems
|
|
316
|
-
- **[Breaking
|
|
327
|
+
- **[Breaking change]** Appliances located in MF spaces (i.e., "other") must now be specified in more detail (i.e., "other heated space", "other non-freezing space", "other multifamily buffer space", or "other housing unit")
|
|
317
328
|
- Enclosure
|
|
318
329
|
- New optional inputs: `Roof/RoofType`, `Wall/Siding`, and `RimJoist/Siding`
|
|
319
330
|
- New optional inputs: `Skylight/InteriorShading/SummerShadingCoefficient` and `Skylight/InteriorShading/SummerShadingCoefficient`
|
|
@@ -321,7 +332,7 @@ __New Features__
|
|
|
321
332
|
- New optional input to specify presence of flue/chimney, which results in increased infiltration
|
|
322
333
|
- Allows adobe wall type
|
|
323
334
|
- Allows `AirInfiltrationMeasurement/HousePressure` to be any value (previously required to be 50 Pa)
|
|
324
|
-
- **[Breaking
|
|
335
|
+
- **[Breaking change]** `Roof/RadiantBarrierGrade` input now required when there is a radiant barrier
|
|
325
336
|
- HVAC
|
|
326
337
|
- Adds optional high-level HVAC autosizing controls
|
|
327
338
|
- `AllowIncreasedFixedCapacities`: Describes how HVAC equipment with fixed capacities are handled. If true, the maximum of the user-specified fixed capacity and the heating/cooling design load will be used to reduce potential for unmet loads. Defaults to false.
|
|
@@ -333,11 +344,11 @@ __New Features__
|
|
|
333
344
|
- Appliances & Plug Loads
|
|
334
345
|
- Allows _multiple_ `Refrigerator` and `Freezer`
|
|
335
346
|
- Allows `Pool`, `HotTub`, `PlugLoad` of type "electric vehicle charging" and "well pump", and `FuelLoad` of type "grill", "lighting", and "fireplace"
|
|
336
|
-
- **[Breaking
|
|
347
|
+
- **[Breaking change]** "other" and "TV other" plug loads now required
|
|
337
348
|
- Lighting
|
|
338
349
|
- Allows lighting schedules and holiday lighting
|
|
339
|
-
- **[Breaking
|
|
340
|
-
- **[Breaking
|
|
350
|
+
- **[Breaking change]** For hydronic distributions, `HydronicDistributionType` is now required
|
|
351
|
+
- **[Breaking change]** For DSE distributions, `AnnualHeatingDistributionSystemEfficiency` and `AnnualCoolingDistributionSystemEfficiency` are both always required
|
|
341
352
|
- Allows more HPXML fuel types to be used for HVAC, water heating, appliances, etc.
|
|
342
353
|
- New inputs to define Daylight Saving period; defaults to enabled
|
|
343
354
|
- Adds more reporting of warnings/errors to run.log
|
|
@@ -353,7 +364,7 @@ __Bugfixes__
|
|
|
353
364
|
__New Features__
|
|
354
365
|
- Dwelling units of single-family attached/multifamily buildings:
|
|
355
366
|
- Adds new generic space types "other heated space", "other multifamily buffer space", and "other non-freezing space" for surface `ExteriorAdjacentTo` elements. "other housing unit", i.e. adiabatic surfaces, was already supported.
|
|
356
|
-
- **[Breaking
|
|
367
|
+
- **[Breaking change]** For `FrameFloors`, replaces "other housing unit above" and "other housing unit below" enumerations with "other housing unit". All four "other ..." spaces must have an `extension/OtherSpaceAboveOrBelow` property set to either "above" or "below".
|
|
357
368
|
- Allows ducts and water heaters to be located in all "other ..." spaces.
|
|
358
369
|
- Allows all appliances to be located in "other", in which internal gains are neglected.
|
|
359
370
|
- Allows `Fireplace` and `FloorFurnace` for heating system types.
|
|
@@ -364,15 +375,15 @@ __New Features__
|
|
|
364
375
|
- Allows user-specified `Refrigerator` and `CookingRange` schedules to be provided.
|
|
365
376
|
- HVAC capacity elements are no longer required; if not provided, ACCA Manual J autosizing calculations will be used (-1 can continue to be used for capacity elements but is discouraged).
|
|
366
377
|
- Duct locations/areas can be defaulted by specifying supply/return `Duct` elements without `DuctSurfaceArea` and `DuctLocation`. `HVACDistribution/DistributionSystemType/AirDistribution/NumberofReturnRegisters` can be optionally provided to inform the default duct area calculations.
|
|
367
|
-
- **[Breaking
|
|
368
|
-
- **[Breaking
|
|
369
|
-
- **[Breaking
|
|
370
|
-
- **[Breaking
|
|
378
|
+
- **[Breaking change]** Lighting inputs now use `LightingType[LightEmittingDiode | CompactFluorescent | FluorescentTube]` instead of `ThirdPartyCertification="ERI Tier I" or ThirdPartyCertification="ERI Tier II"`.
|
|
379
|
+
- **[Breaking change]** `HVACDistribution/ConditionedFloorAreaServed` is now required for air distribution systems.
|
|
380
|
+
- **[Breaking change]** Infiltration and attic ventilation specified using natural air changes per hour now uses `ACHnatural` instead of `extension/ConstantACHnatural`.
|
|
381
|
+
- **[Breaking change]** The optional `PerformanceAdjustment` input for instantaneous water heaters is now treated as a performance multiplier (e.g., 0.92) instead of derate (e.g., 0.08).
|
|
371
382
|
- Adds ASHRAE 140 Class II test files.
|
|
372
383
|
- SimulationOutputReport reporting measure:
|
|
373
384
|
- New optional timeseries outputs: airflows (e.g., infiltration, mechanical ventilation, natural ventilation, whole house fan) and weather (e.g., temperatures, wind speed, solar).
|
|
374
385
|
- Timeseries frequency can now be set to 'none' as an alternative to setting all include_timeseries_foo variables to false.
|
|
375
|
-
- **[Breaking
|
|
386
|
+
- **[Breaking change]** Renames "Wood" to "Wood Cord" to better distinguish from "Wood Pellets".
|
|
376
387
|
- Modeling improvements:
|
|
377
388
|
- Improved calculation for infiltration height
|
|
378
389
|
- Infiltration & mechanical ventilation now combined using ASHRAE 62.2 Normative Appendix C.
|
|
@@ -398,10 +409,10 @@ __Bugfixes__
|
|
|
398
409
|
## OpenStudio-HPXML v0.9.0 Beta
|
|
399
410
|
|
|
400
411
|
__New Features__
|
|
401
|
-
- **[Breaking
|
|
412
|
+
- **[Breaking change]** Updates to OpenStudio v3.0.0 and EnergyPlus 9.3
|
|
402
413
|
- Numerous HPXML inputs are now optional with built-in defaulting, particularly for water heating, appliances, and PV. Set the `debug` argument to true to output a in.xml HPXML file with defaults applied for inspection. See the documentation for defaulting equations/assumptions/references.
|
|
403
|
-
- **[Breaking
|
|
404
|
-
- **[Breaking
|
|
414
|
+
- **[Breaking change]** If clothes washer efficiency inputs are provided, `LabelUsage` is now required.
|
|
415
|
+
- **[Breaking change]** If dishwasher efficiency inputs are provided, `LabelElectricRate`, `LabelGasRate`, `LabelAnnualGasCost`, and `LabelUsage` are now required.
|
|
405
416
|
- Adds optional specification of simulation controls including timestep and begin/end dates.
|
|
406
417
|
- Adds optional `extension/UsageMultiplier` inputs for appliances, plug loads, lighting, and water fixtures. Can be used to, e.g., reflect high/low usage occupants.
|
|
407
418
|
- Adds ability to model a dehumidifier.
|
|
@@ -409,9 +420,9 @@ __New Features__
|
|
|
409
420
|
- Improved desuperheater model; desuperheater can now be connected to heat pump water heaters.
|
|
410
421
|
- Updated clothes washer/dryer and dishwasher models per ANSI/RESNET/ICC 301-2019 Addendum A.
|
|
411
422
|
- Solar thermal systems modeled with `SolarFraction` can now be connected to combi water heating systems.
|
|
412
|
-
- **[Breaking
|
|
413
|
-
- **[Breaking
|
|
414
|
-
- **[Breaking
|
|
423
|
+
- **[Breaking change]** Replaces optional `epw_output_path` and `osm_output_path` arguments with a single optional `output_dir` argument; adds an optional `debug` argument.
|
|
424
|
+
- **[Breaking change]** Replaces optional `BuildingConstruction/extension/FractionofOperableWindowArea` with optional `Window/FractionOperable`.
|
|
425
|
+
- **[Breaking change]** Replaces optional `extension/EPWFileName` with optional `extension/EPWFilePath` to allow absolute paths to be provided as an alternative to just the file name.
|
|
415
426
|
- Replaces REXML xml library with Oga for better runtime performance.
|
|
416
427
|
- Additional error-checking.
|
|
417
428
|
- SimulationOutputReport reporting measure:
|
|
@@ -429,7 +440,7 @@ __Bugfixes__
|
|
|
429
440
|
|
|
430
441
|
## OpenStudio-HPXML v0.8.0 Beta
|
|
431
442
|
|
|
432
|
-
__Breaking
|
|
443
|
+
__Breaking changes__
|
|
433
444
|
- Weather cache files are now in .csv instead of .cache format.
|
|
434
445
|
- `extension/StandbyLoss` changed to `StandbyLoss` for indirect water heaters.
|
|
435
446
|
- `Site/extension/DisableNaturalVentilation` changed to `BuildingConstruction/extension/FractionofOperableWindowArea` for more granularity.
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
<schema_version>3.0</schema_version>
|
|
4
4
|
<name>hpxm_lto_openstudio</name>
|
|
5
5
|
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
|
|
6
|
-
<version_id>
|
|
7
|
-
<version_modified>
|
|
6
|
+
<version_id>6600e0c5-d9b6-465e-ac84-30da41fdfe12</version_id>
|
|
7
|
+
<version_modified>20221206T195230Z</version_modified>
|
|
8
8
|
<xml_checksum>D8922A73</xml_checksum>
|
|
9
9
|
<class_name>HPXMLtoOpenStudio</class_name>
|
|
10
10
|
<display_name>HPXML to OpenStudio Translator</display_name>
|
|
@@ -493,30 +493,12 @@
|
|
|
493
493
|
<usage_type>test</usage_type>
|
|
494
494
|
<checksum>E6B6B63E</checksum>
|
|
495
495
|
</file>
|
|
496
|
-
<file>
|
|
497
|
-
<filename>test_defaults.rb</filename>
|
|
498
|
-
<filetype>rb</filetype>
|
|
499
|
-
<usage_type>test</usage_type>
|
|
500
|
-
<checksum>5874DE81</checksum>
|
|
501
|
-
</file>
|
|
502
496
|
<file>
|
|
503
497
|
<filename>hpxml_schematron/EPvalidator.xml</filename>
|
|
504
498
|
<filetype>xml</filetype>
|
|
505
499
|
<usage_type>resource</usage_type>
|
|
506
500
|
<checksum>436D6528</checksum>
|
|
507
501
|
</file>
|
|
508
|
-
<file>
|
|
509
|
-
<filename>hpxml_defaults.rb</filename>
|
|
510
|
-
<filetype>rb</filetype>
|
|
511
|
-
<usage_type>resource</usage_type>
|
|
512
|
-
<checksum>E748CE9A</checksum>
|
|
513
|
-
</file>
|
|
514
|
-
<file>
|
|
515
|
-
<filename>battery.rb</filename>
|
|
516
|
-
<filetype>rb</filetype>
|
|
517
|
-
<usage_type>resource</usage_type>
|
|
518
|
-
<checksum>6E92DEE7</checksum>
|
|
519
|
-
</file>
|
|
520
502
|
<file>
|
|
521
503
|
<version>
|
|
522
504
|
<software_program>OpenStudio</software_program>
|
|
@@ -546,12 +528,6 @@
|
|
|
546
528
|
<usage_type>test</usage_type>
|
|
547
529
|
<checksum>FA4D31E7</checksum>
|
|
548
530
|
</file>
|
|
549
|
-
<file>
|
|
550
|
-
<filename>waterheater.rb</filename>
|
|
551
|
-
<filetype>rb</filetype>
|
|
552
|
-
<usage_type>resource</usage_type>
|
|
553
|
-
<checksum>FB833E88</checksum>
|
|
554
|
-
</file>
|
|
555
531
|
<file>
|
|
556
532
|
<filename>hotwater_appliances.rb</filename>
|
|
557
533
|
<filetype>rb</filetype>
|
|
@@ -582,11 +558,35 @@
|
|
|
582
558
|
<usage_type>resource</usage_type>
|
|
583
559
|
<checksum>398A7B89</checksum>
|
|
584
560
|
</file>
|
|
561
|
+
<file>
|
|
562
|
+
<filename>hpxml_defaults.rb</filename>
|
|
563
|
+
<filetype>rb</filetype>
|
|
564
|
+
<usage_type>resource</usage_type>
|
|
565
|
+
<checksum>CB7BDE02</checksum>
|
|
566
|
+
</file>
|
|
567
|
+
<file>
|
|
568
|
+
<filename>test_defaults.rb</filename>
|
|
569
|
+
<filetype>rb</filetype>
|
|
570
|
+
<usage_type>test</usage_type>
|
|
571
|
+
<checksum>6CA2E731</checksum>
|
|
572
|
+
</file>
|
|
573
|
+
<file>
|
|
574
|
+
<filename>battery.rb</filename>
|
|
575
|
+
<filetype>rb</filetype>
|
|
576
|
+
<usage_type>resource</usage_type>
|
|
577
|
+
<checksum>E188E460</checksum>
|
|
578
|
+
</file>
|
|
579
|
+
<file>
|
|
580
|
+
<filename>waterheater.rb</filename>
|
|
581
|
+
<filetype>rb</filetype>
|
|
582
|
+
<usage_type>resource</usage_type>
|
|
583
|
+
<checksum>170774C2</checksum>
|
|
584
|
+
</file>
|
|
585
585
|
<file>
|
|
586
586
|
<filename>version.rb</filename>
|
|
587
587
|
<filetype>rb</filetype>
|
|
588
588
|
<usage_type>resource</usage_type>
|
|
589
|
-
<checksum>
|
|
589
|
+
<checksum>80B2ED97</checksum>
|
|
590
590
|
</file>
|
|
591
591
|
</files>
|
|
592
592
|
</measure>
|