Forked from anym001/yet_another_motion_automation.yaml
Last active
August 29, 2025 08:27
-
-
Save Stephan-4711/0bd3af042ac2ed2805403749b652dfe8 to your computer and use it in GitHub Desktop.
Homeassistant blueprint for motion-activated light scene including illuminance sensors
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| blueprint: | |
| name: Yet Another Motion Automation (Custom) | |
| description: "# YAMA V11\n\nTurn on lights or scenes when motion is detected optional with lumiance sensor. \nFour | |
| different scenes can be defined depending on time of day.\n\nFor Details see this | |
| forum post:\nhttps://community.home-assistant.io/t/yama-yet-another-motion-automation-scenes-ambient-light-and-some-conditions/257062?u=networkingcat\n\nCapabilitys:\n\n | |
| - Trigger on motion (in fact can be triggered by anything that switches between | |
| “on” and off\")\n - Wait time for turning off\n - Only run if entity is in desired | |
| state (optional)\n - Sun elevation check (optional)\n - 4 Scenes for different | |
| times of day (optional)\n - Ambient support with time frame (optional)\n - Default | |
| scene when motion stops (optional)\n - “no motion blocker” with user choosable | |
| state (optional)\n - As option one or more illumiance sensors can be used\n" | |
| domain: automation | |
| source_url: https://gist.github.com/Stephan-4711/0bd3af042ac2ed2805403749b652dfe8 | |
| input: | |
| motion_entity: | |
| name: Motion Sensor | |
| description: Motion Sensor or a group with Motion Sensors (But can be anything | |
| switching between "on" and "off") | |
| selector: | |
| entity: | |
| multiple: true | |
| light_target: | |
| name: Light | |
| selector: | |
| target: | |
| entity: | |
| - domain: | |
| - light | |
| luminance_sensor: | |
| name: Illuminance sensor | |
| description: This sensor will be used to determine the illumination. | |
| default: | |
| selector: | |
| entity: | |
| domain: | |
| - sensor | |
| device_class: | |
| - illuminance | |
| multiple: true | |
| luminance_required: | |
| name: Required Lux Level | |
| description: Lux level below which the automation will run. | |
| default: 100 | |
| selector: | |
| number: | |
| min: 0.0 | |
| max: 10000.0 | |
| unit_of_measurement: lx | |
| step: 1.0 | |
| mode: slider | |
| no_motion_wait: | |
| name: Wait time | |
| description: Time to leave the light on after last motion is detected. | |
| default: 120 | |
| selector: | |
| number: | |
| min: 0.0 | |
| max: 3600.0 | |
| unit_of_measurement: seconds | |
| step: 1.0 | |
| mode: slider | |
| automation_blocker: | |
| name: Automation Blocker (Optional) | |
| description: Only run if this boolean is in desired state (see next input) | |
| default: | |
| selector: | |
| entity: {} | |
| automation_blocker_boolean: | |
| name: Automation Blocker Chooser (Optional) | |
| description: Desired state of automation blocker, choose on for on and off for | |
| off | |
| default: false | |
| selector: | |
| boolean: {} | |
| no_motion_blocker: | |
| name: No Motion Blocker (Optional) | |
| description: No motion sequence is not run if this boolean is in desired state | |
| (see next input) | |
| default: | |
| selector: | |
| entity: {} | |
| no_motion_blocker_boolean: | |
| name: No Motion Chooser (Optional) | |
| description: Desired state of no motion blocker, choose on for on and off for | |
| off | |
| default: false | |
| selector: | |
| boolean: {} | |
| elevation_check: | |
| name: Sun elevation check (Optional) | |
| description: This is the angle between the sun and the horizon. Negative values | |
| mean the sun is BELOW the horizon. | |
| default: none | |
| selector: | |
| number: | |
| min: -90.0 | |
| max: 90.0 | |
| unit_of_measurement: degrees | |
| step: 1.0 | |
| mode: slider | |
| scene_ambient: | |
| name: Ambient Scene (Optional) | |
| description: Scene for ambient state. Will be activated when no motion is detected. | |
| default: scene.none | |
| selector: | |
| entity: | |
| domain: | |
| - scene | |
| multiple: false | |
| time_scene_ambient_start: | |
| name: Ambient time frame start (Optional) | |
| description: Time from which on ambient scene will be activated | |
| default: 00:00:00 | |
| selector: | |
| time: {} | |
| time_scene_ambient_end: | |
| name: Ambient time frame end (Optional) | |
| description: Time from which on ambient scene will be not activated | |
| default: 00:00:00 | |
| selector: | |
| time: {} | |
| scene_morning: | |
| name: Scene for the morning (Optional) | |
| default: scene.none | |
| selector: | |
| entity: | |
| domain: | |
| - scene | |
| multiple: false | |
| time_scene_morning: | |
| name: Time for the morning scene (Optional) | |
| description: A time input which defines the time from which on the scene will | |
| be activated if motion is detected. | |
| default: 00:00:00 | |
| selector: | |
| time: {} | |
| scene_day: | |
| name: Scene for the bright day (Optional) | |
| default: scene.none | |
| selector: | |
| entity: | |
| domain: | |
| - scene | |
| multiple: false | |
| time_scene_day: | |
| name: Time for the day scene (Optional) | |
| description: A time input which defines the time from which on the scene will | |
| be activated if motion is detected. | |
| default: 00:00:00 | |
| selector: | |
| time: {} | |
| scene_evening: | |
| name: Scene for the evening (Optional) | |
| default: scene.none | |
| selector: | |
| entity: | |
| domain: | |
| - scene | |
| multiple: false | |
| time_scene_evening: | |
| name: Time for the evening scene (Optional) | |
| description: A time input which defines the time from which on the scene will | |
| be activated if motion is detected. | |
| default: 00:00:00 | |
| selector: | |
| time: {} | |
| scene_night: | |
| name: Scene for the dark night (Optional) | |
| default: scene.none | |
| selector: | |
| entity: | |
| domain: | |
| - scene | |
| multiple: false | |
| time_scene_night: | |
| name: Time for the night scene (Optional) | |
| description: A time input which defines the time from which on the scene will | |
| be activated if motion is detectedd. | |
| default: 00:00:00 | |
| selector: | |
| time: {} | |
| scene_no_motion: | |
| name: Default scene for no motion (Optional) | |
| description: Set this Scene if you want to activate a scene if motion stops | |
| default: scene.none | |
| selector: | |
| entity: | |
| domain: | |
| - scene | |
| multiple: false | |
| mode: restart | |
| max_exceeded: silent | |
| variables: | |
| scene_ambient: !input scene_ambient | |
| scene_morning: !input scene_morning | |
| scene_day: !input scene_day | |
| scene_evening: !input scene_evening | |
| scene_night: !input scene_night | |
| automation_blocker: !input automation_blocker | |
| automation_blocker_boolean: !input automation_blocker_boolean | |
| no_motion_blocker: !input no_motion_blocker | |
| no_motion_blocker_boolean: !input no_motion_blocker_boolean | |
| elevation_check: !input elevation_check | |
| scene_no_motion: !input scene_no_motion | |
| motion_entity: !input motion_entity | |
| luminance_sensor: !input luminance_sensor | |
| luminance_required: !input luminance_required | |
| trigger: | |
| - platform: state | |
| entity_id: !input motion_entity | |
| from: 'off' | |
| to: 'on' | |
| - platform: state | |
| entity_id: !input motion_entity | |
| from: 'on' | |
| to: 'off' | |
| for: !input no_motion_wait | |
| condition: | |
| - condition: or | |
| conditions: | |
| - '{{ automation_blocker == none }}' | |
| - '{{ automation_blocker_boolean and states[automation_blocker].state == ''off'' | |
| }}' | |
| - '{{ not automation_blocker_boolean and states[automation_blocker].state == ''on'' | |
| }}' | |
| - '{{ trigger.to_state.state == ''off'' }}' | |
| - condition: template | |
| value_template: '{{ (trigger.to_state.state == ''off'') or (elevation_check is none) | |
| or (state_attr(''sun.sun'', ''elevation'') <= elevation_check | float(90)) }}' | |
| action: | |
| - choose: | |
| - conditions: | |
| - condition: template | |
| value_template: '{{ trigger.to_state.state == ''on'' }}' | |
| - condition: numeric_state | |
| entity_id: !input luminance_sensor | |
| below: !input luminance_required | |
| sequence: | |
| - choose: | |
| - conditions: | |
| - '{{ scene_morning != ''scene.none''}}' | |
| - condition: time | |
| after: !input time_scene_morning | |
| before: !input time_scene_day | |
| sequence: | |
| - scene: !input scene_morning | |
| - conditions: | |
| - '{{ scene_day != ''scene.none''}}' | |
| - condition: time | |
| after: !input time_scene_day | |
| before: !input time_scene_evening | |
| sequence: | |
| - scene: !input scene_day | |
| - conditions: | |
| - '{{ scene_evening != ''scene.none''}}' | |
| - condition: time | |
| after: !input time_scene_evening | |
| before: !input time_scene_night | |
| sequence: | |
| - scene: !input scene_evening | |
| - conditions: | |
| - '{{ scene_night != ''scene.none''}}' | |
| - condition: time | |
| after: !input time_scene_night | |
| before: !input time_scene_morning | |
| sequence: | |
| - scene: !input scene_night | |
| default: | |
| - service: light.turn_on | |
| target: !input light_target | |
| - conditions: | |
| - condition: template | |
| value_template: '{{ trigger.to_state.state == ''off'' }}' | |
| - condition: or | |
| conditions: | |
| - '{{ no_motion_blocker is none }}' | |
| - '{{ no_motion_blocker_boolean and states[no_motion_blocker].state == ''off'' | |
| }}' | |
| - '{{ not no_motion_blocker_boolean and states[no_motion_blocker].state == ''on'' | |
| }}' | |
| sequence: | |
| - choose: | |
| - conditions: | |
| - '{{ scene_ambient != ''scene.none'' }}' | |
| - condition: time | |
| after: !input time_scene_ambient_start | |
| before: !input time_scene_ambient_end | |
| sequence: | |
| - scene: !input scene_ambient | |
| - conditions: | |
| - '{{ scene_no_motion != ''scene.none'' }}' | |
| sequence: | |
| - scene: !input scene_no_motion | |
| default: | |
| - service: light.turn_off | |
| target: !input light_target | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment