- float(cmd.get("altitude") or 15) : gère altitude=null retourné
par Gemini pour les commandes sans altitude (land, rtl, status…)
- /command attrape les exceptions et retourne JSON 500 avec le
message d'erreur, évite le "Erreur réseau" opaque dans la page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- init_pymavlink() passe en run_in_executor : ne bloque plus
l'event loop asyncio pendant le démarrage de uvicorn
- Ajout monitor_telemetry() : batterie et mode mis à jour en
continu en cache (même logique que monitor_armed)
- /status et action status lisent telemetry_cache directement,
plus aucun async for bloquant dans les route handlers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- wireclaw_core : expose drone comme global, extrait init()
depuis main() pour permettre l'import par web_server.py ;
corrige aussi le bug drone_armed manquant global dans init
- web_server.py : FastAPI avec process(text) générique
(interpret_command → execute_command), routes GET / POST /command
GET /status, page HTML sobre avec statut temps réel (2s)
et historique des commandes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>