Admin UI fixes:
- Track deleted devices to prevent MQTT re-registration from stale messages
- Broadcast device_deleted event via WebSocket to sync all clients
- Add removeDeviceFromUI() to clean up device cards and pending timers
- Improve delete error handling with user feedback
Firmware fixes (v1.0.7):
- Fix device type strings to match API expectations (heart_rate vs Heart Rate)
- Clean up BLE services when switching device types (prevents service accumulation)
- Call stop() before setupHeartRate()/setupTreadmill() to reset NimBLE state
- Track service pointers for proper cleanup with pServer->removeService()
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Firmware:
- Fixed WiFi reconnection bug after power cycle by adding WiFi.persistent(false)
and disabling auto-connect/auto-reconnect
- Fixed AP mode not broadcasting by properly handling WIFI_AP_STA mode transitions
- Refactored to service-oriented architecture:
- device_state: Central state management with event callbacks
- config_service: NVS persistence (renamed from config_manager)
- wifi_service: WiFi STA/AP management (extracted from main.cpp)
- mqtt_service: MQTT client and message routing (extracted from main.cpp)
- ble_service: BLE GATT services (renamed from ble_services)
- web_service: HTTP configuration portal (renamed from web_portal)
- main.cpp reduced from ~470 lines to ~60 lines (thin orchestrator)
- Each service is self-contained with setup()/loop() pattern
Backend:
- Added heart rate variation endpoint
- UI improvements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix HR variation to use smooth sinusoidal algorithm instead of erratic jumps
- Clamp HR values to ±3 of target (was exceeding bounds)
- Add Pydantic Field validation for device values in API
- Add runtime BPM validation in MCP server
- Add battery slider control for HR monitor
- Add distance display and reset button for treadmill
- Add UI/API version display in header
- Firmware: web portal improvements, battery/distance controls
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features:
- MCP server with tools for AI-controlled device simulation
- FastAPI backend with REST API and WebSocket support
- Real-time device updates via WebSocket
- Web UI for manual device control
- ESP32 firmware for BLE device simulation
- Docker containerization with MQTT broker
Supported device types:
- Heart Rate Monitor (BLE Heart Rate Service)
- Treadmill (BLE Fitness Machine Service)
- Bike Trainer (BLE Cycling Power Service)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>