mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 20:27:08 +00:00
Improve the HomeKit (de)humidifier min/max humidity handling (#90854)
This commit is contained in:
parent
3538844181
commit
5c2af99520
@ -115,20 +115,12 @@ class HumidifierDehumidifier(HomeAccessory):
|
||||
CHAR_CURRENT_HUMIDITY, value=0
|
||||
)
|
||||
|
||||
max_humidity = state.attributes.get(ATTR_MAX_HUMIDITY, DEFAULT_MAX_HUMIDITY)
|
||||
max_humidity = round(max_humidity)
|
||||
max_humidity = min(max_humidity, 100)
|
||||
|
||||
min_humidity = state.attributes.get(ATTR_MIN_HUMIDITY, DEFAULT_MIN_HUMIDITY)
|
||||
min_humidity = round(min_humidity)
|
||||
min_humidity = max(min_humidity, 0)
|
||||
|
||||
self.char_target_humidity = serv_humidifier_dehumidifier.configure_char(
|
||||
self._target_humidity_char_name,
|
||||
value=45,
|
||||
properties={
|
||||
PROP_MIN_VALUE: min_humidity,
|
||||
PROP_MAX_VALUE: max_humidity,
|
||||
PROP_MIN_VALUE: DEFAULT_MIN_HUMIDITY,
|
||||
PROP_MAX_VALUE: DEFAULT_MAX_HUMIDITY,
|
||||
PROP_MIN_STEP: 1,
|
||||
},
|
||||
)
|
||||
@ -219,7 +211,23 @@ class HumidifierDehumidifier(HomeAccessory):
|
||||
)
|
||||
|
||||
if self._target_humidity_char_name in char_values:
|
||||
state = self.hass.states.get(self.entity_id)
|
||||
max_humidity = state.attributes.get(ATTR_MAX_HUMIDITY, DEFAULT_MAX_HUMIDITY)
|
||||
max_humidity = round(max_humidity)
|
||||
max_humidity = min(max_humidity, 100)
|
||||
|
||||
min_humidity = state.attributes.get(ATTR_MIN_HUMIDITY, DEFAULT_MIN_HUMIDITY)
|
||||
min_humidity = round(min_humidity)
|
||||
min_humidity = max(min_humidity, 0)
|
||||
|
||||
humidity = round(char_values[self._target_humidity_char_name])
|
||||
|
||||
if (humidity < min_humidity) or (humidity > max_humidity):
|
||||
humidity = min(max_humidity, max(min_humidity, humidity))
|
||||
# Update the HomeKit value to the clamped humidity, so the user will get a visual feedback that they
|
||||
# cannot not set to a value below/above the min/max.
|
||||
self.char_target_humidity.set_value(humidity)
|
||||
|
||||
self.async_call_service(
|
||||
DOMAIN,
|
||||
SERVICE_SET_HUMIDITY,
|
||||
|
@ -286,7 +286,9 @@ async def test_hygrostat_power_state(hass: HomeAssistant, hk_driver, events) ->
|
||||
assert events[-1].data[ATTR_VALUE] == "Active to 0"
|
||||
|
||||
|
||||
async def test_hygrostat_get_humidity_range(hass: HomeAssistant, hk_driver) -> None:
|
||||
async def test_hygrostat_get_humidity_range(
|
||||
hass: HomeAssistant, hk_driver, events
|
||||
) -> None:
|
||||
"""Test if humidity range is evaluated correctly."""
|
||||
entity_id = "humidifier.test"
|
||||
|
||||
@ -302,8 +304,48 @@ async def test_hygrostat_get_humidity_range(hass: HomeAssistant, hk_driver) -> N
|
||||
await acc.run()
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert acc.char_target_humidity.properties[PROP_MAX_VALUE] == 45
|
||||
assert acc.char_target_humidity.properties[PROP_MIN_VALUE] == 40
|
||||
# Set from HomeKit
|
||||
call_set_humidity = async_mock_service(hass, DOMAIN, SERVICE_SET_HUMIDITY)
|
||||
|
||||
char_target_humidity_iid = acc.char_target_humidity.to_HAP()[HAP_REPR_IID]
|
||||
|
||||
hk_driver.set_characteristics(
|
||||
{
|
||||
HAP_REPR_CHARS: [
|
||||
{
|
||||
HAP_REPR_AID: acc.aid,
|
||||
HAP_REPR_IID: char_target_humidity_iid,
|
||||
HAP_REPR_VALUE: 12.0,
|
||||
},
|
||||
]
|
||||
},
|
||||
"mock_addr",
|
||||
)
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert call_set_humidity[-1].data[ATTR_ENTITY_ID] == entity_id
|
||||
assert call_set_humidity[-1].data[ATTR_HUMIDITY] == 40.0
|
||||
assert acc.char_target_humidity.value == 40.0
|
||||
assert events[-1].data[ATTR_VALUE] == "RelativeHumidityHumidifierThreshold to 12.0%"
|
||||
|
||||
hk_driver.set_characteristics(
|
||||
{
|
||||
HAP_REPR_CHARS: [
|
||||
{
|
||||
HAP_REPR_AID: acc.aid,
|
||||
HAP_REPR_IID: char_target_humidity_iid,
|
||||
HAP_REPR_VALUE: 80.0,
|
||||
},
|
||||
]
|
||||
},
|
||||
"mock_addr",
|
||||
)
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert call_set_humidity[-1].data[ATTR_ENTITY_ID] == entity_id
|
||||
assert call_set_humidity[-1].data[ATTR_HUMIDITY] == 45.0
|
||||
assert acc.char_target_humidity.value == 45.0
|
||||
assert events[-1].data[ATTR_VALUE] == "RelativeHumidityHumidifierThreshold to 80.0%"
|
||||
|
||||
|
||||
async def test_humidifier_with_linked_humidity_sensor(
|
||||
|
Loading…
x
Reference in New Issue
Block a user