diff --git a/homeassistant/components/thermostat/honeywell.py b/homeassistant/components/thermostat/honeywell.py index 2d724502d85..4139c5d8aa7 100644 --- a/homeassistant/components/thermostat/honeywell.py +++ b/homeassistant/components/thermostat/honeywell.py @@ -1,7 +1,7 @@ """ homeassistant.components.thermostat.honeywell ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Adds support for Honeywell Round Connected thermostats. +Adds support for Honeywell Round Connected and Honeywell Evohome thermostats. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/thermostat.honeywell/ @@ -11,7 +11,7 @@ import logging from homeassistant.components.thermostat import ThermostatDevice from homeassistant.const import (CONF_USERNAME, CONF_PASSWORD, TEMP_CELCIUS) -REQUIREMENTS = ['evohomeclient==0.2.3'] +REQUIREMENTS = ['evohomeclient==0.2.4'] _LOGGER = logging.getLogger(__name__) @@ -31,7 +31,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None): evo_api = EvohomeClient(username, password) try: - add_devices([RoundThermostat(evo_api)]) + zones = evo_api.temperatures(force_refresh=True) + for i, zone in enumerate(zones): + add_devices([RoundThermostat(evo_api, zone['id'], i == 0)]) except socket.error: _LOGGER.error( "Connection error logging into the honeywell evohome web service" @@ -42,11 +44,14 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class RoundThermostat(ThermostatDevice): """ Represents a Honeywell Round Connected thermostat. """ - def __init__(self, device): + def __init__(self, device, zone_id, master): self.device = device self._current_temperature = None self._target_temperature = None self._name = "round connected" + self._id = zone_id + self._master = master + self._is_dhw = False self.update() @property @@ -67,6 +72,8 @@ class RoundThermostat(ThermostatDevice): @property def target_temperature(self): """ Returns the temperature we try to reach. """ + if self._is_dhw: + return None return self._target_temperature def set_temperature(self, temperature): @@ -74,10 +81,13 @@ class RoundThermostat(ThermostatDevice): self.device.set_temperature(self._name, temperature) def update(self): - """ Update the data from the thermostat. """ try: - # Only take first thermostat data from API for now - data = next(self.device.temperatures(force_refresh=True)) + # Only refresh if this is the "master" device, + # others will pick up the cache + for val in self.device.temperatures(force_refresh=self._master): + if val['id'] == self._id: + data = val + except StopIteration: _LOGGER.error("Did not receive any temperature data from the " "evohomeclient API.") @@ -85,4 +95,9 @@ class RoundThermostat(ThermostatDevice): self._current_temperature = data['temp'] self._target_temperature = data['setpoint'] - self._name = data['name'] + if data['thermostat'] == "DOMESTIC_HOT_WATER": + self._name = "Hot Water" + self._is_dhw = True + else: + self._name = data['name'] + self._is_dhw = False