A light group's lamps fade, Home Assistant reports every step, and the tile's slider followed each one: after a drag it jumped back to the old value and crept up. The Tile now holds the sent value (brightness, fan percent, volume) until Home Assistant reports within 3 % of it, reports the entity off, refuses, or reports once and stays quiet for 1.5 s; never longer than 8 s, and without any report the hold ends with the wait. A cover's position slider keeps following the blind. Firmware 0.2.60; host checks 17/17 on both boards. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
4.0 KiB
Test results app 0.2.71 / firmware 0.2.60 (2026-09-17)
Max, dragging the small slider of his living room light group on the Guition: after letting go the slider "sprints
back" to the old value and then creeps to the one he chose. The lamps fade, Home Assistant reports every step, and the
tile followed each report. This release keeps the slider where the finger left it while the light gets there. See
CHANGELOG 0.2.71 and the compatibility note in docs/RELEASING.md. Built on 0.2.70 (91a2445).
What happened before
- The tile's small slider (
runtime_tiles.h, the mini slider inrender) tookslider_value(t)on every state message once the finger was up. The card's control slider already held its dragged value while the command was pending, but only until the first differing state, which for a fading group is a step on the way. - Home Assistant's own tile slider does the same:
ha-control-sliderfollows the entity's state on every update, so the jump shows there too. Nothing in Home Assistant holds the target.
Automated
- Python (
.venv-portal): 386 tests OK, the same set as 0.2.70 (firmware only; the app raisesFIRMWARE_VERSION). - C++ (
clang++ -std=c++17 -Wall -Wextra -Werror -I.): 17/17 PASS.tests/test_action_feedback.cppholds the new rules: a fade reporting 80, 128 and 180 keeps the sent 204 in front and the hold alive, a report within 3 % ends it, a fan that reports 66 once and stays quiet lets go after 1.5 s, no report at all ends with the wait at 3 s (or the 8 s cap after an "it worked" answer), a drag on an off light shows it on and a report of off wins, a refusal puts the reported value back, and a cover never holds. generate_packages.py --checkandgenerate_icons.py --checkgreen.
Firmware on the Mac (host builds, driven over the ESPHome API)
slider_host.py (scratchpad, after tap_host.py): the tap-actions demo home on 8297, the cooker hood light with its
small slider, a drag_slider action that sets the LVGL slider and sends its release as a finger would, and a probe
that logs the slider position, the tile's value label, the hold flag and the busy sheet. Guition 17/17, CYD 17/17.
| Check | Guition | CYD |
|---|---|---|
| The hood tile shows its small slider at 20 % | pass | pass |
| A drag to 80 % sends light.turn_on with brightness 204 | pass | pass |
| The slider stays at 80 % and the tile says 80 % | pass | pass |
| Reports of 80, 120 and 170 keep the slider at 80 %, no sheet | pass | pass |
| A report of 200 (within 3 %) takes over: 78 % | pass | pass |
| A report short of the target keeps the slider | pass | pass |
| After 1.5 s of quiet the slider follows that report | pass | pass |
| A drag without any report holds first | pass | pass |
| and lets go after the wait, showing the last report | pass | pass |
| A refused drag says Refused, then the last report shows again | pass | pass |
| A drag on an off light shows it on at 60 % | pass | pass |
| Home Assistant reporting it off wins | pass | pass |
| No errors in the log | pass | pass |
The first Guition run read two of these wrong: the host's LVGL loop stalled and answered five probes in one burst, so a wait counted in tries ran out before the redraw. The harness now waits by the clock; the second run and the CYD run passed every check.
Builds (ESPHome 2026.6.2)
Check profiles with the generated packages and local components; no errors or compiler warnings.
| Profile | RAM | Flash | vs 0.2.70 |
|---|---|---|---|
| CYD | 24.0% (78,796 B) | 79.2% (1,453,683 B) | +400 B RAM, +332 B flash |
| Guition | 25.7% (84,372 B) | 21.0% (1,708,967 B) | +400 B RAM, +340 B flash |
The RAM is four fields per tile (the sent value, the reported value and two timestamps).
Not tested
- Real hardware: neither bench screen ran this firmware before the release. Max's living room group on the Guition is the case that started this; the Update round on his screens follows the push.
- A fan with fixed steps and a media player's volume were only covered by the C++ test, not on the host.