Fix thermostats that do not support off under homekit (#33809)
TargetHeatingCoolingState: value=0 is an invalid value. would be raised when a thermostat did not support off.pull/33825/head
parent
3b246fb40a
commit
cec3b57390
|
@ -175,7 +175,7 @@ class Thermostat(HomeAccessory):
|
||||||
|
|
||||||
self.char_target_heat_cool = serv_thermostat.configure_char(
|
self.char_target_heat_cool = serv_thermostat.configure_char(
|
||||||
CHAR_TARGET_HEATING_COOLING,
|
CHAR_TARGET_HEATING_COOLING,
|
||||||
value=0,
|
value=list(hc_valid_values.values())[0],
|
||||||
setter_callback=self.set_heat_cool,
|
setter_callback=self.set_heat_cool,
|
||||||
valid_values=hc_valid_values,
|
valid_values=hc_valid_values,
|
||||||
)
|
)
|
||||||
|
|
|
@ -805,6 +805,41 @@ async def test_thermostat_hvac_modes_with_auto_only(hass, hk_driver, cls):
|
||||||
assert acc.char_target_heat_cool.value == 3
|
assert acc.char_target_heat_cool.value == 3
|
||||||
|
|
||||||
|
|
||||||
|
async def test_thermostat_hvac_modes_without_off(hass, hk_driver, cls):
|
||||||
|
"""Test a thermostat that has no off."""
|
||||||
|
entity_id = "climate.test"
|
||||||
|
|
||||||
|
hass.states.async_set(
|
||||||
|
entity_id, HVAC_MODE_AUTO, {ATTR_HVAC_MODES: [HVAC_MODE_AUTO, HVAC_MODE_HEAT]}
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
acc = cls.thermostat(hass, hk_driver, "Climate", entity_id, 2, None)
|
||||||
|
await acc.run_handler()
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
hap = acc.char_target_heat_cool.to_HAP()
|
||||||
|
assert hap["valid-values"] == [1, 3]
|
||||||
|
assert acc.char_target_heat_cool.value == 3
|
||||||
|
|
||||||
|
await hass.async_add_executor_job(acc.char_target_heat_cool.set_value, 3)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert acc.char_target_heat_cool.value == 3
|
||||||
|
|
||||||
|
await hass.async_add_executor_job(acc.char_target_heat_cool.set_value, 1)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert acc.char_target_heat_cool.value == 1
|
||||||
|
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
await hass.async_add_executor_job(acc.char_target_heat_cool.set_value, 2)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert acc.char_target_heat_cool.value == 1
|
||||||
|
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
await hass.async_add_executor_job(acc.char_target_heat_cool.set_value, 0)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert acc.char_target_heat_cool.value == 1
|
||||||
|
|
||||||
|
|
||||||
async def test_water_heater(hass, hk_driver, cls, events):
|
async def test_water_heater(hass, hk_driver, cls, events):
|
||||||
"""Test if accessory and HA are updated accordingly."""
|
"""Test if accessory and HA are updated accordingly."""
|
||||||
entity_id = "water_heater.test"
|
entity_id = "water_heater.test"
|
||||||
|
|
Loading…
Reference in New Issue