Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 58 additions & 6 deletions homeassistant/components/climate/ephember.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,35 @@
import voluptuous as vol

from homeassistant.components.climate import (
ClimateDevice, PLATFORM_SCHEMA, STATE_HEAT, STATE_IDLE, SUPPORT_AUX_HEAT,
ClimateDevice, PLATFORM_SCHEMA, STATE_HEAT, STATE_OFF,
STATE_AUTO, SUPPORT_AUX_HEAT, SUPPORT_OPERATION_MODE,
SUPPORT_TARGET_TEMPERATURE)
from homeassistant.const import (
TEMP_CELSIUS, CONF_USERNAME, CONF_PASSWORD, ATTR_TEMPERATURE)
import homeassistant.helpers.config_validation as cv

REQUIREMENTS = ['pyephember==0.1.1']
REQUIREMENTS = ['pyephember==0.2.0']

_LOGGER = logging.getLogger(__name__)

# Return cached results if last scan was less then this time ago
SCAN_INTERVAL = timedelta(seconds=120)

OPERATION_LIST = [STATE_AUTO, STATE_HEAT, STATE_OFF]

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string
})

EPH_TO_HA_STATE = {
'AUTO': STATE_AUTO,
'ON': STATE_HEAT,
'OFF': STATE_OFF
}

HA_STATE_TO_EPH = {value: key for key, value in EPH_TO_HA_STATE.items()}


def setup_platform(hass, config, add_devices, discovery_info=None):
"""Set up the ephember thermostat."""
Expand Down Expand Up @@ -61,9 +72,11 @@ def __init__(self, ember, zone):
def supported_features(self):
"""Return the list of supported features."""
if self._hot_water:
return SUPPORT_AUX_HEAT
return SUPPORT_AUX_HEAT | SUPPORT_OPERATION_MODE

return SUPPORT_TARGET_TEMPERATURE | SUPPORT_AUX_HEAT
return (SUPPORT_TARGET_TEMPERATURE |
SUPPORT_AUX_HEAT |
SUPPORT_OPERATION_MODE)

@property
def name(self):
Expand Down Expand Up @@ -93,12 +106,40 @@ def target_temperature_step(self):

return 1

@property
def device_state_attributes(self):
"""Show Device Attributes."""
attributes = {
'currently_active': self._zone['isCurrentlyActive']
}
return attributes

@property
def current_operation(self):
"""Return current operation ie. heat, cool, idle."""
mode = self._ember.get_zone_mode(self._zone_name)
return self.map_mode_eph_hass(mode)

@property
def operation_list(self):
"""Return the supported operations."""
return OPERATION_LIST

def set_operation_mode(self, operation_mode):
"""Set the operation mode."""
mode = self.map_mode_hass_eph(operation_mode)
if mode is not None:
self._ember.set_mode_by_name(self._zone_name, mode)
else:
_LOGGER.error("Invalid operation mode provided %s", operation_mode)

@property
def is_on(self):
"""Return current state."""
if self._zone['isCurrentlyActive']:
return STATE_HEAT
return STATE_IDLE
return True

return None

@property
def is_aux_heat_on(self):
Expand Down Expand Up @@ -152,3 +193,14 @@ def max_temp(self):
def update(self):
"""Get the latest data."""
self._zone = self._ember.get_zone(self._zone_name)

@staticmethod
def map_mode_hass_eph(operation_mode):
"""Map from home assistant mode to eph mode."""
from pyephember.pyephember import ZoneMode
return getattr(ZoneMode, HA_STATE_TO_EPH.get(operation_mode), None)

@staticmethod
def map_mode_eph_hass(operation_mode):
"""Map from eph mode to home assistant mode."""
return EPH_TO_HA_STATE.get(operation_mode.name, STATE_AUTO)
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -826,7 +826,7 @@ pyemby==1.5
pyenvisalink==2.2

# homeassistant.components.climate.ephember
pyephember==0.1.1
pyephember==0.2.0

# homeassistant.components.sensor.fido
pyfido==2.1.1
Expand Down