diff --git a/.gitignore b/.gitignore
index 5805fa4..173010b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
.idea
.DS_Store
-*/tests/output
-
+**/tests/output/
\ No newline at end of file
diff --git a/lib/measures/detailed_hvac_viewer/README.md b/lib/measures/detailed_hvac_viewer/README.md
index 3a9ab35..88e7653 100644
--- a/lib/measures/detailed_hvac_viewer/README.md
+++ b/lib/measures/detailed_hvac_viewer/README.md
@@ -17,8 +17,6 @@ The user is asked to provided the following parameters:
* System Node Mass Flow Rate
* etc.
-Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
-
## Measure Type
ReportingMeasure
diff --git a/lib/measures/detailed_hvac_viewer/measure.rb b/lib/measures/detailed_hvac_viewer/measure.rb
index 0232966..c8f1049 100644
--- a/lib/measures/detailed_hvac_viewer/measure.rb
+++ b/lib/measures/detailed_hvac_viewer/measure.rb
@@ -23,9 +23,7 @@ def modeler_description
* System Node Temperature
* System Node Setpoint Temperature
* System Node Mass Flow Rate
- * etc.
-
-Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi"
+ * etc."
end
# define the arguments that the user will input
@@ -46,7 +44,7 @@ def arguments(model=nil)
chs << 'Monthly'
reporting_frequency = OpenStudio::Measure::OSArgument::makeChoiceArgument('reporting_frequency', chs, true)
reporting_frequency.setDisplayName("
Select a Reporting Frequency?
")
- reporting_frequency.setDefaultValue('Timestep')
+ reporting_frequency.setDefaultValue("Hourly")
args << reporting_frequency
# reporting variables
@@ -149,19 +147,19 @@ def energyPlusOutputRequests(runner, user_arguments)
loops.each do |loop|
# add the supply objects
supply_objects = loop.supplyComponents(OpenStudio::Model::Node::iddObjectType)
- node_names = addNodeNamestoArray(supply_objects, node_names)
+ node_names = add_node_names_to_array(supply_objects, node_names)
# also add the outside air system nodes if an air loop
if loop.to_AirLoopHVAC.is_initialized
loop = loop.to_AirLoopHVAC.get
oa_objects = loop.oaComponents(OpenStudio::Model::Node::iddObjectType)
- node_names = addNodeNamestoArray(oa_objects, node_names)
+ node_names = add_node_names_to_array(oa_objects, node_names)
end
# optionally include demand nodes
if include_demand_nodes
demand_objects = loop.demandComponents(OpenStudio::Model::Node::iddObjectType)
- node_names = addNodeNamestoArray(demand_objects, node_names)
+ node_names = add_node_names_to_array(demand_objects, node_names)
end
end
@@ -204,22 +202,30 @@ def straight_component_data_hash(comp, reporting_frequency, variable_names)
comp_data['object_name'] = comp.name.to_s
comp_data['object_type'] = comp.iddObjectType.valueName.to_s
if comp.inletModelObject.is_initialized
- # if !comp.inletModelObject.get.name.is_initialized
- # puts comp.name
- # puts comp.inletModelObject.get.iddObjectType.valueName.to_s
- # end
if comp.inletModelObject.get.name.is_initialized
- comp_data['before_objects'] = [comp.inletModelObject.get.name.get]
+ inlet_object_name = comp.inletModelObject.get.name.get
+ if comp.loop.get.name.get.to_s == inlet_object_name
+ # don't log the air loop for the supply inlet node
+ comp_data['before_objects'] = []
+ else
+ comp_data['before_objects'] = [inlet_object_name]
+ end
end
+ else
+ comp_data['before_objects'] = []
end
if comp.outletModelObject.is_initialized
- # if !comp.outletModelObject.get.name.is_initialized
- # puts comp.name
- # puts comp.outletModelObject.get.iddObjectType.valueName.to_s
- # end
if comp.outletModelObject.get.name.is_initialized
- comp_data['after_objects'] = [comp.outletModelObject.get.name.get]
+ outlet_object_name = comp.outletModelObject.get.name.get
+ if comp.loop.get.name.get.to_s == outlet_object_name
+ # don't log the air loop for the supply outlet node
+ comp_data['after_objects'] = []
+ else
+ comp_data['after_objects'] = [outlet_object_name]
+ end
end
+ else
+ comp_data['after_objects'] = []
end
if comp.to_Node.is_initialized && !variable_names.empty?
sql = comp.model.sqlFile.get
@@ -240,7 +246,7 @@ def straight_component_data_hash(comp, reporting_frequency, variable_names)
return comp_data
end
- def addNodeNamestoArray(model_objects, node_names)
+ def add_node_names_to_array(model_objects, node_names)
model_objects.each do |model_object|
unless model_object.to_Node.empty?
model_node = model_object.to_Node.get
@@ -252,6 +258,16 @@ def addNodeNamestoArray(model_objects, node_names)
return node_names
end
+ def loop_boundary_nodes(loop)
+ node_list = {}
+ node_list['supply_inlet'] = loop.supplyInletNode.name.get
+ node_list['supply_outlet'] = loop.supplyOutletNode.name.get
+ node_list['demand_inlet'] = loop.demandInletNode.name.get
+ node_list['demand_outlet'] = loop.demandOutletNode.name.get
+
+ return node_list
+ end
+
# define what happens when the measure is run
def run(runner, user_arguments)
super(runner, user_arguments)
@@ -322,8 +338,9 @@ def run(runner, user_arguments)
# get data from air loops
model.getAirLoopHVACs.each do |air_loop|
air_loop_data = {}
- air_loop_data['object_name'] = air_loop.name.to_s
- air_loop_data['object_type'] = air_loop.iddObjectType.valueName.to_s
+ air_loop_data['loop_name'] = air_loop.name.to_s
+ air_loop_data['loop_type'] = air_loop.iddObjectType.valueName.to_s
+ air_loop_data['boundary_nodes'] = loop_boundary_nodes(air_loop)
air_loop_data['components'] = []
air_loop.supplyComponents.each do |comp|
if comp.to_StraightComponent.is_initialized
@@ -342,7 +359,9 @@ def run(runner, user_arguments)
if comp.outboardOANode.is_initialized
oa_node = comp.outboardOANode.get
comp_data['before_objects'] << oa_node.name.get
- air_loop_data['components'] << straight_component_data_hash(oa_node, reporting_frequency, variable_names)
+ temp_comp = straight_component_data_hash(oa_node, reporting_frequency, variable_names)
+ temp_comp['component_side'] = 'supply'
+ air_loop_data['components'] << temp_comp
end
if comp.returnAirModelObject.is_initialized
comp_data['before_objects'] << comp.returnAirModelObject.get.name.get
@@ -350,14 +369,16 @@ def run(runner, user_arguments)
if comp.outboardReliefNode.is_initialized
relief_node = comp.outboardReliefNode.get
comp_data['after_objects'] << relief_node.name.get
- air_loop_data['components'] << straight_component_data_hash(relief_node, reporting_frequency, variable_names)
+ temp_comp = straight_component_data_hash(relief_node, reporting_frequency, variable_names)
+ temp_comp['component_side'] = 'supply'
+ air_loop_data['components'] << temp_comp
end
if comp.mixedAirModelObject.is_initialized
comp_data['after_objects'] << comp.mixedAirModelObject.get.name.get
end
end
- comp_data['component_type'] = 'supply'
+ comp_data['component_side'] = 'supply'
air_loop_data['components'] << comp_data
end
@@ -372,7 +393,7 @@ def run(runner, user_arguments)
comp_data = {}
end
- comp_data['component_type'] = 'demand'
+ comp_data['component_side'] = 'demand'
air_loop_data['components'] << comp_data
end
@@ -382,8 +403,9 @@ def run(runner, user_arguments)
# get data from plant loops
model.getPlantLoops.each do |plant_loop|
plant_loop_data = {}
- plant_loop_data['object_name'] = plant_loop.name.to_s
- plant_loop_data['object_type'] = plant_loop.iddObjectType.valueName.to_s
+ plant_loop_data['loop_name'] = plant_loop.name.to_s
+ plant_loop_data['loop_type'] = plant_loop.iddObjectType.valueName.to_s
+ plant_loop_data['boundary_nodes'] = loop_boundary_nodes(plant_loop)
plant_loop_data['components'] = []
plant_loop.supplyComponents.each do |comp|
if comp.to_StraightComponent.is_initialized
@@ -392,7 +414,7 @@ def run(runner, user_arguments)
comp_data = {}
end
- comp_data['component_type'] = 'supply'
+ comp_data['component_side'] = 'supply'
plant_loop_data['components'] << comp_data
end
@@ -407,7 +429,7 @@ def run(runner, user_arguments)
comp_data = {}
end
- comp_data['component_type'] = 'demand'
+ comp_data['component_side'] = 'demand'
plant_loop_data['components'] << comp_data
end
@@ -417,7 +439,7 @@ def run(runner, user_arguments)
# Convert the hash to a JSON string
hvac_data = JSON.pretty_generate(hvac_data)
- # # Write the JSON string to the file
+ # Write the JSON string to the file
File.open('hvac_data.json', 'w') do |file|
file.write(hvac_data)
end
diff --git a/lib/measures/detailed_hvac_viewer/measure.xml b/lib/measures/detailed_hvac_viewer/measure.xml
index 5c7b4c7..10ce1e8 100644
--- a/lib/measures/detailed_hvac_viewer/measure.xml
+++ b/lib/measures/detailed_hvac_viewer/measure.xml
@@ -3,8 +3,8 @@
3.1detailed_hvac_viewer416a484f-bd28-4db8-8926-7d70740390eb
- e516cae3-f0b4-484c-8b8f-964a2e0cc739
- 2024-05-20T19:04:32Z
+ e9420fc1-03ba-4447-8f21-406039655bbe
+ 2024-05-27T05:45:22ZC068F366DetailedHVACViewerDetailed HVAC Viewer
@@ -16,9 +16,7 @@
* System Node Temperature
* System Node Setpoint Temperature
* System Node Mass Flow Rate
- * etc.
-
-Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
+ * etc.
include_demand_nodes
@@ -44,7 +42,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
Choicetruefalse
- Timestep
+ HourlyDetailed
@@ -473,7 +471,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
README.mdmdreadme
- 6697ACCA
+ C4276244README.md.erb
@@ -490,7 +488,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
measure.rbrbscript
- A1217DB6
+ 6DD34D66README.md
@@ -523,17 +521,35 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
FC079194
- images/OAMixer_left.png
+ images/OS_AirLoopHVAC_OutdoorAirSystem_Left.pngpngresource44F75E3F
- images/OAMixer_right.png
+ images/OS_AirLoopHVAC_OutdoorAirSystem_Right.pngpngresource00C310F5
+
+ images/OS_Coil_Cooling_DX_TwoSpeed.png
+ png
+ resource
+ 291533F7
+
+
+ images/OS_Coil_Heating_Gas.png
+ png
+ resource
+ 95E0B87F
+
+
+ images/OS_Fan_VariableVolume.png
+ png
+ resource
+ 9E4B5D6F
+ images/air_cooled.pngpng
@@ -834,12 +850,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
resource90EDB4DD
-
- images/dxcoolingcoil_2stage_humidity.png
- png
- resource
- 291533F7
- images/dxcoolingcoil_singlespeed.pngpng
@@ -912,12 +922,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
resource22BBCE49
-
- images/fan_variable.png
- png
- resource
- 9E4B5D6F
- images/fan_zoneexhaust.pngpng
@@ -948,12 +952,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
resource3249F600
-
- images/furnace.png
- png
- resource
- 95E0B87F
- images/furnace_multi_stage.pngpng
@@ -1510,7 +1508,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi
report.html.erberbresource
- 36489548
+ 47D8CA23USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw
diff --git a/lib/measures/detailed_hvac_viewer/resources/images/OAMixer_left.png b/lib/measures/detailed_hvac_viewer/resources/images/OS_AirLoopHVAC_OutdoorAirSystem_Left.png
similarity index 100%
rename from lib/measures/detailed_hvac_viewer/resources/images/OAMixer_left.png
rename to lib/measures/detailed_hvac_viewer/resources/images/OS_AirLoopHVAC_OutdoorAirSystem_Left.png
diff --git a/lib/measures/detailed_hvac_viewer/resources/images/OAMixer_right.png b/lib/measures/detailed_hvac_viewer/resources/images/OS_AirLoopHVAC_OutdoorAirSystem_Right.png
similarity index 100%
rename from lib/measures/detailed_hvac_viewer/resources/images/OAMixer_right.png
rename to lib/measures/detailed_hvac_viewer/resources/images/OS_AirLoopHVAC_OutdoorAirSystem_Right.png
diff --git a/lib/measures/detailed_hvac_viewer/resources/images/dxcoolingcoil_2stage_humidity.png b/lib/measures/detailed_hvac_viewer/resources/images/OS_Coil_Cooling_DX_TwoSpeed.png
similarity index 100%
rename from lib/measures/detailed_hvac_viewer/resources/images/dxcoolingcoil_2stage_humidity.png
rename to lib/measures/detailed_hvac_viewer/resources/images/OS_Coil_Cooling_DX_TwoSpeed.png
diff --git a/lib/measures/detailed_hvac_viewer/resources/images/furnace.png b/lib/measures/detailed_hvac_viewer/resources/images/OS_Coil_Heating_Gas.png
similarity index 100%
rename from lib/measures/detailed_hvac_viewer/resources/images/furnace.png
rename to lib/measures/detailed_hvac_viewer/resources/images/OS_Coil_Heating_Gas.png
diff --git a/lib/measures/detailed_hvac_viewer/resources/images/fan_variable.png b/lib/measures/detailed_hvac_viewer/resources/images/OS_Fan_VariableVolume.png
similarity index 100%
rename from lib/measures/detailed_hvac_viewer/resources/images/fan_variable.png
rename to lib/measures/detailed_hvac_viewer/resources/images/OS_Fan_VariableVolume.png
diff --git a/lib/measures/detailed_hvac_viewer/resources/report.html.erb b/lib/measures/detailed_hvac_viewer/resources/report.html.erb
index 47a32f3..d178ce1 100644
--- a/lib/measures/detailed_hvac_viewer/resources/report.html.erb
+++ b/lib/measures/detailed_hvac_viewer/resources/report.html.erb
@@ -10,7 +10,7 @@
+