diff --git a/honeybee_grasshopper_energy/icon/HB All-Air HVAC.png b/honeybee_grasshopper_energy/icon/HB All-Air HVAC.png index 054e9e2e..ae5ea720 100644 Binary files a/honeybee_grasshopper_energy/icon/HB All-Air HVAC.png and b/honeybee_grasshopper_energy/icon/HB All-Air HVAC.png differ diff --git a/honeybee_grasshopper_energy/icon/HB DOAS HVAC.png b/honeybee_grasshopper_energy/icon/HB DOAS HVAC.png index 66c5a1f2..528c94fd 100644 Binary files a/honeybee_grasshopper_energy/icon/HB DOAS HVAC.png and b/honeybee_grasshopper_energy/icon/HB DOAS HVAC.png differ diff --git a/honeybee_grasshopper_energy/icon/HB Detailed HVAC.png b/honeybee_grasshopper_energy/icon/HB Detailed HVAC.png index 44ff8539..e46e7899 100644 Binary files a/honeybee_grasshopper_energy/icon/HB Detailed HVAC.png and b/honeybee_grasshopper_energy/icon/HB Detailed HVAC.png differ diff --git a/honeybee_grasshopper_energy/icon/HB HeatCool HVAC.png b/honeybee_grasshopper_energy/icon/HB HeatCool HVAC.png index dd88932e..cd1240a9 100644 Binary files a/honeybee_grasshopper_energy/icon/HB HeatCool HVAC.png and b/honeybee_grasshopper_energy/icon/HB HeatCool HVAC.png differ diff --git a/honeybee_grasshopper_energy/json/HB_All-Air_HVAC.json b/honeybee_grasshopper_energy/json/HB_All-Air_HVAC.json index f092344f..78072f6d 100644 --- a/honeybee_grasshopper_energy/json/HB_All-Air_HVAC.json +++ b/honeybee_grasshopper_energy/json/HB_All-Air_HVAC.json @@ -1,15 +1,8 @@ { - "version": "1.6.0", + "version": "1.6.1", "nickname": "AllAirHVAC", "outputs": [ [ - { - "access": "None", - "name": "report", - "description": "Reports, errors, warnings, etc.", - "type": null, - "default": null - }, { "access": "None", "name": "rooms", @@ -78,7 +71,7 @@ } ], "subcategory": "4 :: HVAC", - "code": "\nimport os\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.allair import EQUIPMENT_TYPES_DICT\n from honeybee_energy.lib.schedules import schedule_by_identifier\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n# dictionary to get correct vintages\nvintages = {\n 'DOE_Ref_Pre_1980': 'DOE_Ref_Pre_1980',\n 'DOE_Ref_1980_2004': 'DOE_Ref_1980_2004',\n 'ASHRAE_2004': 'ASHRAE_2004',\n 'ASHRAE_2007': 'ASHRAE_2007',\n 'ASHRAE_2010': 'ASHRAE_2010',\n 'ASHRAE_2013': 'ASHRAE_2013',\n 'ASHRAE_2016': 'ASHRAE_2016',\n 'ASHRAE_2019': 'ASHRAE_2019',\n 'DOE Ref Pre-1980': 'DOE_Ref_Pre_1980',\n 'DOE Ref 1980-2004': 'DOE_Ref_1980_2004',\n '90.1-2004': 'ASHRAE_2004',\n '90.1-2007': 'ASHRAE_2007',\n '90.1-2010': 'ASHRAE_2010',\n '90.1-2013': 'ASHRAE_2013',\n 'pre_1980': 'DOE_Ref_Pre_1980',\n '1980_2004': 'DOE_Ref_1980_2004',\n '2004': 'ASHRAE_2004',\n '2007': 'ASHRAE_2007',\n '2010': 'ASHRAE_2010',\n '2013': 'ASHRAE_2013',\n '2016': 'ASHRAE_2016',\n '2019': 'ASHRAE_2019',\n None: 'ASHRAE_2019'\n}\n\n# dictionary of HVAC template names\next_folder = folders.standards_extension_folders[0]\nhvac_reg = os.path.join(ext_folder, 'hvac_registry.json')\nwith open(hvac_reg, 'r') as f:\n hvac_dict = json.load(f)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms = []\n for hb_obj in _rooms:\n if isinstance(hb_obj, Model):\n rooms.extend([room.duplicate() for room in hb_obj.rooms])\n elif isinstance(hb_obj, Room):\n rooms.append(hb_obj.duplicate())\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # process any input properties for the HVAC system\n try: # get the class for the HVAC system\n try:\n _sys_name = hvac_dict[_system_type]\n except KeyError:\n _sys_name = _system_type\n hvac_class = EQUIPMENT_TYPES_DICT[_sys_name]\n except KeyError:\n raise ValueError('System Type \"{}\" is not recognized as an all-air HVAC '\n 'system.'.format(_system_type))\n vintage = vintages[_vintage_] # get the vintage of the HVAC\n name = clean_and_id_ep_string('All-Air HVAC') if _name_ is None else clean_ep_string(_name_)\n\n # create the HVAC\n hvac = hvac_class(name, vintage, _sys_name)\n if _economizer_ is not None:\n hvac.economizer_type = _economizer_\n if sensible_hr_ is not None:\n hvac.sensible_heat_recovery = sensible_hr_\n if latent_hr_ is not None:\n hvac.latent_heat_recovery = latent_hr_\n if dcv_:\n hvac.demand_controlled_ventilation = True\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n rel_rooms = []\n hvac_count = 0\n for room in rooms:\n if room.properties.energy.is_conditioned:\n room.properties.energy.hvac = hvac\n rel_rooms.append(room)\n hvac_count += 1\n\n # give a warning if no rooms were conditioned\n if hvac_count == 0:\n msg = 'None of the connected Rooms are conditioned.\\n' \\\n 'Set rooms to be conditioned using the \"HB Set Conditioned\" component.'\n print(msg)\n give_warning(ghenv.Component, msg)\n\n # give a warning if all of the ventilation schedules are not the same\n if 'PTAC' not in _sys_name and 'PTHP' not in _sys_name:\n vent_scheds = set()\n for rm in rel_rooms:\n vent_obj = rm.properties.energy.ventilation\n if vent_obj is not None:\n vent_scheds.add(vent_obj.schedule)\n if len(vent_scheds) > 1:\n msg = 'The system type uses a central air loop but not all of the ' \\\n 'rooms have the same ventilation schedule.\\n' \\\n 'All ventilation schedules will be ignored.'\n give_warning(ghenv.Component, msg)\n", + "code": "\nimport os\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.allair import EQUIPMENT_TYPES_DICT\n from honeybee_energy.lib.schedules import schedule_by_identifier\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n# dictionary to get correct vintages\nvintages = {\n 'DOE_Ref_Pre_1980': 'DOE_Ref_Pre_1980',\n 'DOE_Ref_1980_2004': 'DOE_Ref_1980_2004',\n 'ASHRAE_2004': 'ASHRAE_2004',\n 'ASHRAE_2007': 'ASHRAE_2007',\n 'ASHRAE_2010': 'ASHRAE_2010',\n 'ASHRAE_2013': 'ASHRAE_2013',\n 'ASHRAE_2016': 'ASHRAE_2016',\n 'ASHRAE_2019': 'ASHRAE_2019',\n 'DOE Ref Pre-1980': 'DOE_Ref_Pre_1980',\n 'DOE Ref 1980-2004': 'DOE_Ref_1980_2004',\n '90.1-2004': 'ASHRAE_2004',\n '90.1-2007': 'ASHRAE_2007',\n '90.1-2010': 'ASHRAE_2010',\n '90.1-2013': 'ASHRAE_2013',\n 'pre_1980': 'DOE_Ref_Pre_1980',\n '1980_2004': 'DOE_Ref_1980_2004',\n '2004': 'ASHRAE_2004',\n '2007': 'ASHRAE_2007',\n '2010': 'ASHRAE_2010',\n '2013': 'ASHRAE_2013',\n '2016': 'ASHRAE_2016',\n '2019': 'ASHRAE_2019',\n None: 'ASHRAE_2019'\n}\n\n# dictionary of HVAC template names\next_folder = folders.standards_extension_folders[0]\nhvac_reg = os.path.join(ext_folder, 'hvac_registry.json')\nwith open(hvac_reg, 'r') as f:\n hvac_dict = json.load(f)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms = []\n for hb_obj in _rooms:\n if isinstance(hb_obj, Model):\n rooms.extend([room.duplicate() for room in hb_obj.rooms])\n elif isinstance(hb_obj, Room):\n rooms.append(hb_obj.duplicate())\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # process any input properties for the HVAC system\n try: # get the class for the HVAC system\n try:\n _sys_name = hvac_dict[_system_type]\n except KeyError:\n _sys_name = _system_type\n hvac_class = EQUIPMENT_TYPES_DICT[_sys_name]\n except KeyError:\n raise ValueError('System Type \"{}\" is not recognized as an all-air HVAC '\n 'system.'.format(_system_type))\n vintage = vintages[_vintage_] # get the vintage of the HVAC\n name = clean_and_id_ep_string('All-Air HVAC') if _name_ is None else clean_ep_string(_name_)\n\n # create the HVAC\n hvac = hvac_class(name, vintage, _sys_name)\n if _economizer_ is not None:\n hvac.economizer_type = _economizer_\n if sensible_hr_ is not None:\n hvac.sensible_heat_recovery = sensible_hr_\n if latent_hr_ is not None:\n hvac.latent_heat_recovery = latent_hr_\n if dcv_:\n hvac.demand_controlled_ventilation = True\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n rel_rooms, no_setp_rooms = [], []\n hvac_count = 0\n for room in rooms:\n if room.properties.energy.is_conditioned:\n room.properties.energy.hvac = hvac\n rel_rooms.append(room)\n hvac_count += 1\n if room.properties.energy.setpoint is None:\n no_setp_rooms.append(room.full_id)\n\n # give a warning if no rooms were conditioned\n if hvac_count == 0:\n msg = 'None of the connected Rooms are conditioned.\\n' \\\n 'Set rooms to be conditioned using the \"HB Set Conditioned\" component.'\n print(msg)\n give_warning(ghenv.Component, msg)\n\n # give a warning if all of the ventilation schedules are not the same\n if 'PTAC' not in _sys_name and 'PTHP' not in _sys_name:\n vent_scheds = set()\n for rm in rel_rooms:\n vent_obj = rm.properties.energy.ventilation\n if vent_obj is not None:\n vent_scheds.add(vent_obj.schedule)\n if len(vent_scheds) > 1:\n msg = 'The system type uses a central air loop but not all of the ' \\\n 'rooms have the same ventilation schedule.\\n' \\\n 'All ventilation schedules will be ignored.'\n give_warning(ghenv.Component, msg)\n\n # print a message if some of the rooms lack a setpoint specification\n if len(no_setp_rooms) != 0:\n msg = 'The following Rooms have the HVAC system assigned to them '\\\n 'but they lack a thermostat setpoint specification.\\nThese Rooms ' \\\n 'without setpoints will be treated as unconditioned in EnergyPlus '\\\n 'simulation.\\n{}'.format('\\n'.join(no_setp_rooms))\n print(msg)\n", "category": "HB-Energy", "name": "HB All-Air HVAC", "description": "Apply an All-Air template HVAC to a list of Honeybee Rooms.\n_\nAll-air systems provide both ventilation and satisfaction of heating + cooling\ndemand with the same stream of warm/cool air. As such, they often grant tight\ncontrol over zone humidity. However, because such systems often involve the\ncooling of air only to reheat it again, they are often more energy intensive\nthan systems that separate ventilation from the meeting of thermal loads.\n-" diff --git a/honeybee_grasshopper_energy/json/HB_DOAS_HVAC.json b/honeybee_grasshopper_energy/json/HB_DOAS_HVAC.json index 55cb088a..620a22fe 100644 --- a/honeybee_grasshopper_energy/json/HB_DOAS_HVAC.json +++ b/honeybee_grasshopper_energy/json/HB_DOAS_HVAC.json @@ -1,15 +1,8 @@ { - "version": "1.6.0", + "version": "1.6.1", "nickname": "DOASHVAC", "outputs": [ [ - { - "access": "None", - "name": "report", - "description": "Reports, errors, warnings, etc.", - "type": null, - "default": null - }, { "access": "None", "name": "rooms", @@ -78,7 +71,7 @@ } ], "subcategory": "4 :: HVAC", - "code": "\nimport os\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.doas import EQUIPMENT_TYPES_DICT\n from honeybee_energy.lib.schedules import schedule_by_identifier\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n# dictionary to get correct vintages\nvintages = {\n 'DOE_Ref_Pre_1980': 'DOE_Ref_Pre_1980',\n 'DOE_Ref_1980_2004': 'DOE_Ref_1980_2004',\n 'ASHRAE_2004': 'ASHRAE_2004',\n 'ASHRAE_2007': 'ASHRAE_2007',\n 'ASHRAE_2010': 'ASHRAE_2010',\n 'ASHRAE_2013': 'ASHRAE_2013',\n 'ASHRAE_2016': 'ASHRAE_2016',\n 'ASHRAE_2019': 'ASHRAE_2019',\n 'DOE Ref Pre-1980': 'DOE_Ref_Pre_1980',\n 'DOE Ref 1980-2004': 'DOE_Ref_1980_2004',\n '90.1-2004': 'ASHRAE_2004',\n '90.1-2007': 'ASHRAE_2007',\n '90.1-2010': 'ASHRAE_2010',\n '90.1-2013': 'ASHRAE_2013',\n 'pre_1980': 'DOE_Ref_Pre_1980',\n '1980_2004': 'DOE_Ref_1980_2004',\n '2004': 'ASHRAE_2004',\n '2007': 'ASHRAE_2007',\n '2010': 'ASHRAE_2010',\n '2013': 'ASHRAE_2013',\n '2016': 'ASHRAE_2016',\n '2019': 'ASHRAE_2019',\n None: 'ASHRAE_2019'\n}\n\n# dictionary of HVAC template names\next_folder = folders.standards_extension_folders[0]\nhvac_reg = os.path.join(ext_folder, 'hvac_registry.json')\nwith open(hvac_reg, 'r') as f:\n hvac_dict = json.load(f)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms = []\n for hb_obj in _rooms:\n if isinstance(hb_obj, Model):\n rooms.extend([room.duplicate() for room in hb_obj.rooms])\n elif isinstance(hb_obj, Room):\n rooms.append(hb_obj.duplicate())\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # process any input properties for the HVAC system\n try: # get the class for the HVAC system\n try:\n _sys_name = hvac_dict[_system_type]\n except KeyError:\n _sys_name = _system_type\n hvac_class = EQUIPMENT_TYPES_DICT[_sys_name]\n except KeyError:\n raise ValueError('System Type \"{}\" is not recognized as a DOAS HVAC '\n 'system.'.format(_system_type))\n vintage = vintages[_vintage_] # get the vintage of the HVAC\n name = clean_and_id_ep_string('DOAS HVAC') if _name_ is None else clean_ep_string(_name_)\n\n # create the HVAC\n hvac = hvac_class(name, vintage, _sys_name, sensible_hr_, latent_hr_, dcv_)\n if doas_avail_sch_ is not None:\n if isinstance(doas_avail_sch_, str):\n doas_avail_sch_ = schedule_by_identifier(doas_avail_sch_)\n hvac.doas_availability_schedule = doas_avail_sch_\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n vent_scheds = set()\n hvac_count = 0\n for room in rooms:\n if room.properties.energy.is_conditioned:\n room.properties.energy.hvac = hvac\n vent_obj = room.properties.energy.ventilation\n if vent_obj is not None:\n vent_scheds.add(vent_obj.schedule)\n hvac_count += 1\n\n # give a warning if no rooms were conditioned or ventilation schedules are unequal\n if hvac_count == 0:\n msg = 'None of the connected Rooms are conditioned.\\n' \\\n 'Set rooms to be conditioned using the \"HB Set Conditioned\" component.'\n print(msg)\n give_warning(ghenv.Component, msg)\n if len(vent_scheds) > 1:\n msg = 'The system type uses a central air loop but not all of the ' \\\n 'rooms have the same ventilation schedule.\\n' \\\n 'All ventilation schedules will be ignored.'\n print(msg)\n give_warning(ghenv.Component, msg)\n", + "code": "\nimport os\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.doas import EQUIPMENT_TYPES_DICT\n from honeybee_energy.lib.schedules import schedule_by_identifier\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n# dictionary to get correct vintages\nvintages = {\n 'DOE_Ref_Pre_1980': 'DOE_Ref_Pre_1980',\n 'DOE_Ref_1980_2004': 'DOE_Ref_1980_2004',\n 'ASHRAE_2004': 'ASHRAE_2004',\n 'ASHRAE_2007': 'ASHRAE_2007',\n 'ASHRAE_2010': 'ASHRAE_2010',\n 'ASHRAE_2013': 'ASHRAE_2013',\n 'ASHRAE_2016': 'ASHRAE_2016',\n 'ASHRAE_2019': 'ASHRAE_2019',\n 'DOE Ref Pre-1980': 'DOE_Ref_Pre_1980',\n 'DOE Ref 1980-2004': 'DOE_Ref_1980_2004',\n '90.1-2004': 'ASHRAE_2004',\n '90.1-2007': 'ASHRAE_2007',\n '90.1-2010': 'ASHRAE_2010',\n '90.1-2013': 'ASHRAE_2013',\n 'pre_1980': 'DOE_Ref_Pre_1980',\n '1980_2004': 'DOE_Ref_1980_2004',\n '2004': 'ASHRAE_2004',\n '2007': 'ASHRAE_2007',\n '2010': 'ASHRAE_2010',\n '2013': 'ASHRAE_2013',\n '2016': 'ASHRAE_2016',\n '2019': 'ASHRAE_2019',\n None: 'ASHRAE_2019'\n}\n\n# dictionary of HVAC template names\next_folder = folders.standards_extension_folders[0]\nhvac_reg = os.path.join(ext_folder, 'hvac_registry.json')\nwith open(hvac_reg, 'r') as f:\n hvac_dict = json.load(f)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms = []\n for hb_obj in _rooms:\n if isinstance(hb_obj, Model):\n rooms.extend([room.duplicate() for room in hb_obj.rooms])\n elif isinstance(hb_obj, Room):\n rooms.append(hb_obj.duplicate())\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # process any input properties for the HVAC system\n try: # get the class for the HVAC system\n try:\n _sys_name = hvac_dict[_system_type]\n except KeyError:\n _sys_name = _system_type\n hvac_class = EQUIPMENT_TYPES_DICT[_sys_name]\n except KeyError:\n raise ValueError('System Type \"{}\" is not recognized as a DOAS HVAC '\n 'system.'.format(_system_type))\n vintage = vintages[_vintage_] # get the vintage of the HVAC\n name = clean_and_id_ep_string('DOAS HVAC') if _name_ is None else clean_ep_string(_name_)\n\n # create the HVAC\n hvac = hvac_class(name, vintage, _sys_name, sensible_hr_, latent_hr_, dcv_)\n if doas_avail_sch_ is not None:\n if isinstance(doas_avail_sch_, str):\n doas_avail_sch_ = schedule_by_identifier(doas_avail_sch_)\n hvac.doas_availability_schedule = doas_avail_sch_\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n vent_scheds = set()\n no_setp_rooms = []\n hvac_count = 0\n for room in rooms:\n if room.properties.energy.is_conditioned:\n room.properties.energy.hvac = hvac\n vent_obj = room.properties.energy.ventilation\n if vent_obj is not None:\n vent_scheds.add(vent_obj.schedule)\n if room.properties.energy.setpoint is None:\n no_setp_rooms.append(room.full_id)\n hvac_count += 1\n\n # give a warning if no rooms were conditioned or ventilation schedules are unequal\n if hvac_count == 0:\n msg = 'None of the connected Rooms are conditioned.\\n' \\\n 'Set rooms to be conditioned using the \"HB Set Conditioned\" component.'\n print(msg)\n give_warning(ghenv.Component, msg)\n if len(vent_scheds) > 1:\n msg = 'The system type uses a central air loop but not all of the ' \\\n 'rooms have the same ventilation schedule.\\n' \\\n 'All ventilation schedules will be ignored.'\n print(msg)\n give_warning(ghenv.Component, msg)\n\n # print a message if some of the rooms lack a setpoint specification\n if len(no_setp_rooms) != 0:\n msg = 'The following Rooms have the HVAC system assigned to them '\\\n 'but they lack a thermostat setpoint specification.\\nThese Rooms ' \\\n 'without setpoints will be treated as unconditioned in EnergyPlus '\\\n 'simulation.\\n{}'.format('\\n'.join(no_setp_rooms))\n print(msg)\n", "category": "HB-Energy", "name": "HB DOAS HVAC", "description": "Apply a Dedicated Outdoor Air System (DOAS) template HVAC to Honeybee Rooms.\n_\nDOAS systems separate minimum ventilation supply from the satisfaction of heating\n+ cooling demand. Ventilation air tends to be supplied at neutral temperatures\n(close to room air temperature) and heating / cooling loads are met with additional\npieces of zone equipment (eg. Fan Coil Units (FCUs)).\n_\nBecause DOAS systems only have to cool down and re-heat the minimum ventilation air,\nthey tend to use less energy than all-air systems. They also tend to use less energy\nto distribute heating + cooling by puping around hot/cold water or refrigerant\ninstead of blowing hot/cold air. However, they do not provide as good of control\nover humidity and so they may not be appropriate for rooms with high latent loads\nlike auditoriums, kitchens, laundromats, etc.\n-" diff --git a/honeybee_grasshopper_energy/json/HB_Detailed_HVAC.json b/honeybee_grasshopper_energy/json/HB_Detailed_HVAC.json index ffb79019..afc003cf 100644 --- a/honeybee_grasshopper_energy/json/HB_Detailed_HVAC.json +++ b/honeybee_grasshopper_energy/json/HB_Detailed_HVAC.json @@ -1,15 +1,8 @@ { - "version": "1.6.1", + "version": "1.6.2", "nickname": "DetailedHVAC", "outputs": [ [ - { - "access": "None", - "name": "report", - "description": "Reports, errors, warnings, etc.", - "type": null, - "default": null - }, { "access": "None", "name": "hb_objs", @@ -43,7 +36,7 @@ } ], "subcategory": "4 :: HVAC", - "code": "\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.detailed import DetailedHVAC\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\nif folders.ironbug_exe is None:\n msg = 'An installation of Ironbug that is compatible with this component\\n' \\\n 'was not found on this machine. This component will not be usable.'\n print(msg)\n give_warning(ghenv.Component, msg)\nelif folders.ironbug_version is not None:\n if folders.ironbug_version < (1, 9, 1):\n msg = 'Ironbug version \"{}\" is not compatible with this component.\\n' \\\n 'This component will not be usable.'.format(\n '.'.join([str(i) for i in folders.ironbug_version]))\n print(msg)\n give_warning(ghenv.Component, msg)\nelse:\n msg = 'An installation of Ironbug was found at: {}\\nbut it is not ' \\\n 'accessible. Contact your adminstrator.'.format(folders.ironbug_exe)\n print(msg)\n give_warning(ghenv.Component, msg)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms, hb_objs = [], []\n for hb_obj in _hb_objs:\n if isinstance(hb_obj, Model):\n new_obj = hb_obj.duplicate()\n hb_objs.append(new_obj)\n rooms.extend(new_obj.rooms)\n elif isinstance(hb_obj, Room):\n new_obj = hb_obj.duplicate()\n hb_objs.append(new_obj)\n rooms.append(new_obj)\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # create the HVAC\n name = clean_and_id_ep_string('Detailed HVAC') if _name_ is None else \\\n clean_ep_string(_name_)\n specification = json.loads(_hvac_system.ToJson())\n hvac = DetailedHVAC(name, specification)\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n hvac_rooms = set(hvac.thermal_zones)\n hvac_count, rel_rooms = 0, []\n for room in rooms:\n if room.identifier in hvac_rooms:\n room.properties.energy.hvac = hvac\n rel_rooms.append(room.identifier)\n hvac_count += 1\n\n # give a warning if no rooms were assigned the HVAC or if there are missing rooms\n if hvac_count == 0:\n msg = 'None of the connected Rooms are referenced under the Ironbug HVAC system.\\n' \\\n 'Make sure that the system has been set up with the correct Rooms.'\n print(msg)\n give_warning(ghenv.Component, msg)\n if len(rel_rooms) != len(hvac_rooms):\n missing_rooms = []\n found_rooms = set(rel_rooms)\n for rm_id in hvac_rooms:\n if rm_id not in found_rooms:\n missing_rooms.append(rm_id)\n msg = 'The Ironbug HVAC system contains the following rooms that are not ' \\\n 'in the connected _hb_objs.\\n{}'.format('\\n'.join(missing_rooms))\n print(msg)\n give_warning(ghenv.Component, msg)\n", + "code": "\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.detailed import DetailedHVAC\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\nif folders.ironbug_exe is None:\n msg = 'An installation of Ironbug that is compatible with this component\\n' \\\n 'was not found on this machine. This component will not be usable.'\n print(msg)\n give_warning(ghenv.Component, msg)\nelif folders.ironbug_version is not None:\n if folders.ironbug_version < (1, 9, 1):\n msg = 'Ironbug version \"{}\" is not compatible with this component.\\n' \\\n 'This component will not be usable.'.format(\n '.'.join([str(i) for i in folders.ironbug_version]))\n print(msg)\n give_warning(ghenv.Component, msg)\nelse:\n msg = 'An installation of Ironbug was found at: {}\\nbut it is not ' \\\n 'accessible. Contact your adminstrator.'.format(folders.ironbug_exe)\n print(msg)\n give_warning(ghenv.Component, msg)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms, hb_objs = [], []\n for hb_obj in _hb_objs:\n if isinstance(hb_obj, Model):\n new_obj = hb_obj.duplicate()\n hb_objs.append(new_obj)\n rooms.extend(new_obj.rooms)\n elif isinstance(hb_obj, Room):\n new_obj = hb_obj.duplicate()\n hb_objs.append(new_obj)\n rooms.append(new_obj)\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # create the HVAC\n name = clean_and_id_ep_string('Detailed HVAC') if _name_ is None else \\\n clean_ep_string(_name_)\n specification = json.loads(_hvac_system.ToJson())\n hvac = DetailedHVAC(name, specification)\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n hvac_rooms = set(hvac.thermal_zones)\n hvac_count, rel_rooms, no_setp_rooms = 0, [], []\n for room in rooms:\n if room.identifier in hvac_rooms:\n room.properties.energy.hvac = hvac\n rel_rooms.append(room.identifier)\n hvac_count += 1\n if room.properties.energy.setpoint is None:\n no_setp_rooms.append(room.full_id)\n\n # give a warning if no rooms were assigned the HVAC or if there are missing rooms\n if hvac_count == 0:\n msg = 'None of the connected Rooms are referenced under the Ironbug HVAC system.\\n' \\\n 'Make sure that the system has been set up with the correct Rooms.'\n print(msg)\n give_warning(ghenv.Component, msg)\n if len(rel_rooms) != len(hvac_rooms):\n missing_rooms = []\n found_rooms = set(rel_rooms)\n for rm_id in hvac_rooms:\n if rm_id not in found_rooms:\n missing_rooms.append(rm_id)\n msg = 'The Ironbug HVAC system contains the following rooms that are not ' \\\n 'in the connected _hb_objs.\\n{}'.format('\\n'.join(missing_rooms))\n print(msg)\n give_warning(ghenv.Component, msg)\n if len(no_setp_rooms) != 0:\n msg = 'The following Rooms have the HVAC system assigned to them '\\\n 'but they lack a thermostat setpoint specification.\\nSetpoints ' \\\n 'must be assigned to these Rooms in order to be simulate-able.\\n{}'.format(\n '\\n'.join(no_setp_rooms))\n print(msg)\n give_warning(ghenv.Component, msg)", "category": "HB-Energy", "name": "HB Detailed HVAC", "description": "Apply a detailed Ironbug HVAC to Honeybee Rooms or a Honeybee Model.\n-" diff --git a/honeybee_grasshopper_energy/json/HB_HeatCool_HVAC.json b/honeybee_grasshopper_energy/json/HB_HeatCool_HVAC.json index 157d984b..6e29168b 100644 --- a/honeybee_grasshopper_energy/json/HB_HeatCool_HVAC.json +++ b/honeybee_grasshopper_energy/json/HB_HeatCool_HVAC.json @@ -1,15 +1,8 @@ { - "version": "1.6.0", + "version": "1.6.1", "nickname": "HeatCoolHVAC", "outputs": [ [ - { - "access": "None", - "name": "report", - "description": "Reports, errors, warnings, etc.", - "type": null, - "default": null - }, { "access": "None", "name": "rooms", @@ -50,7 +43,7 @@ } ], "subcategory": "4 :: HVAC", - "code": "\nimport os\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.heatcool import EQUIPMENT_TYPES_DICT\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n# dictionary to get correct vintages\nvintages = {\n 'DOE_Ref_Pre_1980': 'DOE_Ref_Pre_1980',\n 'DOE_Ref_1980_2004': 'DOE_Ref_1980_2004',\n 'ASHRAE_2004': 'ASHRAE_2004',\n 'ASHRAE_2007': 'ASHRAE_2007',\n 'ASHRAE_2010': 'ASHRAE_2010',\n 'ASHRAE_2013': 'ASHRAE_2013',\n 'ASHRAE_2016': 'ASHRAE_2016',\n 'ASHRAE_2019': 'ASHRAE_2019',\n 'DOE Ref Pre-1980': 'DOE_Ref_Pre_1980',\n 'DOE Ref 1980-2004': 'DOE_Ref_1980_2004',\n '90.1-2004': 'ASHRAE_2004',\n '90.1-2007': 'ASHRAE_2007',\n '90.1-2010': 'ASHRAE_2010',\n '90.1-2013': 'ASHRAE_2013',\n 'pre_1980': 'DOE_Ref_Pre_1980',\n '1980_2004': 'DOE_Ref_1980_2004',\n '2004': 'ASHRAE_2004',\n '2007': 'ASHRAE_2007',\n '2010': 'ASHRAE_2010',\n '2013': 'ASHRAE_2013',\n '2016': 'ASHRAE_2016',\n '2019': 'ASHRAE_2019',\n None: 'ASHRAE_2019'\n }\n\n# dictionary of HVAC template names\next_folder = folders.standards_extension_folders[0]\nhvac_reg = os.path.join(ext_folder, 'hvac_registry.json')\nwith open(hvac_reg, 'r') as f:\n hvac_dict = json.load(f)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms = []\n for hb_obj in _rooms:\n if isinstance(hb_obj, Model):\n rooms.extend([room.duplicate() for room in hb_obj.rooms])\n elif isinstance(hb_obj, Room):\n rooms.append(hb_obj.duplicate())\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # process any input properties for the HVAC system\n try: # get the class for the HVAC system\n try:\n _sys_name = hvac_dict[_system_type]\n except KeyError:\n _sys_name = _system_type\n hvac_class = EQUIPMENT_TYPES_DICT[_sys_name]\n except KeyError:\n raise ValueError('System Type \"{}\" is not recognized as a HeatCool HVAC '\n 'system.'.format(_system_type))\n vintage = vintages[_vintage_] # get the vintage of the HVAC\n name = clean_and_id_ep_string('Heat-Cool HVAC') if _name_ is None else clean_ep_string(_name_)\n\n # create the HVAC\n hvac = hvac_class(name, vintage, _sys_name)\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n hvac_count = 0\n for room in rooms:\n if room.properties.energy.is_conditioned:\n room.properties.energy.hvac = hvac\n hvac_count += 1\n\n # give a warning if no rooms were conditioned\n if hvac_count == 0:\n msg = 'None of the connected Rooms are conditioned.\\n' \\\n 'Set rooms to be conditioned using the \"HB Set Conditioned\" component.'\n print(msg)\n give_warning(ghenv.Component, msg)\n", + "code": "\nimport os\nimport json\n\ntry: # import the honeybee extension\n from honeybee.typing import clean_and_id_ep_string, clean_ep_string\n from honeybee.model import Model\n from honeybee.room import Room\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry: # import the honeybee-energy extension\n from honeybee_energy.config import folders\n from honeybee_energy.hvac.heatcool import EQUIPMENT_TYPES_DICT\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_energy:\\n\\t{}'.format(e))\n\ntry:\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, give_warning\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n# dictionary to get correct vintages\nvintages = {\n 'DOE_Ref_Pre_1980': 'DOE_Ref_Pre_1980',\n 'DOE_Ref_1980_2004': 'DOE_Ref_1980_2004',\n 'ASHRAE_2004': 'ASHRAE_2004',\n 'ASHRAE_2007': 'ASHRAE_2007',\n 'ASHRAE_2010': 'ASHRAE_2010',\n 'ASHRAE_2013': 'ASHRAE_2013',\n 'ASHRAE_2016': 'ASHRAE_2016',\n 'ASHRAE_2019': 'ASHRAE_2019',\n 'DOE Ref Pre-1980': 'DOE_Ref_Pre_1980',\n 'DOE Ref 1980-2004': 'DOE_Ref_1980_2004',\n '90.1-2004': 'ASHRAE_2004',\n '90.1-2007': 'ASHRAE_2007',\n '90.1-2010': 'ASHRAE_2010',\n '90.1-2013': 'ASHRAE_2013',\n 'pre_1980': 'DOE_Ref_Pre_1980',\n '1980_2004': 'DOE_Ref_1980_2004',\n '2004': 'ASHRAE_2004',\n '2007': 'ASHRAE_2007',\n '2010': 'ASHRAE_2010',\n '2013': 'ASHRAE_2013',\n '2016': 'ASHRAE_2016',\n '2019': 'ASHRAE_2019',\n None: 'ASHRAE_2019'\n }\n\n# dictionary of HVAC template names\next_folder = folders.standards_extension_folders[0]\nhvac_reg = os.path.join(ext_folder, 'hvac_registry.json')\nwith open(hvac_reg, 'r') as f:\n hvac_dict = json.load(f)\n\n\nif all_required_inputs(ghenv.Component):\n # extract any rooms from input Models and duplicate the rooms\n rooms = []\n for hb_obj in _rooms:\n if isinstance(hb_obj, Model):\n rooms.extend([room.duplicate() for room in hb_obj.rooms])\n elif isinstance(hb_obj, Room):\n rooms.append(hb_obj.duplicate())\n else:\n raise ValueError(\n 'Expected Honeybee Room or Model. Got {}.'.format(type(hb_obj)))\n\n # process any input properties for the HVAC system\n try: # get the class for the HVAC system\n try:\n _sys_name = hvac_dict[_system_type]\n except KeyError:\n _sys_name = _system_type\n hvac_class = EQUIPMENT_TYPES_DICT[_sys_name]\n except KeyError:\n raise ValueError('System Type \"{}\" is not recognized as a HeatCool HVAC '\n 'system.'.format(_system_type))\n vintage = vintages[_vintage_] # get the vintage of the HVAC\n name = clean_and_id_ep_string('Heat-Cool HVAC') if _name_ is None else clean_ep_string(_name_)\n\n # create the HVAC\n hvac = hvac_class(name, vintage, _sys_name)\n if _name_ is not None:\n hvac.display_name = _name_\n\n # apply the HVAC system to the rooms\n no_setp_rooms = []\n hvac_count = 0\n for room in rooms:\n if room.properties.energy.is_conditioned:\n room.properties.energy.hvac = hvac\n hvac_count += 1\n if room.properties.energy.setpoint is None:\n no_setp_rooms.append(room.full_id)\n\n # give a warning if no rooms were conditioned\n if hvac_count == 0:\n msg = 'None of the connected Rooms are conditioned.\\n' \\\n 'Set rooms to be conditioned using the \"HB Set Conditioned\" component.'\n print(msg)\n give_warning(ghenv.Component, msg)\n\n # print a message if some of the rooms lack a setpoint specification\n if len(no_setp_rooms) != 0:\n msg = 'The following Rooms have the HVAC system assigned to them '\\\n 'but they lack a thermostat setpoint specification.\\nThese Rooms ' \\\n 'without setpoints will be treated as unconditioned in EnergyPlus '\\\n 'simulation.\\n{}'.format('\\n'.join(no_setp_rooms))\n print(msg)\n", "category": "HB-Energy", "name": "HB HeatCool HVAC", "description": "Apply a template system that only supplies heating and/or cooling (no ventilation)\nto Honeybee Rooms.\n_\nThese systems are only designed to satisfy heating + cooling demand and they\ncannot meet any minimum ventilation requirements.\n_\nAs such, these systems tend to be used in residential or storage settings where\nmeeting minimum ventilation requirements may not be required or the density\nof occupancy is so low that infiltration is enough to meet fresh air demand.\n-" diff --git a/honeybee_grasshopper_energy/src/HB All-Air HVAC.py b/honeybee_grasshopper_energy/src/HB All-Air HVAC.py index 2e91743f..9e885c7f 100644 --- a/honeybee_grasshopper_energy/src/HB All-Air HVAC.py +++ b/honeybee_grasshopper_energy/src/HB All-Air HVAC.py @@ -62,7 +62,7 @@ ghenv.Component.Name = "HB All-Air HVAC" ghenv.Component.NickName = 'AllAirHVAC' -ghenv.Component.Message = '1.6.0' +ghenv.Component.Message = '1.6.1' ghenv.Component.Category = 'HB-Energy' ghenv.Component.SubCategory = '4 :: HVAC' ghenv.Component.AdditionalHelpFromDocStrings = '2' @@ -162,13 +162,15 @@ hvac.display_name = _name_ # apply the HVAC system to the rooms - rel_rooms = [] + rel_rooms, no_setp_rooms = [], [] hvac_count = 0 for room in rooms: if room.properties.energy.is_conditioned: room.properties.energy.hvac = hvac rel_rooms.append(room) hvac_count += 1 + if room.properties.energy.setpoint is None: + no_setp_rooms.append(room.full_id) # give a warning if no rooms were conditioned if hvac_count == 0: @@ -189,3 +191,11 @@ 'rooms have the same ventilation schedule.\n' \ 'All ventilation schedules will be ignored.' give_warning(ghenv.Component, msg) + + # print a message if some of the rooms lack a setpoint specification + if len(no_setp_rooms) != 0: + msg = 'The following Rooms have the HVAC system assigned to them '\ + 'but they lack a thermostat setpoint specification.\nThese Rooms ' \ + 'without setpoints will be treated as unconditioned in EnergyPlus '\ + 'simulation.\n{}'.format('\n'.join(no_setp_rooms)) + print(msg) diff --git a/honeybee_grasshopper_energy/src/HB DOAS HVAC.py b/honeybee_grasshopper_energy/src/HB DOAS HVAC.py index 6f357903..d67ab59d 100644 --- a/honeybee_grasshopper_energy/src/HB DOAS HVAC.py +++ b/honeybee_grasshopper_energy/src/HB DOAS HVAC.py @@ -62,7 +62,7 @@ ghenv.Component.Name = "HB DOAS HVAC" ghenv.Component.NickName = 'DOASHVAC' -ghenv.Component.Message = '1.6.0' +ghenv.Component.Message = '1.6.1' ghenv.Component.Category = 'HB-Energy' ghenv.Component.SubCategory = '4 :: HVAC' ghenv.Component.AdditionalHelpFromDocStrings = '3' @@ -159,6 +159,7 @@ # apply the HVAC system to the rooms vent_scheds = set() + no_setp_rooms = [] hvac_count = 0 for room in rooms: if room.properties.energy.is_conditioned: @@ -166,6 +167,8 @@ vent_obj = room.properties.energy.ventilation if vent_obj is not None: vent_scheds.add(vent_obj.schedule) + if room.properties.energy.setpoint is None: + no_setp_rooms.append(room.full_id) hvac_count += 1 # give a warning if no rooms were conditioned or ventilation schedules are unequal @@ -180,3 +183,11 @@ 'All ventilation schedules will be ignored.' print(msg) give_warning(ghenv.Component, msg) + + # print a message if some of the rooms lack a setpoint specification + if len(no_setp_rooms) != 0: + msg = 'The following Rooms have the HVAC system assigned to them '\ + 'but they lack a thermostat setpoint specification.\nThese Rooms ' \ + 'without setpoints will be treated as unconditioned in EnergyPlus '\ + 'simulation.\n{}'.format('\n'.join(no_setp_rooms)) + print(msg) diff --git a/honeybee_grasshopper_energy/src/HB Detailed HVAC.py b/honeybee_grasshopper_energy/src/HB Detailed HVAC.py index 51193f60..31edf490 100644 --- a/honeybee_grasshopper_energy/src/HB Detailed HVAC.py +++ b/honeybee_grasshopper_energy/src/HB Detailed HVAC.py @@ -28,7 +28,7 @@ ghenv.Component.Name = "HB Detailed HVAC" ghenv.Component.NickName = 'DetailedHVAC' -ghenv.Component.Message = '1.6.1' +ghenv.Component.Message = '1.6.2' ghenv.Component.Category = 'HB-Energy' ghenv.Component.SubCategory = '4 :: HVAC' ghenv.Component.AdditionalHelpFromDocStrings = '0' @@ -98,12 +98,14 @@ # apply the HVAC system to the rooms hvac_rooms = set(hvac.thermal_zones) - hvac_count, rel_rooms = 0, [] + hvac_count, rel_rooms, no_setp_rooms = 0, [], [] for room in rooms: if room.identifier in hvac_rooms: room.properties.energy.hvac = hvac rel_rooms.append(room.identifier) hvac_count += 1 + if room.properties.energy.setpoint is None: + no_setp_rooms.append(room.full_id) # give a warning if no rooms were assigned the HVAC or if there are missing rooms if hvac_count == 0: @@ -121,3 +123,10 @@ 'in the connected _hb_objs.\n{}'.format('\n'.join(missing_rooms)) print(msg) give_warning(ghenv.Component, msg) + if len(no_setp_rooms) != 0: + msg = 'The following Rooms have the HVAC system assigned to them '\ + 'but they lack a thermostat setpoint specification.\nSetpoints ' \ + 'must be assigned to these Rooms in order to be simulate-able.\n{}'.format( + '\n'.join(no_setp_rooms)) + print(msg) + give_warning(ghenv.Component, msg) \ No newline at end of file diff --git a/honeybee_grasshopper_energy/src/HB HeatCool HVAC.py b/honeybee_grasshopper_energy/src/HB HeatCool HVAC.py index f98ab9d1..cbf645bf 100644 --- a/honeybee_grasshopper_energy/src/HB HeatCool HVAC.py +++ b/honeybee_grasshopper_energy/src/HB HeatCool HVAC.py @@ -41,7 +41,7 @@ ghenv.Component.Name = "HB HeatCool HVAC" ghenv.Component.NickName = 'HeatCoolHVAC' -ghenv.Component.Message = '1.6.0' +ghenv.Component.Message = '1.6.1' ghenv.Component.Category = 'HB-Energy' ghenv.Component.SubCategory = '4 :: HVAC' ghenv.Component.AdditionalHelpFromDocStrings = '4' @@ -132,11 +132,14 @@ hvac.display_name = _name_ # apply the HVAC system to the rooms + no_setp_rooms = [] hvac_count = 0 for room in rooms: if room.properties.energy.is_conditioned: room.properties.energy.hvac = hvac hvac_count += 1 + if room.properties.energy.setpoint is None: + no_setp_rooms.append(room.full_id) # give a warning if no rooms were conditioned if hvac_count == 0: @@ -144,3 +147,11 @@ 'Set rooms to be conditioned using the "HB Set Conditioned" component.' print(msg) give_warning(ghenv.Component, msg) + + # print a message if some of the rooms lack a setpoint specification + if len(no_setp_rooms) != 0: + msg = 'The following Rooms have the HVAC system assigned to them '\ + 'but they lack a thermostat setpoint specification.\nThese Rooms ' \ + 'without setpoints will be treated as unconditioned in EnergyPlus '\ + 'simulation.\n{}'.format('\n'.join(no_setp_rooms)) + print(msg) diff --git a/honeybee_grasshopper_energy/user_objects/HB All-Air HVAC.ghuser b/honeybee_grasshopper_energy/user_objects/HB All-Air HVAC.ghuser index 6ec8ff1b..99bbb7d9 100644 Binary files a/honeybee_grasshopper_energy/user_objects/HB All-Air HVAC.ghuser and b/honeybee_grasshopper_energy/user_objects/HB All-Air HVAC.ghuser differ diff --git a/honeybee_grasshopper_energy/user_objects/HB DOAS HVAC.ghuser b/honeybee_grasshopper_energy/user_objects/HB DOAS HVAC.ghuser index 885b94dc..88f40c11 100644 Binary files a/honeybee_grasshopper_energy/user_objects/HB DOAS HVAC.ghuser and b/honeybee_grasshopper_energy/user_objects/HB DOAS HVAC.ghuser differ diff --git a/honeybee_grasshopper_energy/user_objects/HB Detailed HVAC.ghuser b/honeybee_grasshopper_energy/user_objects/HB Detailed HVAC.ghuser index 1836c445..20e44c27 100644 Binary files a/honeybee_grasshopper_energy/user_objects/HB Detailed HVAC.ghuser and b/honeybee_grasshopper_energy/user_objects/HB Detailed HVAC.ghuser differ diff --git a/honeybee_grasshopper_energy/user_objects/HB HeatCool HVAC.ghuser b/honeybee_grasshopper_energy/user_objects/HB HeatCool HVAC.ghuser index d4292061..bc98dee4 100644 Binary files a/honeybee_grasshopper_energy/user_objects/HB HeatCool HVAC.ghuser and b/honeybee_grasshopper_energy/user_objects/HB HeatCool HVAC.ghuser differ