Modify behavior of lock groups (#74055)

This commit is contained in:
Erik Montnemery 2022-06-28 10:29:56 +02:00 committed by GitHub
parent 8328f9b623
commit 824de2ef4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 20 deletions

View File

@ -166,7 +166,7 @@ class LockGroup(GroupEntity, LockEntity):
if (state := self.hass.states.get(entity_id)) is not None if (state := self.hass.states.get(entity_id)) is not None
] ]
valid_state = all( valid_state = any(
state not in (STATE_UNKNOWN, STATE_UNAVAILABLE) for state in states state not in (STATE_UNKNOWN, STATE_UNAVAILABLE) for state in states
) )

View File

@ -90,28 +90,10 @@ async def test_state_reporting(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
assert hass.states.get("lock.lock_group").state == STATE_UNAVAILABLE assert hass.states.get("lock.lock_group").state == STATE_UNAVAILABLE
# At least one member unknown or unavailable -> group unknown # The group state is unknown if all group members are unknown or unavailable.
for state_1 in ( for state_1 in (
STATE_JAMMED,
STATE_LOCKED,
STATE_LOCKING,
STATE_UNKNOWN,
STATE_UNLOCKED,
STATE_UNLOCKING,
):
hass.states.async_set("lock.test1", state_1)
hass.states.async_set("lock.test2", STATE_UNAVAILABLE)
await hass.async_block_till_done()
assert hass.states.get("lock.lock_group").state == STATE_UNKNOWN
for state_1 in (
STATE_JAMMED,
STATE_LOCKED,
STATE_LOCKING,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
STATE_UNKNOWN, STATE_UNKNOWN,
STATE_UNLOCKED,
STATE_UNLOCKING,
): ):
hass.states.async_set("lock.test1", state_1) hass.states.async_set("lock.test1", state_1)
hass.states.async_set("lock.test2", STATE_UNKNOWN) hass.states.async_set("lock.test2", STATE_UNKNOWN)
@ -123,6 +105,8 @@ async def test_state_reporting(hass):
STATE_JAMMED, STATE_JAMMED,
STATE_LOCKED, STATE_LOCKED,
STATE_LOCKING, STATE_LOCKING,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
STATE_UNLOCKED, STATE_UNLOCKED,
STATE_UNLOCKING, STATE_UNLOCKING,
): ):
@ -135,6 +119,8 @@ async def test_state_reporting(hass):
for state_1 in ( for state_1 in (
STATE_LOCKED, STATE_LOCKED,
STATE_LOCKING, STATE_LOCKING,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
STATE_UNLOCKED, STATE_UNLOCKED,
STATE_UNLOCKING, STATE_UNLOCKING,
): ):
@ -146,6 +132,8 @@ async def test_state_reporting(hass):
# At least one member unlocking -> group unlocking # At least one member unlocking -> group unlocking
for state_1 in ( for state_1 in (
STATE_LOCKED, STATE_LOCKED,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
STATE_UNLOCKED, STATE_UNLOCKED,
STATE_UNLOCKING, STATE_UNLOCKING,
): ):
@ -157,6 +145,8 @@ async def test_state_reporting(hass):
# At least one member unlocked -> group unlocked # At least one member unlocked -> group unlocked
for state_1 in ( for state_1 in (
STATE_LOCKED, STATE_LOCKED,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
STATE_UNLOCKED, STATE_UNLOCKED,
): ):
hass.states.async_set("lock.test1", state_1) hass.states.async_set("lock.test1", state_1)