import requests import asyncio from core.entity import Entity class BedscaleWeightResult: def __init__(self, *, tr: float, tl: float, br: float, bl: float): self.top_right = tr self.top_left = tl self.bottom_right = br self.bottom_left = bl # Calculate total if all values available self.total: float | None = None if None not in [bl, br, tl, tr]: self.total = sum([bl, br, tl, tr]) class BedscaleEntity(Entity): def __init__(self, *, ip_address: str, id, name, room): super().__init__(id=id, name=name, room=room, device_type="bedscale") self._ip_address = ip_address async def poll_weights(self) -> BedscaleWeightResult: results = BedscaleWeightResult( tr=await asyncio.run_in_executor(None, self.__poll_scale__, "tr"), tl=await asyncio.run_in_executor(None, self.__poll_scale__, "tl"), br=await asyncio.run_in_executor(None, self.__poll_scale__, "br"), bl=await asyncio.run_in_executor(None, self.__poll_scale__, "bl"), ) # TODO: Sanity checks return results def __poll_scale__(self, leg: str) -> float | None: try: return requests.get(f"{self._ip_address}/sensor/br/").json()["value"] except: return None