33 lines
		
	
	
		
			No EOL
		
	
	
		
			788 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			No EOL
		
	
	
		
			788 B
		
	
	
	
		
			Python
		
	
	
	
	
	
import dataclasses
 | 
						|
 | 
						|
from ble.interface import Advertisement
 | 
						|
from image.conversion import DEVICE_SPECS, DeviceSpec, ModelId
 | 
						|
 | 
						|
 | 
						|
@dataclasses.dataclass
 | 
						|
class DeviceData:
 | 
						|
    name: str
 | 
						|
    model: ModelId
 | 
						|
    firmware: int
 | 
						|
    hardware: int
 | 
						|
    battery: float
 | 
						|
    voltage: float
 | 
						|
 | 
						|
def parse_advertisement(adv: Advertisement) -> DeviceData:
 | 
						|
 | 
						|
    data = adv.manufacturer_data[0x5053]
 | 
						|
    device_id = data[0]
 | 
						|
    volt = data[1] / 10
 | 
						|
    firmware = (data[2] << 8) + data[3]
 | 
						|
    hardware = (data[0] << 8) + data[4]
 | 
						|
 | 
						|
    device = DEVICE_SPECS[device_id]
 | 
						|
 | 
						|
    return DeviceData(
 | 
						|
        name=adv.name,
 | 
						|
        model=device_id,
 | 
						|
        firmware=firmware,
 | 
						|
        hardware=hardware,
 | 
						|
        battery=(volt - device.min_voltage) * 100 / (device.max_voltage - device.min_voltage),
 | 
						|
        voltage=volt
 | 
						|
    ) |