-
Notifications
You must be signed in to change notification settings - Fork 28
Advanced Use Cases Window Open Position Floor
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 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.
| 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.
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.
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.
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.
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.
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_positionservice β 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.
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.
- Position & Thresholds: Minimum Position, Min Position During Sun Tracking, Position Calibration
- Custom Position: full slot reference β bounds, priority, trigger sensors, condition templates
- Suppress Closing While a Door Is Open: the same contact-sensor pattern, holding a blind fully open instead of applying a floor
- How It Decides: the priority chain
- Debug & Diagnostics: reading the decision trace
- Advanced Use Cases: all recipes
π 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