Fix MQTT Lock state reset to unknown when a reset payload is received (#153647)

This commit is contained in:
Jan Bouwhuis
2025-10-04 17:32:18 +02:00
committed by Franck Nijhof
parent a3d1aa28e7
commit 0009a7a042
2 changed files with 12 additions and 1 deletions

View File

@@ -188,7 +188,10 @@ class MqttLock(MqttEntity, LockEntity):
return
if payload == self._config[CONF_PAYLOAD_RESET]:
# Reset the state to `unknown`
self._attr_is_locked = None
self._attr_is_locked = self._attr_is_locking = None
self._attr_is_unlocking = None
self._attr_is_open = self._attr_is_opening = None
self._attr_is_jammed = None
elif payload in self._valid_states:
self._attr_is_locked = payload == self._config[CONF_STATE_LOCKED]
self._attr_is_locking = payload == self._config[CONF_STATE_LOCKING]

View File

@@ -75,6 +75,7 @@ CONFIG_WITH_STATES = {
"state_opening": "opening",
"state_unlocked": "unlocked",
"state_unlocking": "unlocking",
"state_jammed": "jammed",
}
}
}
@@ -89,6 +90,7 @@ CONFIG_WITH_STATES = {
(CONFIG_WITH_STATES, "opening", LockState.OPENING),
(CONFIG_WITH_STATES, "unlocked", LockState.UNLOCKED),
(CONFIG_WITH_STATES, "unlocking", LockState.UNLOCKING),
(CONFIG_WITH_STATES, "jammed", LockState.JAMMED),
],
)
async def test_controlling_state_via_topic(
@@ -111,6 +113,12 @@ async def test_controlling_state_via_topic(
state = hass.states.get("lock.test")
assert state.state == lock_state
async_fire_mqtt_message(hass, "state-topic", "None")
await hass.async_block_till_done()
state = hass.states.get("lock.test")
assert state.state == STATE_UNKNOWN
@pytest.mark.parametrize(
("hass_config", "payload", "lock_state"),