Files
Max Gramser 2cb347964d Keep a small slider where the finger left it while the light fades towards it (0.2.71)
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>
2026-09-17 23:10:00 +02:00

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 in render) took slider_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-slider follows 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 raises FIRMWARE_VERSION).
  • C++ (clang++ -std=c++17 -Wall -Wextra -Werror -I.): 17/17 PASS. tests/test_action_feedback.cpp holds 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 --check and generate_icons.py --check green.

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.