From 7095d2e520925a0a86076e721d5e9fd94d099866 Mon Sep 17 00:00:00 2001 From: qqaatw Date: Fri, 10 Dec 2021 18:56:27 +0800 Subject: [PATCH 1/6] Fix humidifier state error in Homekit --- homeassistant/components/homekit/type_humidifiers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/homekit/type_humidifiers.py b/homeassistant/components/homekit/type_humidifiers.py index a468efd42b4eea..c8df987e8ba830 100644 --- a/homeassistant/components/homekit/type_humidifiers.py +++ b/homeassistant/components/homekit/type_humidifiers.py @@ -99,6 +99,7 @@ def __init__(self, *args): CHAR_TARGET_HUMIDIFIER_DEHUMIDIFIER, value=self._hk_device_class, valid_values={ + "HumidifierorDehumidifier": 0, HC_HASS_TO_HOMEKIT_DEVICE_CLASS_NAME[ device_class ]: self._hk_device_class From db1fcef017e7b037a97b9a147b494ddaf29cd99b Mon Sep 17 00:00:00 2001 From: qqaatw Date: Fri, 10 Dec 2021 21:08:22 +0800 Subject: [PATCH 2/6] Fix --- homeassistant/components/homekit/type_humidifiers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/homekit/type_humidifiers.py b/homeassistant/components/homekit/type_humidifiers.py index c8df987e8ba830..812c1fec2b00cf 100644 --- a/homeassistant/components/homekit/type_humidifiers.py +++ b/homeassistant/components/homekit/type_humidifiers.py @@ -98,8 +98,8 @@ def __init__(self, *args): serv_humidifier_dehumidifier.configure_char( CHAR_TARGET_HUMIDIFIER_DEHUMIDIFIER, value=self._hk_device_class, + properties={PROP_MIN_VALUE: 1}, valid_values={ - "HumidifierorDehumidifier": 0, HC_HASS_TO_HOMEKIT_DEVICE_CLASS_NAME[ device_class ]: self._hk_device_class From 272af6aa7c30173094df0bb91e40237ee24807c8 Mon Sep 17 00:00:00 2001 From: qqaatw Date: Tue, 14 Dec 2021 03:21:34 +0800 Subject: [PATCH 3/6] Fix --- homeassistant/components/homekit/type_humidifiers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/homekit/type_humidifiers.py b/homeassistant/components/homekit/type_humidifiers.py index 812c1fec2b00cf..01bd30f4c9e303 100644 --- a/homeassistant/components/homekit/type_humidifiers.py +++ b/homeassistant/components/homekit/type_humidifiers.py @@ -98,7 +98,7 @@ def __init__(self, *args): serv_humidifier_dehumidifier.configure_char( CHAR_TARGET_HUMIDIFIER_DEHUMIDIFIER, value=self._hk_device_class, - properties={PROP_MIN_VALUE: 1}, + properties={PROP_MIN_VALUE: self._hk_device_class}, valid_values={ HC_HASS_TO_HOMEKIT_DEVICE_CLASS_NAME[ device_class From f9f0645d7b290ed6f72a0041906f934f3d5794e4 Mon Sep 17 00:00:00 2001 From: qqaatw Date: Tue, 14 Dec 2021 15:24:08 +0800 Subject: [PATCH 4/6] Fix --- homeassistant/components/homekit/type_humidifiers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/homekit/type_humidifiers.py b/homeassistant/components/homekit/type_humidifiers.py index 01bd30f4c9e303..e03891eb87d359 100644 --- a/homeassistant/components/homekit/type_humidifiers.py +++ b/homeassistant/components/homekit/type_humidifiers.py @@ -98,7 +98,10 @@ def __init__(self, *args): serv_humidifier_dehumidifier.configure_char( CHAR_TARGET_HUMIDIFIER_DEHUMIDIFIER, value=self._hk_device_class, - properties={PROP_MIN_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 From 365617307a8c61ded7ebff26327d0281f68c3fb4 Mon Sep 17 00:00:00 2001 From: qqaatw Date: Tue, 14 Dec 2021 16:40:33 +0800 Subject: [PATCH 5/6] Style --- homeassistant/components/homekit/type_humidifiers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/homekit/type_humidifiers.py b/homeassistant/components/homekit/type_humidifiers.py index e03891eb87d359..42115132420de8 100644 --- a/homeassistant/components/homekit/type_humidifiers.py +++ b/homeassistant/components/homekit/type_humidifiers.py @@ -100,7 +100,7 @@ def __init__(self, *args): value=self._hk_device_class, properties={ PROP_MIN_VALUE: self._hk_device_class, - PROP_MAX_VALUE: self._hk_device_class + PROP_MAX_VALUE: self._hk_device_class, }, valid_values={ HC_HASS_TO_HOMEKIT_DEVICE_CLASS_NAME[ From 0d6e90aa32c213ab56fad58243b0e0d92d606ca8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 16 Jan 2022 18:55:08 -1000 Subject: [PATCH 6/6] Add coverage --- .../homekit/test_type_humidifiers.py | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/tests/components/homekit/test_type_humidifiers.py b/tests/components/homekit/test_type_humidifiers.py index 49b3ee72784b11..e5cbf978c83b0d 100644 --- a/tests/components/homekit/test_type_humidifiers.py +++ b/tests/components/homekit/test_type_humidifiers.py @@ -16,6 +16,7 @@ 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