gicisky/core/advertisement.py
2025-11-01 00:16:33 +01:00

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
)