Keeps two covers (e.g. roller shutters) in sync, bidirectionally. No matter which of the two covers is controlled — a wall button (e.g. a Shelly input), the Home Assistant UI, a voice assistant or a service call — the other cover always mirrors the movement, including the exact stop position.
My use case: two roller shutters in the same room, each wired to its own physical button (Shelly), that should always behave as one.
What it does
- One cover starts opening → the other one opens too
- One cover starts closing → the other one closes too
- One cover stops (button pressed again, or end position reached) → the other one is driven to the same position and stops there (or is simply stopped, if position sync is disabled)
One automation created from this blueprint handles both directions — no template cover, no helper entities, no second automation.
Loop protection
Two-way sync normally risks an infinite feedback loop (A moves B, B’s state change moves A, …). This blueprint stacks three mechanisms to make that impossible:
- Mirror commands are only sent when the other cover is not already doing the same thing.
- A position command never reverses the follower — a reversal would look exactly like a button press and bounce back. If the follower has already passed the stop position, it is stopped instead (the covers re-align on the next full travel).
- A 2-second echo guard: movement that starts right after a command the automation itself issued is treated as a command echo and never mirrored back.
Manual control always wins, and state changes involving unavailable/unknown (restarts, devices dropping off the network) are ignored.
Requirements
- Both covers as
coverentities that reportopening/closingstates (Shelly devices in cover/roller mode do this out of the box) - For exact position sync: both covers must report and accept positions (on Shellys: calibrate the cover). Uncalibrated covers work too — disable Exact position sync, the follower is then stopped when the controlled cover stops.
Inputs
| Input | Default | Description |
|---|---|---|
| First cover | – | One of the two covers to keep in sync |
| Second cover | – | The other cover |
| Exact position sync | on | When one cover stops, let the other continue to the exact same position instead of stopping it immediately (needs position-capable covers) |
Links & updates
- Blueprint code · Full documentation (behavior details, testing checklist, troubleshooting)
- All my blueprints: wagnst/ha-blueprints
Updates ship as GitHub releases and the import badge above always installs the latest version. To update an already imported blueprint later: Settings → Automations & Scenes → Blueprints → ⋮ → Re-import blueprint.
Feedback and issues welcome — here or on GitHub.