Double Curtain Card is a compact Lovelace card to control two curtain covers (left & right) from a single UI.
Highlights
- Dual sliders with live position (0–100)
- Percentage shown below each slider
- Optional preset per side (hidden when left empty)
- Open All / Close All buttons
- Per-side invert
- Optional blink during movement (toggle)
- Sends service on release
- Simple GUI editor (entity pickers, toggles, numbers)
HACS manual configuration (custom repository)
- Open HACS in Home Assistant.
- Click Custom repositories.
- Add:
https://github.com/Hugo0485/DoubleCurtainCard.git— Category: Plugin. - Search for Double Curtain Card → Install.
- Ensure the resource URL is
/hacsfiles/double-curtain-card/double-curtain-card.js(HACS sets this automatically for frontend plugins).
Manual installation (without HACS)
- Download the latest build:
double-curtain-card.js - Put it in
<config>/www/. - Go to Settings → Dashboards → Resources and add:
- URL:
/local/double-curtain-card.js - Resource type: JavaScript module
- URL:
- Reload your browser and add the card to your dashboard.
- Open your dashboard → Edit → Add card.
- Search for Double Curtain Card and select it.
- In the visual editor, set:
- Name (card title)
- Left entity → your left curtain
cover.* - Right entity → your right curtain
cover.* - Left label / Right label
- (Optional) Left fixed position / Right fixed position (0–100).
If left empty, the corresponding button is hidden. - (Optional) Choose your own MDI for fixed positions ).
- (Optional) Invert left / Invert right
- (Optional) Blink while moving
(toggles the blink animation during movement)
- Click Save.
The GUI editor mirrors the YAML options below. You can switch to YAML at any time.
type: custom:double-curtain-card
name: Living Room Curtains
left_entity: cover.curtain_left
right_entity: cover.curtain_right
left_label: left curtain
right_label: right curtain
# Optional behavior flags
left_fixed_position: 10 # If there's no value buttons will disappear
right_fixed_position: 10 # If there's no value buttons will disappear
left_fixed_icon: mdi:crosshairs-gps # choose your own mdi
right_fixed_icon: mdi:crosshairs-gps # choose your own mdi
invert_left: false
invert_right: false
blink_motion: true| Name | Type | Default | Description |
|---|---|---|---|
name |
string | – | Card title shown at the top |
left_label |
string | – | Optional label shown for the left side |
left_entity |
string | required | Cover entity for the left curtain |
left_fixed_position: |
number | – | Position (0–100) for the left Fixed poition button; hidden if not provided |
left_fixed_icon: |
MDI | – | Choose MDI icon for the left fixed position button |
invert_left |
boolean | false |
Invert open/close logic for the left slider |
right_label |
string | – | Optional label shown for the right side |
right_entity |
string | required | Cover entity for the right curtain |
right_fixed_position: |
number | – | Position (0–100) for the right Fixed poition button; hidden if not provided |
right_fixed_icon: |
MDI | – | Choose MDI icon for the right fixed position button |
invert_right |
boolean | false |
Invert open/close logic for the right slider |
blink_motion |
boolean | true |
Turn on/off blink functionality |
