from fastapi import APIRouter,WebSocket from database import SessionLocal from models import DeviceData from pydantic import BaseModel from typing import List from udp_server import web_clients router = APIRouter() class DeviceStatus(BaseModel): dtu_id: str device_id: str status: str timestamp: str @router.get("/devices", response_model=List[DeviceStatus]) def get_all_data(): db = SessionLocal() data = db.query(DeviceData).order_by(DeviceData.timestamp.desc()).limit(100).all() db.close() return data @router.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() web_clients.add(websocket) try: while True: await websocket.receive_text() #保持连接活跃 except: web_clients.discard(websocket)