Skip to content

v0.42.0

Choose a tag to compare

@dmellok dmellok released this 08 Jun 02:57

Added

  • Smart sync (JIT rendering) — opt-in per schedule. When enabled on an interval schedule, the scheduler consults each bound device's telemetry-derived predicted_next_wake_at and fires within smart_sync_lead_s seconds of a trusted device's wake instead of on a fixed cadence. The rendered frame is waiting for the panel when it wakes, rather than rendered after the panel paint.

    Falls back to plain interval firing when no bound device is trusted yet (warm-up) or when the schedule has no device bindings. interval_minutes stays in force as a floor so smart sync can't push faster than the configured cadence. Tracked in #10.

    • Heartbeat parser pulls optional sleep_until / next_sleep_s fields from firmware. Falls back to the device's configured sleep_interval_s.
    • 10s debounce on consecutive heartbeats (some firmwares send connect-beat + sleep-beat per wake).
    • Three consecutive on-time wakes within ±60s of prediction flips a device to trusted.
    • Schedule list shows an indicator dot (green active / yellow warming / red blocked) per row.
    • Device cards get a Smart sync section with a plain-English reason line so you can diagnose why a device isn't trusted yet.

    Firmware wire contract for ESP32 / PhotoPainter clients to publish sleep_until is captured in the issue.

Changed

  • Widget card borders removed. .w's 1px outer frame was clipping at rounded corners; the matting gap is the cleaner separator. --edge-weight + --edge tokens stay defined for custom styles that want to re-enable.
  • weather_now_scenic light presets (snow, partly_day, cloudy_day) switched to dark text on their gradients.

Fixed

  • Corner radius slider now live-updates the preview (was being sent but ignored).
  • Battery indicator popover auto-closes 5s after opening and on any click outside.