A Home Assistant custom integration that transforms fragmented individual light entities into an intelligently unified lighting system using configurable zone-based progressive activation.
TL;DR
You have several lights in one room. You want one control that turns them on gradually:
- Dim: Only ambient light
- Medium: Ambient + task light
- Bright: All lights on
The Problem
You’ve got multiple light zones scattered across your space. You want a single unified control that doesn’t just turn everything on at once or keep them all in sync at the same brightness. Instead, you want progressive activation—different lights coming online at different brightness thresholds to create natural lighting zones.
But here’s the catch: when someone flips a physical wall switch or uses a dimmer, your automation logic breaks because the unified control doesn’t know what happened. The combined light entity and individual switches fall out of sync.
How Combined Lights Solves This
Combined Lights creates a single virtual light entity that intelligently manages up to 4 individual light zones. Each zone activates at a configurable brightness threshold and has its own brightness curve (linear, quadratic, or cubic).
The key differentiator: bidirectional sync. When you adjust a physical switch, Combined Lights automatically recalculates the overall brightness based on the current state of all zones and updates itself. Your automations always see accurate state, whether controlled digitally or physically.
Architecture
The integration divides the brightness spectrum (0-100%) into four progressive stages:
Stage 1 (0-100%): Always on, uses full brightness curve
Stage 2 (30-100%): Activates at 30%, uses full curve from 30%
Stage 3 (60-100%): Activates at 60%, uses full curve from 60%
Stage 4 (90-100%): Activates at 90%, uses full curve from 90%
Each stage’s brightness is calculated using a configurable curve function (linear, quadratic, or cubic), giving you precise control over how each zone ramps.
Real-World Example: Living Room Setup
Stage 1 – Ambient (LED Strip):
Light: light.led_strip
Curve: Quadratic
Purpose: Soft background light, ramps gently
Stage 2 – Task (Reading Lamp):
Light: light.reading_lamp
Curve: Linear
Purpose: Task lighting, consistent brightness increase
Stage 3 – General (Ceiling Main):
Light: light.ceiling_main
Curve: Linear
Purpose: Main lighting, activates at medium brightness
Stage 4 – Boost (Corner Spot):
Light: light.corner_spot
Curve: Linear
Purpose: Maximum brightness when needed
Result:
- 0-30%: Only LED strip on, brightening smoothly
- 30-60%: Reading lamp activates, both ramp up
- 60-90%: Ceiling light turns on
- 90-100%: Corner spot activates for full brightness
Bidirectional Sync in Action
Physical Switch Flip → Individual light changes state
↓
Combined Lights detects change
↓
Calculates aggregate brightness from current zone states
↓
Updates combined_lights entity
↓
Automations see normal light adjustment (not multiple changes)
This means your automations can listen to light.combined_lights without caring about individual switch interactions.
Integration & Usage
Installation (HACS)
1. Add custom repository: https://github.com/recallfx/combined_lights
2. Install "Combined Lights"
3. Restart Home Assistant
4. Settings → Devices & Services → Add Integration
Configuration (Config Flow – No YAML Required)
- Step 1: Select light entities for each stage
- Step 2: Choose brightness curve type for each stage
Interactive Visualizer
Experiment with different brightness curves and see exactly how your zones will respond: Combined Lights Visualizer
GitHub & Documentation
Full technical documentation, advanced configuration options, and architecture details available in the README.
Feedback welcome. Looking forward to seeing what zone setups the community builds with this.