Use entity class attributes for ambiclimate (#52521)

* Use entity class attributes for ambiclimate

* tweak

* move some stuff
This commit is contained in:
Robert Hillis 2021-07-05 01:51:10 -04:00 committed by GitHub
parent abc9b01ede
commit 3a2a688170
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 76 deletions

View file

@ -20,7 +20,7 @@ CONFIG_SCHEMA = vol.Schema(
)
async def async_setup(hass, config):
async def async_setup(hass, config) -> bool:
"""Set up Ambiclimate components."""
if DOMAIN not in config:
return True
@ -34,7 +34,7 @@ async def async_setup(hass, config):
return True
async def async_setup_entry(hass, entry):
async def async_setup_entry(hass, entry) -> bool:
"""Set up Ambiclimate from a config entry."""
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, "climate")

View file

@ -137,92 +137,33 @@ async def async_setup_entry(hass, entry, async_add_entities):
class AmbiclimateEntity(ClimateEntity):
"""Representation of a Ambiclimate Thermostat device."""
_attr_temperature_unit = TEMP_CELSIUS
_attr_target_temperature_step = 1
_attr_supported_features = SUPPORT_FLAGS
_attr_hvac_modes = [HVAC_MODE_HEAT, HVAC_MODE_OFF]
def __init__(self, heater, store):
"""Initialize the thermostat."""
self._heater = heater
self._store = store
self._data = {}
@property
def unique_id(self):
"""Return a unique ID."""
return self._heater.device_id
@property
def name(self):
"""Return the name of the entity."""
return self._heater.name
@property
def device_info(self):
"""Return the device info."""
return {
self._attr_unique_id = self._heater.device_id
self._attr_name = self._heater.name
self._attr_device_info = {
"identifiers": {(DOMAIN, self.unique_id)},
"name": self.name,
"manufacturer": "Ambiclimate",
}
self._attr_min_temp = self._heater.get_min_temp()
self._attr_max_temp = self._heater.get_max_temp()
@property
def temperature_unit(self):
"""Return the unit of measurement which this thermostat uses."""
return TEMP_CELSIUS
@property
def target_temperature(self):
"""Return the target temperature."""
return self._data.get("target_temperature")
@property
def target_temperature_step(self):
"""Return the supported step of target temperature."""
return 1
@property
def current_temperature(self):
"""Return the current temperature."""
return self._data.get("temperature")
@property
def current_humidity(self):
"""Return the current humidity."""
return self._data.get("humidity")
@property
def min_temp(self):
"""Return the minimum temperature."""
return self._heater.get_min_temp()
@property
def max_temp(self):
"""Return the maximum temperature."""
return self._heater.get_max_temp()
@property
def supported_features(self):
"""Return the list of supported features."""
return SUPPORT_FLAGS
@property
def hvac_modes(self):
"""Return the list of available hvac operation modes."""
return [HVAC_MODE_HEAT, HVAC_MODE_OFF]
@property
def hvac_mode(self):
"""Return current operation."""
if self._data.get("power", "").lower() == "on":
return HVAC_MODE_HEAT
return HVAC_MODE_OFF
async def async_set_temperature(self, **kwargs):
async def async_set_temperature(self, **kwargs) -> None:
"""Set new target temperature."""
temperature = kwargs.get(ATTR_TEMPERATURE)
if temperature is None:
return
await self._heater.set_target_temperature(temperature)
async def async_set_hvac_mode(self, hvac_mode):
async def async_set_hvac_mode(self, hvac_mode) -> None:
"""Set new target hvac mode."""
if hvac_mode == HVAC_MODE_HEAT:
await self._heater.turn_on()
@ -230,7 +171,7 @@ class AmbiclimateEntity(ClimateEntity):
if hvac_mode == HVAC_MODE_OFF:
await self._heater.turn_off()
async def async_update(self):
async def async_update(self) -> None:
"""Retrieve latest state."""
try:
token_info = await self._heater.control.refresh_access_token()
@ -241,4 +182,10 @@ class AmbiclimateEntity(ClimateEntity):
if token_info:
await self._store.async_save(token_info)
self._data = await self._heater.update_device()
data = await self._heater.update_device()
self._attr_target_temperature = data.get("target_temperature")
self._attr_current_temperature = data.get("temperature")
self._attr_current_humidity = data.get("humidity")
self._attr_hvac_mode = (
HVAC_MODE_HEAT if data.get("power", "").lower() == "on" else HVAC_MODE_OFF
)

View file

@ -139,7 +139,7 @@ class AmbiclimateAuthCallbackView(HomeAssistantView):
url = AUTH_CALLBACK_PATH
name = AUTH_CALLBACK_NAME
async def get(self, request):
async def get(self, request) -> str:
"""Receive authorization token."""
code = request.query.get("code")
if code is None: