Cover Control Automation (CCA) - Intelligent Automation for Blinds, Awnings & Shutters | Calendar, Sun Shading, Force Functions

Your opening window is effectively 06:00–07:00 on all days: time_up_early isn’t set in your config, so its default 06:00 applies, and without a workday sensor the *_non_workday times are never used. In summer the sun is above 10° elevation before 06:00, so the current version would open the cover at 06:00 sharp (the early-time trigger re-checks the elevation live). Opening only at 07:00 means the 06:00 run was swallowed — that matches bugs fixed in recent releases (e.g. 2026.07.19: the resume check after a restart could consume the first regular event of the day, so the cover only opened at the “latest” fallback time).

Please update to the current blueprint version first. If it still happens afterwards: you already have the logbook enabled — check the automation trace around 06:00 and post which trigger.id fired and what environment_allows_opening evaluated to.

One more note: with sun_elevation_up: 10 and a 06:00–07:00 window, the elevation can practically never delay your opening in summer (threshold is crossed before the window starts) — and in winter it’s the 07:00 guarantee opening that fires by design. If you want the elevation to actually control the opening moment, widen the window (e.g. time_up_late: 08:30).

Why your cover closes

This is expected blueprint behavior: when the contact goes to off, lockout protection
ends and CCA returns the cover to its background state — in your case bas: "cls"
(closed). Lockout only prevents closing while the window is open. What should keep the
cover up is the manual override (man: 1) — but it doesn’t, for three reasons:

  1. Missing option: the “window closed → return to background state” branch is gated
    by ignore_ventilation_after_manual, not by ignore_closing_after_manual. Add it:

    ignore_after_manual_config:
      - ignore_closing_after_manual
      - ignore_shading_after_manual
      - ignore_ventilation_after_manual   # ← new
    
  2. Your manual open is never registered: your helper shows man: 0 and an old
    ts.man, and it’s missing the "d" field — you’re on an older blueprint version
    affected by issue #614 (manual moves shortly after a helper write are swallowed).
    Update the blueprint. Once detected, a manual full open also sets bas: "opn",
    so the cover stays up after the window closes.

  3. reset_override_timeout: 120: the override expires after 2 h anyway — close the
    door later than that and the protection is gone. Increase it or use fixed-time reset.

bas: "cls" itself is correct: your auto_up_condition requires abwesenheit: off, so
with absence active the morning opening is skipped and the base state stays closed.

1 Like

CCA Update — What’s new since 2026.07.05 (versions 2026.07.12 … 2026.07.25 V2)

This is the short version — the full changelog with all details on every single item is here: :open_book: Complete Changelog

:warning: Breaking change (2026.07.12)

Installations created before ~2026.05 must be re-saved once with the :timer_clock: Time Control” checkbox enabled — otherwise time/calendar opening and closing stops firing entirely (pure time setups: covers stop moving; hybrid setups with brightness/sun: covers open too early and close too late) (#595, #544). The :check_mark: Check Configuration run and the online validator now detect and explain this.

:sparkles: New features

  • :dashing_away: Full Ventilation Position: new optional position for a fully opened window. For setups where “open” does not mean “cover fully up” (e.g. venetian blinds on a terrace door whose everyday Open Position is blind down, slats open): opening the door now drives the blind all the way up, closing it returns to the normal state. Left empty, nothing changes (2026.07.25 V2)
  • :level_slider: Multi-instance support: several CCA automations can now safely share one cover (summer/winter, home/away, a holiday instance, …) — switched via an input_boolean, a shared dropdown helper or a calendar, with a clean hand-over between instances. Bonus: pointed at an always-on input_boolean, the switch doubles as a “re-sync now” button (2026.07.25)
  • :counterclockwise_arrows_button: Recovery is now a three-way choice: never (default) / only after a device or integration outage / always (also after a restart or save) — plus a major rework: missed openings/closings, sun shading, force functions and override resets are now caught up correctly, and pure status clean-ups run in any case without moving the cover (2026.07.12 – 2026.07.13 V6)
  • Alternate sun shading position with its own switch entity (2026.07.12, #580)
  • :puzzle_piece: Custom condition sensor for sun shading — bind your own binary_sensor/input_boolean in all four START/END condition lists (2026.07.13 V2, #531)
  • New tilt wait mode “:clockwise_vertical_arrows: Tilt First, Then Position (Somfy J4 IO)” for motors that restore the slat position after every positioning run (2026.07.13 V3, refined 2026.07.25, #355, #612)
  • Tilt position tolerance: on tilt covers, states sharing the same position (closed/shading/ventilate) are now told apart by their tilt angle (2026.07.05, #558)
  • :open_book: New CCA Handbook: the complete configuration reference for every input, in 17 chapters (2026.07.12 V2)

:bug: Most important fixes

  • Switching off a force function (e.g. Force Close as an “away mode”) could drive the cover back into a sun shading that had already ended — the shading end conditions are now re-evaluated at that moment (2026.07.25 V2)
  • A sun shading could freeze for the whole day when the waiting period expired while the cover already rested at the shading position (#632)
  • Manual movements were silently ignored after pure bookkeeping runs or during drive delays — the next automatic movement then drove over your hand-set position (#614). :light_bulb: Make sure your status helper has Maximum length 254 — Check Configuration will warn you otherwise
  • Tilt covers: a tilted window could leave the slats at the open tilt instead of the ventilate tilt (#615, #608)
  • Resident-driven setups: a tilted window kept the cover at the ventilation position when the resident left instead of opening it (#616)
  • An unreachable battery window contact could park the cover at the ventilation position for good (#622)
  • Re-enabling the automation did not start the promised catch-up on current HA versions (#617)
  • Disabled or deleted entities blocked every run silently or froze force functions forever — now reported by name in the log (2026.07.13 V6)
  • Force functions are no longer cancelled or stuck when their entity drops out and returns (2026.07.13 V4)
  • Calendar control: two events with the same start time are now both handled, and event titles are matched exactly instead of as a substring (#568, #536)
  • The lockout protection could be bypassed at opening time while shading was due with an open window (2026.07.05 V2)
  • Internal rework (“transition architecture”): every execution path now ends with a guaranteed status write, eliminating a whole class of “stuck forever” bugs — and the blueprint shrank by ~950 lines (2026.07.12 V2/V3)
  • …plus many more recovery, ventilation, force-pause and validator fixes — see the full changelog

Hi,

thanks for the excellent report — the trace details (helper state, sun azimuth/elevation at the moment you disabled Force Close) made this easy to pin down. You found a real gap, and it’s fixed in the upcoming release (2026.07.25 V2).

What happened:

While a force function is active, it outranks everything else in CCA’s priority cascade — including the shading-end handling. So when the sun left the configured azimuth/elevation range during your Force Close period, the end of the shading could not be processed and the helper kept shd: 1. When you disabled Force Close, the recovery logic restored what the helper said was the background state: the (long expired) shading position.

What changes:

The force-disable recovery now re-evaluates the shading end conditions at the exact moment the force is switched off:

  • End conditions met (your case: sun at 1° elevation, 301° azimuth — well outside the shading range) → the stored shading is cleared and the cover returns to the open position (or closed/ventilation, whatever the schedule and window contacts say at that moment).
  • End conditions still met for shading (sun still on the facade) → the shading position is restored, exactly as before.
  • No end conditions configured → nothing changes, the shading is restored as before.

Forecast-based end conditions are evaluated against freshly loaded forecast data as well.

So your “away mode” (Force Close + auto_recover_after_force) will behave as you expected: leave, covers close; return in the evening, covers open — no detour via the shading position.

Until the release is out there’s no clean workaround, I’m afraid — the nightly 23:55 reset clears the stale shading state, so only same-day returns are affected.

Thanks again for the report! :folded_hands:

Hi Tincup81,

good news: you didn’t miss anything — what you describe simply wasn’t possible until now. The lockout protection always drove the cover to the :upwards_button: Open Position, and since your everyday “open” is 0 % (blind down, slats open), opening the terrace door did effectively nothing. “Misusing” the partial ventilation position doesn’t work either, as you found out — it only applies to the tilted contact.

Your request made it into today’s release: CCA 2026.07.25 V2 adds a new optional input :dashing_away: Full Ventilation Position in the Cover Position Settings section.

How it works: when the full open window contact triggers, the cover now drives to this position instead of the Open Position — with the full lockout protection as usual (no closing, no sun shading while the door is open). When the door is closed again, the cover returns to whatever the schedule says (your normal open/close/shading state). All lockout paths honor the new position: the contact reaction itself, the morning opening and the shading end while the door is open, presence changes, force recovery and the restart catch-up.

For your setup:

  • :upwards_button: Open Position: 0 (as you have it — blind down, slats open)
  • :dashing_away: Full Ventilation Position: 100
  • :door: Contact Sensor For Open Window (Full Ventilation): your door sensor

That’s it — open the door and the blind drives all the way up. On tilt covers the slats follow the :upwards_button: Open Tilt Position, which at 100 % travel doesn’t matter physically anyway.

If you leave the new input empty, nothing changes — the lockout keeps using the Open Position as before, so existing configurations are unaffected.

Just re-import the blueprint to update. More details in the handbook: CCA Online Tools | Cover Control Automation — Tools & Documentation

2 Likes

That’s very strange—two of my roller blinds just closed with the new version, while the others, according to the trace, are stuck at “Shading Start Pending: Continue waiting.”

Currently, the helper shows: {“bas”:“opn”,“shd”:0,“pnd”:“beg”,“win”:“cls”,“frc”:“non”,“res”:0,“man”:1,“ts”:{“opn”:1785037567,“cls”:1785009605, “shd”:1784978162,“due”:1785049140,“arm”:1785047312,“man”:1785037567},“v”:6,“t”:1785048840,“d”:0}

Trace (valid 90h)

alias: CCA Büro Mike
description: ""
use_blueprint:
  path: hvorragend/cover_control_automation.yaml
  input:
    blind: cover.shellyplus2pm_3ce90e2f49dc
    auto_options:
      - auto_up_enabled
      - auto_down_enabled
      - auto_shading_enabled
      - time_control_enabled
    cover_status_options: cover_helper_enabled
    cover_status_helper: input_text.cca_helper_buro_mike
    close_position: 31
    ventilate_position: 31
    shading_position: 35
    position_tolerance: 2
    time_up_early: "06:30:00"
    time_up_late: "06:30:00"
    time_down_early: "22:00:00"
    time_down_early_non_workday: "22:00:00"
    time_down_late: "22:00:00"
    workday_sensor: binary_sensor.workday_sensor
    brightness_up: 180
    sun_elevation_up: 4
    sun_elevation_down: -1
    contact_window_opened: binary_sensor.senoro_fenster_buro_mike
    shading_azimuth_start: 76
    shading_azimuth_end: 176
    shading_brightness_sensor: sensor.helligkeit_pv_string_1
    shading_sun_brightness_start: 1600
    shading_sun_brightness_end: 500
    shading_temperatur_sensor2: sensor.garten_temperature
    shading_min_temperatur2: 15
    shading_forecast_sensor: weather.nuernberg
    shading_forecast_temp: 19
    shading_config:
      - shading_compare_forecast_with_sensor2
    shading_conditions_start_and:
      - cond_azimuth
      - cond_elevation
      - cond_brightness
      - cond_temp2
    shading_conditions_end_or:
      - cond_azimuth
      - cond_elevation
      - cond_brightness
      - cond_temp2
    shading_end_immediate_by_sun_position: true
    shading_temperatur_sensor1: sensor.buro_mike_temperature
    shading_min_temperatur1: 21.5
    default_sun_sensor: sun.sun
    shading_waitingtime_end: 600
    ignore_after_manual_config:
      - ignore_shading_after_manual
    reset_override_config: []
    reset_override_timeout: 60
    time_down_late_non_workday: "22:00:00"
    time_up_late_non_workday: "07:00:00"

Thank you so much for adding this feature. finally, I will transfer all my personal automations to CCA now :blush:. Appreciate your work!

1 Like

Good news: nothing is stuck — the trace even tells you what it’s waiting for. The retry runs contain this in log_extra:

blocked by=manual_override; elapsed=1228s/7200s; next_retry_in=300s

Your helper shows "man":1 with ts.man = 05:46:07 this morning — at that moment the cover was moved to the open position outside of CCA (wall button, app, another automation, or by hand; your Sunday opening window doesn’t start before 07:00, so it wasn’t CCA). CCA recorded that as a manual override.

Since you have “Ignore sun shading after manual position change” enabled, shading is deliberately blocked on this cover. The pending keeps retrying every 300 s and will abort after the 2-hour retry budget. Your other blinds closed because their helpers don’t have a manual override recorded ("man":0).

Important: you have no override reset configured (reset_override_config: []) — so once a manual move is detected, the override sticks until the nightly 23:55 reset. If you want shading to resume automatically after a manual move, configure an override reset (e.g. reset after a timeout or at a fixed time). Or, if a manual opening shouldn’t block shading at all, disable “Ignore sun shading after manual position change”.

To unblock it right now: clear the override (e.g. edit the helper and set "man":0) — the next retry (within 5 minutes) will then execute the shading.

Worth checking on your side: what moved the blind at 05:46 this morning?

1 Like

Oh man, if you’re going to mess around with the settings, you really should pay close attention. I intentionally enabled the “Ignore” feature but limited it to 60 minutes. At least, that’s what I thought—but I forgot to check the box.

Now it looks like this:

ignore_after_manual_config:
      - ignore_shading_after_manual
    reset_override_config:
      - reset_timeout
    reset_override_timeout: 60

This morning at 5:46, the roller shade was opened using the button.
Thanks so much for your help!

1 Like