v4.8.0
Pre-release
Pre-release
Features
- New "Toggle (opposite button)" control mode (#153): some momentary toggle relays have no dedicated stop button and instead stop the motor when the opposite direction is pressed while it's moving (a same-direction press just keeps it moving); reversing then takes two presses — opposite (stop), then press again to move. The existing Toggle mode assumes a same-button stop, and Pulse mode needs a dedicated stop relay, so hardware wired this way (e.g. an Aqara T2 in momentary-pulse mode) had no matching option. Toggle (opposite button) shares Toggle's state machine and options — including Relay reports its own OFF — differing only in which button press is read as stop, and is configurable from the config card (EN/PT/PL) and as the
input_mode: toggle_oppositeYAML value. The docs now also make clear that Pulse mode's stop switch is required, not optional, and point covers with no stop relay at this new mode instead. - Native tilt & position forwarding for wrapped covers (#157): a wrapped cover whose firmware positions its own slats — for example a Z-Wave venetian shutter such as a Shelly Wave Shutter — is now driven by forwarding its native tilt and position commands, with the time-based tracker kept only as a live display overlay. The earlier wrapped-tilt support (#87) simulates tilt by pulsing the main motor for a timed burst, which is right for covers that fake tilt that way but wrong for one that positions its slats itself: a tilt-close at a travel endpoint became a no-op, intermediate angles were unreachable, and the tracker drifted because nothing read back the angle the cover reported. For an Inline-tilt wrapped cover whose underlying entity advertises
set_cover_tilt_position(andset_cover_position), set-/open-/close-tilt are now forwarded straight to the device — the display animates during the move and snaps to the cover's reported angle on settle —set_cover_positionis forwarded too for device-accurate positioning, the tilt display sweeps to the direction endpoint during travel (venetian slats close going down, open going up) before syncing to the reported angle, and no relay stop is issued since the device holds itself at the target. This is auto-detected from the wrapped entity's supported features — no new configuration — and the existing opt-outs (force_time_based_position,ignore_reported_position,reports_command_not_endpoint) still force the timed path. Covers without native tilt support, and the Sequential / Separate tilt motor strategies, keep their existing timed behaviour unchanged.
Fixes
- Dual-motor covers: a travel press no longer disturbs a moving tilt motor (#156): in dual-motor tilt mode the slats have their own motor that runs independently of travel. The open/close reversal guards (and the same-button Toggle external handler) decided whether an incoming travel command was a stop or a reversal from the cover-level opening/closing state, which folds in tilt motion — so pressing a travel button while the tilt motor happened to be moving read as "the cover is already moving that way" and stopped it, or inserted the direction-change settle delay before travel. On a wall-switch (externally triggered) press that stop is tracker-only — no relay is fired — so the tilt position tracker froze while the physical tilt motor kept running, desyncing the two, plus travel started a second late. Requires the rare combination of a separate tilt motor mid-move and a simultaneous cross-axis travel press, so it was easy to miss. These decisions now key off the travel axis only, so an independently moving tilt motor is left alone (a travel command's own tilt-to-safe pre-step still counts, keeping the in-motion-click and reverse behaviour there). Inline and sequential tilt — where the slats share the travel motor, so a tilt phase is the travel motor running — are unchanged and still settle before reversing.
- Wrapped command-echo covers now stop cleanly at both endpoints (#152): a wrapped cover with Reports commands, not endpoints enabled typically drives an endstop-less motor — one with no limit switches that simply stalls against the mechanical stop while powered (e.g. a Shelly 2PM Gen4 in cover profile driving a plain tubular motor). Wrapped mode inherited the base assumption that the motor self-stops at its limits, so at the 0%/100% endpoints it skipped the stop and let the motor run — stalling for seconds until the device's own max-time cutoff on every full open/close, and running to max-time when commanded to an endpoint it was already at. It now sends the endpoint stop for these command-echo covers, exactly as Switch mode already de-energizes its latched relay (set Endpoint run-on time to 0 to cut power the instant the endpoint is reached). Separately,
open_coverwhile the cover is already parked fully open now no-ops instead of re-driving to the endpoint — mirroringclose_coverat fully closed — so it no longer re-energizes the motor with a redundant relay pulse. Wrapped covers that report a real position, and the Switch / Toggle / Pulse relay modes, are unchanged — they keep resyncing the tracker at the endpoints as before.