mirror of
https://github.com/basnijholt/adaptive-lighting.git
synced 2026-09-29 05:14:42 +02:00
When a light turns on from `off` via a source outside Home Assistant — a physical wall switch or a hub/manufacturer scene (e.g. Lutron) — and `detect_non_ha_changes` is enabled, Adaptive Lighting adapts the light on the resulting `off` → `on` event, overriding the brightness/color the external source just set. Disabling `detect_non_ha_changes` avoids this but also stops detection of manual changes to already-on lights; the two behaviors were coupled to a single flag. Add `adapt_only_on_ha_turn_on` (default `false`, requires `take_over_control`). When enabled, an `off` → `on` transition with no matching HA `light.turn_on` context is marked `manual_control` and left untouched, independent of `detect_non_ha_changes`, decoupling the two behaviors. The off→on guard reduces to the previous expression when the option is `false`, so existing configurations are unaffected. Includes a parametrized regression test, docs, and regenerated strings/services/README via scripts/update-generated-content. Refs #435 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
179 lines
6.6 KiB
Markdown
179 lines
6.6 KiB
Markdown
---
|
|
icon: lucide/hand
|
|
---
|
|
|
|
# Manual Control
|
|
|
|
Adaptive Lighting is designed to work seamlessly with manual adjustments, detecting when you or another source changes light settings and pausing adaptation accordingly.
|
|
|
|
## How It Works
|
|
|
|
<!-- CODE:START -->
|
|
<!-- print(include_section("../../README.md", "manual-control", strip_heading=True)) -->
|
|
<!-- CODE:END -->
|
|
<!-- OUTPUT:START -->
|
|
<!-- ⚠️ This content is auto-generated by `markdown-code-runner`. -->
|
|
Adaptive Lighting is designed to automatically detect when you or another source (e.g., automation) manually changes light settings 🕹️.
|
|
When this occurs, the affected light is marked as "manually controlled," and Adaptive Lighting will not make further adjustments until the light is turned off and back on or reset using the `adaptive_lighting.set_manual_control` service call.
|
|
This feature is available when `take_over_control` is enabled.
|
|
|
|
Additionally, enabling `detect_non_ha_changes` allows Adaptive Lighting to detect all state changes, including those made outside of Home Assistant, by comparing the light's state to its previously used settings.
|
|
The `adaptive_lighting.manual_control` event is fired when a light is marked as "manually controlled," allowing for integration with automations 🤖.
|
|
|
|
> ⚠️ **_Caution: Some lights might falsely indicate an 'on' state, which could result in lights turning on unexpectedly. Disable `detect_non_ha_changes` if you encounter such issues._**
|
|
|
|
<!-- OUTPUT:END -->
|
|
|
|
## Configuration Options
|
|
|
|
### take_over_control
|
|
|
|
When enabled (default: `true`), Adaptive Lighting detects `light.turn_on` service calls that specify brightness or color values. If such a call is detected for a light that's already on, that light is marked as "manually controlled".
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "With manual control detection"
|
|
lights:
|
|
- light.living_room
|
|
take_over_control: true # default
|
|
```
|
|
|
|
### take_over_control_mode
|
|
|
|
Controls how adaptation pauses when manual changes are detected:
|
|
|
|
| Mode | Behavior |
|
|
|------|----------|
|
|
| `pause_all` | Pause both brightness and color adaptation (default) |
|
|
| `pause_changed` | Only pause adaptation of the changed attribute |
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "Selective pause"
|
|
lights:
|
|
- light.living_room
|
|
take_over_control: true
|
|
take_over_control_mode: pause_changed # Only pause changed attributes
|
|
```
|
|
|
|
### detect_non_ha_changes
|
|
|
|
When enabled, Adaptive Lighting detects state changes made outside of Home Assistant by comparing the light's current state to its previously applied settings.
|
|
|
|
> [!WARNING]
|
|
> **Use with caution.** Some lights may falsely report an "on" state, which could result in lights turning on unexpectedly. Disable this option if you encounter such issues.
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "Detect external changes"
|
|
lights:
|
|
- light.living_room
|
|
take_over_control: true
|
|
detect_non_ha_changes: true
|
|
```
|
|
|
|
### autoreset_control_seconds
|
|
|
|
Automatically resets the manual control flag after a specified number of seconds. Set to `0` to disable (default).
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "Auto-reset after 2 hours"
|
|
lights:
|
|
- light.living_room
|
|
take_over_control: true
|
|
autoreset_control_seconds: 7200 # 2 hours
|
|
```
|
|
|
|
### adapt_only_on_bare_turn_on
|
|
|
|
When enabled, Adaptive Lighting only adapts lights when `light.turn_on` is called without specifying brightness or color. This is useful when you want scenes to work without interference.
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "Respect scenes"
|
|
lights:
|
|
- light.living_room
|
|
take_over_control: true
|
|
adapt_only_on_bare_turn_on: true
|
|
```
|
|
|
|
### adapt_only_on_ha_turn_on
|
|
|
|
When enabled, a light that turns on from `off` is only adapted if the turn-on came from a Home Assistant `light.turn_on` call. Lights turned on by an external source — a physical wall switch or a hub/manufacturer scene (such as a Lutron keypad or Pico scene) — are marked as manually controlled and left at whatever brightness/color that source set, instead of being immediately overridden by Adaptive Lighting.
|
|
|
|
This is the option to reach for when turning a light on with its local switch (or a native Lutron/Caséta scene) makes Adaptive Lighting override your brightness a moment later, forcing you to set it twice.
|
|
|
|
Its advantage over simply disabling `detect_non_ha_changes` is that the two behaviors are decoupled: you can keep `detect_non_ha_changes: true` to catch manual dimming of lights that are *already on*, while still leaving *externally turned-on* lights untouched.
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "Respect physical switches and Lutron scenes"
|
|
lights:
|
|
- light.living_room
|
|
take_over_control: true
|
|
detect_non_ha_changes: true # still catch manual changes to already-on lights
|
|
adapt_only_on_ha_turn_on: true # but don't override external off→on turn-ons
|
|
```
|
|
|
|
## Checking Manual Control Status
|
|
|
|
You can see which lights are marked as manually controlled by checking the switch attributes:
|
|
|
|
1. Go to **Developer Tools** → **States**
|
|
2. Find your Adaptive Lighting switch (e.g., `switch.adaptive_lighting_living_room`)
|
|
3. Look at the `manual_control` attribute - it lists all manually controlled lights
|
|
|
|
## Resetting Manual Control
|
|
|
|
### Via Service Call
|
|
|
|
```yaml
|
|
service: adaptive_lighting.set_manual_control
|
|
data:
|
|
entity_id: switch.adaptive_lighting_living_room
|
|
lights:
|
|
- light.floor_lamp
|
|
manual_control: false # Resume adaptation
|
|
```
|
|
|
|
### By Turning Light Off and On
|
|
|
|
Simply turning a light off and then back on will reset its manual control status.
|
|
|
|
### Via Automation
|
|
|
|
See [Automation Examples](../automation-examples.md) for automation recipes that automatically reset manual control.
|
|
|
|
## Events
|
|
|
|
When a light is marked as manually controlled, Adaptive Lighting fires an event:
|
|
|
|
**Event type:** `adaptive_lighting.manual_control`
|
|
|
|
**Event data:**
|
|
```yaml
|
|
entity_id: light.living_room
|
|
switch: switch.adaptive_lighting_living_room
|
|
```
|
|
|
|
You can use this event to trigger automations:
|
|
|
|
```yaml
|
|
automation:
|
|
- alias: "Notify on manual control"
|
|
trigger:
|
|
platform: event
|
|
event_type: adaptive_lighting.manual_control
|
|
action:
|
|
- service: notify.mobile_app
|
|
data:
|
|
message: "{{ trigger.event.data.entity_id }} was manually adjusted"
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Use Zigbee groups** when controlling multiple bulbs together - this ensures consistent manual control detection
|
|
2. **Set reasonable autoreset times** if you want lights to eventually resume adaptation
|
|
3. **Use `pause_changed` mode** if you only adjust brightness or color individually
|
|
4. **Disable `detect_non_ha_changes`** if you experience unexpected light turn-ons
|