fix linter issues

This commit is contained in:
Martín Villagra
2021-11-23 20:37:58 +00:00
parent ae3f305db0
commit 20369577f3
3 changed files with 52 additions and 44 deletions

View File

@@ -1,9 +1,7 @@
"""Platform to locally control Tuya-based climate devices.""" """Platform to locally control Tuya-based climate devices."""
import asyncio import asyncio
import logging import logging
import json
from functools import partial from functools import partial
import json
import voluptuous as vol import voluptuous as vol
from homeassistant.components.climate import ( from homeassistant.components.climate import (
@@ -16,10 +14,6 @@ from homeassistant.components.climate.const import (
HVAC_MODE_AUTO, HVAC_MODE_AUTO,
HVAC_MODE_HEAT, HVAC_MODE_HEAT,
HVAC_MODE_OFF, HVAC_MODE_OFF,
HVAC_MODE_COOL,
HVAC_MODE_HEAT_COOL,
HVAC_MODE_DRY,
HVAC_MODE_FAN_ONLY,
SUPPORT_PRESET_MODE, SUPPORT_PRESET_MODE,
SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE,
SUPPORT_TARGET_TEMPERATURE_RANGE, SUPPORT_TARGET_TEMPERATURE_RANGE,
@@ -28,11 +22,7 @@ from homeassistant.components.climate.const import (
PRESET_NONE, PRESET_NONE,
PRESET_ECO, PRESET_ECO,
PRESET_AWAY, PRESET_AWAY,
PRESET_BOOST,
PRESET_COMFORT,
PRESET_HOME, PRESET_HOME,
PRESET_SLEEP,
PRESET_ACTIVITY,
) )
from homeassistant.const import ( from homeassistant.const import (
ATTR_TEMPERATURE, ATTR_TEMPERATURE,
@@ -55,7 +45,7 @@ from .const import (
CONF_TEMPERATURE_STEP, CONF_TEMPERATURE_STEP,
CONF_HVAC_MODE_DP, CONF_HVAC_MODE_DP,
CONF_HVAC_MODE_SET, CONF_HVAC_MODE_SET,
CONF_EURISTIC_ACTION, CONF_HEURISTIC_ACTION,
CONF_HVAC_ACTION_DP, CONF_HVAC_ACTION_DP,
CONF_HVAC_ACTION_SET, CONF_HVAC_ACTION_SET,
CONF_ECO_DP, CONF_ECO_DP,
@@ -64,8 +54,6 @@ from .const import (
CONF_PRESET_SET, CONF_PRESET_SET,
) )
from . import pytuya
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
HVAC_MODE_SETS = { HVAC_MODE_SETS = {
@@ -111,6 +99,7 @@ DEFAULT_TEMPERATURE_STEP = PRECISION_HALVES
# Empirically tested to work for AVATTO thermostat # Empirically tested to work for AVATTO thermostat
MODE_WAIT = 0.1 MODE_WAIT = 0.1
def flow_schema(dps): def flow_schema(dps):
"""Return schema used in config flow.""" """Return schema used in config flow."""
return { return {
@@ -125,26 +114,20 @@ def flow_schema(dps):
[PRECISION_WHOLE, PRECISION_HALVES, PRECISION_TENTHS] [PRECISION_WHOLE, PRECISION_HALVES, PRECISION_TENTHS]
), ),
vol.Optional(CONF_HVAC_MODE_DP): vol.In(dps), vol.Optional(CONF_HVAC_MODE_DP): vol.In(dps),
vol.Optional(CONF_HVAC_MODE_SET): vol.In( vol.Optional(CONF_HVAC_MODE_SET): vol.In(list(HVAC_MODE_SETS.keys())),
list(HVAC_MODE_SETS.keys())
),
vol.Optional(CONF_HVAC_ACTION_DP): vol.In(dps), vol.Optional(CONF_HVAC_ACTION_DP): vol.In(dps),
vol.Optional(CONF_HVAC_ACTION_SET): vol.In( vol.Optional(CONF_HVAC_ACTION_SET): vol.In(list(HVAC_ACTION_SETS.keys())),
list(HVAC_ACTION_SETS.keys())
),
vol.Optional(CONF_ECO_DP): vol.In(dps), vol.Optional(CONF_ECO_DP): vol.In(dps),
vol.Optional(CONF_ECO_VALUE): str, vol.Optional(CONF_ECO_VALUE): str,
vol.Optional(CONF_PRESET_DP): vol.In(dps), vol.Optional(CONF_PRESET_DP): vol.In(dps),
vol.Optional(CONF_PRESET_SET): vol.In( vol.Optional(CONF_PRESET_SET): vol.In(list(PRESET_SETS.keys())),
list(PRESET_SETS.keys())
),
vol.Optional(CONF_TEMPERATURE_UNIT): vol.In( vol.Optional(CONF_TEMPERATURE_UNIT): vol.In(
[TEMPERATURE_CELSIUS, TEMPERATURE_FAHRENHEIT] [TEMPERATURE_CELSIUS, TEMPERATURE_FAHRENHEIT]
), ),
vol.Optional(CONF_TARGET_PRECISION): vol.In( vol.Optional(CONF_TARGET_PRECISION): vol.In(
[PRECISION_WHOLE, PRECISION_HALVES, PRECISION_TENTHS] [PRECISION_WHOLE, PRECISION_HALVES, PRECISION_TENTHS]
), ),
vol.Optional(CONF_EURISTIC_ACTION, default=False): bool, vol.Optional(CONF_HEURISTIC_ACTION): bool,
} }
@@ -167,16 +150,24 @@ class LocaltuyaClimate(LocalTuyaEntity, ClimateEntity):
self._preset_mode = None self._preset_mode = None
self._hvac_action = None self._hvac_action = None
self._precision = self._config.get(CONF_PRECISION, DEFAULT_PRECISION) self._precision = self._config.get(CONF_PRECISION, DEFAULT_PRECISION)
self._target_precision = self._config.get(CONF_TARGET_PRECISION, self._precision) self._target_precision = self._config.get(
CONF_TARGET_PRECISION, self._precision
)
self._conf_hvac_mode_dp = self._config.get(CONF_HVAC_MODE_DP) self._conf_hvac_mode_dp = self._config.get(CONF_HVAC_MODE_DP)
self._conf_hvac_mode_set = HVAC_MODE_SETS.get(self._config.get(CONF_HVAC_MODE_SET), {}) self._conf_hvac_mode_set = HVAC_MODE_SETS.get(
self._config.get(CONF_HVAC_MODE_SET), {}
)
self._conf_preset_dp = self._config.get(CONF_PRESET_DP) self._conf_preset_dp = self._config.get(CONF_PRESET_DP)
self._conf_preset_set = PRESET_SETS.get(self._config.get(CONF_PRESET_SET), {}) self._conf_preset_set = PRESET_SETS.get(self._config.get(CONF_PRESET_SET), {})
self._conf_hvac_action_dp = self._config.get(CONF_HVAC_ACTION_DP) self._conf_hvac_action_dp = self._config.get(CONF_HVAC_ACTION_DP)
self._conf_hvac_action_set = HVAC_ACTION_SETS.get(self._config.get(CONF_HVAC_ACTION_SET), {}) self._conf_hvac_action_set = HVAC_ACTION_SETS.get(
self._config.get(CONF_HVAC_ACTION_SET), {}
)
self._conf_eco_dp = self._config.get(CONF_ECO_DP) self._conf_eco_dp = self._config.get(CONF_ECO_DP)
self._conf_eco_value = self._config.get(CONF_ECO_VALUE, "ECO") self._conf_eco_value = self._config.get(CONF_ECO_VALUE, "ECO")
self._has_presets = self.has_config(CONF_ECO_DP) or self.has_config(CONF_PRESET_DP) self._has_presets = self.has_config(CONF_ECO_DP) or self.has_config(
CONF_PRESET_DP
)
print("Initialized climate [{}]".format(self.name)) print("Initialized climate [{}]".format(self.name))
@property @property
@@ -226,25 +217,32 @@ class LocaltuyaClimate(LocalTuyaEntity, ClimateEntity):
@property @property
def hvac_action(self): def hvac_action(self):
"""Return the current running hvac operation if supported. """Return the current running hvac operation if supported.
Need to be one of CURRENT_HVAC_*. Need to be one of CURRENT_HVAC_*.
""" """
if self._config[CONF_EURISTIC_ACTION]: if self._config.get(CONF_HEURISTIC_ACTION, False):
if self._hvac_mode == HVAC_MODE_HEAT: if self._hvac_mode == HVAC_MODE_HEAT:
if self._current_temperature < (self._target_temperature - self._precision): if self._current_temperature < (
self._target_temperature - self._precision
):
self._hvac_action = CURRENT_HVAC_HEAT self._hvac_action = CURRENT_HVAC_HEAT
if self._current_temperature == (self._target_temperature - self._precision): if self._current_temperature == (
self._target_temperature - self._precision
):
if self._hvac_action == CURRENT_HVAC_HEAT: if self._hvac_action == CURRENT_HVAC_HEAT:
self._hvac_action = CURRENT_HVAC_HEAT self._hvac_action = CURRENT_HVAC_HEAT
if self._hvac_action == CURRENT_HVAC_OFF: if self._hvac_action == CURRENT_HVAC_OFF:
self._hvac_action = CURRENT_HVAC_OFF self._hvac_action = CURRENT_HVAC_OFF
if (self._current_temperature + self._precision) > self._target_temperature: if (
self._current_temperature + self._precision
) > self._target_temperature:
self._hvac_action = CURRENT_HVAC_OFF self._hvac_action = CURRENT_HVAC_OFF
return self._hvac_action return self._hvac_action
return self._hvac_action return self._hvac_action
@property @property
def preset_mode(self): def preset_mode(self):
"""Return current preset""" """Return current preset."""
return self._preset_mode return self._preset_mode
@property @property
@@ -286,7 +284,9 @@ class LocaltuyaClimate(LocalTuyaEntity, ClimateEntity):
"""Set new target temperature.""" """Set new target temperature."""
if ATTR_TEMPERATURE in kwargs and self.has_config(CONF_TARGET_TEMPERATURE_DP): if ATTR_TEMPERATURE in kwargs and self.has_config(CONF_TARGET_TEMPERATURE_DP):
temperature = round(kwargs[ATTR_TEMPERATURE] / self._target_precision) temperature = round(kwargs[ATTR_TEMPERATURE] / self._target_precision)
await self._device.set_dp(temperature, self._config[CONF_TARGET_TEMPERATURE_DP]) await self._device.set_dp(
temperature, self._config[CONF_TARGET_TEMPERATURE_DP]
)
def set_fan_mode(self, fan_mode): def set_fan_mode(self, fan_mode):
"""Set new target fan mode.""" """Set new target fan mode."""
@@ -301,14 +301,18 @@ class LocaltuyaClimate(LocalTuyaEntity, ClimateEntity):
await self._device.set_dp(True, self._dp_id) await self._device.set_dp(True, self._dp_id)
# Some thermostats need a small wait before sending another update # Some thermostats need a small wait before sending another update
await asyncio.sleep(MODE_WAIT) await asyncio.sleep(MODE_WAIT)
await self._device.set_dp(self._conf_hvac_mode_set[hvac_mode], self._conf_hvac_mode_dp) await self._device.set_dp(
self._conf_hvac_mode_set[hvac_mode], self._conf_hvac_mode_dp
)
async def async_set_preset_mode(self, preset_mode): async def async_set_preset_mode(self, preset_mode):
"""Set new target preset mode.""" """Set new target preset mode."""
if preset_mode == PRESET_ECO: if preset_mode == PRESET_ECO:
await self._device.set_dp(self._conf_eco_value, self._conf_eco_dp) await self._device.set_dp(self._conf_eco_value, self._conf_eco_dp)
return return
await self._device.set_dp(self._conf_preset_set[preset_mode], self._conf_preset_dp) await self._device.set_dp(
self._conf_preset_set[preset_mode], self._conf_preset_dp
)
@property @property
def min_temp(self): def min_temp(self):
@@ -339,22 +343,25 @@ class LocaltuyaClimate(LocalTuyaEntity, ClimateEntity):
) )
if self._has_presets: if self._has_presets:
if self.has_config(CONF_ECO_DP) and self.dps_conf(CONF_ECO_DP) == self._conf_eco_value: if (
self.has_config(CONF_ECO_DP)
and self.dps_conf(CONF_ECO_DP) == self._conf_eco_value
):
self._preset_mode = PRESET_ECO self._preset_mode = PRESET_ECO
else: else:
for preset,value in self._conf_preset_set.items(): # todo remove for preset, value in self._conf_preset_set.items(): # todo remove
if self.dps_conf(CONF_PRESET_DP) == value: if self.dps_conf(CONF_PRESET_DP) == value:
self._preset_mode = preset self._preset_mode = preset
break break
else: else:
self._preset_mode = PRESET_NONE self._preset_mode = PRESET_NONE
"""Update the HVAC status""" # Update the HVAC status
if self.has_config(CONF_HVAC_MODE_DP): if self.has_config(CONF_HVAC_MODE_DP):
if not self._state: if not self._state:
self._hvac_mode = HVAC_MODE_OFF self._hvac_mode = HVAC_MODE_OFF
else: else:
for mode,value in self._conf_hvac_mode_set.items(): for mode, value in self._conf_hvac_mode_set.items():
if self.dps_conf(CONF_HVAC_MODE_DP) == value: if self.dps_conf(CONF_HVAC_MODE_DP) == value:
self._hvac_mode = mode self._hvac_mode = mode
break break
@@ -362,9 +369,10 @@ class LocaltuyaClimate(LocalTuyaEntity, ClimateEntity):
# in case hvac mode and preset share the same dp # in case hvac mode and preset share the same dp
self._hvac_mode = HVAC_MODE_AUTO self._hvac_mode = HVAC_MODE_AUTO
"""Update the current action""" # Update the current action
for action,value in self._conf_hvac_action_set.items(): for action, value in self._conf_hvac_action_set.items():
if self.dps_conf(CONF_HVAC_ACTION_DP) == value: if self.dps_conf(CONF_HVAC_ACTION_DP) == value:
self._hvac_action = action self._hvac_action = action
async_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaClimate, flow_schema) async_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaClimate, flow_schema)

View File

@@ -53,7 +53,7 @@ CONF_HVAC_MODE_DP = "hvac_mode_dp"
CONF_HVAC_MODE_SET = "hvac_mode_set" CONF_HVAC_MODE_SET = "hvac_mode_set"
CONF_PRESET_DP = "preset_dp" CONF_PRESET_DP = "preset_dp"
CONF_PRESET_SET = "preset_set" CONF_PRESET_SET = "preset_set"
CONF_EURISTIC_ACTION = "euristic_action" CONF_HEURISTIC_ACTION = "heuristic_action"
CONF_HVAC_ACTION_DP = "hvac_action_dp" CONF_HVAC_ACTION_DP = "hvac_action_dp"
CONF_HVAC_ACTION_SET = "hvac_action_set" CONF_HVAC_ACTION_SET = "hvac_action_set"
CONF_ECO_DP = "eco_dp" CONF_ECO_DP = "eco_dp"

View File

@@ -91,7 +91,7 @@
"preset_set": "Presets Set (optional)", "preset_set": "Presets Set (optional)",
"eco_dp": "Eco DP (optional)", "eco_dp": "Eco DP (optional)",
"eco_value": "Eco value (optional)", "eco_value": "Eco value (optional)",
"euristic_action": "Enable euristic action (optional)" "heuristic_action": "Enable heuristic action (optional)"
} }
} }
} }
@@ -160,7 +160,7 @@
"preset_set": "Presets Set (optional)", "preset_set": "Presets Set (optional)",
"eco_dp": "Eco DP (optional)", "eco_dp": "Eco DP (optional)",
"eco_value": "Eco value (optional)", "eco_value": "Eco value (optional)",
"euristic_action": "Enable euristic action (optional)" "heuristic_action": "Enable heuristic action (optional)"
} }
}, },
"yaml_import": { "yaml_import": {