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

Hello everyone, I would like to introduce you to my comprehensive cover control blueprint:

:star: Cover Control Automation (CCA)

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

Current version: 2026.01.12

:link: Resources: GitHub Project | FAQ & Troubleshooting | Full Changelog | CCA Configuration Validator | CCA Trace Compare | CCA Trace Analyzer | Report Issues

If you would like to support development:

:pray: PayPal Donation | :pray: Buy me a coffee


:star2: What is CCA?

Cover Control Automation is a comprehensive Home Assistant blueprint that automatically manages window coverings (roller shutters, blinds, awnings) based on time, sun position, weather conditions, and your preferences. It largely eliminates the need for manual adjustments.

:rocket: Why CCA?

  • :white_check_mark: Most comprehensive cover automation blueprint available
  • :white_check_mark: Highly configurable - fine-tune every aspect
  • :white_check_mark: Intelligent behavior - respects manual changes, lockout protection
  • :white_check_mark: Active development - regular updates based on community feedback
  • :white_check_mark: Extensive documentation - guides, examples, and support

:fire: Key Features

:date: Time & Schedule Control

  • Flexible scheduling: Traditional time inputs OR calendar-based control
  • Calendar integration: Visual, family-friendly scheduling with exception handling
  • Workday detection: Different schedules for workdays/weekends/holidays
  • Dynamic sun elevation: Seasonal adaptation without manual DST adjustments

:sunny: Advanced Sun Shading

  • Flexible AND/OR logic: Full control over shading conditions
  • Multiple sensors: Sun position, brightness, temperature (indoor/outdoor), weather forecast
  • Intelligent retry: Periodic condition checking with configurable timeouts
  • Independent START/END logic: Different criteria for starting vs. ending shading
  • Per-condition switches: Enable/disable individual triggers independently

:framed_picture: Cover Type Support

  • Blinds & Roller Shutters: Traditional covers (0% = closed/down, 100% = open/up)
  • Awnings & Sunshades: Inverted logic (0% = retracted, 100% = extended)
  • Automatic adaptation: Position logic adjusts based on cover type

:window: Ventilation Management

  • Partial ventilation: Cover moves to ventilation position when window tilted
  • Full ventilation: Cover fully opens when window completely opened
  • Lockout protection: Prevents accidental closure during ventilation
  • Automatic return: Restores position when ventilation ends

:dart: Manual Override Intelligence

  • Detection: Recognizes manual cover adjustments
  • Respect: Honors your manual decisions for configurable timeout
  • Auto-resume: Automation resumes after timeout or reset
  • Persistent tracking: Status survives Home Assistant restarts

:brain: Smart State Memory & Force Return

  • Background tracking: Continues tracking target state during force functions
  • Automatic return: Cover returns to intended position when force ends
  • Emergency scenarios: Perfect for rain/wind/frost protection with automatic recovery
  • Seamless control: Zero manual intervention needed

:hammer_and_wrench: Extensive Customization

  • Fine-tune thresholds: Every timeout and threshold is adjustable
  • Multi-stage tilt control: Elevation-based tilt positioning
  • Flexible logic: AND/OR conditions for complex scenarios
  • Per-feature enable/disable: Use only the features you need
  • Custom delays: Prevent RF interference between covers

:hammer_and_wrench: Helpful Tools

:mag: Configuration Validator

Validate your YAML configuration:

:books: Documentation


:tv: Screenshots


:rocket: Getting Started

  1. Import Blueprint: Click the button at the top of this post
  2. Create Helper: Text input with minimum 254 characters (Settings → Helpers)
  3. Create Automation: Use the imported blueprint
  4. Configure Features: Enable what you need (morning opening, sun protection, ventilation)
  5. Set Positions: Configure open/close/shading positions
  6. Test & Refine: Run and adjust thresholds as needed

[Full details in release post :arrow_down:]

For complete changelog: CHANGELOG.md on GitHub


I hope you enjoy using CCA! :partying_face:

Please don’t forget to give this post a :heart: if you find it helpful. Thank you!

Questions? Ideas? Issues?

110 Likes

:question: Troubleshooting Questions

:mailbox_with_mail: Tips for Creating Helpful Support Requests

When asking for help on the forum, include:

  • :receipt: Your automation YAML configuration (exported instance).
  • :camera: The exported trace (especially of failed runs).
  • :white_check_mark: Expected behavior vs :x: Actual result.
  • Tip: Please do not summarize so many independent problems in one post. It makes support easier for me if we could focus on one possible error per post.

:test_tube: How to Use Traces Effectively

Traces allow you to inspect exactly what happened when an automation was run.

Increase Stored Traces (Optional)

To store more traces, add this to the automation YAML:

trace:
  stored_traces: 20

See also: Troubleshooting automations - Home Assistant

Providing the traces

  1. Go to Settings → Automations & Scenes.
  2. Click on the relevant CCA automation.
  3. Select the Traces tab to view execution steps.
  4. Use the arrow symbols to switch back and forth between the traces and search for the trigger (see trigger table) that should actually trigger something.
  5. Please note that traces for the trigger “t_manual_x” are not relevant for debugging. Traces are only required in very rare cases. Then I would also point this out. These triggers are reactions to manual position changes or the attempt to recognize previous actions from the blueprint. If there are problems, then rarely with this trigger, but with the trigger directly before it.
  6. Download the trace and make the file available in the thread via filehosters such as Pastebin.

Uploading the JSON File

Since the forum does not support uploading .json files directly, please use one of the following services to host your file and share the link in your post:

Service Link Account Required? Notes
Pastebin :white_check_mark: For “Unlisted” pastes Supports syntax highlighting for JSON.
GitHub Gist :x: Optional GitHub account Ideal for structured files; public or secret.
Hastebin :x: No Fast & simple; may expire over time.
0bin :x: No End-to-end encrypted; privacy-focused.
file.io :x: No File auto-deletes after one download.

:jigsaw: Pastebin Example

  1. Go to https://pastebin.com.
  2. Paste your entire JSON content.
  3. Set Syntax Highlighting to json.
  4. Set Paste Exposure to Unlisted.
  5. Click “Create New Paste”.
  6. Copy the generated link and include it in your forum reply.

By providing the trace in this format, it’s much easier to identify bugs, unexpected behavior, or misconfigurations in your automation setup. Thank you!


:white_check_mark: Summary

  • Set up the CCA blueprint carefully with correct values and entity references.
  • Do not trigger it manually.
  • Keep the blueprint up to date.
  • Use Traces to debug and provide structured support requests.

:bellhop_bell: Trigger overview

Trigger Function Description
t_open_1 - 6 Cover Opening Trigger for opening
t_close_1 - 6 Cover Closing Trigger for closing
t_contact_tilted_on / t_contact_opened_on Ventilation Responds to the status of the window contact
t_shading_start_pending_1 - 5 Shading Pending Checks relevant conditions (azimuth, elevation, temperature)
t_shading_start_execution Shading Executed Activated when conditions are met
t_manual_1 - 3 Manual Position Detection Monitors manual changes and resets status

:clipboard: Cover Status Helper - Contents

The Cover Status Helper is the central control element in the latest version of the Cover Control Automation (CCA). It tracks the current state of the roller blinds.

Structure and Meaning of the Individual States

Each of these states is an object with at least two key values:

State Description a (active) t (timestamp)
open Cover is open or was last opened 0 / 1 Time the open occurred
close Cover is closed or was last closed 0 / 1 Time the close occurred
shading Cover is in shading mode 0 / 1 Time shading activated
shading.p Shading detected, not yet started (Pending) 0 / 1 End of the waiting time (for trigger)
shading.q End of shading detected, not yet started (Pending) 0 / 1 Time executed
vpart Partly open for ventilation (window tilted) 0 / 1 Time activated
vfull Fully open for maximum ventilation (lock-out protection) 0 / 1 Time intervention
manual Manual operation detected (UI, switch, etc.) 0 / 1 Time intervention
v Version of the status format
t Timestamp of last global status change Unix time

:window: Cover Status Helper - State Overview

This table provides an overview of the different states used in the Cover Status Helper for Home Assistant Blueprints. Each row represents a specific scenario with corresponding binary values for each state variable.

Scenario Description open close shading vpart vfull
Cover is open 1 0 0 0 0
Cover is closed 0 1 0 0 0
Shading active, then returns to open 1 0 1 0 0
Cover is still closed, then moves to shading instead of fully opening 0 1 1 0 0
Lockout protection active when closing 0 1 0 0 1
Window tilted – no lockout, cover moves to ventilation position instead of closing 0 1 0 1 0
8 Likes

nice, thank you!

Happy Release Day :slight_smile:
Thanks again for all the work you put in.As a shift worker, I am very happy about the resident mode. But what I’m missing is an additional block that doesn’t open the blinds, for example during school holidays or weekends.

Hi Loi, you can control all of this via the conditions.

But you should be able to achive this by using the resident mode, shouldn’t you?
As it’s an input_boolean is just for this, you can create an automation and define however you want.
Or am I missing your point?

You’re right about resident mode. But I only have one presence detector in the bedroom and if it doesn’t recognize me or my wife, the shutters open. It is easier not to open the shutters on certain days. @Herr.Vorragend gave me the tip about the Additional Conditions For Opening The Cover and I’m going to test that now :slight_smile:

I see. But still I would prefer to use this with resident mode. Create a new input_boolean and set to true on all days you don’t want the shutters to open.
Guess it’s easier than dealing with additional conditions.

3 Likes

Oh dear… you’re so right. I didn’t even think about this possibility. Thank you.

1 Like

I just started to use this blueprint but luck is not yet on my side.
in my application i want to use the blueprint just for shading in combination with screens i have installed in my home.

Regardless of what i try i cannot make this blueprint control my screens for shading alone.

I made sure to:

  • Configure a cover to control
  • selected the shading option (6) as only enabled option)
  • under the shading option i’ve set the:
  • start and end azimuth (65/220)
  • the start and end elevation (6/90)
  • i’ve set 0% as the setting to close the screen for shading (this is when my screens are fully closed)
  • i’m using the default weather forecast conditions and made sure the forecast entity exists

triggering the automation manually or wait for sun elevation and azimuth to become true, no dice.

Must be something obvious i am doing wrong but i cannot seem to find out what.

HELP! :slight_smile:

You need to post your configuration.
And - as stated in the documentation - it’s NOT possible to manually trigger this blueprint.

1 Like

i’ve testet the blueprint with the following config:

it went down at 17:00 pm although i set sun_elevation_down: -10.2 wich should have been after 5pm!?

anything i’m doing wrong or a bug?

alias: "Rolladen: Isabella Tür"
description: >-
  fährt nach Sonnenauf- /untergangszeiten, aber nur innerhalb des Fensters (7-9
  Uhr)

  Beschattung ab 18 Grad
use_blueprint:
  path: hvorragend/cover_control_automation.yaml
  input:
    shading_forecast_sensor: weather.openweathermap
    blind: cover.rolladen_bella_tur
    time_up_early: "07:00:00"
    time_up_early_non_workday: "08:00:00"
    time_up_late: "09:00:00"
    auto_brightness_options: auto_brightness_disabled
    sun_elevation_up: 0
    time_down_early: "17:00:00"
    sun_elevation_down: -10.2
    drive_delay_fix: 5
    drive_delay_random: 0
    position_tolerance: 5
    shading_azimuth_start: 158
    shading_azimuth_end: 258
    shading_forecast_temp: 18
    workday_sensor: binary_sensor.workday_sensor

Could be a bug. Stay tuned.
@Herr.Vorragend see PN

Btw: “fährt nach Sonnenauf- /untergangszeiten, aber nur innerhalb des Fensters (7-9 Uhr)” ist not completely right. It’s opening between 7-9 but closing 17-22.

yeah i know, my description is not yet final, as the blueprint ist still under evaluation :wink:

Could you please check whether “sun.sun” and the elevation attribute even exist? If not, a default value is assumed which makes the condition apply.

I hadn’t even thought of such an application. But from the code it should even be possible.
So I need your config to get an impression.

In the worst case, we need a screenshot of the trace.

alias: SCREENS - Woonkamer groot
description: ""
use_blueprint:
  path: hvorragend/cover_control_automation.yaml
  input:
    blind: cover.woonkamer_groot
    auto_options:
      - auto_shading_enabled
    auto_global_condition:
      - condition: state
        entity_id: input_boolean.screen_automation_bypass_woonkamer_groot
        state: "on"
    shading_cover_position: 0
    shading_azimuth_start: 65
    shading_azimuth_end: 220
    shading_elevation_min: 6

This is my current configuration. Thanks in advance for wanting to look at this :slight_smile:

yes, it exists:

One short question:
Could you please show me the state of: input_boolean.screen_automation_bypass_woonkamer_groot?

If automation should work, the conditions must be true or empty. These are conditions and not blockers.