first commit
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""API de contrôle des LEDs WS2812b."""
|
||||
|
||||
import logging
|
||||
from fastapi import APIRouter, Request, Query
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/leds/status")
|
||||
async def led_status(request: Request):
|
||||
led = request.app.state.led_service
|
||||
return {"effect": led.current_effect}
|
||||
|
||||
|
||||
@router.post("/leds/effect")
|
||||
async def set_effect(
|
||||
request: Request,
|
||||
effect: str = Query(..., description="idle | countdown | capture | captured | finished | printing | error | disabled | off"),
|
||||
):
|
||||
"""Force un effet LED (admin uniquement, pas de vérification auth ici — à protéger via Zoraxy)."""
|
||||
valid = ("idle", "countdown", "capture", "captured", "finished", "printing", "error", "disabled", "off")
|
||||
if effect not in valid:
|
||||
return JSONResponse({"error": f"Effet invalide. Valeurs: {valid}"}, status_code=400)
|
||||
|
||||
led = request.app.state.led_service
|
||||
ws = request.app.state.ws_manager
|
||||
led.play(effect)
|
||||
await ws.broadcast({"type": "led_effect", "effect": effect})
|
||||
return {"ok": True, "effect": effect}
|
||||
|
||||
|
||||
@router.post("/leds/color")
|
||||
async def set_color(
|
||||
request: Request,
|
||||
r: int = Query(default=0, ge=0, le=255),
|
||||
g: int = Query(default=0, ge=0, le=255),
|
||||
b: int = Query(default=0, ge=0, le=255),
|
||||
):
|
||||
"""Couleur fixe immédiate sur tout l'anneau."""
|
||||
led = request.app.state.led_service
|
||||
led.set_color(r, g, b)
|
||||
return {"ok": True, "color": [r, g, b]}
|
||||
|
||||
|
||||
@router.post("/leds/off")
|
||||
async def leds_off(request: Request):
|
||||
led = request.app.state.led_service
|
||||
led.play("off")
|
||||
return {"ok": True}
|
||||
Reference in New Issue
Block a user