diff --git a/homeassistant/components/matter/lock.py b/homeassistant/components/matter/lock.py
index 66b5040184c4f92d6dd379d39a08912a446ddfd4..ae01faa3bc75898c224f3d6a071f9de51faeae0e 100644
--- a/homeassistant/components/matter/lock.py
+++ b/homeassistant/components/matter/lock.py
@@ -99,7 +99,7 @@ class MatterLock(MatterEntity, LockEntity):
             # the lock should acknowledge the command with an attribute update
             # but bad things may happen, so guard against it with a timer.
             self._optimistic_timer = self.hass.loop.call_later(
-                5, self._reset_optimistic_state
+                30, self._reset_optimistic_state
             )
         code: str | None = kwargs.get(ATTR_CODE)
         code_bytes = code.encode() if code else None
@@ -116,7 +116,7 @@ class MatterLock(MatterEntity, LockEntity):
             # the lock should acknowledge the command with an attribute update
             # but bad things may happen, so guard against it with a timer.
             self._optimistic_timer = self.hass.loop.call_later(
-                5, self._reset_optimistic_state
+                30, self._reset_optimistic_state
             )
         code: str | None = kwargs.get(ATTR_CODE)
         code_bytes = code.encode() if code else None
@@ -140,7 +140,7 @@ class MatterLock(MatterEntity, LockEntity):
         # the lock should acknowledge the command with an attribute update
         # but bad things may happen, so guard against it with a timer.
         self._optimistic_timer = self.hass.loop.call_later(
-            5, self._reset_optimistic_state
+            30 if self._attr_is_locked else 5, self._reset_optimistic_state
         )
         code: str | None = kwargs.get(ATTR_CODE)
         code_bytes = code.encode() if code else None
diff --git a/tests/components/matter/fixtures/nodes/door-lock.json b/tests/components/matter/fixtures/nodes/door-lock.json
index 8a3f0fd68ddf82679fda81ad70f3f59453b5ed26..b6231e04af4cc51315fbf83b8963a11ace2eaa9c 100644
--- a/tests/components/matter/fixtures/nodes/door-lock.json
+++ b/tests/components/matter/fixtures/nodes/door-lock.json
@@ -469,7 +469,7 @@
     "1/47/65531": [
       0, 1, 2, 14, 15, 16, 19, 65528, 65529, 65530, 65531, 65532, 65533
     ],
-    "1/257/0": 1,
+    "1/257/0": 0,
     "1/257/1": 0,
     "1/257/2": true,
     "1/257/3": 1,
diff --git a/tests/components/matter/test_door_lock.py b/tests/components/matter/test_door_lock.py
index 84f0e58a647798f863f34ccceee1106ea63450f2..461cc1b7f3d2a8bb2cb614a9b2acda99f92521c9 100644
--- a/tests/components/matter/test_door_lock.py
+++ b/tests/components/matter/test_door_lock.py
@@ -8,11 +8,10 @@ import pytest
 
 from homeassistant.components.lock import (
     STATE_LOCKED,
-    STATE_OPEN,
     STATE_UNLOCKED,
     LockEntityFeature,
 )
-from homeassistant.const import ATTR_CODE, STATE_LOCKING, STATE_UNKNOWN
+from homeassistant.const import ATTR_CODE, STATE_LOCKING, STATE_OPENING, STATE_UNKNOWN
 from homeassistant.core import HomeAssistant
 from homeassistant.exceptions import ServiceValidationError
 import homeassistant.helpers.entity_registry as er
@@ -64,6 +63,7 @@ async def test_lock(
     )
     matter_client.send_device_command.reset_mock()
 
+    await hass.async_block_till_done()
     state = hass.states.get("lock.mock_door_lock_lock")
     assert state
     assert state.state == STATE_LOCKING
@@ -208,9 +208,14 @@ async def test_lock_with_unbolt(
         timed_request_timeout_ms=1000,
     )
 
+    await hass.async_block_till_done()
+    state = hass.states.get("lock.mock_door_lock_lock")
+    assert state
+    assert state.state == STATE_OPENING
+
     set_node_attribute(door_lock_with_unbolt, 1, 257, 3, 0)
     await trigger_subscription_callback(hass, matter_client)
 
     state = hass.states.get("lock.mock_door_lock_lock")
     assert state
-    assert state.state == STATE_OPEN
+    assert state.state == STATE_LOCKED