first commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
from homeassistant.components.climate import *
|
||||
from homeassistant.components.climate.const import *
|
||||
from homeassistant.core import callback
|
||||
|
||||
from . import DOMAIN
|
||||
from .core.converters import Converter
|
||||
from .core.device import XDevice
|
||||
from .core.entity import XEntity
|
||||
from .core.gateway import XGateway
|
||||
|
||||
ACTIONS = {
|
||||
HVAC_MODE_OFF: CURRENT_HVAC_OFF,
|
||||
HVAC_MODE_COOL: CURRENT_HVAC_COOL,
|
||||
HVAC_MODE_HEAT: CURRENT_HVAC_HEAT
|
||||
}
|
||||
|
||||
|
||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
def setup(gateway: XGateway, device: XDevice, conv: Converter):
|
||||
if conv.attr in device.entities:
|
||||
entity: XEntity = device.entities[conv.attr]
|
||||
entity.gw = gateway
|
||||
else:
|
||||
entity = XiaomiClimate(gateway, device, conv)
|
||||
async_add_entities([entity])
|
||||
|
||||
gw: XGateway = hass.data[DOMAIN][config_entry.entry_id]
|
||||
gw.add_setup(__name__, setup)
|
||||
|
||||
|
||||
# noinspection PyAbstractClass
|
||||
class XiaomiClimate(XEntity, ClimateEntity):
|
||||
_attr_fan_mode = None
|
||||
_attr_fan_modes = [FAN_LOW, FAN_MEDIUM, FAN_HIGH, FAN_AUTO]
|
||||
_attr_hvac_mode = None
|
||||
_attr_hvac_modes = [HVAC_MODE_OFF, HVAC_MODE_COOL, HVAC_MODE_HEAT]
|
||||
_attr_precision = PRECISION_WHOLE
|
||||
_attr_supported_features = SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE
|
||||
_attr_temperature_unit = TEMP_CELSIUS
|
||||
# support only KTWKQ03ES for now
|
||||
_attr_max_temp = 30
|
||||
_attr_min_temp = 17
|
||||
_attr_target_temperature_step = 1
|
||||
|
||||
@callback
|
||||
def async_set_state(self, data: dict):
|
||||
self._attr_current_temperature = data.get("current_temp")
|
||||
self._attr_fan_mode = data.get("fan_mode")
|
||||
self._attr_hvac_mode = data.get("hvac_mode")
|
||||
# better support HomeKit
|
||||
# https://github.com/AlexxIT/XiaomiGateway3/issues/707#issuecomment-1099109552
|
||||
self._attr_hvac_action = ACTIONS.get(self._attr_hvac_mode)
|
||||
# fix scenes with turned off climate
|
||||
# https://github.com/AlexxIT/XiaomiGateway3/issues/101#issuecomment-757781988
|
||||
self._attr_target_temperature = data.get("target_temp", 0)
|
||||
|
||||
async def async_update(self):
|
||||
await self.device_read(self.subscribed_attrs)
|
||||
|
||||
async def async_set_temperature(self, **kwargs) -> None:
|
||||
if kwargs[ATTR_TEMPERATURE] == 0:
|
||||
return
|
||||
payload = {"target_temp": kwargs[ATTR_TEMPERATURE]}
|
||||
await self.device_send({self.attr: payload})
|
||||
|
||||
async def async_set_fan_mode(self, fan_mode: str) -> None:
|
||||
payload = {"fan_mode": fan_mode}
|
||||
await self.device_send({self.attr: payload})
|
||||
|
||||
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
|
||||
payload = {"hvac_mode": hvac_mode}
|
||||
await self.device_send({self.attr: payload})
|
||||
Reference in New Issue
Block a user