Skip to content

Commit 3ed6ef9

Browse files
authored
Fix incorrect lock state (#252)
* Fix incorrect lock state * Fix * Linting
1 parent 47e2b4c commit 3ed6ef9

3 files changed

Lines changed: 43 additions & 22 deletions

File tree

simplipy/lock.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class LockStates(Enum):
1515
unknown = 99
1616

1717

18-
SET_STATE_MAP = {LockStates.locked: "lock", LockStates.unlocked: "unlock"}
18+
STATE_MAP = {1: LockStates.locked, 2: LockStates.unlocked}
1919

2020

2121
class Lock(EntityV3):
@@ -74,28 +74,34 @@ def state(self) -> LockStates:
7474
if bool(self._system.entity_data[self._serial]["status"]["lockJamState"]):
7575
return LockStates.jammed
7676

77-
raw_state = self._system.entity_data[self._serial]["status"]["lockState"]
77+
if self._system.entity_data[self._serial]["status"]["lockState"] == 1:
78+
return LockStates.locked
7879

79-
try:
80-
return LockStates(raw_state)
81-
except ValueError:
82-
LOGGER.error("Unknown raw lock state: %s", raw_state)
83-
return LockStates.unknown
80+
if self._system.entity_data[self._serial]["status"]["lockState"] == 2:
81+
return LockStates.unlocked
8482

85-
async def _set_lock_state(self, state: LockStates) -> None:
86-
"""Set the lock state."""
83+
LOGGER.error(
84+
"Unknown raw lock state: %s",
85+
self._system.entity_data[self._serial]["status"]["lockState"],
86+
)
87+
return LockStates.unknown
88+
89+
async def lock(self) -> None:
90+
"""Lock the lock."""
8791
await self._api.request(
8892
"post",
8993
f"doorlock/{self._system.system_id}/{self.serial}/state",
90-
json={"state": SET_STATE_MAP[state]},
94+
json={"state": "lock"},
9195
)
9296

93-
self._system.entity_data[self._serial]["status"]["lockState"] = state.value
94-
95-
async def lock(self) -> None:
96-
"""Lock the lock."""
97-
await self._set_lock_state(LockStates.locked)
97+
self._system.entity_data[self._serial]["status"]["lockState"] = 1
9898

9999
async def unlock(self) -> None:
100100
"""Unlock the lock."""
101-
await self._set_lock_state(LockStates.unlocked)
101+
await self._api.request(
102+
"post",
103+
f"doorlock/{self._system.system_id}/{self.serial}/state",
104+
json={"state": "unlock"},
105+
)
106+
107+
self._system.entity_data[self._serial]["status"]["lockState"] = 2

tests/system/test_v3.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131

3232

3333
@pytest.mark.parametrize(
34-
"v3_subscriptions_response", ["subscriptions_alarm_state_response"], indirect=True,
34+
"v3_subscriptions_response",
35+
["subscriptions_alarm_state_response"],
36+
indirect=True,
3537
)
3638
async def test_alarm_state(v3_server):
3739
"""Test handling of a triggered alarm."""
@@ -243,7 +245,8 @@ async def test_missing_events(v3_server):
243245

244246

245247
@pytest.mark.parametrize(
246-
"subscriptions_fixture_filename", ["subscriptions_missing_system_response.json"],
248+
"subscriptions_fixture_filename",
249+
["subscriptions_missing_system_response.json"],
247250
)
248251
async def test_missing_system_info_initial(caplog, v3_server):
249252
"""Test that missing system data on system load is handled correctly."""
@@ -847,7 +850,10 @@ async def test_update_error(v3_server, v3_subscriptions_response, v3_settings_re
847850

848851
async with aiohttp.ClientSession() as session:
849852
simplisafe = await get_api(
850-
TEST_EMAIL, TEST_PASSWORD, session=session, client_id=TEST_CLIENT_ID,
853+
TEST_EMAIL,
854+
TEST_PASSWORD,
855+
session=session,
856+
client_id=TEST_CLIENT_ID,
851857
)
852858

853859
systems = await simplisafe.get_systems()

tests/test_api.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,10 @@ async def test_401_reauth_success(server, v2_subscriptions_response):
102102

103103
async with aiohttp.ClientSession() as session:
104104
simplisafe = await get_api(
105-
TEST_EMAIL, TEST_PASSWORD, session=session, client_id=TEST_CLIENT_ID,
105+
TEST_EMAIL,
106+
TEST_PASSWORD,
107+
session=session,
108+
client_id=TEST_CLIENT_ID,
106109
)
107110
assert simplisafe._client_id == TEST_CLIENT_ID
108111
await simplisafe.get_systems()
@@ -141,7 +144,10 @@ async def test_401_refresh_token_success(server, v2_subscriptions_response):
141144

142145
async with aiohttp.ClientSession() as session:
143146
simplisafe = await get_api(
144-
TEST_EMAIL, TEST_PASSWORD, session=session, client_id=TEST_CLIENT_ID,
147+
TEST_EMAIL,
148+
TEST_PASSWORD,
149+
session=session,
150+
client_id=TEST_CLIENT_ID,
145151
)
146152
assert simplisafe._client_id == TEST_CLIENT_ID
147153
await simplisafe.get_systems()
@@ -254,6 +260,9 @@ async def test_request_error_successful_retry(server, v2_subscriptions_response)
254260

255261
async with aiohttp.ClientSession() as session:
256262
simplisafe = await get_api(
257-
TEST_EMAIL, TEST_PASSWORD, session=session, client_id=TEST_CLIENT_ID,
263+
TEST_EMAIL,
264+
TEST_PASSWORD,
265+
session=session,
266+
client_id=TEST_CLIENT_ID,
258267
)
259268
await simplisafe.get_systems()

0 commit comments

Comments
 (0)