Add configurable HomeKit types for valve entities (#177407)

This commit is contained in:
louwii17
2026-09-09 10:38:34 +03:00
committed by GitHub
parent 005d3fb369
commit e6be327f2b
4 changed files with 58 additions and 8 deletions
@@ -505,13 +505,28 @@ class ValveSwitch(ValveBase):
class Valve(ValveBase):
"""Generate a Valve accessory from a HomeAssistant valve."""
def __init__(self, *args: Any) -> None:
def __init__(
self,
hass: HomeAssistant,
driver: HomeDriver,
name: str,
entity_id: str,
aid: int,
config: dict[str, Any],
*args: Any,
) -> None:
"""Initialize a Valve accessory object."""
super().__init__(
TYPE_VALVE,
config.get(CONF_TYPE, TYPE_VALVE),
VALVE_OPEN_STATES,
SERVICE_OPEN_VALVE,
SERVICE_CLOSE_VALVE,
hass,
driver,
name,
entity_id,
aid,
config,
*args,
)
+4
View File
@@ -304,6 +304,10 @@ SENSOR_SCHEMA = BASIC_INFO_SCHEMA.extend(
VALVE_SCHEMA = BASIC_INFO_SCHEMA.extend(
{
vol.Optional(CONF_TYPE): vol.All(
cv.string,
vol.In((TYPE_FAUCET, TYPE_SHOWER, TYPE_SPRINKLER, TYPE_VALVE)),
),
vol.Optional(CONF_LINKED_VALVE_DURATION): cv.entity_domain(INPUT_NUMBER_DOMAIN),
vol.Optional(CONF_LINKED_VALVE_END_TIME): cv.entity_domain(SENSOR_DOMAIN),
}
+34 -1
View File
@@ -244,7 +244,7 @@ async def test_valve_set_state(
hass.states.async_set(entity_id, None)
await hass.async_block_till_done()
acc = Valve(hass, hk_driver, "Valve", entity_id, 5, {CONF_TYPE: TYPE_VALVE})
acc = Valve(hass, hk_driver, "Valve", entity_id, 5, {})
acc.run()
await hass.async_block_till_done()
@@ -286,6 +286,39 @@ async def test_valve_set_state(
assert events[-1].data[ATTR_VALUE] is None
@pytest.mark.parametrize(
("valve_type", "category", "homekit_valve_type"),
[
pytest.param(TYPE_FAUCET, 29, 3, id="faucet"),
pytest.param(TYPE_SHOWER, 30, 2, id="shower"),
pytest.param(TYPE_SPRINKLER, 28, 1, id="sprinkler"),
pytest.param(TYPE_VALVE, 29, 0, id="generic"),
],
)
async def test_valve_type(
hass: HomeAssistant,
hk_driver: HomeDriver,
valve_type: str,
category: int,
homekit_valve_type: int,
) -> None:
"""Test native valve HomeKit type configuration."""
entity_id = f"valve.{valve_type}"
hass.states.async_set(entity_id, STATE_CLOSED)
acc = Valve(
hass,
hk_driver,
"Valve",
entity_id,
5,
{CONF_TYPE: valve_type},
)
assert acc.category == category
assert acc.char_valve_type.value == homekit_valve_type
async def test_vacuum_set_state_with_returnhome_and_start_support(
hass: HomeAssistant, hk_driver, events: list[Event]
) -> None:
+3 -5
View File
@@ -151,11 +151,7 @@ def test_validate_entity_config() -> None:
CONF_LINKED_VALVE_DURATION: "number.valve_duration",
}
},
{
"valve.test": {
CONF_TYPE: "sprinkler", # Extra keys not allowed
}
},
{"valve.test": {CONF_TYPE: "invalid_type"}},
]
for conf in configs:
@@ -291,11 +287,13 @@ def test_validate_entity_config() -> None:
}
}
config = {
CONF_TYPE: TYPE_SPRINKLER,
CONF_LINKED_VALVE_DURATION: "input_number.valve_duration",
CONF_LINKED_VALVE_END_TIME: "sensor.valve_end_time",
}
assert vec({"valve.demo": config}) == {
"valve.demo": {
CONF_TYPE: TYPE_SPRINKLER,
CONF_LINKED_VALVE_DURATION: "input_number.valve_duration",
CONF_LINKED_VALVE_END_TIME: "sensor.valve_end_time",
CONF_LOW_BATTERY_THRESHOLD: DEFAULT_LOW_BATTERY_THRESHOLD,