Source code for honeybee_openstudio.hvac.idealair
# coding=utf-8
"""OpenStudio IdealLoadsAirSystem translator."""
from __future__ import division
from honeybee.altnumber import no_limit
from honeybee.typing import clean_ep_string
from honeybee_energy.altnumber import autosize
from honeybee_energy.hvac.idealair import IdealAirSystem
from honeybee_openstudio.openstudio import OSZoneHVACIdealLoadsAirSystem
[docs]
def ideal_air_system_to_openstudio(hvac, os_model, room=None):
"""Convert Honeybee IdealAirSystem to OpenStudio ZoneHVACIdealLoadsAirSystem.
Args:
hvac: A Honeybee-energy IdealAirSystem to be translated to OpenStudio.
os_model: The OpenStudio Model object to which the IdealAirSystem
will be added.
room: An optional Honeybee Room to be used to set various properties
of the system (including the EnergyPlus name, and humidity control).
"""
# create openstudio ideal air system object
os_ideal_air = OSZoneHVACIdealLoadsAirSystem(os_model)
if room is None:
os_ideal_air.setName(hvac.identifier)
else:
os_ideal_air.setName('{} Ideal Loads Air System'.format(room.identifier))
if hvac._display_name is not None:
os_ideal_air.setDisplayName(hvac.display_name)
# assign the dehumidification based on the room
os_ideal_air.setDehumidificationControlType('None') # default when no humidistat
if room is not None:
setpoint = room.properties.energy.setpoint
if setpoint.humidifying_schedule is not None:
os_ideal_air.setDehumidificationControlType('Humidistat')
os_ideal_air.setHumidificationControlType('Humidistat')
# assign the economizer type
os_ideal_air.setOutdoorAirEconomizerType(hvac.economizer_type)
# set the sensible and latent heat recovery
if hvac.sensible_heat_recovery != 0:
os_ideal_air.setSensibleHeatRecoveryEffectiveness(hvac.sensible_heat_recovery)
os_ideal_air.setHeatRecoveryType('Sensible')
else:
os_ideal_air.setSensibleHeatRecoveryEffectiveness(0)
if hvac.latent_heat_recovery != 0:
os_ideal_air.setLatentHeatRecoveryEffectiveness(hvac.latent_heat_recovery)
os_ideal_air.setHeatRecoveryType('Enthalpy')
else:
os_ideal_air.setLatentHeatRecoveryEffectiveness(0)
# assign the demand controlled ventilation
if hvac.demand_controlled_ventilation:
os_ideal_air.setDemandControlledVentilationType('OccupancySchedule')
else:
os_ideal_air.setDemandControlledVentilationType('None')
# set the heating and cooling supply air temperature
os_ideal_air.setMaximumHeatingSupplyAirTemperature(hvac.heating_air_temperature)
os_ideal_air.setMinimumCoolingSupplyAirTemperature(hvac.cooling_air_temperature)
# assign limits to the system's heating capacity
if hvac.heating_limit == no_limit:
os_ideal_air.setHeatingLimit('NoLimit')
else:
os_ideal_air.setHeatingLimit('LimitCapacity')
if hvac.heating_limit == autosize:
os_ideal_air.autosizeMaximumSensibleHeatingCapacity()
else:
os_ideal_air.setMaximumSensibleHeatingCapacity(hvac.heating_limit)
# assign limits to the system's cooling capacity
if hvac.cooling_limit == no_limit:
os_ideal_air.setCoolingLimit('NoLimit')
else:
os_ideal_air.setCoolingLimit('LimitFlowRateAndCapacity')
if hvac.cooling_limit == autosize:
os_ideal_air.autosizeMaximumTotalCoolingCapacity()
os_ideal_air.autosizeMaximumCoolingAirFlowRate()
else:
os_ideal_air.setMaximumTotalCoolingCapacity(hvac.cooling_limit)
os_ideal_air.autosizeMaximumCoolingAirFlowRate()
# assign heating availability schedule
if hvac.heating_availability is not None:
os_schedule = os_model.getScheduleByName(hvac.heating_availability.identifier)
if os_schedule.is_initialized():
os_schedule = os_schedule.get()
os_ideal_air.setHeatingAvailabilitySchedule(os_schedule)
# assign cooling availability schedule
if hvac.cooling_availability is not None:
os_schedule = os_model.getScheduleByName(hvac.cooling_availability.identifier)
if os_schedule.is_initialized():
os_schedule = os_schedule.get()
os_ideal_air.setCoolingAvailabilitySchedule(os_schedule)
return os_ideal_air
[docs]
def ideal_air_system_from_openstudio(os_hvac, schedules=None):
"""Convert OpenStudio ZoneHVACIdealLoadsAirSystem to Honeybee IdealAirSystem."""
hvac = IdealAirSystem(clean_ep_string(os_hvac.nameString()))
hvac.economizer_type = os_hvac.outdoorAirEconomizerType()
hvac.demand_controlled_ventilation = False \
if os_hvac.demandControlledVentilationType().lower() in ('none', '') else True
hvac.sensible_heat_recovery = os_hvac.sensibleHeatRecoveryEffectiveness()
hvac.latent_heat_recovery = os_hvac.latentHeatRecoveryEffectiveness()
hvac.heating_air_temperature = os_hvac.maximumHeatingSupplyAirTemperature()
hvac.cooling_air_temperature = os_hvac.minimumCoolingSupplyAirTemperature()
if not os_hvac.isHeatingLimitDefaulted():
if os_hvac.heatingLimit().lower() == 'nolimit':
hvac.heating_limit = no_limit
elif os_hvac.heatingLimit().lower() == 'limitcapacity':
if os_hvac.isMaximumSensibleHeatingCapacityAutosized():
hvac.heating_limit = autosize
elif os_hvac.maximumSensibleHeatingCapacity().is_initialized():
hvac.heating_limit = os_hvac.maximumSensibleHeatingCapacity().get()
if not os_hvac.isCoolingLimitDefaulted():
if os_hvac.coolingLimit().lower() == 'nolimit':
hvac.cooling_limit = no_limit
elif os_hvac.coolingLimit().lower() == 'limitcapacity':
if hvac.isMaximumTotalCoolingCapacityAutosized():
hvac.cooling_limit = autosize
elif os_hvac.maximumTotalCoolingCapacity().is_initialized():
hvac.cooling_limit = os_hvac.maximumTotalCoolingCapacity()
if schedules is not None and os_hvac.heatingAvailabilitySchedule().is_initialized():
schedule = os_hvac.heatingAvailabilitySchedule().get()
try:
hvac.heating_availability = schedules[schedule.nameString()]
except KeyError:
pass
if schedules is not None and os_hvac.coolingAvailabilitySchedule().is_initialized():
schedule = os_hvac.coolingAvailabilitySchedule().get()
try:
hvac.cooling_availability = schedules[schedule.nameString()]
except KeyError:
pass
if os_hvac.displayName().is_initialized():
hvac.display_name = os_hvac.displayName().get()
return hvac