Skip to content

Commit 40f58c3

Browse files
authored
Fix adv_parser for Switchbot Lock Pro (#243)
1 parent 4fffc63 commit 40f58c3

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

switchbot/adv_parser.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from .adv_parsers.hub2 import process_wohub2
2020
from .adv_parsers.humidifier import process_wohumidifier
2121
from .adv_parsers.light_strip import process_wostrip
22-
from .adv_parsers.lock import process_wolock
22+
from .adv_parsers.lock import process_wolock, process_wolock_pro
2323
from .adv_parsers.meter import process_wosensorth
2424
from .adv_parsers.motion import process_wopresence
2525
from .adv_parsers.plug import process_woplugmini
@@ -153,7 +153,7 @@ class SwitchbotSupportedType(TypedDict):
153153
"$": {
154154
"modelName": SwitchbotModel.LOCK_PRO,
155155
"modelFriendlyName": "Lock Pro",
156-
"func": process_wolock,
156+
"func": process_wolock_pro,
157157
"manufacturer_id": 2409,
158158
},
159159
"x": {

switchbot/adv_parsers/lock.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,27 @@ def process_wolock(data: bytes | None, mfr_data: bytes | None) -> dict[str, bool
2929
"auto_lock_paused": bool(mfr_data[8] & 0b00000010),
3030
"night_latch": bool(mfr_data[9] & 0b00000001) if len(mfr_data) > 9 else False,
3131
}
32+
33+
34+
def process_wolock_pro(
35+
data: bytes | None, mfr_data: bytes | None
36+
) -> dict[str, bool | int]:
37+
_LOGGER.debug("mfr_data: %s", mfr_data.hex())
38+
if data:
39+
_LOGGER.debug("data: %s", data.hex())
40+
41+
res = {
42+
"battery": data[2] & 0b01111111 if data else None,
43+
"calibration": bool(mfr_data[7] & 0b10000000),
44+
"status": LockStatus((mfr_data[7] & 0b00111000) >> 3),
45+
"door_open": bool(mfr_data[8] & 0b01100000),
46+
# Double lock mode is not supported on Lock Pro
47+
"update_from_secondary_lock": False,
48+
"double_lock_mode": False,
49+
"unclosed_alarm": bool(mfr_data[11] & 0b10000000),
50+
"unlocked_alarm": bool(mfr_data[11] & 0b01000000),
51+
"auto_lock_paused": bool(mfr_data[8] & 0b100000),
52+
"night_latch": bool(mfr_data[9] & 0b00000001),
53+
}
54+
_LOGGER.debug(res)
55+
return res

0 commit comments

Comments
 (0)