Server: quiet hours (no wake overnight), zero firmware changes needed
Build and push server image / build-and-push (push) Successful in 36s
Build and push server image / build-and-push (push) Successful in 36s
Purely a server-side decision: GET /frame/config hands back a longer refresh_interval_s while quiet hours are in effect (exactly the seconds until they end), and clamps the normal interval so the device's next wake lands at the boundary instead of wandering into the window, when outside it but approaching. A device already mid-sleep when quiet hours begin can still land one wake inside the window -- unavoidable without touching the firmware, since it has no wall-clock awareness -- but from that wake on it sleeps straight through to the end. Window is "HH:MM"-"HH:MM", wrap-past-midnight aware (e.g. 22:00-07:00), in the server's local timezone -- added tzdata to the Dockerfile since python:3.12-slim doesn't include it and TZ would otherwise silently resolve to nothing and fall back to UTC. Also fixed the "overdue" device-status check to account for quiet hours: without this it would falsely flag a device sleeping through a long quiet window as unreachable.
This commit is contained in:
+17
-2
@@ -51,7 +51,8 @@ algorithm itself -- it just streams the response straight to the panel.
|
||||
toggle, upcoming-photos count, now-displaying + drag-to-reorder
|
||||
upcoming grid -- not Immich URL/API key, see Setup above)
|
||||
- `GET /api/albums` -- lists Immich albums (used by the config UI)
|
||||
- `POST /api/config` -- saves album/order/orientation/refresh_interval_s/smart_crop_faces/queue_target_len.
|
||||
- `POST /api/config` -- saves
|
||||
album/order/orientation/refresh_interval_s/smart_crop_faces/queue_target_len/quiet_hours_*.
|
||||
`orientation` (`landscape`, `portrait`, `landscape_flipped`,
|
||||
`portrait_flipped`) matches how the frame is physically hung: photos
|
||||
are composed/cropped for that shape (portrait crops at 480x800), then
|
||||
@@ -60,7 +61,21 @@ algorithm itself -- it just streams the response straight to the panel.
|
||||
(QRs, text, battery indicator, face labels) still renders in native
|
||||
panel orientation, so on a portrait-hung frame it appears rotated
|
||||
90° to the viewer -- QR codes scan fine at any rotation, but the text
|
||||
reads sideways. A known limitation, not planned to change soon
|
||||
reads sideways. A known limitation, not planned to change soon.
|
||||
`quiet_hours_enabled`/`quiet_hours_start`/`quiet_hours_end`
|
||||
(`"HH:MM"`, may wrap past midnight, e.g. `22:00`-`07:00`) don't touch
|
||||
the device at all -- purely a server decision about what
|
||||
`refresh_interval_s` to hand back from `GET /frame/config` below,
|
||||
computed in `_effective_refresh_interval_s`. Uses the server's local
|
||||
timezone (`TZ` in `docker-compose.yml.example` -- the image needs
|
||||
`tzdata` for a named zone to actually resolve, already installed in
|
||||
the provided `Dockerfile`). The device can still land one wake right
|
||||
at the start of the window (nothing server-side can prevent that
|
||||
without touching the firmware, since the device doesn't know wall-clock
|
||||
time), but from that wake on it's told to sleep exactly until the
|
||||
window ends. The "overdue" indicator in `/api/queue`'s `device` object
|
||||
also accounts for this -- it won't falsely flag a device that's
|
||||
legitimately sleeping through a long quiet-hours window
|
||||
- `GET /frame/image` -- returns the current photo pre-processed into the
|
||||
panel's raw 800x480, 4-bit-per-pixel, 2-pixels-per-byte format
|
||||
(`application/octet-stream`, exactly 192,000 bytes). **Side-effect-free**
|
||||
|
||||
Reference in New Issue
Block a user