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.1 detailed_hvac_viewer 416a484f-bd28-4db8-8926-7d70740390eb - e516cae3-f0b4-484c-8b8f-964a2e0cc739 - 2024-05-20T19:04:32Z + e9420fc1-03ba-4447-8f21-406039655bbe + 2024-05-27T05:45:22Z C068F366 DetailedHVACViewer Detailed 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 TakahashiChoice true false - Timestep + Hourly Detailed @@ -473,7 +471,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken TakahashiREADME.md md readme - 6697ACCA + C4276244 README.md.erb @@ -490,7 +488,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashimeasure.rb rb script - A1217DB6 + 6DD34D66 README.md @@ -523,17 +521,35 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken TakahashiFC079194 - images/OAMixer_left.png + images/OS_AirLoopHVAC_OutdoorAirSystem_Left.png png resource 44F75E3F - images/OAMixer_right.png + images/OS_AirLoopHVAC_OutdoorAirSystem_Right.png png resource 00C310F5 + + 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.png png @@ -834,12 +850,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashiresource 90EDB4DD - - images/dxcoolingcoil_2stage_humidity.png - png - resource - 291533F7 - images/dxcoolingcoil_singlespeed.png png @@ -912,12 +922,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashiresource 22BBCE49 - - images/fan_variable.png - png - resource - 9E4B5D6F - images/fan_zoneexhaust.png png @@ -948,12 +952,6 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashiresource 3249F600 - - images/furnace.png - png - resource - 95E0B87F - images/furnace_multi_stage.png png @@ -1510,7 +1508,7 @@ Developed as part of HackSimBuild 2024 by Matthew Dahlhausen and Ken Takahashireport.html.erb erb resource - 36489548 + 47D8CA23 USA_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 @@ +
+ + +
- - -