Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
7d17ec5
Update measure.rb
kentakahas May 27, 2024
a69348b
Merge branch 'detailed_hvac_viewer' of https://github.com/BuildingPer…
kentakahas May 27, 2024
9434af1
Merge branch 'detailed_hvac_viewer' of https://github.com/BuildingPer…
kentakahas May 28, 2024
885fd1f
Created prototype for updated html
kentakahas May 29, 2024
5c4af10
Merge branch 'detailed_hvac_viewer' of https://github.com/BuildingPer…
kentakahas May 29, 2024
4fd23eb
Update prototype with demand side
kentakahas May 30, 2024
c04181e
plot-format
michaelsweeney May 30, 2024
2c4e4b1
line-format
michaelsweeney May 30, 2024
676ecbf
Merge pull request #34 from BuildingPerformanceSimulation/d3-plot
mdahlhausen May 30, 2024
4a62354
Add support for HVAC Components
mdahlhausen Jun 1, 2024
92edaff
updated report.html.erb
kentakahas Jun 12, 2024
589197d
Delete lib/measures/detailed_hvac_viewer/resources/jointJS-grid.html
kentakahas Jun 12, 2024
4c11df2
Delete lib/measures/detailed_hvac_viewer/resources/jointJS-grid.html
kentakahas Jun 12, 2024
b965c28
Update report.html.erb
kentakahas Jun 12, 2024
50216a3
Specify which components are not found
kentakahas Jun 12, 2024
6cd34e4
Updated image directory
kentakahas Jun 13, 2024
48aaeb0
added d3 tableau colorscale, selection by ID
michaelsweeney Jun 13, 2024
78248b3
delete unecessary images
kentakahas Jun 14, 2024
9d179f5
Fixed loopDimensions to allow for plant loops
kentakahas Jun 14, 2024
80ab5ec
Merge branch 'detailed_hvac_viewer-jointJS' into detailed_hvac_viewer
kentakahas Jun 14, 2024
5ab0f61
Merge pull request #35 from BuildingPerformanceSimulation/detailed_hv…
kentakahas Jun 14, 2024
2a9379e
Delete lib/measures/detailed_hvac_viewer/tests/office_chicago_pvav di…
kentakahas Jun 14, 2024
9e99574
Update report.html.erb
kentakahas Jun 14, 2024
10b8c9b
Merge pull request #36 from BuildingPerformanceSimulation/detailed_hv…
kentakahas Jun 14, 2024
d06e17b
Added demand side outputs and fixed coloring scheme
kentakahas Jun 14, 2024
6210f8c
fixed demand side while loop error
kentakahas Jun 14, 2024
4789f56
Update report.html.erb
kentakahas Jun 14, 2024
cd3026c
added supply side splitter
kentakahas Jun 14, 2024
c9d7e12
link supply/demand inlet/outlet nodes
mdahlhausen Jun 14, 2024
6d92a6e
Update report.html.erb
kentakahas Jun 14, 2024
bef405b
Merge pull request #37 from BuildingPerformanceSimulation/link_nodes
kentakahas Jun 14, 2024
8a130fc
Update image source issue
kentakahas Jun 15, 2024
8742465
Update report.html.erb
kentakahas Jun 15, 2024
1728624
Update report.html.erb
kentakahas Jun 15, 2024
7312616
Update report.html.erb
kentakahas Jun 15, 2024
85db769
Merge pull request #38 from BuildingPerformanceSimulation/detailed_hv…
mdahlhausen Jun 15, 2024
47cf1d2
Fixed bug that stopped the loop select from working when page is refr…
kentakahas Jun 16, 2024
b7a7e5e
Fixed bug that showed blank output after first loop
kentakahas Jun 17, 2024
e8ff26e
Add plenum icon
kentakahas Jun 17, 2024
bfc2c0a
Cleaning up code
kentakahas Jun 17, 2024
e0d9c3b
Update report.html.erb
kentakahas Jun 17, 2024
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
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"files.associations": {
"*.html.erb": "html"
}
}
193 changes: 102 additions & 91 deletions lib/measures/detailed_hvac_viewer/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -201,32 +201,36 @@ def straight_component_data_hash(comp, reporting_frequency, variable_names)
comp = comp.to_StraightComponent.get
comp_data['object_name'] = comp.name.to_s
comp_data['object_type'] = comp.iddObjectType.valueName.to_s
comp_data['before_objects'] = []
comp_data['after_objects'] = []
if comp.inletModelObject.is_initialized
if comp.inletModelObject.get.name.is_initialized
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
# use the component name as is
comp_data['before_objects'] = [inlet_object_name]
end
elsif comp.inletModelObject.get.iddObjectType.valueName.to_s == 'OS_PortList'
inlet_object_name = comp.inletModelObject.get.to_PortList.get.thermalZone.name.to_s
comp_data['before_objects'] = [inlet_object_name]
end
else
comp_data['before_objects'] = []
end
if comp.outletModelObject.is_initialized
if comp.outletModelObject.get.name.is_initialized
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
elsif comp.outletModelObject.get.iddObjectType.valueName.to_s == 'OS_PortList'
outlet_object_name = comp.outletModelObject.get.to_PortList.get.thermalZone.name.to_s
comp_data['after_objects'] = [outlet_object_name]
end
else
comp_data['after_objects'] = []
end

if comp.to_Node.is_initialized && !variable_names.empty?
sql = comp.model.sqlFile.get
ann_env_pd = annual_run_period(sql)
Expand All @@ -246,6 +250,70 @@ def straight_component_data_hash(comp, reporting_frequency, variable_names)
return comp_data
end

def hvac_component_data_hash(comp, reporting_frequency, variable_names, loop_data)
comp_data = {}
comp = comp.to_HVACComponent.get
comp_data['object_name'] = comp.name.to_s
comp_data['object_type'] = comp.iddObjectType.valueName.to_s
comp_data['before_objects'] = []
comp_data['after_objects'] = []

# capture outdoor air system properties
if comp.to_AirLoopHVACOutdoorAirSystem.is_initialized
comp = comp.to_AirLoopHVACOutdoorAirSystem.get
if comp.outboardOANode.is_initialized
oa_node = comp.outboardOANode.get
comp_data['before_objects'] << oa_node.name.get
temp_comp = straight_component_data_hash(oa_node, reporting_frequency, variable_names)
temp_comp['component_side'] = 'outdoor'
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
temp_comp = straight_component_data_hash(relief_node, reporting_frequency, variable_names)
temp_comp['component_side'] = 'relief'
loop_data['components'] << temp_comp
end
if comp.mixedAirModelObject.is_initialized
comp_data['after_objects'] << comp.mixedAirModelObject.get.name.get
end
elsif comp.to_Splitter.is_initialized
# if the object is a splitter, log the inlet node and all outlet nodes
comp = comp.to_Splitter.get
comp_data['before_objects'] = [comp.inletModelObject.get.name.get] if comp.inletModelObject.is_initialized
comp.outletModelObjects.each { |obj| comp_data['after_objects'] << obj.name.get }
elsif comp.to_Mixer.is_initialized
# if the object is a mixer, log all inlet nodes and the outlet node
comp = comp.to_Mixer.get
comp.inletModelObjects.each { |obj| comp_data['before_objects'] << obj.name.get }
comp_data['after_objects'] = [comp.outletModelObject.get.name.get] if comp.outletModelObject.is_initialized
elsif comp.to_ThermalZone.is_initialized
comp = comp.to_ThermalZone.get
comp.inletPortList.modelObjects.each { |obj| comp_data['before_objects'] << obj.name.get }
comp.returnPortList.modelObjects.each { |obj| comp_data['after_objects'] << obj.name.get }
elsif comp.to_WaterToAirComponent.is_initialized
comp = comp.to_WaterToAirComponent.get
comp_data['before_objects'] << comp.airInletModelObject.get.name.get if comp.airInletModelObject.is_initialized
comp_data['before_objects'] << comp.waterInletModelObject.get.name.get if comp.waterInletModelObject.is_initialized
comp_data['after_objects'] << comp.airOutletModelObject.get.name.get if comp.airOutletModelObject.is_initialized
comp_data['after_objects'] << comp.waterOutletModelObject.get.name.get if comp.waterOutletModelObject.is_initialized
elsif comp.to_WaterToWaterComponent.is_initialized
comp = comp.to_WaterToWaterComponent.get
comp_data['before_objects'] << comp.demandInletModelObject.get.name.get if comp.demandInletModelObject.is_initialized
comp_data['before_objects'] << comp.supplyInletModelObject.get.name.get if comp.supplyInletModelObject.is_initialized
comp_data['before_objects'] << comp.tertiaryInletModelObject.get.name.get if comp.tertiaryInletModelObject.is_initialized
comp_data['after_objects'] << comp.demandOutletModelObject.get.name.get if comp.demandOutletModelObject.is_initialized
comp_data['after_objects'] << comp.supplyOutletModelObject.get.name.get if comp.supplyOutletModelObject.is_initialized
comp_data['after_objects'] << comp.tertiaryOutletModelObject.get.name.get if comp.tertiaryOutletModelObject.is_initialized
end

return comp_data
end

def add_node_names_to_array(model_objects, node_names)
model_objects.each do |model_object|
unless model_object.to_Node.empty?
Expand Down Expand Up @@ -334,106 +402,49 @@ def run(runner, user_arguments)
return false
end

# log data from AirLoopHVACs and PlantLoops
hvac_data = []
# get data from air loops
model.getAirLoopHVACs.each do |air_loop|
air_loop_data = {}
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|
model.getLoops.each do |hvac_loop|
loop_data = {}
loop_data['loop_name'] = hvac_loop.name.to_s
loop_data['loop_type'] = hvac_loop.iddObjectType.valueName.to_s
loop_data['boundary_nodes'] = loop_boundary_nodes(hvac_loop)
loop_data['components'] = []
# loop through supply side components and add them to components array
hvac_loop.supplyComponents.each do |comp|
if comp.to_StraightComponent.is_initialized
comp_data = straight_component_data_hash(comp, reporting_frequency, variable_names)
else
comp_data = {}
end

# capture outdoor air system properties
if comp.to_AirLoopHVACOutdoorAirSystem.is_initialized
comp_data['object_name'] = comp.name.to_s
comp_data['object_type'] = comp.iddObjectType.valueName.to_s
comp = comp.to_AirLoopHVACOutdoorAirSystem.get
comp_data['before_objects'] = []
comp_data['after_objects'] = []
if comp.outboardOANode.is_initialized
oa_node = comp.outboardOANode.get
comp_data['before_objects'] << oa_node.name.get
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
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
comp_data = hvac_component_data_hash(comp, reporting_frequency, variable_names, loop_data)
end

comp_data['component_side'] = 'supply'
air_loop_data['components'] << comp_data
loop_data['components'] << comp_data
end

air_loop.demandComponents.each do |comp|
# loop through demand side components and add them to components array
hvac_loop.demandComponents.each do |comp|
if comp.to_StraightComponent.is_initialized
if include_demand_nodes
comp_data = straight_component_data_hash(comp, reporting_frequency, variable_names)
else
comp_data = straight_component_data_hash(comp, reporting_frequency, [])
end
# variable_names = [] unless include_demand_nodes
comp_data = straight_component_data_hash(comp, reporting_frequency, include_demand_nodes ? variable_names : [])
else
comp_data = {}
comp_data = hvac_component_data_hash(comp, reporting_frequency, include_demand_nodes ? variable_names : [], loop_data)
end

comp_data['component_side'] = 'demand'
air_loop_data['components'] << comp_data
loop_data['components'] << comp_data
end

hvac_data << air_loop_data
end
# connect supply outlet and demand inlet
supply_outlet = loop_data['components'].select { |comp| comp['object_name'] == loop_data['boundary_nodes']['supply_outlet'] }[0]
demand_inlet = loop_data['components'].select { |comp| comp['object_name'] == loop_data['boundary_nodes']['demand_inlet'] }[0]
supply_outlet['after_objects'] << loop_data['boundary_nodes']['demand_inlet']
demand_inlet['before_objects'] << loop_data['boundary_nodes']['supply_outlet']

# get data from plant loops
model.getPlantLoops.each do |plant_loop|
plant_loop_data = {}
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
comp_data = straight_component_data_hash(comp, reporting_frequency, variable_names)
else
comp_data = {}
end

comp_data['component_side'] = 'supply'
plant_loop_data['components'] << comp_data
end

plant_loop.demandComponents.each do |comp|
if comp.to_StraightComponent.is_initialized
if include_demand_nodes
comp_data = straight_component_data_hash(comp, reporting_frequency, variable_names)
else
comp_data = straight_component_data_hash(comp, reporting_frequency, [])
end
else
comp_data = {}
end

comp_data['component_side'] = 'demand'
plant_loop_data['components'] << comp_data
end
# connect demand outlet and supply inlet
demand_outlet = loop_data['components'].select { |comp| comp['object_name'] == loop_data['boundary_nodes']['demand_outlet'] }[0]
supply_inlet = loop_data['components'].select { |comp| comp['object_name'] == loop_data['boundary_nodes']['supply_inlet'] }[0]
demand_outlet['after_objects'] << loop_data['boundary_nodes']['supply_inlet']
supply_inlet['before_objects'] << loop_data['boundary_nodes']['demand_outlet']

hvac_data << plant_loop_data
hvac_data << loop_data
end

# Convert the hash to a JSON string
Expand Down
Loading