Let the screen own its settings, answer its pings, and show them as cards (0.2.57)
A code check found that a setting changed on a screen could jump back. ESP Screen Manager kept its own copy and sent it with every full update: after a restart of the app or Home Assistant, every hour and after every save. A change it missed while it or Home Assistant restarted came back to the old value, a reported setting was lost when save() refused a layout with a removed entity, and every step of a held - or + on the screen resent the whole screen. Firmware 0.2.49 offers every setting as an entity over the existing preference records (no migration): Night mode, Night starts/ends, 24-hour clock, Back to page 1 and after how long, Back to page 1 on standby, Swipe between pages and, on the Guition, Rotation, next to the four numbers and Auto standby. The settings page and every entity write through settings_screen::set(), which clamps like the page and stores, applies and reports only a real change. screen_message answers a caller that asks with its status and layout revision (api.respond). The settings tile opens without Home Assistant. The app reads and changes the settings of such a screen through its entities and leaves them out of the layout message. Older firmware keeps them with the layout; a setting it reports is stored without the tile check and not sent back. Pings to screens that can answer learn at once whether a tile is missing and resend after 30 s instead of 120 s. Layout sensors come back after a Home Assistant restart, and weather tiles only ask for the forecasts the entity supports. The editor's settings form is now three cards with the rows of the screen's own page; a change applies at once, and an offline screen shows its values as unknown. Checked with 245 Python and 14 C++ tests, generate_packages --check, ESP32 builds of both profiles, host-build API tests on both boards, and a live run against Home Assistant 2026.9.1 with a temporary host device. Firmware 0.2.49. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -50,9 +50,11 @@ physically tap; an agent cannot replace that with software coordinates.
|
||||
- Keep base hardware and UI in `home-like-2432s028.yaml`; personal data belongs
|
||||
in the gitignored local profiles.
|
||||
- Screen settings live in one table: `components/smart_display/settings_screen.h` draws the
|
||||
page on the screen, `SETTING_RULES` in the add-on validates and stores the same keys.
|
||||
docs/SETTINGS.md is the end-to-end recipe for adding one; never widen the eleven-key
|
||||
`settings` block older firmware insists on.
|
||||
page on the screen, `SETTING_RULES` in the add-on validates the same keys. Firmware 0.2.49+
|
||||
owns them: every writer (the page, the entities in both profiles) goes through
|
||||
`settings_screen::set()`, and the add-on changes them through the entities in
|
||||
`SETTING_ENTITIES`, never through the layout message. docs/SETTINGS.md is the end-to-end
|
||||
recipe for adding one; never widen the eleven-key `settings` block older firmware insists on.
|
||||
- Preserve fixed pages, hidden navigation at six tiles or fewer, and a
|
||||
minimum default standby of 600 seconds. Don't reintroduce free scrolling
|
||||
without physically testing for touch/navigation regressions.
|
||||
|
||||
Reference in New Issue
Block a user