Files
homeassistant_espscreen/docs/TEST_RESULTS_0252.md
T
Max Gramser b83164d61a Change a screen's settings on the screen itself (0.2.52)
Holding the top bar for about a second and a half opens a settings page on the
screen, with a blue line filling along the top edge while you hold. A built-in
screen.settings tile and the esphome.<screen>_open_settings action open it too.

The page is one constexpr table of rows in settings_screen.h: Brightness,
Night, Screen (clock, back to page 1, swiping, rotation) and This screen (name,
address, firmware, Home Assistant, Restart). Toggles flip on a tap, numbers and
times step with -/+ (a held time walks whole hours), a choice cycles in a chip,
and a row that depends on a switch above it is greyed out. The LVGL objects exist
only while the page is open: +608 bytes of RAM and +10.7 KB of flash on the CYD.
A change is saved, applied and reported through the existing screen_setting
event, so ESP Screens shows the same value within a second.

New setting auto_home (default on, 2 minutes): an open card, the settings page
or a later page goes back to page 1 after that long without a touch, not only on
standby. It travels beside the frozen eleven-key settings block with its own
preference, so older firmware and older apps keep working.

docs/SETTINGS.md is the recipe for adding a setting; the Claude skill explains
the page. Firmware 0.2.44.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 10:05:53 +02:00

71 lines
4.4 KiB
Markdown

# Test results app 0.2.52 / firmware 0.2.44 (2026-09-16)
The settings page on the screen itself, the `screen.settings` card, and "back to page 1 by itself".
Firmware and app both change; the protocol grows two optional keys and the stored layouts gain two
settings with defaults, so an old screen with the new app and a new screen with an old app both keep
working. See CHANGELOG 0.2.52 and docs/SETTINGS.md.
## Automated
- Python (`.venv-portal`): 200 tests OK. New `tests/test_settings_page.py` (7 tests): every key the
firmware reports back (`changed("...")` in settings_screen.h) is a key the add-on validates; the
`settings` block the screen receives still holds exactly its eleven frozen keys while `auto_home`
and `auto_home_seconds` ride beside it; the defaults and the refusals of the two new settings;
`screen.settings` as a built-in tile that asks for firmware 0.2.44; and both board profiles carrying
the page, the hold strip (clear of the Guition's swipe bands), the `open_settings` action and the
`go_home` script.
- C++ (`clang++ -std=c++17 -Wall -Wextra -Werror -I.`): 14/14 PASS, including new
`tests/test_settings_screen.cpp`: the duration ladder and its symmetry, a number stopping at its
ends, a time wrapping around midnight and walking whole hours while a key is held, every text
("45 sec", "1 h 30", "22:00", "10:00 PM"), the rows reading and writing the real settings (including
a lower Brightness pulling the two dim levels down), a row hidden on a board that cannot turn, the
table itself (every menu row opens a real page, every control has a reader and a writer), how many
rows fit per board and when the pager appears, and that one change stores, applies and reports once.
- `generate_packages.py --check` green, `generate_icons.py --check` green (183 glyphs: three new).
- `esphome config` green for both board profiles.
## Builds (ESPHome 2026.6.2)
Full board profiles compiled for the ESP32, not just the host:
| Profile | RAM | Flash |
|---|---|---|
| home-like-2432s028.yaml (CYD) | 23.0% (75,492 B) | 80.6% (1,479,167 B of 1,835,008) |
| guition-4848s040.yaml | 24.0% (78,732 B) | 19.4% (1,576,143 B of 8,126,464) |
| easy-cyd-device.yaml (package, local components) | 23.0% (75,276 B) | 76.0% (1,395,143 B) |
| easy-guition-device.yaml (package, local components) | 24.0% (78,508 B) | 18.4% (1,494,075 B) |
The two Easy profiles were compiled one after the other, as RELEASING asks, from packages generated
out of the board profiles above.
What the page costs, measured by building the same CYD profile at 0.2.51 (firmware 0.2.43) in a clean
worktree: **+608 bytes of RAM** (74,884 -> 75,492) and **+10.7 KB of flash** (1,468,191 -> 1,479,167).
The rows are a `constexpr` table in flash and the LVGL objects are built when the page opens and
deleted when it closes, like the cards of a tile, so a closed page costs only that handful of bytes.
The ESP32 build also caught what the Mac could not: on xtensa `int32_t` is `long`, so a row reader
that returns a plain `int` does not convert to `Read` at all. Every reader now says `-> int32_t`.
## Rendered on the real firmware (host build, SDL)
`.esphome/readme-render/host_build.py <board> --compile` builds the actual firmware for the Mac and
`render_settings.py <board>` drives it over its own API. Both boards were rendered and looked at:
- Every page on both boards: the menu, Brightness, Night, Screen, This screen.
- Holding the top bar: the blue line is halfway after 0.9 s of a 1.5 s hold and disappears on release.
- The time picker worked like a finger: four taps on `+` moved 22:00 to 23:00 (quarters), then holding
walked whole hours to 03:00. Switching the clock to 12 hour turned the same times into 3:00 AM and
7:00 AM.
- A switch row turning its dependent rows live and grey again (Night mode, Auto standby).
- The `screen.settings` card on the overview, and a tap on it opening the menu.
- "Back to page 1 by itself": with the last touch aged past the timeout, the open page closed and the
overview came back on page 1.
## Not tested / for the owner
- Hardware. Nothing was flashed: the hold gesture on real glass (resistive CYD and capacitive Guition),
whether 1.5 s feels right, and whether a hold that becomes a swipe cancels cleanly.
- The write-back to a running ESP Screens (`esphome.screen_setting` event), which the firmware already
used for the Home Assistant number entities and which this page reuses unchanged.
- `Restart` from the page, and `esphome.<screen>_open_settings` from Home Assistant.