Commit Graph
19 Commits
Author SHA1 Message Date
Kaloyan DanchevandClaude Opus 4.6 ba4a5d2346 Add WS-based pairing flow, replacing config.json with token file
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
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>
2026-10-25 14:38:10 +02:00
Kaloyan DanchevandClaude Opus 4.6 483b19f286 Fix WS API: read lovelace config from .storage file directly
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
HA 2026.10 stores dashboard configs as .storage/lovelace.{url_path}
with hyphens replaced by underscores. Direct file read is more reliable
than internal hass.data access which varies across versions.

Also added error logging to async_setup_entry for WS registration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-25 13:37:40 +02:00
Kaloyan DanchevandClaude Opus 4.6 d681f20884 Add HACS integration, 8 Lovelace cards, and pairing page
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
New HA integration (integration/custom_components/luma_home/) with:
- WS API: luma/get_config (Lovelace→v2 bridge), luma/pair, luma/pair_status
- Config flow with dashboard URL path setting

8 HACS frontend cards (cards/) matching TV app visual spec:
- toggle, range, climate, media, curtain, action, vacuum, weather
- Glass card design: rgba(36,40,48,0.75) bg, 22px radius, accent glows

Pairing page (pairing/luma-pair.html) for TV token provisioning.
Web dashboard (web-dashboard/) — legacy config editor (deprecated).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-25 13:19:26 +02:00
Kaloyan DanchevandClaude Opus 4.6 a890ba6baf Clip glow to card inset and simplify slider modal UX
Release PR / Maintain Version Packages PR (push) Canceled after 0s
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Inset glow clip rects by 6px on all card types to prevent radial
glow from bleeding past rounded corners. Simplify slider modal:
remove close button (Back key closes), Left/Right adjust the
focused slider, Up/Down move between sliders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 15:55:33 +03:00
Kaloyan DanchevandClaude Opus 4.6 fcc7a41f02 Add slider modal for Range, Climate, and Cover cards
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
OK press on Range/Climate/Curtain/Blinds cards now opens a modal
overlay with slider controls instead of direct value adjustment.
Scroll wheel and D-pad left/right adjust values within the modal.
RGB lights with color_temp attribute get a second slider for color
temperature (mireds). Adds SetColorTemp HA effect for the light
service call.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 15:41:17 +03:00
Kaloyan DanchevandClaude Opus 4.6 4044e4db50 Radial glow effects, RGB accent colors, and scroll fix
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
- Replace linear ha_card_fill with radial glow using colored Shadow
  (the SDF degenerates to a circle for square rects with radius=half)
- Add ha_entity_accent_color() to extract rgb_color from HA entities
  for RGB LED strip cards, falling back to warm orange
- Apply radial glow to toggle, range, climate, media, and cover cards
  with clip rects to prevent bleed between cards
- Fix scroll dispatch to include Curtain/Blinds card types
- Media card glow emanates from album art center proportional to volume
- Cover card: curtain glows from center, blinds from top

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 15:32:16 +03:00
Kaloyan DanchevandClaude Opus 4.6 c258a0e29a Smooth sparkline, portrait media card, and dynamic grid layout
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
- Replace bar-chart sparkline with catmull-rom interpolated area chart
  using per-pixel columns and a bright top edge line
- Rework media card to portrait layout: large centered album art circle
  with glow, vertically stacked track info below, centered text
- Implement cell-occupation grid to support 2-row tall media cards
  without breaking the 4-column layout for other cards

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 15:06:22 +03:00
Kaloyan DanchevandClaude Opus 4.6 e29050dc32 Add curtain/blinds cover cards with daylight glow and navy darkening
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
New HaCardType::Curtain and HaCardType::Blinds with:
- Scroll to adjust position (10% steps via cover.set_cover_position)
- OK to toggle open/close
- Dark navy overlay when closed, warm daylight glow when open
- Curtain glow radiates from center, blinds from top

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.2.0
2026-10-24 14:46:09 +03:00
Kaloyan DanchevandClaude Opus 4.6 c8e6fcb659 Redesign HA cards with fill-based backgrounds and add media player
Navigation: arrow keys now always navigate the card grid (removed
left/right value adjustment from Range/Climate cards). Scroll wheel
on the Magic Remote adjusts range values instead.

Cards: 4-column layout with taller (160px) cards. Each card shows a
fill bar proportional to its value — brightness for lights, target
temperature for climate, volume for media. State-based accent colors
(warm yellow for lights, orange/red for heating, blue for cooling,
purple for media playback).

New card type: Media (media_player) — shows artist, track title,
volume fill, and album art placeholder. OK toggles play/pause,
scroll wheel adjusts volume.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 13:48:10 +03:00
Kaloyan DanchevandClaude Opus 4.6 a7dd876c63 Fix D-pad input by using RPATH instead of RUNPATH
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
Buster's linker defaults to RUNPATH, which is searched after
LD_LIBRARY_PATH. The TV's LD_LIBRARY_PATH includes /usr/lib which
has the system SDL2 (without remote control input support). With
RPATH, $ORIGIN/lib is searched first, loading the SDL-webOS community
fork that handles Magic Remote D-pad key events.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 13:25:06 +03:00
Kaloyan DanchevandClaude Opus 4.6 df271d738c Add Docker cross-compilation for webOS ARM (glibc 2.28)
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
Debian buster base matches the TV's glibc version. Includes fake
WEBOS_NDK wrapping standard cross-compiler, stub shared libraries
for luna-service2 and glib-2.0, and a build script that produces
a deployable ARM soft-float binary.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 12:56:57 +03:00
Kaloyan DanchevandClaude Opus 4.6 dce4f172ca Add visual config editor for HA tab
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
Self-contained HTML page that connects to HA WebSocket for entity
discovery, provides visual editing of rooms/cards/weather/vacuum
config, and exports config.json. Hosted from HA's /local/ directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 12:23:21 +03:00
Kaloyan DanchevandClaude Opus 4.6 764af371b9 Add glass card rendering and 6 card types for HA tab
Implement the full Home Assistant tab with room-based navigation
and glass-morphism card rendering:

- Toggle card: on/off for lights, switches, covers with state indicator
- Range card: dimmable lights with brightness bar and D-pad ±10% control
- Climate card: current/target temp, HVAC mode, D-pad ±0.5°C, sparkline
- Action card: one-shot activation for scenes and scripts
- Vacuum card: summary card that opens room selection modal
- Weather card: hero card with condition icon, temp, humidity, wind

Navigation: room tabs (horizontal pills), card grid (3-col), vacuum
modal with room multi-select, cleaning mode cycle, and start button.
Back button cascades: vacuum modal → card grid → room tabs → Home page.

Glass design: rgba(255,255,255,0.12) fill, 22px radius, 1px border at
0.15 opacity, elevated shadow on focus. Accent color #7EB8DA for active
entities, warm orange for heating, cool blue for cooling.

Wires Effect::Ha to dispatch toggle/brightness/temperature/scene/vacuum
service calls through ha_client. Adds 6 new SVG icons matching the
existing Lucide stroke style.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 12:14:07 +03:00
Kaloyan DanchevandClaude Opus 4.6 98dd75ab0e Add Notification Center and Game Optimizer themes
Extend Luma-style dark theme to two more Enact web overlays:
- com.webos.app.notificationcenter: dark pills, transparent
  compositor, notification-specific components
- com.webos.app.gameoptimizer: same plus GameItem, GameButton,
  GameSwitch, GamePanel custom components

Rename build.js → build.cjs (ESM compat) and update to build
all three themes from a single script.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 12:07:09 +03:00
Kaloyan DanchevandClaude Opus 4.6 14db4f6e71 Add Home Assistant WebSocket client module
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
- 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>
2026-10-24 12:00:09 +03:00
Kaloyan DanchevandClaude Opus 4.6 cbea5a322f Merge Luma launcher fork into monorepo
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
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>
2026-10-24 11:52:55 +03:00
Kaloyan DanchevandClaude Opus 4.6 bc3ca0f3b9 Add build script and gitignore for settings theme
Build script minifies and base64-encodes the theme for telnet transfer.
Outputs to settings-theme/dist/ (gitignored).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 11:44:04 +03:00
Kaloyan DanchevandClaude Opus 4.6 ad306bc6bc Add Settings app transparent theme (V5.6)
Enact-injected CSS/JS theme that makes com.palm.app.settings fully
transparent so the Luma wallpaper shows through. Uses PalmSystem
compositor transparency + a global wildcard to strip all backgrounds,
then selectively restores dark pills (0.65 opacity) on menu items and
white pills on focused elements.

Key features:
- Dark transparent pills on all menu items (both sidebar tabs and
  content items)
- White pill + dark text on focused items
- Collapsed sidebar: white circle with dark icon for selected tab
- Disabled items: forced opacity on content children to remain readable
- All CSS transitions/animations disabled to prevent grey intermediate
  states during navigation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 11:41:25 +03:00
Kaloyan DanchevandClaude Opus 4.6 332bbc8fe2 Initial commit — Luma Home trampoline for webOS 5/6
Bind-mounts a transparent web page over LG Home that launches Luma
via WebOSServiceBridge, with a subscription-based background watcher
as fallback. Tested on LG 65NANO813PA, webOS 6.5.3.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-23 19:01:45 +03:00