150 lines
4.8 KiB
Python
150 lines
4.8 KiB
Python
|
"""Support for stiebel_eltron climate platform."""
|
||
|
import logging
|
||
|
|
||
|
from homeassistant.components.climate import ClimateDevice
|
||
|
from homeassistant.components.climate.const import (
|
||
|
STATE_AUTO, STATE_ECO, STATE_MANUAL, SUPPORT_OPERATION_MODE,
|
||
|
SUPPORT_TARGET_TEMPERATURE)
|
||
|
from homeassistant.const import (
|
||
|
ATTR_TEMPERATURE, STATE_OFF, STATE_ON, TEMP_CELSIUS)
|
||
|
|
||
|
from . import DOMAIN as STE_DOMAIN
|
||
|
|
||
|
DEPENDENCIES = ['stiebel_eltron']
|
||
|
|
||
|
_LOGGER = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE
|
||
|
OPERATION_MODES = [STATE_AUTO, STATE_MANUAL, STATE_ECO, STATE_OFF]
|
||
|
|
||
|
# Mapping STIEBEL ELTRON states to homeassistant states.
|
||
|
STE_TO_HA_STATE = {'AUTOMATIC': STATE_AUTO,
|
||
|
'MANUAL MODE': STATE_MANUAL,
|
||
|
'STANDBY': STATE_ECO,
|
||
|
'DAY MODE': STATE_ON,
|
||
|
'SETBACK MODE': STATE_ON,
|
||
|
'DHW': STATE_OFF,
|
||
|
'EMERGENCY OPERATION': STATE_ON}
|
||
|
|
||
|
# Mapping homeassistant states to STIEBEL ELTRON states.
|
||
|
HA_TO_STE_STATE = {value: key for key, value in STE_TO_HA_STATE.items()}
|
||
|
|
||
|
|
||
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||
|
"""Set up the StiebelEltron platform."""
|
||
|
name = hass.data[STE_DOMAIN]['name']
|
||
|
ste_data = hass.data[STE_DOMAIN]['ste_data']
|
||
|
|
||
|
add_entities([StiebelEltron(name, ste_data)], True)
|
||
|
|
||
|
|
||
|
class StiebelEltron(ClimateDevice):
|
||
|
"""Representation of a STIEBEL ELTRON heat pump."""
|
||
|
|
||
|
def __init__(self, name, ste_data):
|
||
|
"""Initialize the unit."""
|
||
|
self._name = name
|
||
|
self._target_temperature = None
|
||
|
self._current_temperature = None
|
||
|
self._current_humidity = None
|
||
|
self._operation_modes = OPERATION_MODES
|
||
|
self._current_operation = None
|
||
|
self._filter_alarm = None
|
||
|
self._force_update = False
|
||
|
self._ste_data = ste_data
|
||
|
|
||
|
@property
|
||
|
def supported_features(self):
|
||
|
"""Return the list of supported features."""
|
||
|
return SUPPORT_FLAGS
|
||
|
|
||
|
def update(self):
|
||
|
"""Update unit attributes."""
|
||
|
self._ste_data.update(no_throttle=self._force_update)
|
||
|
self._force_update = False
|
||
|
|
||
|
self._target_temperature = self._ste_data.api.get_target_temp()
|
||
|
self._current_temperature = self._ste_data.api.get_current_temp()
|
||
|
self._current_humidity = self._ste_data.api.get_current_humidity()
|
||
|
self._filter_alarm = self._ste_data.api.get_filter_alarm_status()
|
||
|
self._current_operation = self._ste_data.api.get_operation()
|
||
|
|
||
|
_LOGGER.debug("Update %s, current temp: %s", self._name,
|
||
|
self._current_temperature)
|
||
|
|
||
|
@property
|
||
|
def device_state_attributes(self):
|
||
|
"""Return device specific state attributes."""
|
||
|
return {
|
||
|
'filter_alarm': self._filter_alarm
|
||
|
}
|
||
|
|
||
|
@property
|
||
|
def name(self):
|
||
|
"""Return the name of the climate device."""
|
||
|
return self._name
|
||
|
|
||
|
# Handle SUPPORT_TARGET_TEMPERATURE
|
||
|
@property
|
||
|
def temperature_unit(self):
|
||
|
"""Return the unit of measurement."""
|
||
|
return TEMP_CELSIUS
|
||
|
|
||
|
@property
|
||
|
def current_temperature(self):
|
||
|
"""Return the current temperature."""
|
||
|
return self._current_temperature
|
||
|
|
||
|
@property
|
||
|
def target_temperature(self):
|
||
|
"""Return the temperature we try to reach."""
|
||
|
return self._target_temperature
|
||
|
|
||
|
@property
|
||
|
def target_temperature_step(self):
|
||
|
"""Return the supported step of target temperature."""
|
||
|
return 0.1
|
||
|
|
||
|
@property
|
||
|
def min_temp(self):
|
||
|
"""Return the minimum temperature."""
|
||
|
return 10.0
|
||
|
|
||
|
@property
|
||
|
def max_temp(self):
|
||
|
"""Return the maximum temperature."""
|
||
|
return 30.0
|
||
|
|
||
|
def set_temperature(self, **kwargs):
|
||
|
"""Set new target temperature."""
|
||
|
target_temperature = kwargs.get(ATTR_TEMPERATURE)
|
||
|
if target_temperature is not None:
|
||
|
_LOGGER.debug("set_temperature: %s", target_temperature)
|
||
|
self._ste_data.api.set_target_temp(target_temperature)
|
||
|
self._force_update = True
|
||
|
|
||
|
@property
|
||
|
def current_humidity(self):
|
||
|
"""Return the current humidity."""
|
||
|
return float("{0:.1f}".format(self._current_humidity))
|
||
|
|
||
|
# Handle SUPPORT_OPERATION_MODE
|
||
|
@property
|
||
|
def operation_list(self):
|
||
|
"""List of the operation modes."""
|
||
|
return self._operation_modes
|
||
|
|
||
|
@property
|
||
|
def current_operation(self):
|
||
|
"""Return current operation ie. heat, cool, idle."""
|
||
|
return STE_TO_HA_STATE.get(self._current_operation)
|
||
|
|
||
|
def set_operation_mode(self, operation_mode):
|
||
|
"""Set new operation mode."""
|
||
|
new_mode = HA_TO_STE_STATE.get(operation_mode)
|
||
|
_LOGGER.debug("set_operation_mode: %s -> %s", self._current_operation,
|
||
|
new_mode)
|
||
|
self._ste_data.api.set_operation(new_mode)
|
||
|
self._force_update = True
|