From 5fc0e00eada8f177d4df396c998333e6f809f89b Mon Sep 17 00:00:00 2001 From: Alan Tse Date: Tue, 14 Apr 2020 10:27:07 -0700 Subject: [PATCH] Add defrost preset mode to Tesla (#34186) * style: update logging details * Add defrost preset mode to Tesla * Bump teslajsonpy to 0.7.0 --- homeassistant/components/tesla/climate.py | 34 ++++++++++++++++++-- homeassistant/components/tesla/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/tesla/climate.py b/homeassistant/components/tesla/climate.py index d438f94f4c3..5ba6f182c0a 100644 --- a/homeassistant/components/tesla/climate.py +++ b/homeassistant/components/tesla/climate.py @@ -1,10 +1,14 @@ """Support for Tesla HVAC system.""" import logging +from typing import List, Optional + +from teslajsonpy.exceptions import UnknownPresetMode from homeassistant.components.climate import ClimateDevice from homeassistant.components.climate.const import ( HVAC_MODE_HEAT_COOL, HVAC_MODE_OFF, + SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, ) from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT @@ -45,7 +49,7 @@ class TeslaThermostat(TeslaDevice, ClimateDevice): @property def supported_features(self): """Return the list of supported features.""" - return SUPPORT_TARGET_TEMPERATURE + return SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE @property def hvac_mode(self): @@ -93,15 +97,39 @@ class TeslaThermostat(TeslaDevice, ClimateDevice): async def async_set_temperature(self, **kwargs): """Set new target temperatures.""" - _LOGGER.debug("Setting temperature for: %s", self._name) temperature = kwargs.get(ATTR_TEMPERATURE) if temperature: + _LOGGER.debug("%s: Setting temperature to %s", self._name, temperature) await self.tesla_device.set_temperature(temperature) async def async_set_hvac_mode(self, hvac_mode): """Set new target hvac mode.""" - _LOGGER.debug("Setting mode for: %s", self._name) + _LOGGER.debug("%s: Setting hvac mode to %s", self._name, hvac_mode) if hvac_mode == HVAC_MODE_OFF: await self.tesla_device.set_status(False) elif hvac_mode == HVAC_MODE_HEAT_COOL: await self.tesla_device.set_status(True) + + async def async_set_preset_mode(self, preset_mode: str) -> None: + """Set new preset mode.""" + _LOGGER.debug("%s: Setting preset_mode to: %s", self.name, preset_mode) + try: + await self.tesla_device.set_preset_mode(preset_mode) + except UnknownPresetMode as ex: + _LOGGER.error("%s", ex.message) + + @property + def preset_mode(self) -> Optional[str]: + """Return the current preset mode, e.g., home, away, temp. + + Requires SUPPORT_PRESET_MODE. + """ + return self.tesla_device.preset_mode + + @property + def preset_modes(self) -> Optional[List[str]]: + """Return a list of available preset modes. + + Requires SUPPORT_PRESET_MODE. + """ + return self.tesla_device.preset_modes diff --git a/homeassistant/components/tesla/manifest.json b/homeassistant/components/tesla/manifest.json index d977e24bfec..ec100733a53 100644 --- a/homeassistant/components/tesla/manifest.json +++ b/homeassistant/components/tesla/manifest.json @@ -3,6 +3,6 @@ "name": "Tesla", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tesla", - "requirements": ["teslajsonpy==0.6.0"], + "requirements": ["teslajsonpy==0.7.0"], "codeowners": ["@zabuldon", "@alandtse"] } diff --git a/requirements_all.txt b/requirements_all.txt index 6b323191e56..8c1e230759a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2020,7 +2020,7 @@ temperusb==1.5.3 tesla-powerwall==0.2.3 # homeassistant.components.tesla -teslajsonpy==0.6.0 +teslajsonpy==0.7.0 # homeassistant.components.thermoworks_smoke thermoworks_smoke==0.1.8 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 96a69be4786..109f387dc7d 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -756,7 +756,7 @@ tellduslive==0.10.10 tesla-powerwall==0.2.3 # homeassistant.components.tesla -teslajsonpy==0.6.0 +teslajsonpy==0.7.0 # homeassistant.components.toon toonapilib==3.2.4