Source code for honeybee_energy.hvac.allair.furnace

# coding=utf-8
"""Forced Air Furnace HVAC system."""
from __future__ import division

from ._base import _AllAirBase

from honeybee._lockable import lockable


[docs]@lockable class ForcedAirFurnace(_AllAirBase): """Forced Air Furnace HVAC system (aka. System 9 or 10). Forced air furnaces are intended only for spaces only requiring heating and ventilation. Each room/zone receives its own air loop with its own gas heating coil, which will supply air at a temperature up to 50C (122F) to meet the heating needs of the room/zone. Fans are constant volume. ForcedAirFurnace systems are the traditional baseline system for storage spaces that only require heating. Args: identifier: Text string for system identifier. Must be < 100 characters and not contain any EnergyPlus special characters. This will be used to identify the object across a model and in the exported IDF. vintage: Text for the vintage of the template system. This will be used to set efficiencies for various pieces of equipment within the system. Choose from the following. * DOE_Ref_Pre_1980 * DOE_Ref_1980_2004 * ASHRAE_2004 * ASHRAE_2007 * ASHRAE_2010 * ASHRAE_2013 * ASHRAE_2016 * ASHRAE_2019 equipment_type: Text for the specific type of the system and equipment. (Default: the first option below) Choose from. * Furnace * Furnace_Electric economizer_type: Text to indicate the type of air-side economizer used on the system. (Default: NoEconomizer). Choose from the following. * NoEconomizer * DifferentialDryBulb * DifferentialEnthalpy * DifferentialDryBulbAndEnthalpy * FixedDryBulb * FixedEnthalpy * ElectronicEnthalpy sensible_heat_recovery: A number between 0 and 1 for the effectiveness of sensible heat recovery within the system. (Default: 0). latent_heat_recovery: A number between 0 and 1 for the effectiveness of latent heat recovery within the system. (Default: 0). demand_controlled_ventilation: Boolean to note whether demand controlled ventilation should be used on the system, which will vary the amount of ventilation air according to the occupancy schedule of the Rooms. (Default: False). Properties: * identifier * display_name * vintage * equipment_type * economizer_type * sensible_heat_recovery * latent_heat_recovery * demand_controlled_ventilation * schedules * has_district_heating * has_district_cooling * user_data * properties Note: [1] American Society of Heating, Refrigerating and Air-Conditioning Engineers, Inc. (2007). Ashrae standard 90.1. Atlanta, GA. https://www.ashrae.org/\ technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards """ __slots__ = () EQUIPMENT_TYPES = ('Furnace', 'Furnace_Electric') _has_air_loop = False def __init__(self, identifier, vintage='ASHRAE_2019', equipment_type=None): """Initialize HVACSystem.""" # initialize base HVAC system properties _AllAirBase.__init__(self, identifier, vintage, equipment_type)
[docs] @classmethod def from_dict(cls, data): """Create a HVAC object from a dictionary. Args: data: A HVAC dictionary in following the format below. .. code-block:: python { "type": "", # text for the class name of the HVAC "identifier": "Classroom1_System", # identifier for the HVAC "display_name": "Standard System", # name for the HVAC "vintage": "ASHRAE_2019", # text for the vintage of the template "equipment_type": "" # text for the HVAC equipment type } """ assert cls.__name__ in data['type'], \ 'Expected {} dictionary. Got {}.'.format(cls.__name__, data['type']) new_obj = cls(data['identifier'], data['vintage'], data['equipment_type']) if 'display_name' in data and data['display_name'] is not None: new_obj.display_name = data['display_name'] return new_obj
[docs] @classmethod def from_dict_abridged(cls, data, schedule_dict): """Create a HVAC object from an abridged dictionary. Args: data: An abridged dictionary in following the format below. schedule_dict: A dictionary with schedule identifiers as keys and honeybee schedule objects as values (either ScheduleRuleset or ScheduleFixedInterval). These will be used to assign the schedules to the Setpoint object. .. code-block:: python { "type": "", # text for the class name of the HVAC "identifier": "Classroom1_System", # identifier for the HVAC "display_name": "Standard System", # name for the HVAC "vintage": "ASHRAE_2019", # text for the vintage of the template "equipment_type": "" # text for the HVAC equipment type } """ # this is the same as the from_dict method for as long as there are not schedules return cls.from_dict(data)
[docs] def to_dict(self, abridged=False): """All air system dictionary representation. Args: abridged: Boolean to note whether the full dictionary describing the object should be returned (False) or just an abridged version (True). This input currently has no effect but may eventually have one if schedule-type properties are exposed on this template. """ base = {'type': self.__class__.__name__} base['identifier'] = self.identifier if self._display_name is not None: base['display_name'] = self.display_name base['vintage'] = self.vintage base['equipment_type'] = self.equipment_type return base
def __copy__(self): new_obj = self.__class__(self.identifier, self.vintage, self.equipment_type) new_obj._display_name = self._display_name return new_obj def __key(self): """A tuple based on the object properties, useful for hashing.""" return (self._identifier, self._vintage, self._equipment_type)