""" VitalLink Main System Runner Runs the complete system with real and/or simulated wristbands """ import asyncio import aiohttp import time import struct from wristband_manager import WristbandManager, WristbandType from config_system import WristbandConfig import sys class VitalLinkSystem: """Main system orchestrator""" def __init__(self): self.manager = WristbandManager() self.config = WristbandConfig() self.backend_url = self.config.get("backend_url", "http://localhost:8000") self.running = False self.monitoring_task = None async def initialize(self): print("\n" + "=" * 80) print("VitalLink System Initialization") print("=" * 80 + "\n") backend_ok = await self.check_backend() if not backend_ok: print("\nāš ļø Warning: Backend not running. System will wait for backend...") if self.config.get("auto_scan_ble", False): timeout = self.config.get("scan_timeout", 10.0) await self.manager.scan_for_real_bands(timeout) for band_config in self.config.get_real_bands() or []: self.manager.add_real_band( band_config["band_id"], band_config["ble_address"] ) for band_config in self.config.get_simulated_bands() or []: self.manager.add_simulated_band( band_config["band_id"], band_config.get("profile", "stable") ) self.manager.print_inventory() async def check_backend(self): try: async with aiohttp.ClientSession() as session: async with session.get( f"{self.backend_url}/", timeout=aiohttp.ClientTimeout(total=3) ) as resp: if resp.status == 200: print(f"āœ“ Backend is running at {self.backend_url}") return True except: print(f"āŒ Backend not reachable at {self.backend_url}") return False return False def _decode_packet_for_display(self, packet: bytes) -> dict: if len(packet) != 16: return {} PKT_STRUCT = struct.Struct("