Improve type hint in flexit climate entity (#77159)

pull/77357/head
epenet 2022-08-26 11:43:20 +02:00 committed by GitHub
parent b043053aad
commit 7fb9c4a37f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 27 additions and 62 deletions

View File

@ -2,6 +2,7 @@
from __future__ import annotations
import logging
from typing import Any
import voluptuous as vol
@ -60,35 +61,36 @@ class Flexit(ClimateEntity):
"""Representation of a Flexit AC unit."""
_attr_fan_modes = ["Off", "Low", "Medium", "High"]
_attr_hvac_mode = HVACMode.COOL
_attr_hvac_modes = [HVACMode.COOL]
_attr_supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
)
_attr_temperature_unit = TEMP_CELSIUS
def __init__(
self, hub: ModbusHub, modbus_slave: int | None, name: str | None
) -> None:
"""Initialize the unit."""
self._hub = hub
self._name = name
self._attr_name = name
self._slave = modbus_slave
self._target_temperature = None
self._current_temperature = None
self._attr_fan_mode = None
self._filter_hours = None
self._filter_alarm = None
self._heat_recovery = None
self._heater_enabled = False
self._heating = None
self._cooling = None
self._filter_hours: int | None = None
self._filter_alarm: int | None = None
self._heat_recovery: int | None = None
self._heater_enabled: int | None = None
self._heating: int | None = None
self._cooling: int | None = None
self._alarm = False
self._outdoor_air_temp = None
self._outdoor_air_temp: float | None = None
async def async_update(self):
async def async_update(self) -> None:
"""Update unit attributes."""
self._target_temperature = await self._async_read_temp_from_register(
self._attr_target_temperature = await self._async_read_temp_from_register(
CALL_TYPE_REGISTER_HOLDING, 8
)
self._current_temperature = await self._async_read_temp_from_register(
self._attr_current_temperature = await self._async_read_temp_from_register(
CALL_TYPE_REGISTER_INPUT, 9
)
res = await self._async_read_int16_from_register(CALL_TYPE_REGISTER_HOLDING, 17)
@ -137,7 +139,7 @@ class Flexit(ClimateEntity):
self._attr_hvac_action = HVACAction.OFF
@property
def extra_state_attributes(self):
def extra_state_attributes(self) -> dict[str, Any]:
"""Return device specific state attributes."""
return {
"filter_hours": self._filter_hours,
@ -149,54 +151,14 @@ class Flexit(ClimateEntity):
"outdoor_air_temp": self._outdoor_air_temp,
}
@property
def should_poll(self):
"""Return the polling state."""
return True
@property
def name(self):
"""Return the name of the climate device."""
return self._name
@property
def temperature_unit(self):
"""Return the unit of measurement."""
return TEMP_CELSIUS
@property
def current_temperature(self):
"""Return the current temperature."""
return self._current_temperature
@property
def target_temperature(self):
"""Return the temperature we try to reach."""
return self._target_temperature
@property
def hvac_mode(self):
"""Return current operation ie. heat, cool, idle."""
return HVACMode.COOL
@property
def hvac_modes(self) -> list[str]:
"""Return the list of available hvac operation modes.
Need to be a subset of HVAC_MODES.
"""
return [HVACMode.COOL]
async def async_set_temperature(self, **kwargs):
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
if kwargs.get(ATTR_TEMPERATURE) is not None:
target_temperature = kwargs.get(ATTR_TEMPERATURE)
else:
if (target_temperature := kwargs.get(ATTR_TEMPERATURE)) is None:
_LOGGER.error("Received invalid temperature")
return
if await self._async_write_int16_to_register(8, target_temperature * 10):
self._target_temperature = target_temperature
if await self._async_write_int16_to_register(8, int(target_temperature * 10)):
self._attr_target_temperature = target_temperature
else:
_LOGGER.error("Modbus error setting target temperature to Flexit")
@ -210,7 +172,9 @@ class Flexit(ClimateEntity):
_LOGGER.error("Modbus error setting fan mode to Flexit")
# Based on _async_read_register in ModbusThermostat class
async def _async_read_int16_from_register(self, register_type, register) -> int:
async def _async_read_int16_from_register(
self, register_type: str, register: int
) -> int:
"""Read register using the Modbus hub slave."""
result = await self._hub.async_pymodbus_call(
self._slave, register, 1, register_type
@ -221,7 +185,9 @@ class Flexit(ClimateEntity):
return int(result.registers[0])
async def _async_read_temp_from_register(self, register_type, register) -> float:
async def _async_read_temp_from_register(
self, register_type: str, register: int
) -> float:
result = float(
await self._async_read_int16_from_register(register_type, register)
)
@ -229,8 +195,7 @@ class Flexit(ClimateEntity):
return -1
return result / 10.0
async def _async_write_int16_to_register(self, register, value) -> bool:
value = int(value)
async def _async_write_int16_to_register(self, register: int, value: int) -> bool:
result = await self._hub.async_pymodbus_call(
self._slave, register, value, CALL_TYPE_WRITE_REGISTER
)