blueprint: name: Motion Lighting by House Mode (Explicit Entities) v3.2 description: > Rock-solid motion lighting blueprint using explicitly selected entities. Explicit brightness control in all modes. Fixes HA template type coercion and blueprint input scoping bugs. domain: automation input: motion_sensors: name: Motion / Occupancy Sensors selector: entity: domain: binary_sensor device_class: - motion - occupancy multiple: true lights: name: Lights to Control selector: target: entity: domain: light fans: name: Fans / Exhaust (Optional) default: {} selector: target: entity: domain: - fan - switch house_mode: name: House Mode Selector selector: entity: domain: input_select disable_auto_on: name: Disable Auto Turn-On Toggle (Optional) default: "" selector: entity: domain: input_boolean disable_in_modes: name: Disable Motion Turn-On In These Modes default: [] selector: select: multiple: true options: - Day - Evening - Night day_brightness: name: Day Brightness % default: 100 selector: number: min: 1 max: 100 evening_brightness: name: Evening Brightness % default: 20 selector: number: min: 1 max: 100 night_brightness: name: Night Brightness % default: 10 selector: number: min: 1 max: 100 enable_ramping: name: Enable Smooth Ramping default: false selector: boolean: ramp_time: name: Ramp Time (seconds) default: 2 selector: number: min: 0 max: 30 no_motion_off_delay: name: Minutes After No Motion to Turn Off default: 5 selector: number: min: 1 max: 60 mode: restart variables: motion_entities: !input motion_sensors house_mode_entity: !input house_mode current_mode: "{{ states(house_mode_entity) }}" disable_auto_on_entity: !input disable_auto_on disabled_modes: !input disable_in_modes keep_fan_on: "{{ current_mode == 'Night' }}" # Explicitly import inputs day_brightness_val: !input day_brightness evening_brightness_val: !input evening_brightness night_brightness_val: !input night_brightness enable_ramping_val: !input enable_ramping ramp_time_val: !input ramp_time target_brightness: > {% if current_mode == 'Day' %} {{ day_brightness_val | float }} {% elif current_mode == 'Evening' %} {{ evening_brightness_val | float }} {% elif current_mode == 'Night' %} {{ night_brightness_val | float }} {% else %} 100 {% endif %} transition_time: > {{ ramp_time_val | float if enable_ramping_val else 0 }} trigger: - platform: state entity_id: !input motion_sensors action: - choose: # ---------------------------- # MOTION DETECTED → TURN ON # ---------------------------- - conditions: - condition: template value_template: > {{ expand(motion_entities) | selectattr('state','eq','on') | list | count > 0 }} - condition: template value_template: "{{ current_mode not in disabled_modes }}" - condition: template value_template: > {{ disable_auto_on_entity == '' or is_state(disable_auto_on_entity,'off') }} sequence: - service: light.turn_on target: !input lights data: brightness_pct: "{{ target_brightness | float }}" transition: "{{ transition_time | float }}" # ---------------------------- # NO MOTION → TURN OFF # ---------------------------- - conditions: - condition: template value_template: > {{ expand(motion_entities) | selectattr('state','eq','on') | list | count == 0 }} sequence: - delay: minutes: !input no_motion_off_delay - service: light.turn_off target: !input lights data: transition: "{{ transition_time | float }}" - choose: - conditions: "{{ not keep_fan_on }}" sequence: - service: homeassistant.turn_off target: !input fans