Enhanced motion controller to activate scenes by time and illuminance - now in addition with idle ambient scene

The only benefit I see at the moment is, that you have less dependencies in your automation. Even if you are using only the core nodes of Node Red in addition with the HA nodes, you have dependencies to many external libs in the background. And you also have to be sure, that the HA nodes in Node Red are all the time working with the current HA version.

Hi all,

i can absolutly understand you. I switched from node red to Home Assistant automations with the big automation changes and find it kinda ok.
Node red is way more flexible and more important, quite easy to debug.
My first try with Blueprints and debug capabilitys are not that good.

I love the idea of bluebrints but it is lacking some stuff for now. I really think most of this stuff will be added (like a good documentation, versioning)

I will fork yours (really like the scenes, do not need the ambient but it is already in there) and will do some changes that it fits my needs.

@iroQuai I will make a version without lux sensor that you can use if you want

1 Like

Hi there, loving this blueprint, it covers 90% of my needs for my motion sensor :slight_smile:
The only real thing i need is to be able to add a condition, so i can disable the automation when the user changes the lights.
Right now iā€™ve done this with a physical hue button, for which i could make an automation.
But the problem iā€™m running in to, is that when i make an automation that disables the motion automation when a user changes a scene in the hue app, it also triggers when the motion sensor changes the scene.

So, iā€™m in need of a way to add a condition where i can utilize a boolean (toggle) helper, to pre-set if it was the motion sensor or the user that triggered the event, so the automation does not accidentally disable itself when it changes the scene.

Would this be a possibility? Iā€™m a bit new at home assistant so i have not really worked out all the logic yet.

By all rights, a default value of none should be allowed. It is the accepted way to specify no service or entity_id when used in an automation or script. However, itā€™s not accepted (for whatever reason) in a blueprint. :man_shrugging:

Iā€™m using light.none as a default value in a blueprint but the name ā€˜noneā€™ is not magical. The entity_id simply needs to refer to a non-existent entity.

:+1:

Hopefully, the difficulties encountered by the first generation of blueprint authors will help to introduce improvements in future versions.

Small addition, iā€™ve expanded on the blueprint myself a bit, to allow for such a boolean helper.
Next to that i added a wait time per timeslot for when the lights should be turned off again

I noticed this in your blueprint (lines 201 and 203 and 205):

!input !input no_motion_wait_night

Possibly the result of a search-and-replace that produced doubled !input keys.

Yea i saw it and fixed it :slight_smile: thanks
Still donā€™t fully have it working, because

{% if (states.sensor.time.state > time_scene_night) and (states.sensor.time.state < time_scene_morning) %} 
        !input no_motion_wait_night
      {% elif (states.sensor.time.state > time_scene_morning) and (states.sensor.time.state < time_scene_evening) %}
        !input no_motion_wait_morning
      {% else %}
        !input no_motion_wait_day
      {% endif %}

the input variables inside of the if statement arenā€™t returning a value, using them like

!input time_scene_night

inside the statements makes no difference, any clues as to how iā€™d fix that? Iā€™m a little stumped and google isnā€™t really helping me

Hi,
you have to put e.g. !input time_scene_night into a variable before and use the varibale within the template.

variables:
  no_motion_wait_night: !input no_motion_wait_night
  no_motion_wait_morning: !input no_motion_wait_morning
  no_motion_wait_day: !input no_motion_wait_day


{% if (states.sensor.time.state > time_scene_night) and (states.sensor.time.state < time_scene_morning) %} 
       {{no_motion_wait_night}}
      {% elif (states.sensor.time.state > time_scene_morning) and (states.sensor.time.state < time_scene_evening) %}
         {{no_motion_wait_morning}}
      {% else %}
        {{no_motion_wait_day}}
      {% endif %}

But it is only an assumption

The !input tag is used by the YAML processor to perform a substitution. It is designed to assign a value to a key.

The key in the following example is entity_id

  entity_id: !input whatever

You have not used !input in that manner. You have it standing alone within a template.

You must do what dkoehler suggested because it uses the !input tag to assign a value to a key. Create a variable, assign the selector value to it, then use the variable in the template.

Ok gotcha, makes sens :slightly_smiling_face:
Iā€™ll expiriment a little more with it

Did you get it working with groups of motion sensors yet? Would it only require broadening the filter on the selector for motion_entity?

Hi, unfortenately I switched back to node red. Much more comfortable debugging and faster results.

Insanely awesome. Great work.

Thanks for your hard work on this.

Has anybody managed to remove the need to have a light sensor?

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

It is a fork of this blueprint

2 Likes

Thanks, Iā€™ll take a look

First of all: thanks a lot for this blueprint!! Makes motion controlled lights automation a breeze.

I only have one question: is it possible to create a transition to a scene, to make the lights come on gradually? My yaml skills are not good enough to understand how to do that within this blueprintā€¦

2 Likes

Hi,

When it comes to light flux meter, I simply removed all line which corresponds to this entity, butā€¦ seems it doesnā€™t work at allā€¦

blueprint:
  name: Motion-activated light scene with surrounding light level check and optional
    ambient scene
  description: Turn on a light scene when motion is detected. Three different scenes
    can be defined depending on time of day. Furthermore a source for checking sourrounding
    light can be defined to enable light only if it is dark enough.
  domain: automation
  source_url: https://gist.github.com/incapable/f43f74a0c5f9554b86f31ad0c0584180
  input:
    motion_entity:
      name: Motion Sensor
      selector:
        entity:
          domain: binary_sensor
          device_class: motion
#    lightsensor_entity:
#      name: Illuminance Sensor
#      selector:
#        entity:
#          domain: sensor
#          device_class: illuminance
#    illuminace_level:
#      name: Max Illuminance
#      description: Maximal immuminance level in lux. If illuminance is higher, light
#        will not be enabled
#      default: 600
#      selector:
#        number:
#          min: 0.0
#          max: 5000.0
#          unit_of_measurement: lux
#          mode: slider
#          step: 1.0
    light_target:
      name: Light
      selector:
        target:
          entity:
            domain: light
    scene_ambient:
      name: Ambient Scene (Optional)
      description: Scene for ambient state. Will be activated when no motion is detected
        and light level is under threshold. Default value = scene.none
      default: scene.none
      selector:
        entity:
          domain: scene
    time_scene_ambient_start:
      name: Ambient time frame start
      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
      description: Time from which on ambient scene will be not activated
      default: 00:00:00
      selector:
        time: {}
    scene_morning:
      name: Scene for the morning
      default: scene.none
      selector:
        entity:
          domain: scene
    time_scene_morning:
      name: Time for the morning scene
      description: A time input which defines the time from which on the scene will
        be activated if motion is detected. Default value = scene.none
      default: 00:00:00
      selector:
        time: {}
    no_motion_wait_morning:
      name: Wait time morning
      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
          mode: slider
          step: 1.0
    scene_day:
      name: Scene for the bright day
      default: scene.none
      selector:
        entity:
          domain: scene
    time_scene_day:
      name: Time for the day scene
      description: A time input which defines the time from which on the scene will
        be activated if motion is detected. Default value = scene.none
      default: 00:00:00
      selector:
        time: {}
    no_motion_wait_day:
      name: Wait time day
      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
          mode: slider
          step: 1.0
    scene_evening:
      name: Scene for the evening
      default: scene.none
      selector:
        entity:
          domain: scene
    time_scene_evening:
      name: Time for the evening scene
      description: A time input which defines the time from which on the scene will
        be activated if motion is detected. Default value = scene.none
      default: 00:00:00
      selector:
        time: {}
    no_motion_wait_evening:
      name: Wait time evening
      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
          mode: slider
          step: 1.0
    scene_night:
      name: Scene for the dark night
      default: scene.none
      selector:
        entity:
          domain: scene
    time_scene_night:
      name: Time for the night scene
      description: A time input which defines the time from which on the scene will
        be activated if motion is detectedd. Default value = scene.none
      default: 00:00:00
      selector:
        time: {}
    no_motion_wait_night:
      name: Wait time night
      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
          mode: slider
          step: 1.0
mode: restart
max_exceeded: silent
variables:
  scene_ambient: !input 'scene_ambient'
trigger:
  platform: state
  entity_id: !input 'motion_entity'
  from: 'off'
  to: 'on'
action:
- choose:
  - conditions:
    - condition: time
      after: !input 'time_scene_morning'
      before: !input 'time_scene_day'
#    - condition: numeric_state
#      entity_id: !input 'lightsensor_entity'
#      below: !input 'illuminace_level'
    sequence:
    - scene: !input 'scene_morning'
  - conditions:
    - condition: time
      after: !input 'time_scene_day'
      before: !input 'time_scene_evening'
#    - condition: numeric_state
#      entity_id: !input 'lightsensor_entity'
#      below: !input 'illuminace_level'
    sequence:
    - scene: !input 'scene_day'
  - conditions:
    - condition: time
      after: !input 'time_scene_evening'
      before: !input 'time_scene_night'
#    - condition: numeric_state
#      entity_id: !input 'lightsensor_entity'
#      below: !input 'illuminace_level'
    sequence:
    - scene: !input 'scene_evening'
  - conditions:
    - condition: time
      after: !input 'time_scene_night'
      before: !input 'time_scene_morning'
#    - condition: numeric_state
#      entity_id: !input 'lightsensor_entity'
#      below: !input 'illuminace_level'
    sequence:
    - scene: !input 'scene_night'
- service: input_boolean.turn_off
  data: {}
  entity_id: input_boolean.user_changed_lights
- delay: 00:00:05
- service: input_boolean.turn_on
  data: {}
  entity_id: input_boolean.user_changed_lights
- wait_for_trigger:
    platform: state
    entity_id: !input 'motion_entity'
    from: 'on'
    to: 'off'
- delay: "{% if (states.sensor.time.state > time_scene_night) and (states.sensor.time.state\
    \ < time_scene_morning) %} \n  !input no_motion_wait_night\n{% elif (states.sensor.time.state\
    \ > time_scene_morning) and (states.sensor.time.state < time_scene_evening) %}\n\
    \  !input no_motion_wait_morning\n{% else %}\n  !input no_motion_wait_day\n{%\
    \ endif %}"
- choose:
  - conditions:
    - '{{ scene_ambient != ''scene.none''}}'
    - condition: time
      after: !input 'time_scene_ambient_start'
      before: !input 'time_scene_ambient_end'
#    - condition: numeric_state
#      entity_id: !input 'lightsensor_entity'
#      below: !input 'illuminace_level'
    sequence:
    - scene: !input 'scene_ambient'
  default:
  - service: light.turn_off
    target: !input 'light_target'

I have one question:
If I want to select scene based on motion and time, why do I need to select LIGHT SOURCE?
Scene should activate those lights which I want, so? Or itā€™s just that this will TURN OFF all those lights?
At least, this is my understanding because there is no other connection between INPUT and LIGHT TURN OFF.