☀️ Cover Control Automation (CCA) - a comprehensive and highly configurable roller blind blueprint

I need the trace file if anything.

But please try to correct this time first: not 0:00 for time_down_late. That’s the next day. Use 23:59.

wouldn’t it be possible to use the sun integration to distinguish between morning and evening, there are values for next sunrise, next sundown etc. Maybe they are comparable! If yes, i would say you can use them for morning or evening! Maybe this is also useable for the sun elevation to differ if the value is from morning or evening!

1 Like

That’s a very good idea. Thank you very much.

And I’ve even finished the code for the calendar solution now. I’ll sleep on it.

I’d like to release the new major release. It’s going to be pretty intense.
But I’d prefer to implement a few older requests. Let’s see how much I can fit in.

Hi @Herr.Vorragend ,

I adapted the config to

time_up_late: "10:00:00"
time_up_late_non_workday: "10:00:00"
time_down_early: "18:00:00"
time_up_early_non_workday: "06:00:00"
time_down_early_non_workday: "18:00:00"
time_down_late: "23:59:00"
time_down_late_non_workday: "23:59:00"

The schedule assistant has been adjusted to display a bar daily from 6:30 AM to 11:59 PM.

The problem persists: The blinds open in the morning but do not close in the evening. Here’s the history of the sun event at 4:34 PM. I would expect this to be correct, as it is still early. However, I expect them to close at 6:00 PM. No further events have been triggered so far.

BR

Oh, now I see it. That took a while.

Your Time Down Early is set too late. When using the scheduler, you only need to split the day in half.

The trigger came before 6 p.m. and you only allow it from 6 p.m. onwards.

Change the value to 2 p.m.

And I urgently need to revise this. Hardly anyone can understand it, even though it is actually documented.

Does this mean I need to adjust the schedule so it has two bars per day – for example, 6:30 AM to 2:00 PM and 2:00 PM to 11:59 PM? Or do I need to adjust the value for “time_down_early”? Or maybe both? For some reason, I don’t understand what the schedule is even for.

I divide the time period into two segments per day and try it out: 6:00 AM–2:00 PM | 2:00 PM–11:59 PM.

If I set the time for “time_down_early” to 2:00 PM, the shutters could close as early as 4:00 PM due to sunset. That’s exactly what I want to avoid in the winter months, as it’s too early then - so I set the earliest closing time later. At least, that’s how I understand it. But I still don’t understand what this schedule is actually for. :thinking:

Hello everyone,
I have been using this Automation since May this year and I am really happy with it. Thank you! However, I’m stuck with one thing.

Currently, the roller shutters open at 08:00. Of course, just as I configured it :wink:
But at that time, due to winter here in Germany, the sun hasn’t risen yet and it’s still dark outside.

Previously, in my self-made NodeRed scripts, I always set it up so that at 8 o’clock it checked whether the sun had already risen. If yes, the shutters opened; if not, it waited until the sun had risen.
This should be possible with the Blueprint as well, but I don’t understand how…

Best regards

Look at the first screen shot in post #1. I would say that you would need the sun elevation option ticked.

Thanks for the hint — I had already selected that…



Take a look at the documentation here.
However, I will probably change this in the next update.


The roller blind will open here at 8:00 a.m.
The position of the sun is controlled between the Early+Late times. So always at the latest at the Late time.

It will be tight with the sun for you, as you have both times set to the same time.

that was my mistake. I simply skimmed over it. It’s clearly written in the description…
Thanks for your hint!

Das war nicht ganz so fresh wie fettes Brot :wink:

1 Like

Hello @Herr.Vorragend,

Thank you for your feedback. This means that I need to use ONE sequence in the scheduler again and define the start and end times in the CCA automation for each roller shutter accordingly. For example:

time_up_late: "08:00:00"
time_up_late_non_workday: "09:00:00"
time_down_early: "17:00:00"
time_up_early_non_workday: "07:00:00"
time_down_early_non_workday: "17:00:00"
time_down_late: "23:59:00"
time_down_late_non_workday: "23:59:00"

My question: How can I configure the shutters so that they don’t close as early as the sun event? According to The Sun, sunset is already shortly after 4 p.m., which would currently be too early. But setting an early down time to a later one doesn’t seem to work.

Unfortunately, it was already too late yesterday when I made the changes, and the events from Sun had already been triggered. I’ve now set the “down early” times earlier than the events from Sun. “Down early” = 4:00 PM, event around 4:30 PM.

    time_up_early: "06:00:00"
    time_up_late: "10:00:00"
    time_up_early_non_workday: "06:00:00"
    time_up_late_non_workday: "10:00:00"
    time_down_early: "16:00:00"
    time_down_early_non_workday: "16:00:00"
    time_down_late: "23:59:00"
    time_down_late_non_workday: "23:59:00"

The scheduler is again a sequence from 6:00 AM to 11:59 PM. I’ll report back on whether it works now.

:tada: CCA 2025.12.03 BETA - The Most Powerful Update Yet! :rocket:

Hey CCA Community! :wave:

I’m absolutely thrilled to announce the BETA release of CCA 2025.12.03 - this is hands down the most feature-packed, intelligent, and flexible version I’ve ever built! :confetti_ball:

After months of community feedback, debugging sessions, and countless iterations, I am ready to invite you to test the future of automated cover control. This isn’t just an update - it’s a complete evolution of what CCA can do! :sparkles:


:warning: Important Beta Notice

:microscope: This is a BETA release! During the beta phase, all GitHub links point to the beta branch. Once testing is complete and stable, the changes will be merged to the main branch.

Beta Blueprint URL:

https://github.com/hvorragend/ha-blueprints/blob/beta/blueprints/automation/cover_control_automation_beta.yaml

Beta Documentation:

  • All guides and documentation linked below use the beta branch
  • After stable release, links will point to main branch

:star2: Headline Features

:date: Calendar Integration - Game Changer!

Say goodbye to rigid time schedules! You can now use Home Assistant calendars for cover scheduling:

  • :white_check_mark: Create “Open Cover” and “Close Cover” events in any calendar
  • :white_check_mark: Different schedules for weekdays, weekends, holidays, vacations
  • :white_check_mark: Instant response when events start/end - no automation reload needed!
  • :white_check_mark: Family-friendly - anyone can adjust the schedule in their calendar app
  • :white_check_mark: Visual planning with calendar view

Example: Monday-Friday 06:00-20:00 open, Saturday-Sunday 08:00-22:00 open, vacation week all day closed. Just create the events - CCA handles the rest!

This is huge for people who want flexible, exception-friendly scheduling without touching YAML! :dart:


:brain: Smart State Memory & Force Return

Ever forced your covers open for rain protection, then forgot to return them to normal? Not anymore!

When enable_background_state_tracking is enabled:

  • :white_check_mark: CCA tracks what position the cover should be in (background state)
  • :white_check_mark: Even during Force-Open/Close/Shading, the helper updates in the background
  • :white_check_mark: When force ends, cover automatically returns to the correct target position!

Real-world scenarios:

  • :cloud_with_rain: Rain protection → Auto-return to shading after rain stops
  • :dash: Wind protection → Auto-return to scheduled state when wind calms
  • :snowflake: Frost protection → Auto-return to normal automation after sunrise
  • :clapper: Movie mode → Auto-return to open/shading when movie ends

This is seamless automation - CCA now truly handles emergency scenarios and returns to normal without manual intervention! :raised_hands:


:sunny: Flexible Shading Logic - AND/OR Condition Builder

This is where things get seriously powerful! You now have full control over shading conditions:

New capabilities:

  • :white_check_mark: Separate START and END logic - strict criteria for starting, relaxed for ending (or vice versa!)
  • :white_check_mark: AND conditions - “ALL must be true” (e.g., sun position + brightness + temperature)
  • :white_check_mark: OR conditions - “AT LEAST ONE must be true” (e.g., redundant temperature sensors)
  • :white_check_mark: Per-condition on/off switches - enable/disable individual triggers independently
  • :white_check_mark: Unified retry behavior with configurable timeouts

Example configurations:

Conservative: AND(azimuth, elevation, brightness, temp) + OR(none)
Flexible: AND(azimuth, elevation) + OR(brightness, temp1, temp2)
Aggressive: AND(azimuth) + OR(brightness, temp1, forecast)

You can now fine-tune between conservative and aggressive sun protection without changing sensors! :art:


:thermometer: Enhanced Forecast & Temperature Intelligence

Forecast handling just got way smarter:

  • :white_check_mark: Dedicated inputs - separate fields for weather entities vs. temperature sensors
  • :white_check_mark: Smart source priority - direct sensors preferred for faster updates
  • :white_check_mark: Configurable forecast mode - daily/hourly/live weather attributes
  • :white_check_mark: Full hysteresis for ALL temperature paths (no more rapid cycling!)
  • :white_check_mark: Independent temperature-based shading - start shading based on forecast alone

Now you can shade early in the morning if high temperatures are forecasted, even before the sun hits! :sunny::thermometer:


:framed_picture: Awning & Sunshade Support

Finally! CCA now supports awnings and sunshades with inverted position logic:

Blinds/Shutters (Standard):

  • 0% = closed (down)
  • 100% = open (up)
  • Shading = lower positions (e.g., 25%)

Awnings/Sunshades (Inverted):

  • 0% = retracted (closed)
  • 100% = extended (open)
  • Shading = higher positions (e.g., 75% extended)

Just select your cover type, and CCA handles all the logic automatically! The position comparison system works flawlessly for both types. :circus_tent:


:chart_with_upwards_trend: Dynamic Sun Elevation - Set & Forget

No more manual adjustments for DST or seasonal changes! :tada:

The problem: Fixed sun elevation thresholds don’t work year-round. Winter sun stays lower, summer higher.

The solution: Optional template sensors that automatically adapt thresholds to the season using sinusoidal interpolation.

Benefits:

  • :white_check_mark: No DST adjustments needed
  • :white_check_mark: Year-round optimization
  • :white_check_mark: Covers open/close at consistent solar times
  • :white_check_mark: Smooth transitions throughout the year
  • :white_check_mark: Configure once, works forever!

Check out the new Dynamic Sun Elevation Guide for setup! :books:


:arrows_counterclockwise: Tilt Position - Wait Until Idle Mode

Z-Wave users, this one’s for you! :dart:

The issue: Some Z-Wave devices (like Shelly Qubino Wave Shutter) block tilt commands during motor movement, causing unreliable tilt positioning.

The fix: New “Wait Until Idle” mode that monitors cover state before sending tilt commands!

Configuration:

  • Tilt Wait Mode: “Fixed Delay” (default) or “Wait Until Idle”
  • Tilt Wait Timeout: Maximum wait time (default: 30s)

Benefits:

  • :white_check_mark: Reliable tilt without manual delay tuning
  • :white_check_mark: Fully backward compatible
  • :white_check_mark: Timeout protection with warning logs

No more guessing delay values - CCA waits intelligently! :stopwatch:


:shield: Critical Bug Fixes

Contact Sensor Race Condition :zap:

Fixed #225 - When multiple contact sensors changed simultaneously (e.g., window + lock within milliseconds), mode: single would block the second trigger, potentially locking users out.

Solution: Switched to mode: queued - all triggers are processed in order, none are lost! This ensures lockout protection works correctly even with rapid sensor changes. :lock::white_check_mark:

Resident Mode Fix :bed:

Fixed #174 - Cover remained closed when resident left room during daytime with all opening conditions met.

Solution: Cover now evaluates time window and environmental conditions when resident leaves. “Open immediately” now respects daytime phase (only opens before evening closing time). :sunrise:


:warning: Breaking Changes & Migration

Please update your configuration:

  1. shading_start_behaviorshading_start_max_duration

    • Old “trigger_reset” ≈ 0 (no periodic retry)
    • Old “trigger_periodic” ≈ 3600-7200 seconds (1-2 hours)
  2. Removed: is_shading_end_immediate_by_sun_position

    • Use the new flexible AND/OR condition logic instead
  3. Removed: shading_end_behavior

    • Covers now always return to open_position after shading ends
    • For awnings: This means retracted (0%)
    • For blinds: This means fully up (100%)
  4. Time Early = Time Late now supported!

    • Both can be identical for guaranteed open/close at exact time
    • Previous behavior: Early time with met conditions
    • New behavior: Set both to same value for fixed time operation

:art: Quality of Life Improvements

Config Check Refactoring :white_check_mark:

  • 80+ validation checks organized into 19 logical sections
  • Enhanced error messages with specific, actionable
  • Improved formatting for consistency and readability
  • Better debugging - you’ll know exactly what’s wrong!

:bar_chart: Full Changelog

Check out the complete CHANGELOG.md for every detail!

Version: 2025.12.03


:test_tube: Beta Testing - I Need You!

This is a massive update with fundamental changes to core logic. While I’ve tested extensively, real-world scenarios are invaluable!


:inbox_tray: Installation

:microscope: BETA Blueprint URL:

https://github.com/hvorragend/ha-blueprints/blob/beta/blueprints/automation/cover_control_automation_beta.yaml

:warning: Important: During beta testing, use the beta branch URL above. After stable release, the blueprint will be merged to the main branch.

Installation via GitHub import:

  1. Go to Settings → Automations & Scenes → Blueprints
  2. Click “Import Blueprint”
  3. Paste the beta branch URL above
  4. Confirm import

Existing users:

  • Remove old blueprint import (main branch)
  • Import beta version using URL above
  • Review breaking changes before enabling new features

Switching back to stable:

  • If you need to revert, simply re-import from the main branch URL
  • Your configurations will remain intact

:bulb: Resources

:open_book: Beta Documentation (all links use beta branch):

:heart: Support Development:


Ready to upgrade? Remember to use the beta branch URL during testing! Drop your feedback below! Let’s make this the best CCA release yet! :tada:

:pray: Thank You!

7 Likes

Collapsing sections - as is often used in blueprints - no longer seems to work in Home Assistant 2025.12. However, this appears to be a bug.

This has a huge impact on the usability of this blueprint.
I guess I chose the wrong time to start the beta phase. :grinning:

OMG :scream:…wouldn’t it be better to name the blueprint something with “beta” in the name

I’m right, that normaly the automation works as before after changing to the new blueprint if its only timebased?

Yes. Everything is fully backward compatible.
And I’ve been testing various scenarios for weeks now. Just not all the new features in depth yet.
Shading, for example, is difficult to test in the fall.

2 Likes

Closing the blinds finally worked. I learned from this that the sun events only work if they fall between the early and late timestamps. This isn’t an OR operation…

The beta update sounds interesting. I think I’ll take a look at it. But I still need to figure out how to switch without having to redo everything… still new to HA :slight_smile:

yep testing shading is nearly impossible…my shading automations are only activ if the forecast temp is above 22°C…in winter is time and sun elevation based, and that works as it should…the only think sometimes happens is that when door is open → ventilation starts → roller gets up and during the drivetime i close the door, than the roller won’t close. Then i have to open and close the door again…