Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- alias: Update Light Adaptively
- description: >-
- Dynamically adjusts a single light based on presence, ambient light, sleep
- mode, bright mode, and predefined conditions.
- icon: mdi:lightbulb-auto
- fields:
- light:
- name: Light
- required: true
- selector:
- entity:
- domain: light
- light_sensor:
- name: Light Sensor (Optional)
- selector:
- entity:
- domain: sensor
- device_class: illuminance
- presence_sensor:
- name: Presence Sensor (Optional)
- selector:
- entity:
- domain: binary_sensor
- device_class: occupancy
- required: false
- always_on:
- name: Always On
- description: If true, this light will always stay on, regardless of lux values.
- selector:
- boolean: {}
- required: true
- always_on_in_sleep_mode:
- name: Always On in Sleep Mode
- description: >-
- If true, the light stays on in sleep mode even if no presence is detected.
- **This will be treated as true if "Sleep Mode Color" is defined
- selector:
- boolean: {}
- required: true
- bright_mode:
- name: Bright Mode
- description: >-
- Specify a toggle entity (e.g., input_boolean.cooking_mode) that, when ON,
- forces full brightness and a 2-minute delay before turning off.
- selector:
- entity:
- domain: input_boolean
- required: true
- no_presence_color:
- name: Color when No Presence
- selector:
- color_rgb: {}
- sleep_mode_color:
- name: Sleep Mode Color (Optional)
- description: >-
- If defined, this color is used in sleep mode instead of the default
- behavior. **If this field is set, the light will stay on in sleep mode
- even if "Always On in Sleep Mode" is disabled.**
- selector:
- color_rgb: {}
- required: false
- skip_delay:
- name: Skip Delay
- description: If true, the light updates immediately without waiting for the delay.
- selector:
- boolean: {}
- required: true
- sequence:
- - variables:
- always_on_in_sleep_mode: "{{ always_on_in_sleep_mode or sleep_mode_color is defined }}"
- lux_value: "{{ states(light_sensor) | float(0) if light_sensor else 0 }}"
- is_low_light: "{{ lux_value < 60 }}"
- has_presence: "{{ presence_sensor is defined and is_state(presence_sensor, 'on') }}"
- is_bright_mode: "{{ bright_mode and is_state(bright_mode, 'on') }}"
- is_sleep_mode: "{{ is_state('input_boolean.sleep_mode', 'on') }}"
- turn_on: >-
- {{ always_on or (is_low_light and not is_sleep_mode) or (is_low_light
- and has_presence) or (is_sleep_mode and always_on_in_sleep_mode) }}
- presence_brightness: "{{ (35 - (lux_value / 20)) | int }}"
- no_presence_brightness: "{{ (presence_brightness / 2) | int }}"
- no_sensor_brightness: "{{ ((presence_brightness + no_presence_brightness) / 2) | int }}"
- brightness: |-
- {{
- 100 if has_presence and is_bright_mode else
- presence_brightness if has_presence else
- no_presence_brightness if light_sensor else
- no_sensor_brightness
- }}
- kelvin: >-
- {{ (3800 - (lux_value / 8)) | int if is_bright_mode else (2800 -
- (lux_value / 8)) | int if light_sensor else 2200 }}
- use_sleep_mode_color: "{{ sleep_mode_color is defined and is_sleep_mode }}"
- selected_color: "{{ sleep_mode_color if use_sleep_mode_color else no_presence_color }}"
- effective_delay: >-
- {{ 0 if skip_delay else (180 if is_sleep_mode or is_bright_mode else 30)
- }}
- - if:
- - condition: template
- value_template: "{{ presence_sensor is defined and not has_presence }}"
- then:
- - delay:
- seconds: "{{ effective_delay }}"
- - choose:
- - conditions:
- - condition: template
- value_template: "{{ turn_on and has_presence }}"
- sequence:
- - target:
- entity_id: "{{ light }}"
- data:
- brightness_pct: "{{ brightness }}"
- kelvin: "{{ kelvin | string }}"
- transition: 2
- action: light.turn_on
- - data:
- message: >-
- "Light {{ light }} turned ON with kelvin {{ kelvin }} and
- brightness {{ brightness }} because presence_sensor: {{
- presence_sensor if presence_sensor is defined else 'Not Set' }}
- ({{ 'ON' if has_presence else 'OFF' }}), light_sensor: {{
- light_sensor if light_sensor is defined else 'Not Set' }} ({{
- lux_value }} lx), bright_mode: {{ 'ON' if is_bright_mode else
- 'OFF' }}, always_on: {{ always_on }}."
- action: system_log.write
- - conditions:
- - condition: template
- value_template: "{{ turn_on }}"
- sequence:
- - target:
- entity_id: "{{ light }}"
- data:
- brightness_pct: "{{ brightness }}"
- rgb_color: "{{ selected_color }}"
- transition: 2
- action: light.turn_on
- - data:
- message: >-
- "Light {{ light }} turned ON with color {{ selected_color }} and
- brightness {{ brightness }} because presence_sensor: {{
- presence_sensor if presence_sensor is defined else 'Not Set' }}
- (OFF), light_sensor: {{ light_sensor if light_sensor is defined
- else 'Not Set' }} ({{ lux_value }} lx), sleep_mode: {{ 'ON' if
- is_sleep_mode else 'OFF' }}, always_on_in_sleep_mode: {{
- always_on_in_sleep_mode }}."
- action: system_log.write
- - conditions:
- - condition: template
- value_template: "{{ not turn_on }}"
- sequence:
- - target:
- entity_id: "{{ light }}"
- data:
- transition: 2
- action: light.turn_off
- - data:
- message: >-
- "Light {{ light }} turned OFF after {{ effective_delay }}s
- delay because presence_sensor: {{ presence_sensor if
- presence_sensor is defined else 'Not Set' }} ({{ 'ON' if
- has_presence else 'OFF' }}), light_sensor: {{ light_sensor if
- light_sensor is defined else 'Not Set' }} ({{ lux_value }} lx),
- sleep_mode: {{ 'ON' if is_sleep_mode else 'OFF' }},
- bright_mode: {{ 'ON' if is_bright_mode else 'OFF' }},
- always_on: {{ always_on }}."
- action: system_log.write
- mode: parallel
- max: 20
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement