Replace the static config.json with a dynamic pairing flow: the TV
shows a 6-digit PIN, the user enters it on the HA pairing web page,
and the TV polls for the provisioned token. On success the token is
persisted and the WS connection fetches entity config via luma/get_config.
New modules:
- ha_token: atomic read/write/remove of HA credentials file
- ha_pairing: background HTTP poll service with getrandom PIN generation
Key changes:
- Settings UI: new HA section with URL entry, connect/disconnect, PIN display
- ha_client: WS config fetch (luma/get_config), Option<u64> pending tracking
- main.rs: token-based startup, pairing effects consolidated into effects()
- renderer: cached GL uniform locations (u_aa, u_texture, u_clip_rounded,
u_clip_radius, u_edge_fade) — no more per-batch GetUniformLocation calls
- view.rs: extracted card_glow() helper, slider_card_target() method
- Pairing thread detached (no join in Drop) to avoid blocking the render loop
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New ha_client.rs: background-thread WebSocket client using tungstenite
with rustls TLS. Handles auth, state subscription, service calls, and
recorder/statistics history fetch for climate graphs. Auto-reconnects
on disconnect with 5s delay.
- HaState added to State struct: tracks connection status, entity states,
and temperature history per entity.
- main.rs loads ha-home/config.json at startup, extracts all referenced
entity IDs, and creates the HaService. ha_tick() drains responses into
state each frame, matching the weather_tick pattern.
- tungstenite 0.24 added to Cargo.toml with handshake + rustls features.
All 84 existing tests pass.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move trampoline files (boot-hook, watcher, overlay) into trampoline/
subdirectory. Add upstream Luma v2.3.1 source at repo root with our
additions:
- Page::Ha (4th nav tab) with placeholder empty state
- HA tab config schema and default entity mapping (ha-home/)
- Nav keys renamed: "home" → "start", new "ha" tab between Apps and Settings
- All state.rs/view.rs/main.rs/tests.rs updated for 4-tab navigation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>