---
title: "Adaptive Cover Pro"
description: "Adaptive Cover Pro is a Marketplace integration for Home Assistant. It has 725 installs sharing analytics, works locally and was last updated October 9, 2026."
canonical: "https://vulpo.app/integrations/marketplace/jrhubott-adaptive-cover-pro"
url: "https://vulpo.app/integrations/marketplace/jrhubott-adaptive-cover-pro.md"
last-updated: "2026-10-22"
version: "1.4"
---

# Adaptive Cover Pro

> Adaptive Cover Pro is a Marketplace integration for Home Assistant. It has 725 installs sharing analytics, works locally and was last updated October 9, 2026.

Adaptive Cover Pro controls blinds, awnings and venetian tilts by tracking the sun's position at each window. It supports several cover types and calculates positions from window and facade geometry such as height, sill, reveal and awning length. Decisions run through handlers in priority order: weather safety, manual override, custom positions, climate, glare zones and solar tracking, and each reports its reason. Glare zones protect named floor areas, and a climate mode applies separate logic for winter heating, insulation and summer cooling. It adds covers, sensors, switches, buttons, selects and numbers, plus scene and group controls and a command queue for one-way radio covers. Setup is done in the UI, it works locally, and it needs the Marketplace.

Automatic summary of the README and code of jrhubott/adaptive-cover-pro. Something wrong, or are you the maintainer and want your own text here? [Get in touch](https://vulpo.app/contact)

[Open in My Home Assistant](https://my.home-assistant.io/redirect/hacs_repository/?owner=jrhubott&repository=adaptive-cover-pro&category=integration)

On Home Assistant 2026.11 or newer? [Open it in the Marketplace](https://my.home-assistant.io/redirect/marketplace_repository/?owner=jrhubott&repository=adaptive-cover-pro&category=integration)

## Supports

- **Works locally**: Talks to your devices on your own network. No vendor cloud in between.
- **From the Marketplace**: Installed through the Marketplace, formerly HACS.
- **Actively maintained**: Its author released or pushed a change in the last six months.

## Setting it up

Install it from the Marketplace and restart Home Assistant, then add it under Settings, Devices and services.

### Create New Cover

- **Name**: Optional. Leave blank and the integration fills it in automatically: the linked device's name if one is attached, otherwise the cover entity's friendly name with an "Adaptive" prefix.
- **Type of blind**

### Covers & Device

- **Cover Entities**: Select the cover entities to control via this integration instance. You can select multiple covers to control them as a group (all will receive the same position commands). Only select covers that serve this particular window - create separate integration instances for different windows.
- **Attach to Device**: Select a physical device to merge this integration's entities into. The integration's sensors, switches, and buttons will appear directly under that device in Home Assistant. Select 'None (standalone device)' to revert to a separate virtual Adaptive Cover device. Only devices that own the selected cover entities are shown.
- **Expose Proxy Cover Entity**: Expose a proxy cover entity per physical cover. Use this on dashboards instead of the physical cover so manual commands respect min-mode floors. Default: off.

### Cover Geometry

- **Window Height**: Height of your window (from bottom to top of the glass area). Shown in the unit Home Assistant is configured for. Examples: Standard door = 2.0 m / 79 in, Small window = 1.5 m / 59 in, Floor-to-ceiling = 2.5 m / 98 in. Measure from where the cover starts to where it ends when fully extended.
- **Shaded area**: How far you want to ALLOW direct sunlight to reach into the room. Shown in the unit Home Assistant is configured for. This defines your acceptable 'glare zone' — the area where sunlight can reach the floor. The cover position adjusts to maintain this boundary as the sun moves across the sky. Common configurations: Zero (0 m / 0 in) keeps direct sun from passing the glass plane (full closure on hot days); Small glare zone (0.3–0.5 m / 12–20 in) keeps sunlight very close to the window; Medium glare zone (0.5–1.0 m / 20–40 in) allows sun to reach desk or seating area; Large glare zone (2.0–3.0 m / 79–118 in) allows sunlight deep into the room. KEY CONCEPT: LARGER value = MORE sunlight allowed farther into room = cover stays HIGHER/MORE OPEN; SMALLER value = LESS sunlight into room = cover drops LOWER/MORE CLOSED. Measure from the inside of your window to where you want the sun boundary to be.
- **Window Depth (Reveal)**: Depth of window reveal/frame from the wall surface. Shown in the unit Home Assistant is configured for. Optional parameter for advanced accuracy — set to 0 (default) to disable. Typical values: Flush mount = 0.05 m / 2 in, Standard frame = 0.10 m / 4 in, Deep reveal = 0.15 m / 6 in. Measure from the outer wall surface to the inner edge of the window frame. The reveal casts its own shadow across the top of the glass — the same area the cover protects from the top. When that shadow alone already covers everything the cover would otherwise have had to cover, the cover can open fully. Short of that, the reveal makes no difference to the calculated position.
- **Window Sill Height**: Height from the floor to the bottom of your window. Shown in the unit Home Assistant is configured for. Set to 0 (default) for floor-level windows or when unknown. Example: for a sill 1 m / 39 in above the floor, enter that value. Improves calculation accuracy for raised windows — without it, the blind closes slightly more than necessary. Range: 0–50 m / 0–1968 in. Measure from the floor to the bottom edge of the glass area (the sill). Note: Window Height is still measured from bottom to top of glass — these are independent measurements.
- **Window Width**: Width of the window opening. Shown in the unit Home Assistant is configured for. Used by glare zones to determine which floor zones can receive direct sunlight based on the sun's horizontal angle. Measure the inside width of the glass area. Examples: Standard window = 0.9–1.2 m / 35–47 in, Double window = 1.5–1.8 m / 59–71 in, Patio door = 2.0–3.0 m / 79–118 in. Only relevant when glare zones are enabled.
- **Describe solar properties (estimate)**: Turn on to describe how much solar HEAT this window assembly lets through, so diagnostics can estimate it. Off by default and purely informational — nothing about how the cover moves changes either way. Every figure it produces is an estimate from published glazing and shading-fabric bands, not a measurement of your hardware.
- **Cover mounting side**: Where the cover hangs relative to the glass. External: outside the glazing, so absorbed heat is re-radiated to the outdoors — typically two to three times more effective at rejecting solar heat. Internal: inside the room, so sunlight has already crossed the glass and most of the heat the fabric absorbs stays indoors.
- **Cover shade**: How dark the fabric is, optically. Light reflects most of what hits it; Dark absorbs most of it. Used with the mounting side to look up an estimated solar transmittance from the published bands. Ignored when you enter a Total solar transmittance below.
- **Total solar transmittance (g), closed**: Optional: the fully-closed assembly's solar transmittance (g-value, 0.0–1.0), if your fabric or blind datasheet quotes one. Leave it empty to use the estimate from the mounting side and shade above. 0.0 means fully opaque to solar energy and is a real value, not 'unset'.
- **Glazing solar transmittance (g), uncovered**: Solar transmittance of the glass alone, with the cover fully out of the way (g-value, 0.0–1.0). Default 0.70 is typical of common double glazing; single glazing is nearer 0.85 and modern triple or solar-control glass nearer 0.35–0.50. Check the glazing datasheet if you have one.
- **Glazed area (optional)**: Optional: the glazed area of this window in square metres, used only by the Estimated Solar Gain sensor. Leave it empty to derive the area from the window height and width above — that gives the rough opening, and a frame typically eats 10–25% of it, so enter a measured glass area here if you want a closer figure. Required for cover types that do not record both a window height and a width (awnings, tilt-only blinds, sliding curtains, louvered roofs), which otherwise report the gain as unknown.
- **Awning Span Length**: Maximum extension length of your awning when fully extended. Shown in the unit Home Assistant is configured for. Measure from mounting point to the end of the fabric when fully out. Examples: Standard patio awning = 2.0–3.0 m / 79–118 in, Small window awning = 1.0–1.5 m / 39–59 in, Large commercial = 4.0 m / 157 in or more. Used to calculate how far the awning needs to extend to block sun.
- **Awning Angle**: Angle of the awning when extended (0-45°). 0° = Horizontal/flat (maximum coverage), 15° = Slight slope (typical for drainage), 30° = Steep slope (strong sun angle), 45° = Very steep (rarely used). Check your awning manufacturer specs. Most awnings are 0-15°. Affects shadow calculation for proper sun blocking.
- **Awning Shade Mode**: Whether the awning shades the window glass or the whole area in front of it. Shade window glass (default): extend just far enough to keep direct sun off the window, retracting as the sun moves toward the side of the window — best for cutting glare and heat at the glass. Shade area in front (patio): stay fully extended whenever the sun is in front of the awning, to shade a patio or seating area rather than the window.
- **Slat Depth**: Width of each slat (measure one slat front to back). Shown in the unit Home Assistant is configured for. Common sizes: Mini blinds = 2.5 cm / 1 in, Standard blinds = 5 cm / 2 in, Wide slats = 6.5–7.5 cm / 2.5–3 in. Measure a single slat with a ruler for precise sun blocking calculation.

### Duplicate Cover — Select Source

- **Source cover**

### Duplicate Cover — Configure

- **Name**
- **Cover Entities**
- **Window Azimuth**

### Create Building Profile

- **Name**: A friendly name for this building profile.
- **Cloud coverage sensor (optional)**: Optional cloud coverage sensor reporting 0–100% (e.g. from a weather integration). When the reading reaches the threshold, glare control is suppressed and the cover returns to its default position. Leave empty if you don't have this sensor.
- **Daytime gate sensors**: Optional binary sensors (or input\_boolean / switch / schedule) that decide when it is 'daytime' for sun tracking. When ON the integration sun-tracks; when OFF it applies the Sunset Position. Use a lux 'bright enough' binary sensor so real light — not the clock — opens and closes the tracking window: covers keep tracking on bright evenings past astronomical sunset, and stay at the sunset position on dark, overcast mornings. When set, this REPLACES the astronomical sunset/sunrise boundary (Sunset/Sunrise Offset are ignored). An unavailable or unknown sensor is treated as daytime, so tracking never stops just because a sensor hasn't reported. Leave empty to use the astronomical sunset/sunrise calculation.
- **Daytime gate template (optional)**: Optional Home Assistant Jinja2 template that decides 'daytime' for sun tracking. When it renders truthy (on/true/1) the integration sun-tracks; when falsy it applies the Sunset Position. How it combines with the gate sensors above (OR or AND) is set by 'Daytime gate template logic' below. It can stand alone with no sensors. Example: a Sun2 elevation template, or a lux comparison. A template that fails to render is treated as daytime, so a broken template never forces a premature sunset. When set (alone or with sensors), this REPLACES the astronomical sunset/sunrise boundary. Leave empty to disable.
- **Irradiance sensor (optional)**: Optional solar irradiance sensor (outdoor) for precise sun detection. Measures solar power in W/m². When the sensor reads below the threshold, direct sun is absent and glare control is suppressed. Leave empty if you don't have this sensor.
- **Is Sunny binary sensor (optional)**: Optional binary sensor, input\_boolean, switch, or schedule that authoritatively reports whether the sun is hitting the window. When ON, sun is assumed present; when OFF, sun is assumed absent and cloud suppression fires regardless of weather state. When unavailable or unknown, the integration falls back to the Weather Entity / Weather Conditions logic below. Use this when you compute sun-on-window upstream (e.g. azimuth-gated irradiance) and want to feed Adaptive Cover Pro a clean boolean.
- **Is Sunny template (optional)**: Optional Home Assistant Jinja2 template that decides whether the sun is on the window. When it renders truthy (on/true/1) sun is assumed present; when falsy it is assumed absent and cloud suppression fires. How it combines with the Is Sunny binary sensor above (OR or AND) is set by 'Is Sunny template logic' below; it can stand alone with no sensor. Example: an azimuth/elevation comparison, or a lux threshold. A template that is empty or fails to render gives no opinion, so the integration falls back to the sensor and then the Weather Entity / Weather Conditions logic. Leave empty to disable.
- **Lux sensor (optional)**: Optional illuminance sensor (indoor or outdoor) for precise sun detection. When the sensor reads below the threshold, direct sun is absent and glare control is suppressed. Typical direct-sun values: 5,000–10,000 lux. Leave empty if you don't have this sensor.
- **Outside temperature sensor (optional)**: Optional outdoor temperature sensor. When provided, this reading (rather than the indoor sensor) determines the current season, and the outside threshold guard is applied to prevent summer-close behavior on cold days.
- **Sunrise Time Entity**: Optional entity whose state is a datetime (e.g. Sun2 'sunrise at -4° elevation'). When set, replaces the astral-computed sunrise time as the morning boundary of the sunset position. It does not delay the Start Time unless 'Wait for sunrise before starting' is on. Accepts sensor or input\_datetime entities. Sunrise Offset still applies on top. Falls back to astral if the entity is unavailable.
- **Sunset Time Entity**: Optional entity whose state is a datetime (e.g. Sun2 'sunset at -4° elevation'). When set, replaces the astral-computed sunset time as the window boundary. Accepts sensor or input\_datetime entities reporting an ISO-8601 datetime. Sunset Offset still applies on top. Falls back to astral if the entity is unavailable.
- **Weather entity (optional)**: Optional weather integration used to detect cloud cover. When the current weather state is not in the selected list below, direct sun is assumed absent and glare control is suppressed. Leave empty to ignore weather state.
- **Is Raining binary sensor**: Binary sensor for rain detection. Override activates when this sensor is 'on'. Leave empty to ignore.
- **Is Raining template (optional)**: Optional Home Assistant Jinja2 template that decides whether it is raining. When it renders truthy (on/true/1) the override engages. How it combines with the Is Raining binary sensor above (OR or AND) is set by 'Is Raining template logic' below; it can stand alone with no sensor and reacts the instant the template flips. Example: derive 'raining' from a numeric rain-rate threshold. A template that is empty or fails to render gives no opinion (no retract). Leave empty to disable.
- **Is Windy binary sensor**: Binary sensor for wind detection. Override activates when this sensor is 'on'. Leave empty to ignore.

### Create Cover Group

- **Group name**
- **Adaptive Cover Pro members**: Members are orchestrated through their own instance, so gates and overrides still apply.
- **Generic cover entities**: Plain covers are commanded directly with the scene target. A cover already controlled by a selected member is skipped.
- **Area (live membership)**: Optional: covers in this area join the group automatically and membership tracks registry changes. Combined with the lists above.

### Create Command Queue

- **Queue name**: Covers reference this queue by name in their Movement & Schedule settings. Matching ignores case and extra spaces.
- **Gap between commands**: Seconds the queue stays busy after any cover on this queue transmits, before the next cover may go. Default: 5 seconds.

### After setup

- **Weather Override priority**: 1–99; built-in default 90. Highest built-in handler — lower it to let Manual or Custom Positions win.
- **Manual Override priority**: 1–99; built-in default 80.
- **Occupancy Timeout priority**: 1–99; built-in default 75.
- **Cloud Suppression priority**: 1–99; built-in default 60.
- **Climate priority**: 1–99; built-in default 50.
- **Glare Zone priority**: 1–99; built-in default 45.
- **Solar priority**: 1–99; built-in default 40. The base sun-tracking handler — raise it above Climate to make sun tracking outrank climate control.
- **Minimum position adjustment**: Minimum position change (%) required before adjusting the cover. Prevents tiny adjustments as sun moves slowly. Typical values: 1-2% (very responsive, may adjust frequently), 5% (balanced, recommended for most), 10% (less frequent, larger movements). Example: If cover is at 30% and sun moves slightly, only adjust if new position is 35% or more (with 5% threshold). Reduces motor wear and noise from constant tiny adjustments.
- **Minimum interval between position changes**: Minimum time (minutes) between cover adjustments. Prevents rapid position changes. Typical values: 2-3 min (very responsive, may be noisy), 5-10 min (balanced, recommended), 15-20 min (slow, gentle adjustments). If sun changes rapidly (clouds, shadows), integration waits this long before adjusting again. Reduces motor wear and provides smoother operation. Minimum is 2 minutes.
- **Starting time**: Don't start automatic control before this time (24-hour format). Use this to sleep in without morning blinds (set to 08:00 or later), match your routine (set to when you wake up), or leave blank to start at sunrise. Example: '07:30' means automatic control begins at 7:30 AM. Manual control still works before this time. If this time is earlier than sunrise and you want to wait for daylight, turn on 'Wait for sunrise before starting' on the Behaviour step.
- **Entity indicating starting time**: Entity representing starting time state, overriding the fixed start time set above. Useful for automating the start time with an entity (e.g., sensor that provides wake-up time based on calendar or sleep tracking).
- **End time**: Stop automatic control after this time (24-hour format). Use this to keep evening privacy (set to 18:00 or 19:00), return to default before bed, or leave blank to continue until sunset. Example: '20:00' means automatic control stops at 8:00 PM. Manual control still works after this time.
- **Entity indicating ending time**: Entity representing ending time state, overriding the fixed end time set above. Useful for automating the end time with an entity (e.g., sensor that provides bedtime based on calendar or daily routine).
- **Minimize movements**: Reduce how often the cover repositions while tracking the sun by snapping to a few fixed coverage levels instead of following the sun continuously. Rounds toward MORE coverage, so direct sun is never let in by the rounding. Trades some natural light for far fewer motor movements. Default: off.
- **Maximum coverage steps**: How many distinct positions the cover may use on its way to full coverage when 'Minimize movements' is on (1-10). 1 = jump straight to full coverage the moment the sun enters the sun acceptance angle and hold there until it leaves (fewest movements). Higher values track the sun more gradually in that many steps. Default: 1.
- **Snap closed below threshold**: When a sun-tracking position is barely open (a small non-zero demand under the threshold below), send it all the way closed instead of leaving a hard-to-see sliver of light through. Only affects sun-tracking positions; an active minimum position always wins over the snap. Default: off.
- **Snap closed threshold**: How close to fully closed (%) a sun-tracking demand must be before 'Snap closed below threshold' pulls it the rest of the way to the closed endpoint (1-50). Only applies when there is still a gap to close — an already-closed position is untouched. Default: 10%.
- **Command queue**: Serialize this cover's commands against other covers assigned to the same queue name. Covers sharing a queue never transmit at the same moment — useful for one-way radio backends (Somfy RTS, RFXtrx) where simultaneous commands collide and are lost. The gap between commands is set on the Command Queue entry with the same name, or defaults to 5 seconds if none exists. Leave blank for no queue (default).
- **Cover Type**: Starts on the type this instance is now. Pick a different one to switch — you confirm on the next screen, then fill in the new type's geometry. Leaving it as it is changes nothing.
- **Confirm cover type change**
- **Cancel the pending cover type change**
- **Cover Entities**: Select the cover entities to control via this integration instance. You can select multiple covers to control them as a group (all will receive the same position commands). Only select covers that serve this particular window - create separate integration instances for different windows.
- **Attach to Device**: Select a physical device to merge this integration's entities into. The integration's sensors, switches, and buttons will appear directly under that device in Home Assistant. Select 'None (standalone device)' to revert to a separate virtual Adaptive Cover device. Only devices that own the selected cover entities are shown.
- **Expose Proxy Cover Entity**: Expose a proxy cover entity per physical cover. Use this on dashboards instead of the physical cover so manual commands respect min-mode floors. Default: off.
- **Window Height**: Height of your window (from bottom to top of the glass area). Shown in the unit Home Assistant is configured for. Examples: Standard door = 2.0 m / 79 in, Small window = 1.5 m / 59 in, Floor-to-ceiling = 2.5 m / 98 in. Measure from where the cover starts to where it ends when fully extended.
- **Shaded area**: How far you want to ALLOW direct sunlight to reach into the room. Shown in the unit Home Assistant is configured for. This defines your acceptable 'glare zone' — the area where sunlight can reach the floor. The cover position adjusts to maintain this boundary as the sun moves across the sky. Common configurations: Zero (0 m / 0 in) keeps direct sun from passing the glass plane (full closure on hot days); Small glare zone (0.3–0.5 m / 12–20 in) keeps sunlight very close to the window; Medium glare zone (0.5–1.0 m / 20–40 in) allows sun to reach desk or seating area; Large glare zone (2.0–3.0 m / 79–118 in) allows sunlight deep into the room. KEY CONCEPT: LARGER value = MORE sunlight allowed farther into room = cover stays HIGHER/MORE OPEN; SMALLER value = LESS sunlight into room = cover drops LOWER/MORE CLOSED. Measure from the inside of your window to where you want the sun boundary to be.
- **Window Depth (Reveal)**: Depth of window reveal/frame from the wall surface. Shown in the unit Home Assistant is configured for. Optional parameter for advanced accuracy — set to 0 (default) to disable. Typical values: Flush mount = 0.05 m / 2 in, Standard frame = 0.10 m / 4 in, Deep reveal = 0.15 m / 6 in. Measure from the outer wall surface to the inner edge of the window frame. The reveal casts its own shadow across the top of the glass — the same area the cover protects from the top. When that shadow alone already covers everything the cover would otherwise have had to cover, the cover can open fully. Short of that, the reveal makes no difference to the calculated position.
- **Window Sill Height**: Height from the floor to the bottom of your window. Shown in the unit Home Assistant is configured for. Set to 0 (default) for floor-level windows or when unknown. Example: for a sill 1 m / 39 in above the floor, enter that value. Improves calculation accuracy for raised windows — without it, the blind closes slightly more than necessary. Range: 0–50 m / 0–1968 in. Measure from the floor to the bottom edge of the glass area (the sill). Note: Window Height is still measured from bottom to top of glass — these are independent measurements.
- **Window Width**: Width of the window opening. Shown in the unit Home Assistant is configured for. Used by glare zones to determine which floor zones can receive direct sunlight based on the sun's horizontal angle. Measure the inside width of the glass area. Examples: Standard window = 0.9–1.2 m / 35–47 in, Double window = 1.5–1.8 m / 59–71 in, Patio door = 2.0–3.0 m / 79–118 in. Only relevant when glare zones are enabled.
- **Describe solar properties (estimate)**: Turn on to describe how much solar HEAT this window assembly lets through, so diagnostics can estimate it. Off by default and purely informational — nothing about how the cover moves changes either way. Every figure it produces is an estimate from published glazing and shading-fabric bands, not a measurement of your hardware.
- **Cover mounting side**: Where the cover hangs relative to the glass. External: outside the glazing, so absorbed heat is re-radiated to the outdoors — typically two to three times more effective at rejecting solar heat. Internal: inside the room, so sunlight has already crossed the glass and most of the heat the fabric absorbs stays indoors.
- **Cover shade**: How dark the fabric is, optically. Light reflects most of what hits it; Dark absorbs most of it. Used with the mounting side to look up an estimated solar transmittance from the published bands. Ignored when you enter a Total solar transmittance below.
- **Total solar transmittance (g), closed**: Optional: the fully-closed assembly's solar transmittance (g-value, 0.0–1.0), if your fabric or blind datasheet quotes one. Leave it empty to use the estimate from the mounting side and shade above. 0.0 means fully opaque to solar energy and is a real value, not 'unset'.
- **Glazing solar transmittance (g), uncovered**: Solar transmittance of the glass alone, with the cover fully out of the way (g-value, 0.0–1.0). Default 0.70 is typical of common double glazing; single glazing is nearer 0.85 and modern triple or solar-control glass nearer 0.35–0.50. Check the glazing datasheet if you have one.
- **Glazed area (optional)**: Optional: the glazed area of this window in square metres, used only by the Estimated Solar Gain sensor. Leave it empty to derive the area from the window height and width above — that gives the rough opening, and a frame typically eats 10–25% of it, so enter a measured glass area here if you want a closer figure. Required for cover types that do not record both a window height and a width (awnings, tilt-only blinds, sliding curtains, louvered roofs), which otherwise report the gain as unknown.
- **Awning Span Length**: Maximum extension length of your awning when fully extended. Shown in the unit Home Assistant is configured for. Measure from mounting point to the end of the fabric when fully out. Examples: Standard patio awning = 2.0–3.0 m / 79–118 in, Small window awning = 1.0–1.5 m / 39–59 in, Large commercial = 4.0 m / 157 in or more. Used to calculate how far the awning needs to extend to block sun.
- **Awning Angle**: Angle of the awning when extended (0-45°). 0° = Horizontal/flat (maximum coverage), 15° = Slight slope (typical for drainage), 30° = Steep slope (strong sun angle), 45° = Very steep (rarely used). Check your awning manufacturer specs. Most awnings are 0-15°. Affects shadow calculation for proper sun blocking.
- **Awning Shade Mode**: Whether the awning shades the window glass or the whole area in front of it. Shade window glass (default): extend just far enough to keep direct sun off the window, retracting as the sun moves toward the side of the window — best for cutting glare and heat at the glass. Shade area in front (patio): stay fully extended whenever the sun is in front of the awning, to shade a patio or seating area rather than the window.
- **Slat Depth**: Width of each slat (measure one slat front to back). Shown in the unit Home Assistant is configured for. Common sizes: Mini blinds = 2.5 cm / 1 in, Standard blinds = 5 cm / 2 in, Wide slats = 6.5–7.5 cm / 2.5–3 in. Measure a single slat with a ruler for precise sun blocking calculation.
- **Enable sun tracking**: When enabled, covers track the sun within the configured sun acceptance angle and elevation limits (solar positioning). Disable to skip distance-based solar positioning while keeping glare zones (controlled by their own switch), climate, motion, manual override, custom positions, and other overrides active. Default: enabled.
- **Minimum Elevation of the sun**: Track sun only when elevation is ABOVE this angle (degrees above horizon). Sun elevation: 0°=horizon, 45°=halfway to zenith, 90°=directly overhead. Use this to ignore sun at certain times. Example: Set to 15° to ignore low morning/evening sun. Leave empty to track sun at all elevations.
- **Maximum Elevation of the sun**: Track sun only when elevation is BELOW this angle (degrees above horizon). Sun elevation: 0°=horizon, 45°=halfway to zenith, 90°=directly overhead. Use this to ignore sun at certain times. Example: Set to 60° to ignore high midday sun. Leave empty to track sun at all elevations.
- **Setup Blindspot**: Enable if you have obstacles blocking sun in part of the tracking area (trees, nearby buildings, roof overhang, balcony). When enabled, you define an azimuth + elevation range where sun is blocked. Cover ignores sun position when it's in this 'blind spot'. Leave disabled if you have clear view to sun all day.
- **Enable Glare Zones**: Protect specific floor areas from direct sun glare (vertical covers only)
- **Sun tracking gate sensors**: Optional binary sensors (or input\_boolean / switch / schedule) that decide whether the cover sun-tracks right now — for example, only while the air conditioning is calling for cooling. ON means track. Any one sensor being ON is enough. While the gate is closed, solar positioning is skipped and the cover falls back to its default position; climate mode, motion and manual override are unaffected, and glare zones keep running (they only drop their sun-tracking-only limits). Leave empty to always track.
- **Sun tracking gate template (optional)**
- **Sun tracking gate template logic**: How the sun tracking gate template combines with the gate sensors above. 'OR' (default) — track when the template OR any sensor says so. 'AND' — the template must also agree, so it acts as an extra gate. With only one source configured both modes behave the same.

Texts from the code of [jrhubott/adaptive-cover-pro](https://github.com/jrhubott/adaptive-cover-pro).

## Entities

- **Binary sensors**: Sun Infront, Manual Override, Glare Active, Position Mismatch
- **Buttons**: Reset Manual Override, Managed My Position, Apply Calculated Position, Scene: All Open, Scene: All Closed, Scene: Privacy, Clear Member Overrides, Stop Covers
- **Covers**: Group Cover
- **Numbers**: Managed My Position Value
- **Selects**: Scene
- **Sensors**: Target Position, Target Tilt, Start Sun, End Sun, Sun Position, Last Skipped Action, Last Cover Action, Manual Override End Time, Cloud Escalation End Time, Position Verification, Solar Calculation, Estimated Solar Gain, and 11 more
- **Switches**: Glare Zone 1, Glare Zone 2, Glare Zone 3, Glare Zone 4, Integration Enabled, Automatic Control, Sun Tracking, Occupancy Control, Manual Override Detection, Group Automation, Group Lock, Group Climate Mode

## Actions

- **Stop cover**: Sends stop\_cover to the targeted covers via the ACP proxy. Engages manual override so the next automatic cycle does not counter-command the cover. Use this instead of cover.stop\_cover when manual\_ignore\_external is enabled.
- **Enable integration**: Re-enables Adaptive Cover Pro on the targeted instances. Covers stay where they are; positioning resumes on the next natural update cycle.
- **Disable integration**: Disables Adaptive Cover Pro on the targeted instances. ACP-in-flight cover moves are stopped immediately, deferred timers cancelled, and reconciliation state cleared.
- **Emergency stop**: Panic button — sends stop\_cover to every configured cover on the targeted instances (capability-checked), then disables the integration. With no target, acts on all ACP instances.
- **Export configuration**: Returns the cover configuration as JSON for use in the simulation notebook.
  Fields: Cover configuration
- **Export all configurations**: Writes the full options of every Adaptive Cover Pro cover entry to adaptive\_cover\_pro\_export.json in your Home Assistant config directory as a lossless JSON snapshot. Returns the file path and entry count. Edit the file and re-import it with Import configurations.
- **Import configurations**: Reads a JSON file previously written by Export all configurations and applies each entry's options (matched by entry id) to the live config entries. Internal migration markers are preserved from the current entry. Numeric options are checked against their min/max bounds; a failing entry is reported without aborting the rest. Any public option absent from the file is reset to its default on reload — export first, then edit only what you need to change.
  Fields: File path
- **Get diagnostics**: Returns the live diagnostics snapshot for the targeted Adaptive Cover Pro instances — pipeline decision trace, cover positions, climate readings, sun data, and coordinator health.
  Fields: Config entry
- **Get troubleshooting**: Returns the Troubleshoot step's triage findings for the targeted Adaptive Cover Pro instances as structured data, plus the rendered report text.
  Fields: Config entry
- **Set position limits**: Update default height, min/max position, open/close threshold, and inverse state.
  Fields: Default height, Minimum position, Enable min position only during tracking, Min position during sun tracking, Maximum position, Enable max position only during tracking, Open/close threshold, Enable position matching, Inverse state
- **Set sunset / sunrise positions**: Update sunset position and offset settings. Pass null to clear an optional field.
  Fields: Sunset position, Sunset offset, Sunrise offset, Wait for sunrise before starting, Use Somfy My at sunset, Somfy My position
- **Set automation timing**: Update delta thresholds, time window start/end, and return\_sunset.
  Fields: Position delta threshold, Time delta threshold, Start time, Start entity, End time, End entity, Return to sunset position at end
- **Set manual override settings**: Update manual override duration, reset behavior, and detection threshold.
  Fields: Override duration, Override duration mode, Reset on window start, Detection threshold, Ignore intermediate states, Only engage from ACP commands
- **Set force override (DEPRECATED)**: DEPRECATED: force override merged into custom-position slot 5. This service now writes slot 5 at safety priority (100) and will be removed in a future release — use set\_custom\_position with slot 5 instead.
  Fields: Force override sensors, Force override position, Minimum position mode
- **Set custom position slot**: Update one custom position slot (1–10). A slot is active when it has a trigger (sensors and/or template) and a claim on an axis — a position, or one of the position\_max / tilt\_min / tilt\_max constraints. Only the fields you pass are changed. To retire a slot completely, clear its trigger and every axis claim (position, position\_max, tilt\_min, tilt\_max) — or use 🗑️ Delete on the Custom Positions options page, which erases the whole slot in one action. Priority 100 gives the slot safety semantics (acts outside the time window, bypasses delta gates).
  Fields: Slot, Trigger sensors, Trigger sensor (deprecated), Condition template, Template combine mode, Position, Priority, Minimum position mode, Use Somfy My, Only apply within time window
- **Set occupancy settings (deprecated)**: Deprecated — use set\_occupancy instead. Update occupancy sensors and occupancy timeout.
  Fields: Occupancy sensors, Occupancy timeout
- **Set occupancy settings**: Update the occupancy sensors, media players, and timeout that drive occupancy detection. Replaces the deprecated set\_motion service.
  Fields: Occupancy sensors, Occupancy media players, Occupancy timeout
- **Set light & cloud settings**: Update weather entity, sunny-state filter, lux/irradiance/cloud thresholds, and cloud suppression.
  Fields: Weather entity, Sunny weather states, Lux sensor, Lux threshold, Irradiance sensor, Irradiance threshold, Cloud coverage sensor, Cloud coverage threshold, Enable cloud suppression, Cloudy slat angle
- **Set climate settings**: Update climate mode and temperature/presence options. Enforces temp\_low \< temp\_high.
  Fields: Enable climate mode, Indoor temperature entity, Low temperature threshold, High temperature threshold, Outdoor temperature entity, Outdoor temperature threshold, Presence entity, Transparent blind, Close for winter insulation, Full close in summer heat
- **Set weather safety settings**: Update wind, rain, and severe-weather override settings.
  Fields: Bypass automatic control, Act outside the time window, Wind speed sensor, Wind direction sensor, Wind speed threshold, Wind direction tolerance, Rain sensor, Rain threshold, Is raining sensor, Is windy sensor

## Troubleshooting

- **Repair notices**: Notices it can show in Settings, Repairs:
  Indoor temperature sensor unavailable, Controlled cover unavailable, Sun integration unavailable, Position limits are contradictory, Custom position outside configured limits, Operational time window is inverted, Cover not reaching commanded position, Cover cannot tilt, Day/night middle rail not selected, Leftover device from an earlier version

## From the README

> Sun-tracking cover automation with an inspectable decision pipeline, full venetian sequencing, glare zones, and a seasonal climate arbiter — for Home Assistant.
>
> - Ten cover types with full geometric modeling — including vertical blinds, horizontal awnings, tilt-only blinds, and venetian blinds; each uses real window and facade geometry, not rules of thumb.
> - Inspectable decision pipeline — handlers run in priority order (weather safety, manual, custom positions with templated triggers, climate, glare, solar) and each reports its reason. A decision\_trace…
> - Venetian blinds done properly — dual-axis sequencer waits for the carriage to settle before sending tilt, handles back-rotation across a 45-second post-settle window, and pre-positions tilt on…
> - Climate mode with a full seasonal arbiter — winter heating, winter insulation, summer cooling, and glare comfort each have independent logic; presence, lux, irradiance, and cloud cover are all…
> - Glare zones — name the floor areas you want protected (TV, dining table); the cover deploys further than pure sun tracking when a protected zone would receive direct sun.
> - 15 runtime services — every parameter is scriptable from automations; no UI interaction needed to change mode, position limits, or overrides at runtime.

From the README of [jrhubott/adaptive-cover-pro](https://github.com/jrhubott/adaptive-cover-pro#readme), [MIT License](https://spdx.org/licenses/MIT.html). Shortened.

## At a glance

- Kind: Marketplace integration
- Category: [Blinds and curtains](https://vulpo.app/integrations/category/blinds-and-curtains.md)
- Number: 725 installs sharing analytics; 187 GitHub stars
- Connection: Works locally
- Upkeep: Updated in the last 6 months
- Needs: Needs the Marketplace (HACS on 2026.10 and older)
- Latest version: v2026.10.0, last updated October 9, 2026
- Domain: `adaptive_cover_pro`
- Source: <https://github.com/jrhubott/adaptive-cover-pro>
- Issues: <https://github.com/jrhubott/adaptive-cover-pro/issues>
- Screenshot: https://vulpo.app/integrations-img/6552c49694042998.webp (from jrhubott/adaptive-cover-pro's README)
- Screenshot: https://vulpo.app/integrations-img/9ec4bc34c23ee9af.webp (from jrhubott/adaptive-cover-pro's README)
- Screenshot: https://vulpo.app/integrations-img/e6176725243b01e9.webp (from jrhubott/adaptive-cover-pro's README)

In Vulpo: Quick Toggle card, Cover card, Button card, Select card, Apple Watch, Control Center

Independent directory, made by the developer of Vulpo. Not affiliated with Home Assistant or the Open Home Foundation. [About these numbers](https://vulpo.app/integrations/about)

Last updated 2026-10-22. Source: https://vulpo.app/integrations/marketplace/jrhubott-adaptive-cover-pro

---

- HTML version of this page: https://vulpo.app/integrations/marketplace/jrhubott-adaptive-cover-pro
- Site index for agents: https://vulpo.app/llms.txt
- Everything in one document: https://vulpo.app/llms-full.txt
- All pages: https://vulpo.app/sitemap.xml
