|  | @@ -0,0 +1,28 @@
 | 
	
		
			
				|  |  | +"""Lock parser."""
 | 
	
		
			
				|  |  | +from __future__ import annotations
 | 
	
		
			
				|  |  | +from ..const import LockStatus
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import logging
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +_LOGGER = logging.getLogger(__name__)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def process_wolock(data: bytes, mfr_data: bytes | None) -> dict[str, bool | int]:
 | 
	
		
			
				|  |  | +    """Process woLock services data."""
 | 
	
		
			
				|  |  | +    if mfr_data is None:
 | 
	
		
			
				|  |  | +        return {}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    _LOGGER.debug("mfr_data: %s", mfr_data.hex())
 | 
	
		
			
				|  |  | +    _LOGGER.debug("data: %s", data.hex())
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +        "battery": data[2] & 0b01111111,
 | 
	
		
			
				|  |  | +        "calibration": bool(mfr_data[7] & 0b10000000),
 | 
	
		
			
				|  |  | +        "status": LockStatus(mfr_data[7] & 0b01110000),
 | 
	
		
			
				|  |  | +        "update_from_secondary_lock": bool(mfr_data[7] & 0b00001000),
 | 
	
		
			
				|  |  | +        "door_open": bool(mfr_data[7] & 0b00000100),
 | 
	
		
			
				|  |  | +        "double_lock_mode": bool(mfr_data[8] & 0b10000000),
 | 
	
		
			
				|  |  | +        "unclosed_alarm": bool(mfr_data[8] & 0b00100000),
 | 
	
		
			
				|  |  | +        "unlocked_alarm": bool(mfr_data[8] & 0b00010000),
 | 
	
		
			
				|  |  | +        "auto_lock_paused": bool(mfr_data[8] & 0b00000010),
 | 
	
		
			
				|  |  | +    }
 |