Sync Two Covers – keep two roller shutters perfectly in sync (bidirectional, loop-safe)

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.

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

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:

  1. Mirror commands are only sent when the other cover is not already doing the same thing.
  2. 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).
  3. 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 cover entities that report opening/closing states (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

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.