1010
1111
1212def process_wolock (data : bytes | None , mfr_data : bytes | None ) -> dict [str , bool | int ]:
13- """Process woLock services data."""
13+ """Support for lock and lock lite process data."""
1414 if mfr_data is None :
1515 return {}
1616
@@ -19,6 +19,7 @@ def process_wolock(data: bytes | None, mfr_data: bytes | None) -> dict[str, bool
1919 _LOGGER .debug ("data: %s" , data .hex ())
2020
2121 return {
22+ "sequence_number" : mfr_data [6 ],
2223 "battery" : data [2 ] & 0b01111111 if data else None ,
2324 "calibration" : bool (mfr_data [7 ] & 0b10000000 ),
2425 "status" : LockStatus ((mfr_data [7 ] & 0b01110000 ) >> 4 ),
@@ -32,26 +33,53 @@ def process_wolock(data: bytes | None, mfr_data: bytes | None) -> dict[str, bool
3233 }
3334
3435
35- def process_wolock_pro (
36- data : bytes | None , mfr_data : bytes | None
37- ) -> dict [str , bool | int ]:
38- _LOGGER .debug ("mfr_data: %s" , mfr_data .hex ())
39- if data :
40- _LOGGER .debug ("data: %s" , data .hex ())
36+ def parse_common_data (mfr_data : bytes | None ) -> dict [str , bool | int ]:
37+ if mfr_data is None :
38+ return {}
4139
42- res = {
43- "battery " : data [ 2 ] & 0b01111111 if data else None ,
40+ return {
41+ "sequence_number " : mfr_data [ 6 ] ,
4442 "calibration" : bool (mfr_data [7 ] & 0b10000000 ),
45- "status" : LockStatus ((mfr_data [7 ] & 0b00111000 ) >> 3 ),
46- "door_open" : bool (mfr_data [8 ] & 0b01100000 ),
47- # Double lock mode is not supported on Lock Pro
48- "update_from_secondary_lock" : False ,
49- "double_lock_mode" : False ,
43+ "status" : LockStatus ((mfr_data [7 ] & 0b01111000 ) >> 4 ),
44+ "update_from_secondary_lock" : bool (mfr_data [8 ] & 0b11000000 ),
45+ "door_open_from_secondary_lock" : bool (mfr_data [8 ] & 0b00100000 ),
46+ "door_open" : bool (mfr_data [8 ] & 0b00010000 ),
47+ "auto_lock_paused" : bool (mfr_data [8 ] & 0b00001000 ),
48+ "battery" : mfr_data [9 ] & 0b01111111 ,
49+ "double_lock_mode" : bool (mfr_data [10 ] & 0b10000000 ),
50+ "is_secondary_lock" : bool (mfr_data [10 ] & 0b01000000 ),
51+ "manual_unlock_linkage" : bool (mfr_data [10 ] & 0b00100000 ),
5052 "unclosed_alarm" : bool (mfr_data [11 ] & 0b10000000 ),
5153 "unlocked_alarm" : bool (mfr_data [11 ] & 0b01000000 ),
52- "auto_lock_paused" : bool (mfr_data [8 ] & 0b100000 ),
53- # Looks like night latch bit is not anymore in ADV
5454 "night_latch" : False ,
5555 }
56- _LOGGER .debug (res )
57- return res
56+
57+
58+ def process_wolock_pro (
59+ data : bytes | None , mfr_data : bytes | None
60+ ) -> dict [str , bool | int ]:
61+ """Support for lock pro process data."""
62+ common_data = parse_common_data (mfr_data )
63+ if not common_data :
64+ return {}
65+
66+ lock_pro_data = {
67+ "low_temperature_alarm" : bool (mfr_data [11 ] & 0b00100000 ),
68+ "left_battery_compartment_alarm" : mfr_data [11 ] & 0b000000100 ,
69+ "right_battery_compartment_alarm" : mfr_data [11 ] & 0b000000010 ,
70+ }
71+ return common_data | lock_pro_data
72+
73+
74+ def process_lock2 (data : bytes | None , mfr_data : bytes | None ) -> dict [str , bool | int ]:
75+ """Support for lock2 process data."""
76+ common_data = parse_common_data (mfr_data )
77+ if not common_data :
78+ return {}
79+
80+ lock2_data = {
81+ "power_alarm" : bool (mfr_data [11 ] & 0b00010000 ),
82+ "battery_status" : mfr_data [11 ] & 0b00000111 ,
83+ }
84+
85+ return common_data | lock2_data
0 commit comments