mirror of
https://github.com/basnijholt/adaptive-lighting.git
synced 2026-09-15 16:24:04 +02:00
A restart currently clears manual control for every light: the startup adaptation resets the flags and force-adapts, so a light that was dimmed by hand before the restart comes back at the adaptive values. With the new opt-in option, manual control is written to storage as it changes (debounced, one store per Home Assistant instance) and restored at startup. The restored flags are resolved once at EVENT_HOMEASSISTANT_STARTED: kept while the light is on and at least one profile controlling it has the option without autoreset_control_seconds, dropped otherwise, and forgotten when no profile controls the light anymore, so the outcome does not depend on the order the profiles are set up in. Only a full restart restores; a config-entry reload still clears manual control. Unloading the last entry writes a pending save. Defaults stay unchanged and nothing is read or written unless a profile opts in. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EdXCHuaz4Yj932oEwtgouW
148 lines
24 KiB
Markdown
148 lines
24 KiB
Markdown
---
|
|
icon: lucide/settings
|
|
---
|
|
|
|
# Configuration
|
|
|
|
Adaptive Lighting supports configuration through both YAML and the Home Assistant UI, with identical option names in both methods.
|
|
|
|
## Basic Configuration
|
|
|
|
The simplest setup uses the Home Assistant UI. Go to **Settings** → **Devices & Services** → **Add Integration** → **Adaptive Lighting**. No `adaptive_lighting:` entry is needed in `configuration.yaml`.
|
|
|
|
## YAML Configuration
|
|
|
|
Alternatively, you can specify lights and options in `configuration.yaml`:
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "Living Room"
|
|
lights:
|
|
- light.living_room_ceiling
|
|
- light.living_room_lamp
|
|
```
|
|
|
|
## All Options
|
|
|
|
All configuration options are listed below with their default values. These options work identically in both YAML and the UI.
|
|
|
|
<!-- CODE:START -->
|
|
<!-- from adaptive_lighting._docs_helpers import generate_config_markdown_table -->
|
|
<!-- print(generate_config_markdown_table()) -->
|
|
<!-- CODE:END -->
|
|
<!-- OUTPUT:START -->
|
|
<!-- ⚠️ This content is auto-generated by `markdown-code-runner`. -->
|
|
| Variable name | Description | Default | Type |
|
|
|:--------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------|:----------------------------------------|
|
|
| `lights` | List of light entity_ids to be controlled (may be empty). 🌟 | `[]` | list of `entity_id`s |
|
|
| `interval` | Frequency to adapt the lights, in seconds. 🔄 | `90` | `int > 0` |
|
|
| `transition` | Duration of transition when lights change, in seconds. 🕑 | `45` | `float` 0-6553 |
|
|
| `initial_transition` | Duration of the first transition when lights turn from `off` to `on` in seconds. ⏲️ | `1` | `float` 0-6553 |
|
|
| `min_brightness` | Minimum brightness percentage. 💡 | `1` | `int` 1-100 |
|
|
| `max_brightness` | Maximum brightness percentage. 💡 | `100` | `int` 1-100 |
|
|
| `min_color_temp` | Warmest color temperature in Kelvin. 🔥 | `2000` | `int` 1000-10000 |
|
|
| `max_color_temp` | Coldest color temperature in Kelvin. ❄️ | `5500` | `int` 1000-10000 |
|
|
| `prefer_rgb_color` | Whether to prefer RGB color adjustment over light color temperature when possible. 🌈 | `False` | `bool` |
|
|
| `sleep_brightness` | Brightness percentage of lights in sleep mode. 😴 | `1` | `int` 1-100 |
|
|
| `sleep_rgb_or_color_temp` | Use either `"rgb_color"` or `"color_temp"` in sleep mode. 🌙 | `color_temp` | one of `['color_temp', 'rgb_color']` |
|
|
| `sleep_color_temp` | Color temperature in sleep mode (used when `sleep_rgb_or_color_temp` is `color_temp`) in Kelvin. 😴 | `1000` | `int` 1000-10000 |
|
|
| `sleep_rgb_color` | RGB color in sleep mode (used when `sleep_rgb_or_color_temp` is "rgb_color"). 🌈 | `[255, 56, 0]` | RGB color |
|
|
| `sleep_transition` | Duration of transition when "sleep mode" is toggled in seconds. 😴 | `1` | `float` 0-6553 |
|
|
| `transition_until_sleep` | When enabled, Adaptive Lighting will treat sleep settings as the minimum, transitioning to these values after sunset. 🌙 | `False` | `bool` |
|
|
| `sunrise_time` | Set a fixed time (HH:MM:SS) for sunrise. 🌅 | `None` | `str` |
|
|
| `min_sunrise_time` | Set the earliest virtual sunrise time (HH:MM:SS), allowing for later sunrises. 🌅 | `None` | `str` |
|
|
| `max_sunrise_time` | Set the latest virtual sunrise time (HH:MM:SS), allowing for earlier sunrises. 🌅 | `None` | `str` |
|
|
| `sunrise_offset` | Adjust sunrise time with a positive or negative offset in seconds. ⏰ | `0` | `int` |
|
|
| `sunset_time` | Set a fixed time (HH:MM:SS) for sunset. 🌇 | `None` | `str` |
|
|
| `min_sunset_time` | Set the earliest virtual sunset time (HH:MM:SS), allowing for later sunsets. 🌇 | `None` | `str` |
|
|
| `max_sunset_time` | Set the latest virtual sunset time (HH:MM:SS), allowing for earlier sunsets. 🌇 | `None` | `str` |
|
|
| `sunset_offset` | Adjust sunset time with a positive or negative offset in seconds. ⏰ | `0` | `int` |
|
|
| `brightness_mode` | Brightness mode to use. Possible values are `default`, `linear`, and `tanh` (uses `brightness_mode_time_dark` and `brightness_mode_time_light`). 📈 | `default` | one of `['default', 'linear', 'tanh']` |
|
|
| `brightness_mode_time_dark` | (Ignored if `brightness_mode='default'`) The duration in seconds to ramp up/down the brightness before/after sunrise/sunset. 📈📉 | `900` | `int` |
|
|
| `brightness_mode_time_light` | (Ignored if `brightness_mode='default'`) The duration in seconds to ramp up/down the brightness after/before sunrise/sunset. 📈📉. | `3600` | `int` |
|
|
| `take_over_control` | Pause adaptation of individual lights and hand over (manual) control to other sources that issue `light.turn_on` calls for lights that are on. 🔒 | `True` | `bool` |
|
|
| `take_over_control_mode` | The adaptation pausing mode when other sources change brightness and/or color of lights. `pause_all` always pauses both brightness and color adaptation. `pause_changed` pauses the adaptation of only the changed attributes and continues adapting unchanged attributes, e.g., continues color adaptation when only brightness was changed. | `pause_all` | one of `['pause_all', 'pause_changed']` |
|
|
| `detect_non_ha_changes` | Detects and halts adaptations for non-`light.turn_on` state changes. Needs `take_over_control` enabled. 🕵️ Caution: ⚠️ Some lights might falsely indicate an 'on' state, which could result in lights turning on unexpectedly. Note that this calls `homeassistant.update_entity` every `interval`! Disable this feature if you encounter such issues. | `False` | `bool` |
|
|
| `autoreset_control_seconds` | Automatically reset the manual control after a number of seconds. Set to 0 to disable. ⏲️ | `0` | `int` 0-31536000 |
|
|
| `only_once` | Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄 | `False` | `bool` |
|
|
| `adapt_only_on_bare_turn_on` | When turning lights on initially. If set to `true`, AL adapts only if `light.turn_on` is invoked without specifying color or brightness. ❌🌈 This e.g., prevents adaptation when activating a scene and marks the light as manually controlled. If `false`, AL adapts regardless of the presence of color or brightness in the initial `service_data`. Needs `take_over_control` enabled. 🕵️ | `False` | `bool` |
|
|
| `manual_control_on_external_turn_on` | Treat turn-ons without a matching Home Assistant `light.turn_on` context as manual control. Normal manual-control resets apply. Still allows `detect_non_ha_changes` for already-on lights. Needs `take_over_control` enabled. 🕵️ | `False` | `bool` |
|
|
| `reset_manual_control_on_sleep_mode_change` | Reset manual control when the sleep mode switch is toggled. Set to `false` to preserve manual control across sleep mode changes. 😴 | `True` | `bool` |
|
|
| `restore_manual_control` | Keep manual control across Home Assistant restarts. Manually controlled lights are saved to storage and restored at startup while they are still on, so the startup adaptation leaves them alone. Ignored when `autoreset_control_seconds` is set. 💾 | `False` | `bool` |
|
|
| `separate_turn_on_commands` | Use separate `light.turn_on` calls for color and brightness, needed for some light types. 🔀 | `False` | `bool` |
|
|
| `send_split_delay` | Delay (ms) between `separate_turn_on_commands` for lights that don't support simultaneous brightness and color setting. ⏲️ | `0` | `int` 0-10000 |
|
|
| `adapt_delay` | Wait time (seconds) between light turn on and Adaptive Lighting applying changes. Might help to avoid flickering. ⏲️ | `0` | `float > 0` |
|
|
| `skip_redundant_commands` | Skip sending adaptation commands whose target state already equals the light's known state. Minimizes network traffic and improves the adaptation responsivity in some situations. 📉Disable if physical light states get out of sync with HA's recorded state. | `False` | `bool` |
|
|
| `intercept` | Intercept and adapt `light.turn_on` calls to enabling instantaneous color and brightness adaptation. 🏎️ Disable for lights that do not support `light.turn_on` with color and brightness. | `True` | `bool` |
|
|
| `multi_light_intercept` | Intercept and adapt `light.turn_on` calls that target multiple lights. ➗⚠️ This might result in splitting up a single `light.turn_on` call into multiple calls, e.g., when lights are in different switches. Requires `intercept` to be enabled. | `True` | `bool` |
|
|
| `include_config_in_attributes` | Show all options as attributes on the switch in Home Assistant when set to `true`. 📝 | `False` | `bool` |
|
|
| `expand_light_groups` | Expand light groups to their members (`true`, default). Set `false` to send commands to the group and track manual control for the group. Explicit member targets in services stay individual targets. | `True` | `bool` |
|
|
|
|
<!-- OUTPUT:END -->
|
|
|
|
## Full Configuration Example
|
|
|
|
<!-- CODE:START -->
|
|
<!-- from adaptive_lighting.docs_gen import _transform_readme_links -->
|
|
<!-- print(_transform_readme_links(include_section("../README.md", "config-example-full"))) -->
|
|
<!-- CODE:END -->
|
|
<!-- OUTPUT:START -->
|
|
<!-- ⚠️ This content is auto-generated by `markdown-code-runner`. -->
|
|
Full example:
|
|
|
|
```yaml
|
|
# Example configuration.yaml entry
|
|
adaptive_lighting:
|
|
- name: "default"
|
|
lights: []
|
|
prefer_rgb_color: false
|
|
transition: 45
|
|
initial_transition: 1
|
|
interval: 90
|
|
min_brightness: 1
|
|
max_brightness: 100
|
|
min_color_temp: 2000
|
|
max_color_temp: 5500
|
|
sleep_brightness: 1
|
|
sleep_color_temp: 1000
|
|
sunrise_time: "08:00:00" # override the sunrise time
|
|
sunrise_offset:
|
|
sunset_time:
|
|
sunset_offset: 1800 # in seconds or '00:30:00'
|
|
take_over_control: true
|
|
detect_non_ha_changes: false
|
|
only_once: false
|
|
|
|
```
|
|
|
|
<!-- OUTPUT:END -->
|
|
|
|
## Multiple Configurations
|
|
|
|
You can create multiple Adaptive Lighting configurations for different areas or use cases:
|
|
|
|
```yaml
|
|
adaptive_lighting:
|
|
- name: "Daytime Spaces"
|
|
lights:
|
|
- light.living_room
|
|
- light.kitchen
|
|
- light.office
|
|
min_brightness: 30
|
|
max_brightness: 100
|
|
|
|
- name: "Bedroom"
|
|
lights:
|
|
- light.bedroom_ceiling
|
|
- light.bedroom_lamp
|
|
min_brightness: 5
|
|
max_brightness: 80
|
|
sleep_brightness: 1
|
|
sleep_color_temp: 1000
|
|
```
|
|
|
|
## Related Topics
|
|
|
|
- [Brightness Modes](advanced/brightness-modes.md) - Detailed explanation of brightness calculation modes
|
|
- [Sleep Mode](advanced/sleep-mode.md) - Sleep mode configuration
|
|
- [Manual Control](advanced/manual-control.md) - How manual control detection works
|