Fix homekit_controller climate supported operation_list being blank (#23095)
* Fix tado supported operation modes when used with homekit_controller * Replace with list comp as requested in review * More list compspull/23040/head
parent
2f89f88d23
commit
e97b2b7015
|
@ -36,12 +36,12 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
|
||||||
|
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
"""Initialise the device."""
|
"""Initialise the device."""
|
||||||
super().__init__(*args)
|
|
||||||
self._state = None
|
self._state = None
|
||||||
self._current_mode = None
|
self._current_mode = None
|
||||||
self._valid_modes = []
|
self._valid_modes = []
|
||||||
self._current_temp = None
|
self._current_temp = None
|
||||||
self._target_temp = None
|
self._target_temp = None
|
||||||
|
super().__init__(*args)
|
||||||
|
|
||||||
def get_characteristic_types(self):
|
def get_characteristic_types(self):
|
||||||
"""Define the homekit characteristics the entity cares about."""
|
"""Define the homekit characteristics the entity cares about."""
|
||||||
|
@ -57,10 +57,26 @@ class HomeKitClimateDevice(HomeKitEntity, ClimateDevice):
|
||||||
def _setup_heating_cooling_target(self, characteristic):
|
def _setup_heating_cooling_target(self, characteristic):
|
||||||
self._features |= SUPPORT_OPERATION_MODE
|
self._features |= SUPPORT_OPERATION_MODE
|
||||||
|
|
||||||
valid_values = characteristic.get(
|
if 'valid-values' in characteristic:
|
||||||
'valid-values', DEFAULT_VALID_MODES)
|
valid_values = [
|
||||||
|
val for val in DEFAULT_VALID_MODES
|
||||||
|
if val in characteristic['valid-values']
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
valid_values = DEFAULT_VALID_MODES
|
||||||
|
if 'minValue' in characteristic:
|
||||||
|
valid_values = [
|
||||||
|
val for val in valid_values
|
||||||
|
if val >= characteristic['minValue']
|
||||||
|
]
|
||||||
|
if 'maxValue' in characteristic:
|
||||||
|
valid_values = [
|
||||||
|
val for val in valid_values
|
||||||
|
if val <= characteristic['maxValue']
|
||||||
|
]
|
||||||
|
|
||||||
self._valid_modes = [
|
self._valid_modes = [
|
||||||
MODE_HOMEKIT_TO_HASS.get(mode) for mode in valid_values
|
MODE_HOMEKIT_TO_HASS[mode] for mode in valid_values
|
||||||
]
|
]
|
||||||
|
|
||||||
def _setup_temperature_target(self, characteristic):
|
def _setup_temperature_target(self, characteristic):
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from homeassistant.components.climate.const import (
|
from homeassistant.components.climate.const import (
|
||||||
DOMAIN, SERVICE_SET_OPERATION_MODE, SERVICE_SET_TEMPERATURE)
|
DOMAIN, SERVICE_SET_OPERATION_MODE, SERVICE_SET_TEMPERATURE)
|
||||||
from tests.components.homekit_controller.common import (
|
from tests.components.homekit_controller.common import (
|
||||||
setup_test_component)
|
FakeService, setup_test_component)
|
||||||
|
|
||||||
|
|
||||||
HEATING_COOLING_TARGET = ('thermostat', 'heating-cooling.target')
|
HEATING_COOLING_TARGET = ('thermostat', 'heating-cooling.target')
|
||||||
|
@ -11,6 +11,33 @@ TEMPERATURE_TARGET = ('thermostat', 'temperature.target')
|
||||||
TEMPERATURE_CURRENT = ('thermostat', 'temperature.current')
|
TEMPERATURE_CURRENT = ('thermostat', 'temperature.current')
|
||||||
|
|
||||||
|
|
||||||
|
async def test_climate_respect_supported_op_modes_1(hass, utcnow):
|
||||||
|
"""Test that climate respects minValue/maxValue hints."""
|
||||||
|
service = FakeService('public.hap.service.thermostat')
|
||||||
|
char = service.add_characteristic('heating-cooling.target')
|
||||||
|
char.value = 0
|
||||||
|
char.minValue = 0
|
||||||
|
char.maxValue = 1
|
||||||
|
|
||||||
|
helper = await setup_test_component(hass, [service])
|
||||||
|
|
||||||
|
state = await helper.poll_and_get_state()
|
||||||
|
assert state.attributes['operation_list'] == ['off', 'heat']
|
||||||
|
|
||||||
|
|
||||||
|
async def test_climate_respect_supported_op_modes_2(hass, utcnow):
|
||||||
|
"""Test that climate respects validValue hints."""
|
||||||
|
service = FakeService('public.hap.service.thermostat')
|
||||||
|
char = service.add_characteristic('heating-cooling.target')
|
||||||
|
char.value = 0
|
||||||
|
char.validValues = [0, 1, 2]
|
||||||
|
|
||||||
|
helper = await setup_test_component(hass, [service])
|
||||||
|
|
||||||
|
state = await helper.poll_and_get_state()
|
||||||
|
assert state.attributes['operation_list'] == ['off', 'heat', 'cool']
|
||||||
|
|
||||||
|
|
||||||
async def test_climate_change_thermostat_state(hass, utcnow):
|
async def test_climate_change_thermostat_state(hass, utcnow):
|
||||||
"""Test that we can turn a HomeKit thermostat on and off again."""
|
"""Test that we can turn a HomeKit thermostat on and off again."""
|
||||||
from homekit.model.services import ThermostatService
|
from homekit.model.services import ThermostatService
|
||||||
|
|
Loading…
Reference in New Issue