https://github.com/hugo0485/doublecurtaincard
Double curtain card for home assistant
https://github.com/hugo0485/doublecurtaincard
cover curtains custom-card home-assistant zigbee zwave
Last synced: 9 months ago
JSON representation
Double curtain card for home assistant
- Host: GitHub
- URL: https://github.com/hugo0485/doublecurtaincard
- Owner: Hugo0485
- License: other
- Created: 2025-09-18T18:21:58.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-09-27T00:34:30.000Z (9 months ago)
- Last Synced: 2025-09-27T02:35:56.323Z (9 months ago)
- Topics: cover, curtains, custom-card, home-assistant, zigbee, zwave
- Homepage:
- Size: 2.32 MB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Double Curtain Card
[](https://www.buymeacoffee.com/hugo0485)
[](#)

[](#)
[](https://community.home-assistant.io/t/lovelace-double-curtain-card/)

**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)
---
## 🚀 Installation
Open in HACS (recommended)
[](https://my.home-assistant.io/redirect/hacs_repository/?owner=Hugo0485&repository=DoubleCurtainCard&category=plugin)
HACS manual configuration (custom repository)
1. Open **HACS** in Home Assistant.
2. Click **Custom repositories**.
3. Add: `https://github.com/Hugo0485/DoubleCurtainCard.git` — Category: **Plugin**.
4. Search for **Double Curtain Card** → **Install**.
5. Ensure the resource URL is `/hacsfiles/double-curtain-card/double-curtain-card.js` (HACS sets this automatically for frontend plugins).
Manual installation (without HACS)
1. Download the latest build:
[`double-curtain-card.js`](https://github.com/Hugo0485/DoubleCurtainCard/releases/latest/download/double-curtain-card.js)
2. Put it in `/www/`.
3. Go to **Settings → Dashboards → Resources** and add:
- **URL**: `/local/double-curtain-card.js`
- **Resource type**: *JavaScript module*
4. Reload your browser and add the card to your dashboard.
---
## ⚡ Quickstart
#### Add via GUI (recommended)
1. Open your dashboard → **Edit** → **Add card**.
2. Search for **Double Curtain Card** and select it.
3. 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)`
4. Click **Save**.
> The GUI editor mirrors the YAML options below. You can switch to YAML at any time.
```yaml
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
````
## Configuration
| 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 |