Fix
- #59 Commands silently lost on WiFi-enabled devices (regression in v2026.4.2) — BLE command dispatch is now gated behind a SKU allowlist. Several RGBIC SKUs (H6072, H61E1, H60B0, H612A) advertise BLE but silently drop our BLE write frames; every control attempt was disappearing at the HCI layer. The v2026.4.4 grace period kept the UI from flipflopping but the command itself was still lost. Non-allowlisted SKUs are now cloud-only regardless of what they advertise.
Allowlist policy
BLE command dispatch is an opt-in feature per SKU. The seed list contains just H6199 (reported working in #59). If BLE commands are reliably working for your Govee device, please open an issue referencing #59 with your SKU so it can be added.
You will see an INFO-level log once per unrecognized SKU:
H6199 RGBIC (SKU=H6xxx) is advertising BLE but is not on the BLE command allowlist. Staying cloud-only.
This is expected and not an error. Devices continue to work via the REST API exactly as before BLE support was introduced.
Internal
- New `BLE_COMMAND_SUPPORTED_MODELS` frozenset in `api/ble.py`.
- `_handle_ble_advertisement` refuses enrollment for non-allowlisted SKUs.
- One new unit test covering the refusal path.
Research: `docs/_research/2026-04-13_ble-demotion-issue-59.md`.