blueprint: name: Motion-activated Light with Optional Lux description: Turn on a light when motion is detected, optionally only if lux is below a threshold. domain: automation author: ChatGPT input: motion_entity: name: Motion Sensor selector: entity: filter: - device_class: occupancy domain: binary_sensor - device_class: motion domain: binary_sensor light_target: name: Light selector: target: entity: domain: light lux_entity: name: Lux Sensor (optional) default: "" selector: entity: domain: sensor device_class: illuminance lux_threshold: name: Lux Threshold description: Only turn on the light if lux is below this value. default: 50 selector: number: min: 0 max: 1000 unit_of_measurement: lx no_motion_wait: name: Wait time description: Time to leave the light on after last motion is detected. default: 120 selector: number: min: 0 max: 3600 unit_of_measurement: seconds mode: restart max_exceeded: silent trigger: - platform: state entity_id: !input motion_entity from: "off" to: "on" variables: lux_entity_var: !input lux_entity lux_threshold_var: !input lux_threshold target_entity: "{{ expand(!input light_target) | map(attribute='entity_id') | list | first }}" supports_brightness: > {{ 'brightness' in state_attr(target_entity, 'supported_color_modes') | default([]) }} condition: - alias: "Optional lux check" condition: template value_template: > {% if lux_entity_var | length > 0 and states(lux_entity_var) not in ['unknown','unavailable','none',''] %} {{ states(lux_entity_var) | float(0) < lux_threshold_var | float(0) }} {% else %} true {% endif %} action: - alias: "Set dynamic brightness" variables: max_brightness: 255 sun_elevation: "{{ state_attr('sun.sun','elevation') | float(0) }}" current_lux: > {% if lux_entity_var | length > 0 %} {{ states(lux_entity_var) | float(0) }} {% else %} 0 {% endif %} brightness: >- {% set base = 50 %} {% if sun_elevation > 10 %} {% set base = 100 %} {% elif sun_elevation > 0 %} {% set base = 150 %} {% else %} {% set base = 200 %} {% endif %} {% if current_lux > 50 %} {% set base = base - ((current_lux / 500) * base) | int %} {% endif %} {{ [base, max_brightness] | min }} - alias: "Turn on the light safely" choose: - conditions: - condition: template value_template: "{{ supports_brightness }}" sequence: - service: light.turn_on target: !input light_target data: brightness: "{{ brightness }}" default: - service: light.turn_on target: !input light_target - alias: "Wait until there is no motion" wait_for_trigger: - platform: state entity_id: !input motion_entity from: "on" to: "off" - delay: !input no_motion_wait - alias: "Turn off the light" service: light.turn_off target: !input light_target