import asyncio, websockets, time

async def run():
    uri = "ws://192.168.40.90:8266"
    async with websockets.connect(uri) as ws:
        # Auth
        data = await asyncio.wait_for(ws.recv(), timeout=5)
        await ws.send(b'claw2287\r\n')
        await asyncio.sleep(0.5)
        data = await asyncio.wait_for(ws.recv(), timeout=5)
        
        # Interrupt any running code
        await ws.send(b'\x03')
        await asyncio.sleep(0.3)
        try:
            await asyncio.wait_for(ws.recv(), timeout=1)
        except: pass
        
        # Run script
        cmd = b"exec(open('/dtu_hm_provision.py').read())\r\n"
        await ws.send(cmd)
        
        # Collect output for 75 seconds
        deadline = time.time() + 75
        while time.time() < deadline:
            try:
                data = await asyncio.wait_for(ws.recv(), timeout=2)
                if isinstance(data, bytes):
                    print(data.decode('utf-8', errors='replace'), end='', flush=True)
            except asyncio.TimeoutError:
                pass
            except Exception as e:
                print(f"\nError: {e}")
                break

asyncio.run(run())
