diff --git a/homeassistant/components/homekit/type_humidifiers.py b/homeassistant/components/homekit/type_humidifiers.py index a468efd42b4..42115132420 100644 --- a/homeassistant/components/homekit/type_humidifiers.py +++ b/homeassistant/components/homekit/type_humidifiers.py @@ -98,6 +98,10 @@ class HumidifierDehumidifier(HomeAccessory): serv_humidifier_dehumidifier.configure_char( CHAR_TARGET_HUMIDIFIER_DEHUMIDIFIER, value=self._hk_device_class, + properties={ + PROP_MIN_VALUE: self._hk_device_class, + PROP_MAX_VALUE: self._hk_device_class, + }, valid_values={ HC_HASS_TO_HOMEKIT_DEVICE_CLASS_NAME[ device_class diff --git a/tests/components/homekit/test_type_humidifiers.py b/tests/components/homekit/test_type_humidifiers.py index 49b3ee72784..e5cbf978c83 100644 --- a/tests/components/homekit/test_type_humidifiers.py +++ b/tests/components/homekit/test_type_humidifiers.py @@ -16,6 +16,7 @@ from homeassistant.components.homekit.const import ( PROP_VALID_VALUES, ) from homeassistant.components.homekit.type_humidifiers import HumidifierDehumidifier +from homeassistant.components.humidifier import HumidifierDeviceClass from homeassistant.components.humidifier.const import ( ATTR_HUMIDITY, ATTR_MAX_HUMIDITY, @@ -394,7 +395,9 @@ async def test_humidifier_as_dehumidifier(hass, hk_driver, events, caplog): """Test an invalid char_target_humidifier_dehumidifier from HomeKit.""" entity_id = "humidifier.test" - hass.states.async_set(entity_id, STATE_OFF) + hass.states.async_set( + entity_id, STATE_OFF, {ATTR_DEVICE_CLASS: HumidifierDeviceClass.HUMIDIFIER} + ) await hass.async_block_till_done() acc = HumidifierDehumidifier( hass, hk_driver, "HumidifierDehumidifier", entity_id, 1, None @@ -427,3 +430,44 @@ async def test_humidifier_as_dehumidifier(hass, hk_driver, events, caplog): await hass.async_block_till_done() assert "TargetHumidifierDehumidifierState is not supported" in caplog.text assert len(events) == 0 + + +async def test_dehumidifier_as_humidifier(hass, hk_driver, events, caplog): + """Test an invalid char_target_humidifier_dehumidifier from HomeKit.""" + entity_id = "humidifier.test" + + hass.states.async_set( + entity_id, STATE_OFF, {ATTR_DEVICE_CLASS: HumidifierDeviceClass.DEHUMIDIFIER} + ) + await hass.async_block_till_done() + acc = HumidifierDehumidifier( + hass, hk_driver, "HumidifierDehumidifier", entity_id, 1, None + ) + hk_driver.add_accessory(acc) + + await acc.run() + await hass.async_block_till_done() + + assert acc.char_target_humidifier_dehumidifier.value == 2 + + # Set from HomeKit + char_target_humidifier_dehumidifier_iid = ( + acc.char_target_humidifier_dehumidifier.to_HAP()[HAP_REPR_IID] + ) + + hk_driver.set_characteristics( + { + HAP_REPR_CHARS: [ + { + HAP_REPR_AID: acc.aid, + HAP_REPR_IID: char_target_humidifier_dehumidifier_iid, + HAP_REPR_VALUE: 1, + }, + ] + }, + "mock_addr", + ) + + await hass.async_block_till_done() + assert "TargetHumidifierDehumidifierState is not supported" in caplog.text + assert len(events) == 0