Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
.idea
.DS_Store
*/tests/output

**/tests/output/
2 changes: 0 additions & 2 deletions lib/measures/detailed_hvac_viewer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
80 changes: 51 additions & 29 deletions lib/measures/detailed_hvac_viewer/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -46,7 +44,7 @@ def arguments(model=nil)
chs << 'Monthly'
reporting_frequency = OpenStudio::Measure::OSArgument::makeChoiceArgument('reporting_frequency', chs, true)
reporting_frequency.setDisplayName("<h3>Select a Reporting Frequency?</h3>")
reporting_frequency.setDefaultValue('Timestep')
reporting_frequency.setDefaultValue("Hourly")
args << reporting_frequency

# reporting variables
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -342,22 +359,26 @@ 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
end
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

Expand All @@ -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

Expand All @@ -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
Expand All @@ -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

Expand All @@ -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

Expand All @@ -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
Expand Down
56 changes: 27 additions & 29 deletions lib/measures/detailed_hvac_viewer/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>detailed_hvac_viewer</name>
<uid>416a484f-bd28-4db8-8926-7d70740390eb</uid>
<version_id>e516cae3-f0b4-484c-8b8f-964a2e0cc739</version_id>
<version_modified>2024-05-20T19:04:32Z</version_modified>
<version_id>e9420fc1-03ba-4447-8f21-406039655bbe</version_id>
<version_modified>2024-05-27T05:45:22Z</version_modified>
<xml_checksum>C068F366</xml_checksum>
<class_name>DetailedHVACViewer</class_name>
<display_name>Detailed HVAC Viewer</display_name>
Expand All @@ -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</modeler_description>
* etc.</modeler_description>
<arguments>
<argument>
<name>include_demand_nodes</name>
Expand All @@ -44,7 +42,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<type>Choice</type>
<required>true</required>
<model_dependent>false</model_dependent>
<default_value>Timestep</default_value>
<default_value>Hourly</default_value>
<choices>
<choice>
<value>Detailed</value>
Expand Down Expand Up @@ -473,7 +471,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<filename>README.md</filename>
<filetype>md</filetype>
<usage_type>readme</usage_type>
<checksum>6697ACCA</checksum>
<checksum>C4276244</checksum>
</file>
<file>
<filename>README.md.erb</filename>
Expand All @@ -490,7 +488,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>A1217DB6</checksum>
<checksum>6DD34D66</checksum>
</file>
<file>
<filename>README.md</filename>
Expand Down Expand Up @@ -523,17 +521,35 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<checksum>FC079194</checksum>
</file>
<file>
<filename>images/OAMixer_left.png</filename>
<filename>images/OS_AirLoopHVAC_OutdoorAirSystem_Left.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>44F75E3F</checksum>
</file>
<file>
<filename>images/OAMixer_right.png</filename>
<filename>images/OS_AirLoopHVAC_OutdoorAirSystem_Right.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>00C310F5</checksum>
</file>
<file>
<filename>images/OS_Coil_Cooling_DX_TwoSpeed.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>291533F7</checksum>
</file>
<file>
<filename>images/OS_Coil_Heating_Gas.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>95E0B87F</checksum>
</file>
<file>
<filename>images/OS_Fan_VariableVolume.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>9E4B5D6F</checksum>
</file>
<file>
<filename>images/air_cooled.png</filename>
<filetype>png</filetype>
Expand Down Expand Up @@ -834,12 +850,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<usage_type>resource</usage_type>
<checksum>90EDB4DD</checksum>
</file>
<file>
<filename>images/dxcoolingcoil_2stage_humidity.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>291533F7</checksum>
</file>
<file>
<filename>images/dxcoolingcoil_singlespeed.png</filename>
<filetype>png</filetype>
Expand Down Expand Up @@ -912,12 +922,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<usage_type>resource</usage_type>
<checksum>22BBCE49</checksum>
</file>
<file>
<filename>images/fan_variable.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>9E4B5D6F</checksum>
</file>
<file>
<filename>images/fan_zoneexhaust.png</filename>
<filetype>png</filetype>
Expand Down Expand Up @@ -948,12 +952,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<usage_type>resource</usage_type>
<checksum>3249F600</checksum>
</file>
<file>
<filename>images/furnace.png</filename>
<filetype>png</filetype>
<usage_type>resource</usage_type>
<checksum>95E0B87F</checksum>
</file>
<file>
<filename>images/furnace_multi_stage.png</filename>
<filetype>png</filetype>
Expand Down Expand Up @@ -1510,7 +1508,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashi</
<filename>report.html.erb</filename>
<filetype>erb</filetype>
<usage_type>resource</usage_type>
<checksum>36489548</checksum>
<checksum>47D8CA23</checksum>
</file>
<file>
<filename>USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw</filename>
Expand Down
Loading