api.py 820 B

12345678910111213141516171819202122232425262728293031
  1. from fastapi import APIRouter,WebSocket
  2. from database import SessionLocal
  3. from models import DeviceData
  4. from pydantic import BaseModel
  5. from typing import List
  6. from udp_server import web_clients
  7. router = APIRouter()
  8. class DeviceStatus(BaseModel):
  9. dtu_id: str
  10. device_id: str
  11. status: str
  12. timestamp: str
  13. @router.get("/devices", response_model=List[DeviceStatus])
  14. def get_all_data():
  15. db = SessionLocal()
  16. data = db.query(DeviceData).order_by(DeviceData.timestamp.desc()).limit(100).all()
  17. db.close()
  18. return data
  19. @router.websocket("/ws")
  20. async def websocket_endpoint(websocket: WebSocket):
  21. await websocket.accept()
  22. web_clients.add(websocket)
  23. try:
  24. while True:
  25. await websocket.receive_text() #保持连接活跃
  26. except:
  27. web_clients.discard(websocket)