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
|
|
) |