YAMA - Yet Another Motion Automation (Scenes, Ambient Light and some Conditions )

also - her is the blueprint added with Illumance, isn’t it?

2 Likes

Nice :slight_smile: thanks a lot.

This blueprint almost fulfills all my needs, thanks a lot @networkingcat!
The only thing I would like to be able to set is are different waiting times, like 180 seconds during evening, 60 seconds during nighttime and like 600 seconds during the day.
How could this be accomplished?

Hi I just worked this out, its anything below the the angle and the light will work, here is a link to work out your suns angle. i only just realised that the sun never goes above 15 deg at this time of year where i live.
The angle is the Altitude:

The combination of this and Wyze integration finally working well means that my Ring doorbell motion sensor turns on the Wyze bulbs over the door. Excellent! I have had IFTTT doing it for a long time, and have now moved it into HA.

Thanks!

Hey! Tell me, is it possible in this template to implement the inclusion of a street lamp in time, as an example from 21-00 to 6-00, without a motion sensor.

I’ve been using this for a while. Today ALL of my YAMA automations just stopped working with the following error:

Error: In ‘template’ condition: UndefinedError: ‘dict object’ has no attribute ‘to_state’

I don’t have any idea what is going on with them. I can’t create a new one, alter existing ones to work, etc.

Restarting Core made this go away. I have no idea what could have caused it to stop

I’m wondering if i am doing this right as nobody else is reporting the problem i am having. I have this set to trigger my garage lights on motion. It is set to turn off after 10 minutes. As soon as the light turns off, this registers as a motion and it reactivates the lights again. I would expect almost everyone else to have run into this issue?

Automation is broken as of February 2022

Error: In 'template' condition: UndefinedError: 'dict object' has no attribute 'to_state' in action choose step.

Look at @Jared_Heath post just above. Looks like a core restart solved the problem.

Works fine for me too btw.

Would be great to add an Illuminance condition check
Would activate on Motion only if Illuminance < X Lux

I know this is in other Blueprints, but YAMA is simply better all around and would be perfect with this last addition.

this isn’t really a solution. Why would you want a switch to act as a light if it can’t be dimmed? This automation should definitely expose switches.

I‘ve switched my light automations to the Node Red add-on, not only is it way more flexible and powerful that way but also the flow logic is much better represented and very intuitive…

I will move all more complex automations to Node Red for sure.

I believe I fixed this by changing the motion sensor group (trigger) into a binary_sensor

Hallo @ all
can someone help me I would like to change the scene for morning, day etc. into an action light.turn_on.

When I do that the template does not work anymore. I did not want to create countless scenes but write it directly in the automation.

Just wanted to say thanks. Tried a few of these and this one fits my needs and just works. Thanks mate,

To get this kind of solution, I’m using the automation blocker now related to the measured lux, but this gives me the following problem:

  • There is not enough light f.i. because of a dark clouds, so threshold binary sensor turns true, YAMA runs when motion is detected and neatly turns the lights on;
  • Within the waiting period the cloud has gone, so now there is enough light to make the threshold sensor turn off and thus the YAMA being blocked.
  • lights will simply never turn off until a new motion is detected.

So, in the threshold sensor I’ve set the hysteresis to 100lux, but even when setting this to a real high number it would only decrease the changes but never take away the possibility of the error.

So yeah, please add the optional lux check only in the turning on sequence instead of the whole YAMA and also have the automation do a run when the blocking condition changes to false.

Hi
I’m trying to make some modifications here and even if all seems to be OK, it doesn’t work.
My goal is to start AMBIENT SCENE based on sun elevation and end by time.

Just, when trigger comes, no automation finishes with no action taken.

blueprint:
  name: YAMA Falo
  description: >
    # YAMA V10
    Turn on lights or scenes when motion is detected. 
    
    Four different scenes can be defined depending on time of day.
    
    
    For Details see this forum post:
    
    https://community.home-assistant.io/t/yama-yet-another-motion-automation-scenes-ambient-light-and-some-conditions/257062?u=networkingcat
    
    
    Capabilitys:
     - Trigger on motion (in fact can be triggered by anything that switches between “on” and off")
     - Wait time for turning off
     - Only run if entity is in desired state (optional)
     - Sun elevation check (optional)
     - 4 Scenes for different times of day (optional)
     - Ambient support with time frame (optional)
     - Default scene when motion stops (optional)
     - “no motion blocker” with user choosable state (optional)
  domain: automation
  source_url: https://gist.github.com/networkingcat/a1876d7e706e07c8bdcf974113940fb8
  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:
          domain: binary_sensor
          device_class: motion
    light_target:
      name: Light
      selector:
        target:
          entity:
            domain: light
#added from other blueprint
    illuminance_sensor:
      name: (OPTIONAL) Illuminance sensor
      description: This sensor will be used to determine the illumination.
      default:
      selector:
        entity:
          domain: sensor
          device_class: illuminance
    illuminance_cutoff:
      name: (OPTIONAL) Illuminance cutoff value
      description: This input_number will be used to compare to the current illumination to determine if it is low.
      default:
      selector:
         number:
          min: 0
          max: 3600
          unit_of_measurement: lux
#till here
    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            
    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
          max: 90
          unit_of_measurement: degrees
    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
    sun_scene_ambient_start:
      name: Ambient time frame start (Optional)
      description: Time from which on ambient scene will be activated
      default: none
      selector:
        number:
          min: -90
          max: 90
          unit_of_measurement: degrees
    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
    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
    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: "08:00:00"
      selector:
        time:
    scene_evening:
      name: Scene for the evening (Optional)
      default: scene.none
      selector:
        entity:
          domain: scene
    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: "21:00:00"
      selector:
        time:
    scene_night:
      name: Scene for the dark night (Optional)
      default: scene.none
      selector:
        entity:
          domain: scene
    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: "23: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


mode: restart
max_exceeded: silent

variables:
#added from other blueprint
  illuminance_currently: !input illuminance_sensor
  illuminance_cutoff: !input illuminance_cutoff
#till here
  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

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
      

# All Conditions must be true
condition:
   # Check if automation blocker exist or is in desired state, otherwise do not run
  - condition: or
    conditions:
      - "{{ automation_blocker == none }}"
      - "{{ automation_blocker_boolean and states[automation_blocker].state == 'on' }}"
      - "{{ not automation_blocker_boolean and states[automation_blocker].state == 'off' }}"
  # Check if elevation input exist or is below desired value, otherwise do not run
  - condition: template
    value_template: "{{ (elevation_check == none) or (state_attr('sun.sun','elevation') <= elevation_check | float(90)) }}"

action:
  - choose:
      # Trigger to state == "on"
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.state == 'on' }}" 
          #added from other blueprint
          - condition: template
            value_template: "{{ (illuminance_currently == none) or (illuminance_cutoff == none) or (states[illuminance_currently].state | int < states[illuminance_cutoff].state | int) }}"
          #till here
        sequence:
          - choose:
              # Morning Scene
              - conditions:
                  - "{{ scene_morning != 'scene.none'}}"
                  - condition: time
                    after: !input time_scene_morning
                    before: !input time_scene_day
                sequence:
                  - scene: !input scene_morning
              # Day Scene              
              - conditions:
                  - "{{ scene_day != 'scene.none'}}"
                  - condition: time
                    after: !input time_scene_day
                    before: !input time_scene_evening
                sequence:
                  - scene: !input scene_day
              # Evening Scene              
              - conditions:
                  - "{{ scene_evening != 'scene.none'}}"
                  - condition: time
                    after: !input time_scene_evening
                    before: !input time_scene_night
                sequence:
                  - scene: !input scene_evening
              # Night Scene              
              - conditions:
                  - "{{ scene_night != 'scene.none'}}"
                  - condition: time
                    after: !input time_scene_night
                    before: !input time_scene_morning
                sequence:
                  - scene: !input scene_night
            # If State -> "On" defaulting to turn light on
            default:
              - service: light.turn_on
                target: !input light_target
      # Trigger to state = "off"
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.state == 'off' }}"
          # Check if no motion blocker exist or in in desired state, otherwise do not run any no motion action            
          - condition: or
            conditions:
              - "{{ no_motion_blocker == none }}"
              - "{{ no_motion_blocker_boolean and states[no_motion_blocker].state == 'on' }}"
              - "{{ not no_motion_blocker_boolean and states[no_motion_blocker].state == 'off' }}"
        sequence:          
          - choose:
              # Used if ambient scene is true and in ambient scene time frame
              - conditions:
                  - "{{ scene_ambient != 'scene.none' }}"
                  - condition: time
                    before: !input time_scene_ambient_end
                  - condition: template
                    value_template: "{{ (sun_scene_ambient_start == none) or (state_attr('sun.sun','elevation') <= sun_scene_ambient_start | float(90)) }}"
                sequence:
                  - scene: !input scene_ambient
              # Used if default no motion scene is set
              - conditions:
                  - "{{ scene_no_motion != 'scene.none' }}"
                sequence:
                  - scene: !input scene_no_motion
              # If State -> "off" default to turn lights off
            default:
              - service: light.turn_off
                target: !input light_target

Any ideas what I did wrong?

Gents, anyone?

Having some issues that started recently. I was using Node-RED for my bathroom motion lights. And was working great. Somewhere over the last week or two, it stopped turning off the lights. So then I have been turning them off with either the dashboard or with the Zigbee light switch.

I found this blueprint and decided to try it, and it turns them on. BUUUUT doesn’t turn them off. The trace makes it appears that it completely bypasses the “Off” leg.

I just want to figure this out.

image