-
Notifications
You must be signed in to change notification settings - Fork 28
Hardware Compatibility
Adaptive Cover Pro drives a wide range of cover hardware β Shelly, Somfy, KNX, Zigbee shades, Velux/Roto skylights, drop-arm awnings β and most of it works on the defaults. But some motors and controllers have quirks (mechanically coupled axes, cached slat angles, slow position reporting, open/close-only motors) that need a specific, non-default setting to behave correctly.
This page is the single place to find which hardware needs which setting, drawn from the integration's issue history. Each entry gives the symptom, the setting and value to change, and the issue it traces to.
Golden rule: leave every setting at its default unless your hardware misbehaves in one of the ways described below. The defaults are correct for the large majority of covers. To see what your cover actually supports (report position, stop mid-travel, open/close), check the read-only Cover Capabilities summary.
Each row is a knob you change only when your hardware needs it. Defaults are authoritative (from the integration source).
| Setting | Default | Change to | When / hardware | Issues |
|---|---|---|---|---|
Skip-Tilt Mode (venetian_tilt_skip_mode) |
neutral |
suppress |
Coupled-axis exterior venetian where a tilt command at the open endpoint drags the carriage off rest (Somfy J4 + Shelly 2PM) | #748 Β· #777 |
Enforce delta at endpoints (enforce_delta_at_endpoints) |
Off | On | Coupled venetian that can't physically reach 0/100 (closest is ~3/100), so ACP keeps chasing it | #679 Β· #680 |
Inverse Tilt (inverse_tilt) |
Off | On | Venetian whose tilt axis is wired opposite the HA convention (slats shade the wrong way) | #748 |
Inverse the state (inverse_state) |
Off | On | Cover with a reversed 0/100 position mapping (100 % opens instead of closes) | #344 |
Operating Mode (venetian_mode) |
position_and_tilt |
tilt_only |
Tilt-first hardware, or overcast-day slat-only operation | #357 |
Skip Tilt Above Position (venetian_tilt_skip_above) |
95 % | tune up/down | Slats hidden in the housing near the top β adjust where tilt stops being sent | #357 |
Drift-reset threshold / direction / scope (venetian_tilt_reset_threshold / _direction / _scope) |
0 (off) / open / all_tilt_commands
|
enable / close / sun_tracking_only
|
Actuators that accumulate slat-angle drift over many small moves; close if the motor re-zeroes slats on a close; sun_tracking_only if a Custom Position slot also holds the tilt and shouldn't count toward the reset |
#663 Β· #686 Β· #808 Β· Drift reset |
Post-settle Hold / Wait Mode (venetian_post_settle_hold / _mode) |
3.0 s / fixed_delay
|
raise / entity_state
|
Firmware that re-asserts a tilt shortly after the carriage stops (KNX FGR223) β the hold lets the tilt command win; entity_state polls the cover's own state instead of always sleeping the fixed hold |
#370 Β· #801 Β· Venetian Blinds |
My Position (my_position_value + sunset_use_my / custom_position_use_my_*) |
unset / Off | set | Open/close/stop-only motors with a stored "My" preset (Somfy RTS / io, Hunter Douglas, Bubendorff) | #199 |
Position match tolerance (position_tolerance) |
3 % | raise (e.g. 6) | Motors that settle a few % short of an endpoint, causing relay clicking / constant re-commands | #507 |
Use open/close at endpoints (endpoint_use_open_close) |
On | leave On β except Off for covers whose reported position doesn't follow open/close (Bond RF bridge and other assumed-state hubs) | Default-On; sends open_cover/close_cover for 100/0 for a cleaner mechanical reset. Turn it Off when the cover answers an Open with state: open but leaves current_position at 0 β position matching can never be satisfied and ACP re-commands the endpoint every cycle |
#697 Β· #1026 |
Enable position matching (enable_position_matching) |
Off | On | Covers that stop short of the commanded position and need re-sending to arrive | #591 |
Min position during sun tracking (min_position_sun_tracking) |
falls back to min | set (e.g. 25 %) | Roller shutters with a bottom slat-slack "dead zone" β skip it while tracking but still close fully at night | #467 |
Transit timeout (transit_timeout) |
45 s | raise | Slow Zigbee battery shades flagged as manually overridden before the motor even engages | #433 |
Command queue (command_queue) |
None (blank) | same name on every cover sharing a transmitter | Several covers on one one-way radio (Somfy RTS, RFXtrx) that occasionally fail to move when the sun triggers them together. No acknowledgement means colliding frames are lost silently. Leave blank on acknowledged protocols. See Command Queue | #1189 |
| Cover type selection | Vertical | Venetian / Horizontal / Oscillating Awning / Roof Window | The cover type itself is the first hardware-correct setting β see Cover Types | #33 Β· #337 Β· #212 |
Roof pitch / ridge height (roof_pitch / roof_height_above) |
β | set | Velux/Roto skylights set into a sloped roof | #696 |
Arm length (arm_length) |
β | real arm length (up to 6 m) | Drop-arm / oscillating awnings with a 3β4 m arm | #636 |
Confirmed working for vertical covers and dual-axis venetians. The Shelly publishes current_position frequently (~1 Hz) and fast actuators back-rotate quickly β ACP's settle detection accounts for both.
-
Coupled exterior venetian "pumps" at rest (100 β 97): on a blind where the carriage and slats share one motor, any tilt move physically shifts the reported position by ~3 %. When ACP raises the blind to its fully-open default and then sends a tilt at that endpoint, the hardware settles ~3 % short; ACP reads that as "not arrived" and re-commands, and the cover oscillates between 100 % and ~97 %. Set Skip-Tilt Mode β
suppressso no tilt is sent once the blind is at/above the Skip Tilt Above Position, and enable Inverse Tilt if your slats shade toward the sun instead of away from it. (#748) - Cover can't reach 0/100 and keeps chasing it: ACP normally always sends the 0 % and 100 % endpoints (they bypass the minimum-change gate so a full open/close is guaranteed). On a coupled cover the true endpoint is unreachable β commanding 0/100 lands at ~3/100 β so that guarantee turns into an endless re-command loop. Turn Enforce delta at endpoints β On so 0 % and 100 % also respect the minimum-change gate; the coupled cover then parks at its nearest reachable point instead of being re-commanded. (#679)
-
Prefers tilt-first operation: set Operating Mode β
tilt_onlyso ACP holds the carriage at 0 % and tracks only the slat angle. Use this when moving the carriage is disruptive (noise, wear, or a coupled axis) and slat tilt alone gives you the shading you want. (#357)
For the rest of the dual-axis options (slat geometry, tilt modes, migration), see Venetian (Dual-Axis) β but the settings above are complete on their own.
Three distinct cases depending on the protocol:
-
RTS (open/close/stop only): RTS motors have no
set_cover_position, so any mid-range target collapses to 0 % or 100 %. Configure a third landing spot with My Position (my_position_value) plus the opt-insunset_use_my/custom_position_use_my_*flags β ACP reaches it by issuingstop_coverwhile the cover is stationary, which triggers the motor's stored "My" preset β giving you a third landing spot between fully open and fully closed. For worked setup examples, see My Position Support (Somfy RTS). (#199, #197) RTS covers β and any cover that never reports position (state stuck atunknown) β also no longer receive the same open/close command on every cycle once they've reached the target; see Known Limitations β Open/Close-Only Covers. (#779) - Several RTS covers that intermittently ignore a command: RTS has no acknowledgement, so two frames keyed at the same moment collide and are both lost, with nothing logged and no retry. Covers on separate ACP entries share sun geometry, so they compute the same trigger time and fire together. Put every cover on that transmitter on the same Command queue (Movement & Schedule) and they take turns instead, holding the air 5 s after each send. Note the Cover Group stagger does not solve this: it spaces only the commands a group dispatches itself, never a member's own sun tracking. Full detail: Command Queue. (#1189)
-
IO via Tahoma: these motors close vertically then back-rotate to set tilt, and publish a late
current_positionburst (~27 s after settling). ACP tolerates the late publish automatically (a publish-lag window); no setting is normally required. (#357, #408) -
J4 exterior venetian (via Shelly 2PM): on this motor the tilt and lift axes are mechanically coupled, so any slat tilt physically shifts the carriage β moving a fully-open blind from 100 % down to ~97 %. Correct daytime shading needs Inverse Tilt on (so the slats tilt away from the sun), but with it on, ACP's default neutral tilt at the open endpoint inverts to a wire tilt of 0, which drags the carriage down and pulls the blind off its resting position. The J4 also runs its own automatic slat re-adjustment, so multiple systems end up fighting over the same axis. Fix: set Skip-Tilt Mode β
suppress, which tells ACP to send no tilt command once the blind is at or above the Skip Tilt Above Position β the blind stays put at rest while keeping the inverted daytime shading. Reported in #748.
A Bond hub speaks one-way RF, so the entity it publishes is assumed_state: true β it reports what it believes it commanded, not what the motor did. Position-capable Bond covers expose set_cover_position and echo the commanded percentage back into current_position correctly. Open and Close are the exception.
-
Target says 100 % but Actual Position stays 0 % (Position Mismatch never clears): on a Bond-bridged Somfy RMS12 awning,
cover.open_coversets the entity tostate: open/is_closed: falsewhile leavingcurrent_positionat 0 β a self-contradictory state, but that's what the entity publishes. ACP's position matching compares its 100 % target against that 0 % and never converges; because 100 % is a mechanical endpoint it also bypasses the minimum-change gate, so ACP re-sendsopen_coveron every update cycle. The same cover answersset_cover_position(13)withcurrent_position: 13immediately, which is what makes the diagnosis unambiguous.Fix: turn Use open/close at endpoints (
endpoint_use_open_close) β Off for that instance. ACP then sendsset_cover_position(100)at the endpoint, which the Bond entity does echo back, and the mismatch clears. Disabling Enable position matching instead only silences the alarm β it leaves the per-cycle re-commands in place and hides real faults. (#1026) -
Awnings reach the 100 % endpoint constantly. With Minimize Movements on and Max coverage steps at 1, any amount of required coverage quantizes straight to full coverage β 100 % for an awning. So an awning on a Bond bridge meets the open/close endpoint on most sunny days rather than occasionally. Raising Max coverage steps gives proportional extension and sidesteps the endpoint most of the time, but fix the routing with
endpoint_use_open_closerather than relying on that. -
Why HA can't just poll the truth. There's no position feedback to poll. If the awning is physically extended and HA shows 0 %, the entity is the thing that's wrong, not the motor β which is also why raising Position match tolerance doesn't help here. It's a 0-vs-100 disagreement, not a settling-short one.
Confirmed working as a single cover entity exposing both position and tilt services. KNX actuators commonly cache a slat angle and re-assert it during or after a move.
- Wrong tilt re-appears after the carriage stops (KNX FGR223): some firmware re-applies its cached slat angle for a moment right after the carriage settles. If ACP sends its tilt during that window, the firmware's re-assert overwrites it and the slats end up at the wrong angle. Raise Post-settle Hold (default 3.0 s) so ACP waits past the firmware's re-assert before sending the tilt β increase it in ~1 s steps until the correct tilt sticks. (#370, #504)
-
Tilt-only entity (KNX / Z-Wave) sends the wrong service: an entity that exposes only tilt (no
set_cover_position) will ignore position commands and retry in a loop. Choose the Tilt cover type so ACP routesset_cover_tilt_positioninstead ofset_cover_position. (#234) - The default Skip-Tilt Mode β
neutralis correct for KNX: above the Skip Tilt Above Position, ACP deliberately sends a neutral fully-open tilt to overwrite the actuator's cached slat angle, which KNX motors otherwise re-assert on a raised blind. Leave it onneutralunless your blind is a mechanically-coupled exterior venetian.
Battery-powered Zigbee shades can take longer than the 45 s transit timeout to even start moving, and may emit a closing β open β closing ack flap. That can be misread as a manual override on ACP's own command. Raise Transit timeout (transit_timeout) above your shade's worst-case engagement delay. (#433, #271)
A window set into a sloped roof faces the sun at the roof's angle, not vertically, so the default vertical-pane model starts and stops tracking at the wrong times. Choose the Roof window cover type and set roof_pitch (the roof's slope: 0Β° = flat skylight, 90Β° = vertical window) and roof_height_above (how far the ridge sits above the window, so ACP knows when the ridge shades it). With those two values ACP computes sun illumination and shade against the tilted plane correctly. For the full tilted-plane model, see Roof / Skylight Window. (#696, #212)
On an awning whose arm sweeps through an arc as it opens (e.g. Somfy PositionableScreen), the fabric angle β and therefore how much sun it blocks β changes with the open percentage, so ACP needs the arm geometry to compute the shade projection. Choose the Oscillating awning (drop-arm) cover type and enter your real arm length (the field accepts up to 6 m, so a 3β4 m arm is fine). For the angle-vs-position model and the other geometry inputs, see Oscillating Awning. (#636, #586)
If you know your cover type but not the brand quirk, start here.
| Cover type | Most likely hardware settings | Details |
|---|---|---|
| Venetian (dual-axis) | Skip-Tilt Mode, Enforce delta at endpoints, Inverse Tilt, Operating Mode, Post-settle Hold | Shelly Β· KNX Β· Venetian (Dual-Axis) |
| Vertical / roller shutter | Inverse the state, Min position during sun tracking, Position match tolerance, My Position (RTS) | Somfy Β· Configuration: Vertical |
| Tilt-only | Choose the Tilt cover type so tilt services are routed | KNX Β· Configuration: Tilt |
| Horizontal / oscillating awning | Cover-type choice (semantics auto-invert), arm length, Use open/close at endpoints (RF bridges) | Drop-arm awnings Β· Bond |
| Roof / skylight window | Roof window cover type, roof pitch, ridge height | Velux / Roto |
Several defaults exist specifically because of hardware behaviour. Understand these before overriding them.
-
Neutral tilt cache-overwrite at the open endpoint (
venetian_tilt_skip_mode = neutral): above the skip-above threshold, ACP deliberately sends a neutral fully-open tilt to overwrite the actuator's cached slat angle. KNX and many Shelly venetian motors re-assert the previous angle on a raised blind, so this overwrite is needed. It is wrong only for mechanically-coupled exterior blinds, which is whysuppressexists as the opt-in alternative. (#33) - Back-rotate / publish-lag suppression windows (β45 s publish lag, β6 s startup grace): tuned so late or frequent position publishes from Somfy IO/Tahoma, Shelly 2PM, and KNX aren't misread as a user grabbing the wand. (#357, #408)
-
1 % solar floor is kept for open/close-only covers (to avoid a hard slam shut) but switched off automatically for covers that support
set_cover_position, so percent-capable covers can reach a true 0 %. (#572) - Climate intent β position auto-inverts for horizontal awnings: an awning at 100 % is extended (blocking sun), the opposite of a screen, so the climate logic flips the numeric target by cover type. (#337)
-
stop_coveris gated on motion: on RTS/io, Hunter Douglas, and Bubendorff motors astop_coveron a stationary cover triggers the "My" preset, so ACP only stops covers that are actually moving β anemergency_stopwon't drive an idle awning out to My. (#197)
If your motor or controller needs a setting that isn't documented above β or works perfectly on defaults and you'd like it confirmed β please open an issue so this page can grow.
π Home Β· β¨ Features Β· π° What's New
π Getting Started
- Installation
- Migrating from Custom Repository
- Migrating from Adaptive Cover
- First-Time Setup
- Building Profile β start here if you have multiple covers
- Cover Groups
- Copy Settings to Other Covers
- Cover Types
π§ Core Concepts
π Cover Types
- Vertical
- Horizontal
- Oscillating Awning
- Roof / Skylight Window
- Tilt
- Louvered Roof
- Sliding Curtain
- Day/Night Shade
- Dual Panel
- Venetian (Dual-Axis)
βοΈ Configuration
- Sun Tracking
- Position
- Position Matching
- Travel Time Calibration
- Glare Zones
- Automation
- Manual Override
- Command Queue
- Custom Position
- Force Override
- Weather Safety
- Climate
- Templated Thresholds
- Template Self-References
- Blindspot
- Summary Screen
- Debug & Diagnostics
π Entities & Services
- Entities
- Proxy Cover Entity
- Position Verification
- My Position Support (Somfy RTS)
- Runtime Configuration Services
π οΈ Operations
- Known Limitations
- Hardware Compatibility
- Troubleshooting
- Troubleshooting Findings
- Diagnostic Sensors
- Tips and Tricks
π§ Advanced Use Cases
- Overview
- Dynamic Temperature Thresholds
- Dynamic Tracking Window
- Bedroom Sleep Mode
- Handling Variable Cloud Cover
- Indoor Lux Sensor Behind the Cover
- Venetian Tilt-Only on Overcast Days
- Forecast-Based Shading
- Custom Position When Sun in FOV
- Suppress Closing While a Door Is Open
- Keep a Blind Clear of the Sill
π¨ Dashboard
- Dashboard Cards
- Panel Card
- Tile Card
- Sky Compass Card
- Decision Strip Card
- Solar Chart Card
- History Card
π§ͺ Testing & Simulation
π Reference
π©βπ» For Developers