Skip to content

Advanced Use Cases Window Open Position Floor

Jason Rhubottom edited this page Aug 8, 2026 · 1 revision

Keep a blind clear of the sill while a window is open

A roller blind hanging inside the window reveal has nowhere to go when air moves through the room. Open the window, get a draft through the apartment, and the fabric gets sucked against the frame or the open sash β€” enough to jam the roller, or to make the motor fight the friction on its next move.

Leaving a gap at the bottom fixes it: air passes under the blind instead of pressing on it. Ten to twenty centimetres is usually plenty.

This is a floor on the position, not a fixed position. Sun tracking should keep doing its job above the floor β€” the only thing that changes is that the blind stops short of the bottom of its travel.


The distinction that matters

The obvious tool is a Custom Position slot, and that's the one most people rule out, because a plain slot replaces whatever the pipeline computed. Trigger it and the blind pins to your number, sun tracking discarded.

Minimum Mode changes that. With Minimum Mode on, the slot expresses a boundary instead of a target. The custom-position handler steps aside entirely, the pipeline picks whichever handler would have won anyway β€” normally solar tracking β€” and the slot's value is composed on top as a floor afterwards:

  • Solar asks for 40%, floor is 10% β†’ the blind goes to 40%. Tracking is untouched.
  • Solar asks for 5%, floor is 10% β†’ the blind goes to 10%. Only the part you cared about was changed.

Sun tracking never loses control of the range above the floor. See Constraining a value instead of replacing it for the general shape of this.


Pick the approach first

Use When
Always-on floor Minimum Position on the Position step The draft risk is basically constant, or the blind's bottom few centimetres are a mechanical dead zone regardless of the window
Conditional floor A Custom Position slot with Minimum Mode You want the full range of travel back whenever the window is shut

The always-on version is one number in one field and nothing else to reason about β€” start there unless you genuinely need the bottom of the travel back with the window closed.


Always-on: Minimum Position

Options β†’ Position β†’ Position Limits β†’ Minimum Position (0–99, default 0).

It clamps every position the integration calculates: solar tracking, the default/rest position, climate mode, cloud suppression, glare, motion timeout. Leave Apply min only during sun tracking off (the default) so the floor holds across all of them rather than only the solar handler.

Min Position During Sun Tracking, on the same screen, is a second, optional floor that replaces Minimum Position only while the sun is inside the acceptance angle. Reach for it when the blind should skip the bottom of its travel while tracking but still be allowed to close fully at sunset. Leave it blank and Minimum Position covers both cases.

⚠️ Minimum Position does not clamp explicitly-configured targets. Sunset Position, a Custom Position slot in exact mode, the Weather Override position, and My/hardware presets are sent exactly as configured, even below the floor. If the gap has to survive every hour of the day, set those values at or above your floor too. Watch Sunset Position in particular β€” leaving it blank falls back to Default Position, which is also sent unclamped at night.


Conditional: one slot, Minimum Mode on

Configure one of the ten Custom Position slots:

Setting Value
Slot Name e.g. Window open
Trigger Sensors your window contact, e.g. binary_sensor.living_room_window
Custom Position the floor value as a percentage (see below)
Minimum Mode On
Priority 77 (default) β€” or above 80, see below

Most window contacts report on when open, which is the trigger you want. If yours reads the other way round, invert it with a Template binary sensor and point the slot at that.

With the window shut the slot contributes nothing and the blind uses its full range. Open the window and the floor appears on the next cycle; sun tracking carries on above it.

Combine this with the always-on Minimum Position if you like β€” a small permanent floor for the mechanical dead zone, a larger one while the window is open. When several floors are active the highest wins.


Working out the percentage

Position is a percentage of total travel, not a distance, so convert:

floor % = desired gap (cm) Γ· total drop (cm) Γ— 100

A 160 cm blind that should stop 15 cm short of the sill: 15 Γ· 160 Γ— 100 β‰ˆ 9, so a floor of 10% is about right. Round up β€” the cost of a slightly larger gap is some extra light, the cost of a slightly smaller one is the jam you're trying to avoid.

This assumes the cover's reported percentage tracks its travel linearly. Plenty don't. If yours is non-linear or doesn't use the full 0–100 range, measure the real gap at your chosen floor before trusting it, and see Position Calibration.

Check which end is which. On a standard vertical or roller cover here, 0% is closed (blind down) and 100% is open, so the floor is a number above 0. If your cover reports it backwards you'll be using Inverse State, which changes what the number means β€” set the floor in the sense your cover actually reports.


Choosing the priority

A slot's bound composes with calculated positions regardless of priority, so solar, climate, cloud, and weather all keep their normal precedence and the floor filters them all. You don't need priority 100 to make it work.

Priority only decides what happens to a cover something is actively holding β€” a manual override, or a group lock:

Priority Effect on a manually-placed blind
77 (default) A manual move below the floor is left alone for the whole override window. A deliberate command outranks the bound.
Above 80 (e.g. 82) The manual move is clamped back to the floor and stays clamped while the override is armed.

80 is Manual Override's default effective priority; it's configurable per cover in Handler Priorities, so compare against your own value if you've changed it. Full semantics on Priority and manual moves.

For hardware protection, above 80 is the right call β€” the whole point is that the blind must not reach the bottom while the window is open, whoever asked it to.


What the floor can't catch

Commands that never reach the integration. A wall remote, or a cover.set_cover_position call aimed at the underlying cover entity, moves the motor before Adaptive Cover Pro sees anything. No integration can intercept that. Two things help:

  • Drive the blind through the proxy cover entity or the adaptive_cover_pro.set_position service β€” both are clamped to the active floor before dispatch. See Known Limitations.
  • Give the slot a priority above Manual Override so a raw move that slips through still gets pulled back on the next cycle.

Hours outside the tracking window. A custom slot below priority 100 doesn't fire outside the configured start/end times. If the window can be open overnight and the floor needs to hold then, that's a genuine gap today. Priority 100 works around it, but brings the full safety semantics β€” ignores manual override, ignores the automatic-control toggle, fires at any hour β€” which is heavier than this use case usually wants. A lighter "active period" option for constraints is tracked in issue #943.

An always-on Minimum Position has neither limitation, which is another reason to prefer it when the conditional behaviour isn't essential.


Diagnosing it

Look at sensor.{your_device}_decision_trace. With the floor active you'll see solar (or climate, or whichever handler won) as the winning handler β€” not custom_position β€” plus a clamp step crediting the slot. That's the expected trace: a bound doesn't win the pipeline, it adjusts the winner. The Panel Card shows the same thing visually.

If the trace shows custom_position as the winner and the blind is pinned to your number, Minimum Mode is off on that slot.


Related pages

🏠 Home Β· ✨ Features Β· πŸ“° What's New

Buy Me A Coffee

πŸš€ Getting Started

🧠 Core Concepts

πŸ“ Cover Types

βš™οΈ Configuration

πŸ”Œ Entities & Services

πŸ› οΈ Operations

πŸ”§ Advanced Use Cases

🎨 Dashboard

πŸ§ͺ Testing & Simulation

πŸ“š Reference

πŸ‘©β€πŸ’» For Developers

Clone this wiki locally