Support fetching/setting humidity of HomeKit controller thermostats (#23040)

* Add support for homekit humidity control

* Add tests
This commit is contained in:
Jc2k
2019-04-17 18:03:32 +01:00
committed by Paulus Schoutsen
parent f7afd9d6bc
commit a97fb8fd10
3 changed files with 88 additions and 7 deletions

View File

@@ -4,7 +4,7 @@ import logging
from homeassistant.components.climate import ClimateDevice
from homeassistant.components.climate.const import (
STATE_COOL, STATE_HEAT, STATE_IDLE, SUPPORT_OPERATION_MODE,
SUPPORT_TARGET_TEMPERATURE)
SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_HUMIDITY)
from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, TEMP_CELSIUS
from . import KNOWN_DEVICES, HomeKitEntity
@@ -41,6 +41,8 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
self._valid_modes = []
self._current_temp = None
self._target_temp = None
self._current_humidity = None
self._target_humidity = None
super().__init__(*args)
def get_characteristic_types(self):
@@ -52,6 +54,8 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
CharacteristicsTypes.HEATING_COOLING_TARGET,
CharacteristicsTypes.TEMPERATURE_CURRENT,
CharacteristicsTypes.TEMPERATURE_TARGET,
CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT,
CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET,
]
def _setup_heating_cooling_target(self, characteristic):
@@ -82,6 +86,9 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
def _setup_temperature_target(self, characteristic):
self._features |= SUPPORT_TARGET_TEMPERATURE
def _setup_relative_humidity_target(self, characteristic):
self._features |= SUPPORT_TARGET_HUMIDITY
def _update_heating_cooling_current(self, value):
self._state = MODE_HOMEKIT_TO_HASS.get(value)
@@ -94,6 +101,12 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
def _update_temperature_target(self, value):
self._target_temp = value
def _update_relative_humidity_current(self, value):
self._current_humidity = value
def _update_relative_humidity_target(self, value):
self._target_humidity = value
async def async_set_temperature(self, **kwargs):
"""Set new target temperature."""
temp = kwargs.get(ATTR_TEMPERATURE)
@@ -103,6 +116,13 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
'value': temp}]
await self._accessory.put_characteristics(characteristics)
async def async_set_humidity(self, humidity):
"""Set new target humidity."""
characteristics = [{'aid': self._aid,
'iid': self._chars['relative-humidity.target'],
'value': humidity}]
await self._accessory.put_characteristics(characteristics)
async def async_set_operation_mode(self, operation_mode):
"""Set new target operation mode."""
characteristics = [{'aid': self._aid,
@@ -132,6 +152,16 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
"""Return the temperature we try to reach."""
return self._target_temp
@property
def current_humidity(self):
"""Return the current humidity."""
return self._current_humidity
@property
def target_humidity(self):
"""Return the humidity we try to reach."""
return self._target_humidity
@property
def current_operation(self):
"""Return current operation ie. heat, cool, idle."""