d6e5b35dcf
A tap on a cover now opens a card like Home Assistant's own, in the style of the climate and vacuum cards: a tall position slider on which the blind hangs from the top, a tilt slider over slats for venetian blinds, and open, stop and close keys. The key of the direction the cover moves is filled; a key that cannot move it further is disabled and stays out of the keys the card's tick enables. Sliders show their value while dragged and send it on release. The card offers only what supported_features allows. A battery-powered blind shows its battery at the top right: the app sends the device's battery sensor as the extra the vacuum card uses, and adds current_tilt_position to the attributes. Checking Studio 1 after its update to firmware 0.2.49 found that a setting number equal to its initial state 0 (night brightness 0 %) was never published, so Home Assistant kept it unknown and ESP Screens could not change it; apply_screen_settings now publishes a number without a state. The app also took "unavailable" for the device name during the restart and wrote sensor.esp_screens_unavailable; diagnostics ignore unknown and unavailable. The editor redraws its tiles, top bar and entity list when the live stream opened a screen before the first full inventory (a busy add-on), and loads app.js and style.css by content stamp after Safari kept an old script. Checked with 254 Python and 14 C++ tests, generate_packages --check, ESP32 builds of both profiles, and 20 API checks of the card on host builds of both boards. Firmware 0.2.50. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
Test results app 0.2.58 / firmware 0.2.50 (2026-09-16)
Max asked for a detail card for blinds (his three Motionblinds venetian blinds report every cover feature and a battery sensor on their device) in the style of the climate and vacuum cards. Checking Studio 1 twenty minutes after its update to 0.2.49 found two bugs, and opening ESP Screens during that update a third. See CHANGELOG 0.2.58 and the compatibility note in docs/RELEASING.md.
Automated
- Python (
.venv-portal): 254 tests OK. New:tests/test_cover_card.py(the tilt and the device battery in the state message, the battery sensor watched, no layout sensor or node name "unavailable" while a screen restarts, the tap and preview routing to the cover card, commits on release, the tick's status line, disabled keys kept out of the tick, one radius for track and fill, every setting number published when it has no state),tests/test_editor_startup.py(the first full inventory redraws the tiles, top bar and entity list) andtests/test_page_assets.py(script and styles by content stamp). - C++ (
clang++ -std=c++17 -Wall -Wextra -Werror -I. -I components/smart_display): 14/14 PASS.test_tile_controlsadds the cover card: what a venetian blind (255), curtains (15), a garage door (11), slats that tilt without a position (51) and a cover without features get, the status line with the tilt, keys filled while moving and disabled at the ends, and the tilt actions. generate_packages.py --checkgreen.
Builds (ESPHome 2026.6.2)
Check profiles with the generated packages and local components, the same as for 0.2.57.
| Profile | RAM | Flash | vs 0.2.57 |
|---|---|---|---|
| CYD | 23.4% (76,548 B) | 76.9% (1,411,823 B) | +8 B RAM, +5,596 B flash |
| Guition | 24.4% (79,924 B) | 18.6% (1,515,263 B) | +8 B RAM, +4,708 B flash |
The first ESP32 build failed on std::clamp(lv_slider_get_value(...), 0, 1000): int32_t is a long on the
ESP32 toolchain, so the host builds cannot catch this. Fixed with std::clamp<int> before any release.
Firmware on the Mac (host builds, driven over the ESPHome API)
- Cover card, Guition 20/20 and CYD 20/20 (the CYD run three times): a venetian blind with the demo home's
state opens its card with "Open · 60% · Tilt 40%", both sliders and three keys; the position slider shows
75% while it moves and sends
cover.set_cover_position75 on release, the tilt slidercover.set_cover_tilt_position80; open, stop and close send their actions; a closing state at 30 % redraws the card with the close key filled, and the tick keeps the status line; fully open disables the open key after the tick and a tap on it sends nothing; unavailable disables sliders and keys; curtains get one slider, a garage door only keys with close disabled while closed, and its open key works; a tap on the blind's tile opens the card; no errors in the log. - A timing flake in the first CYD run (a key pressed 1.2 s after Home Assistant's answer, while the card's once-a-second tick still showed the keys disabled) was the test waiting too briefly; the card behaves as the vacuum card does.
- Renders of the blind, curtains and garage door cards on both boards; the README shows them.
Studio 1 after updating to 0.2.57 / firmware 0.2.49 (16:20, read-only through Home Assistant)
- The update succeeded ("Updated to firmware 0.2.49"): one restart at 16:10, back online within seconds on the
same IP address, "Synced" within a second of reconnecting, no repairs, no add-on warnings; Home Assistant
lists
esphome.studio_1_screen_messageas answering. - Every setting entity had its value except
number.studio_1_night_brightness("unknown", so the panel showed it as unknown and refused changes): the number fix above. sensor.esp_screens_unavailablenext tosensor.esp_screens_studio_1, written at the restart: the node fix above. Home Assistant drops the stale sensor at its next restart.- An empty Screen settings panel in Safari was an old cached script (the served files matched the release); the page now loads its files by content stamp.
Not tested / for the owner
- Real hardware and real blinds: the Motionblinds were unavailable during this work. On Studio 1 after the
update: open a blind's card, drag both sliders and use the keys, check the battery, and that
number.studio_1_night_brightnesshas a value in Home Assistant. - Free heap on a CYD with the cover card open.