Skip to content

Commit

Permalink
Add Tado water_heater (home-assistant#30095)
Browse files Browse the repository at this point in the history
* Add Tado water_heater

* Don't use climate CONSTS

* Fix logging text

* Add changes for multiple bridge support

* Address remarks

* should_poll must be False

* Remove additional async_schedule_update_ha_state()

* Not for climate
  • Loading branch information
michaelarnauts authored Feb 15, 2020
1 parent 1609e33 commit b8f9ff7
Show file tree
Hide file tree
Showing 4 changed files with 343 additions and 36 deletions.
2 changes: 1 addition & 1 deletion homeassistant/components/tado/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

SIGNAL_TADO_UPDATE_RECEIVED = "tado_update_received_{}_{}"

TADO_COMPONENTS = ["sensor", "climate"]
TADO_COMPONENTS = ["sensor", "climate", "water_heater"]

MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=10)
SCAN_INTERVAL = timedelta(seconds=15)
Expand Down
67 changes: 34 additions & 33 deletions homeassistant/components/tado/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,39 +25,42 @@
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect

from . import DATA, DOMAIN, SIGNAL_TADO_UPDATE_RECEIVED
from . import DOMAIN, SIGNAL_TADO_UPDATE_RECEIVED
from .const import (
CONST_MODE_OFF,
CONST_MODE_SMART_SCHEDULE,
CONST_OVERLAY_MANUAL,
CONST_OVERLAY_TADO_MODE,
CONST_OVERLAY_TIMER,
DATA,
TYPE_AIR_CONDITIONING,
TYPE_HEATING,
)

_LOGGER = logging.getLogger(__name__)

FAN_MAP_TADO = {"HIGH": FAN_HIGH, "MIDDLE": FAN_MIDDLE, "LOW": FAN_LOW}

HVAC_MAP_TADO_HEAT = {
"MANUAL": HVAC_MODE_HEAT,
"TIMER": HVAC_MODE_HEAT,
"TADO_MODE": HVAC_MODE_HEAT,
"SMART_SCHEDULE": HVAC_MODE_AUTO,
"OFF": HVAC_MODE_OFF,
CONST_OVERLAY_MANUAL: HVAC_MODE_HEAT,
CONST_OVERLAY_TIMER: HVAC_MODE_HEAT,
CONST_OVERLAY_TADO_MODE: HVAC_MODE_HEAT,
CONST_MODE_SMART_SCHEDULE: HVAC_MODE_AUTO,
CONST_MODE_OFF: HVAC_MODE_OFF,
}
HVAC_MAP_TADO_COOL = {
"MANUAL": HVAC_MODE_COOL,
"TIMER": HVAC_MODE_COOL,
"TADO_MODE": HVAC_MODE_COOL,
"SMART_SCHEDULE": HVAC_MODE_AUTO,
"OFF": HVAC_MODE_OFF,
CONST_OVERLAY_MANUAL: HVAC_MODE_COOL,
CONST_OVERLAY_TIMER: HVAC_MODE_COOL,
CONST_OVERLAY_TADO_MODE: HVAC_MODE_COOL,
CONST_MODE_SMART_SCHEDULE: HVAC_MODE_AUTO,
CONST_MODE_OFF: HVAC_MODE_OFF,
}
HVAC_MAP_TADO_HEAT_COOL = {
"MANUAL": HVAC_MODE_HEAT_COOL,
"TIMER": HVAC_MODE_HEAT_COOL,
"TADO_MODE": HVAC_MODE_HEAT_COOL,
"SMART_SCHEDULE": HVAC_MODE_AUTO,
"OFF": HVAC_MODE_OFF,
CONST_OVERLAY_MANUAL: HVAC_MODE_HEAT_COOL,
CONST_OVERLAY_TIMER: HVAC_MODE_HEAT_COOL,
CONST_OVERLAY_TADO_MODE: HVAC_MODE_HEAT_COOL,
CONST_MODE_SMART_SCHEDULE: HVAC_MODE_AUTO,
CONST_MODE_OFF: HVAC_MODE_OFF,
}

SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE
Expand All @@ -70,14 +73,18 @@

def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the Tado climate platform."""
if discovery_info is None:
return

api_list = hass.data[DOMAIN][DATA]
entities = []

for tado in api_list:
for zone in tado.zones:
entity = create_climate_entity(tado, zone["name"], zone["id"])
if entity:
entities.append(entity)
if zone["type"] in [TYPE_HEATING, TYPE_AIR_CONDITIONING]:
entity = create_climate_entity(tado, zone["name"], zone["id"])
if entity:
entities.append(entity)

if entities:
add_entities(entities, True)
Expand Down Expand Up @@ -154,11 +161,9 @@ def __init__(
self._target_temp = None

if tado.fallback:
_LOGGER.debug("Default overlay is set to TADO MODE")
# Fallback to Smart Schedule at next Schedule switch
self._default_overlay = CONST_OVERLAY_TADO_MODE
else:
_LOGGER.debug("Default overlay is set to MANUAL MODE")
# Don't fallback to Smart Schedule, but keep in manual mode
self._default_overlay = CONST_OVERLAY_MANUAL

Expand Down Expand Up @@ -354,11 +359,7 @@ def max_temp(self):
def update(self):
"""Handle update callbacks."""
_LOGGER.debug("Updating climate platform for zone %d", self.zone_id)
try:
data = self._tado.data["zone"][self.zone_id]
except KeyError:
_LOGGER.debug("No data")
return
data = self._tado.data["zone"][self.zone_id]

if "sensorDataPoints" in data:
sensor_data = data["sensorDataPoints"]
Expand All @@ -371,13 +372,13 @@ def update(self):
humidity = float(sensor_data["humidity"]["percentage"])
self._cur_humidity = humidity

# temperature setting will not exist when device is off
if (
"temperature" in data["setting"]
and data["setting"]["temperature"] is not None
):
setting = float(data["setting"]["temperature"]["celsius"])
self._target_temp = setting
# temperature setting will not exist when device is off
if (
"temperature" in data["setting"]
and data["setting"]["temperature"] is not None
):
setting = float(data["setting"]["temperature"]["celsius"])
self._target_temp = setting

if "tadoMode" in data:
mode = data["tadoMode"]
Expand Down
8 changes: 6 additions & 2 deletions homeassistant/components/tado/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
"domain": "tado",
"name": "Tado",
"documentation": "https://www.home-assistant.io/integrations/tado",
"requirements": ["python-tado==0.2.9"],
"requirements": [
"python-tado==0.2.9"
],
"dependencies": [],
"codeowners": ["@michaelarnauts"]
"codeowners": [
"@michaelarnauts"
]
}
Loading

0 comments on commit b8f9ff7

Please sign in to comment.