Execute any service (turn on switch/light/scene/scripts etc., even run another automation) based on any entity's state change (motion sensor, illuminance, sun rise/set)

This is expected. It’s kind of a feature. I want the light to be automatically off even when I manually turned on the light.
If you want to ignore target entity’s state, set “target_entity_state” to empty string.

I wanted to implement the feature that when a person manually turn on the light, leave the light on. However, there is a limitation which I currently do not have any solution. Home assistant doesn’t tell me the source of event when a light is turned on, i.e, I cannot tell if it’s turned on by someone physically touching the switch or if it’s turned on by another automation.

I concur with what Kevin said but you do have some options if you are keen for a more manual setup.

I have e.g. a front door light that turns on automatically when someone gets home. It also has a manual switch. When the first automation fires (getting home), it separately starts a timer. When that timer expires, there’s a second automation to turn off that light. This timer won’t start when the light is turned on manually (because there’s no automation on that state change). You’re problem is, of course, that you could forget to turn off that light (generally, maybe not in your case). For that you can have yet another automation to notify you if the light is still on after some time. And so forth…

I did for all my automations, but it didn´t change anything unfortunately. Automation still gets triggered and turns off the light, even when I turned it on manually before.

Update: GUI has some issues, why removing the “on” value has not been saved as expected. I had to manually edit in YAML mode. Is this the right value (no value at all)? The help text talks about ‘none’ as value :slightly_smiling_face:

target_entity_state: ''

@parautenbach: That would of course be a solution, a quite smart one. BUT also pretty oldschool, cause creating various automations for controlling e. g. one light is a path I´m coming from. I want everything in ONE automation, which is why I think this blueprint is just perfect for.

I´m still looking for a solution to have my lights NOT turned OFF when I switched them on manually (not by motion sensor used as trigger entity in this blueprint based automation) - by only using this single blueprint automation.

Just an idea: can´t you check the last_triggered time of the blueprint automation? This way you still don´t know why/which way e. g. the light has been turned on, but you know it wasn´t the automation. Should be enough piece of information to make some progress if I don´t miss or mix up something important here - what you think @kevinxw ?

Yes, you will have to put it via text editor. GUI will set empty value to default value, which is ‘on’.

Let me know if it works

To your last suggestion, last triggered doesn’t work for a few reasons:

  1. An automation is triggered doesn’t mean it will be executed eventually, given that not all conditions are met.
  2. To check last_triggered attribute, you will need to select the automation’s id in the blueprint. Then you will have chick and egg problem.

It worked, so there´s ‘’ instead of ‘on’ now for target_entity_state.

BUT the desired effect is not there, in fact the following stated in the description text is just not true based on what I see with all my automations based on this blueprint:
grafik

This is especially a problem because in another room freshly equipped with motion sensor, dimmable bulb and an automation based on this blueprint, the “Adaptive Lighting” integration changes the bulbs brightness every few minutes (within the “(Optional) Trigger Timeout.” value). This leads to the automation being triggered over and over again, starting the timer for turning the target entity off again and again so - kinda deadlock - the light never is being turned off:
grafik

Alright, I see. So what would you recommend instead to have my target entities not being turned OFF when they have been turned on manually (e. g. by a physical switch)?

Anything smarter (included in your blueprint) than what parautenbach proposed here?

I only have an idea with many downsides, working around the whole blueprint/automation:
I could simply disable the automation when turning my target entity on with my local hardware switch (switch can use several actions per button event, could look like: 1st turn off automation so light stays on, 2nd turn light on). BUT:

  1. That would only work for this single switch. When turning the light on using e. g. Home Assistant GUI it will be turned off again by the automation.
  2. The switch control will become a bit more complicated (currently I´m toggling the light, so I would need to add something like “if light is off, turn automation off and light on” and “if light is on, turn light off and automation on”.

I implemented that workaround for now for one single room, but I don´t like that own idea… :frowning:

I cannot think of anything neat. If you have any second switch other than the light switch itself then it will be easier.
You can just put it in the block entity of existing blueprint, then create an automation which use second switch to turn on/off the light

Unfortunately my switch is a (ZigBee) remote with programmable buttons. There´s no physical switch or “light state” I can detect and use. So I´m going to live with my current workaround for a while.

But what about

? There´s a bug in the blueprint, isn´t it?

I don’t have Adaptive Lighting installed. But from the integration’s description, it’s not compatible with this blueprint. This blueprint monitors target entity’s state. So you are right, if other automation is changing the light’s brightness, this blueprint may not work. I will think about a solution if possible.

Regarding the original issue you mentioned, you can create a helper entity to mock the physical switch. Basically you need to create a input_boolean Input Boolean - Home Assistant, then use your zigbee remote to toggle this input_boolean. Then in the blueprint, use this as blocker_entity.

1 Like

Finally I understand what the blocker entities are made for :wink: Same result but automation can stay active. Works! I used

    timeout_blocker_entity: input_boolean.light_manual
    timeout_blocker_entity_state: 'on'

But I still don´t get it: what is the target_entity_state: '' ((Optional) Target Entity Desired State) for? Because it simply is NOT working as described in the blueprint:
grafik
→ That just don´t work. If it would work, I would not need to have the blocking entity. So I still believe something´s not working as intended/described/designed.

That would be awesome! Would reduce the complexity around the blueprint a lot (and I don´t think my usecase is that special, so others will benefit from such a solution too) :slight_smile:

I will think about a solution for this

1 Like

Sorry to bother you once again, but as I´m using this great blueprint more and more for different things in my home, I not only run into limitations or discover bugs but also imagine optimizations/feature enhancements, some by little to no cost. Here´s one:

Could you add the option to support (select/enter/use) multiple illuminance sensors?

I already experimented with a group but illuminance sensors are not supported according to domain list at Group - Home Assistant and therefore group value was “unknown”. And a second automation is neither smart nor trouble-free. So:

I have a valid use case for this and you have already implemented the basic feature for other parts of the blueprint, e. g. (OPTIONAL) Alternate Trigger Timeout. This could look like…
A) …when keeping the current structure:

  • (Optional) Illuminance Sensor: sensor.illuminance1,sensor.illuminance2
  • (Optional) Illuminance Below: value1,value2

B) …after merging (Optional) Illuminance Sensor and (Optional) Illuminance Below to one field (like already done with (OPTIONAL) Alternate Trigger Timeout):

  • sensor.illuminance1,value1;sensor.illuminance2,value2

→ The automation should work, if ANY of the listed illuminance sensors provided is below the corresponding value (sensor.illuminance1 below value1, sensor.illuminance2 below value2 and so on). :white_check_mark: I´d be happy to test that!

You could also make a template sensor to combine your sensors by picking the one with the lowest value.

Nice :+1:t3: But a) every sensor has its own cutoff value so just going for the lower one is not sufficient and b) why not have it in the blueprint so more people can use it (much more handy without templating and stuff) :grinning:

Gotcha, but I didn’t say it shouldn’t be added. I was offering an alternative (albeit a bit different). I understand your main use case and it seems entirely valid. :slight_smile:

You also mentioned groups and to me it seems the only way groups could work is if there is some rule to combine/fuse sensors (min, max, avg) — should the HA team see a need to implement such a feature for groups. I was thinking about this when I made my previous post.

After updating to this version I now have different issue. For some reason the light never turns on (I checked motion sensor is working fine)

    - id: <some identifier>
      alias: <human readable alias>
      description: ''
      use_blueprint:
        path: kevinxw/state_based_entity_control.yaml
        input:
          trigger_entity: binary_sensor.<entity id of my motion sensor>
          target_entity: light.<entity id of my light to turn on/off>
          alt_trigger_timeout: '18:00:00-22:00:00,00:10:00;05:00:00-08:00:00,00:10:00'
          trigger_timeout: '60'
          blocker_entity: switch.control_mode
          blocker_entity_state: 'off'
          timeout_blocker_entity: switch.control_mode
          timeout_blocker_entity_state: 'off'
          sun_elevation_below: 7

Are you using the latest home assistant? If yes, you can go to the corresponding automation and click “show trace”. At the trigger layer click “show changed variables”, from there I can tell what conditions are not met.

When motion detected it triggers twice:
First:

trigger:
  platform: state
  entity_id: binary_sensor.0x00158d000462dce1_occupancy
  from_state:
    entity_id: binary_sensor.0x00158d000462dce1_occupancy
    state: 'off'
    attributes:
      battery: 100
      linkquality: 63
      occupancy: false
      voltage: 3035
      friendly_name: Кухня движение
      device_class: motion
    last_changed: '2021-05-05T12:17:02.154532+00:00'
    last_updated: '2021-05-05T12:17:02.154532+00:00'
    context:
      id: 3e6061e9c4ff1cb4b344b90f2779a001
      parent_id: null
      user_id: null
  to_state:
    entity_id: binary_sensor.0x00158d000462dce1_occupancy
    state: 'off'
    attributes:
      battery: 100
      linkquality: 60
      occupancy: true
      voltage: 3035
      friendly_name: Кухня движение
      device_class: motion
    last_changed: '2021-05-05T12:17:02.154532+00:00'
    last_updated: '2021-05-05T12:17:37.664541+00:00'
    context:
      id: bb10af1eed3e511a0c34cfa20f57b354
      parent_id: null
      user_id: null
  for: null
  attribute: null
  description: state of binary_sensor.0x00158d000462dce1_occupancy
  id: '2'
_target_entity: light.switch_kitchen_0x00158d00054408ee
target_entity: light.switch_kitchen_0x00158d00054408ee
_target_entity_off: null
target_entity_off: light.switch_kitchen_0x00158d00054408ee
_target_entity_state: 'on'
target_entity_state: 'on'
_target_entity_action_on: homeassistant.turn_on
target_entity_action_on: homeassistant.turn_on
_target_entity_action_off: homeassistant.turn_off
target_entity_action_off: homeassistant.turn_off
_trigger_entity: binary_sensor.0x00158d000462dce1_occupancy
trigger_entity: binary_sensor.0x00158d000462dce1_occupancy
_trigger_entity_state: 'on'
trigger_entity_state: 'on'
_trigger_entity_state_off: null
trigger_entity_state_off: ''
_trigger_timeout: '60'
illuminance_sensor: null
illuminance_below: null
blocker_entity: switch.control_mode
_blocker_entity_state: 'off'
blocker_entity_state: 'off'
timeout_blocker_entity: switch.control_mode
_timeout_blocker_entity_state: 'off'
timeout_blocker_entity_state: 'off'
_alt_trigger_timeouts: null
_alt_trigger_timeout: ''
trigger_timeout: 60
_execution_time_ranges: null
execution_time_ranges: ''
execution_time_range_matched: ''
trigger_entities_available: 'binary_sensor.0x00158d000462dce1_occupancy:on;'
trigger_entities_matched: 'binary_sensor.0x00158d000462dce1_occupancy:on;'
trigger_entities_off_matched: ''
target_entities_matched: 'light.switch_kitchen_0x00158d00054408ee:on;'
triggered_entity: binary_sensor.0x00158d000462dce1_occupancy
sun_elevation_below: 7

second:

trigger:
  platform: state
  entity_id: binary_sensor.0x00158d000462dce1_occupancy
  from_state:
    entity_id: binary_sensor.0x00158d000462dce1_occupancy
    state: 'off'
    attributes:
      battery: 100
      linkquality: 60
      occupancy: true
      voltage: 3035
      friendly_name: Кухня движение
      device_class: motion
    last_changed: '2021-05-05T12:17:02.154532+00:00'
    last_updated: '2021-05-05T12:17:37.664541+00:00'
    context:
      id: bb10af1eed3e511a0c34cfa20f57b354
      parent_id: null
      user_id: null
  to_state:
    entity_id: binary_sensor.0x00158d000462dce1_occupancy
    state: 'on'
    attributes:
      battery: 100
      linkquality: 60
      occupancy: true
      voltage: 3035
      friendly_name: Кухня движение
      device_class: motion
    last_changed: '2021-05-05T12:17:37.667543+00:00'
    last_updated: '2021-05-05T12:17:37.667543+00:00'
    context:
      id: 7f61e27a5e04bd9c07de4ad18618a6db
      parent_id: null
      user_id: null
  for: null
  attribute: null
  description: state of binary_sensor.0x00158d000462dce1_occupancy
  id: '2'
_target_entity: light.switch_kitchen_0x00158d00054408ee
target_entity: light.switch_kitchen_0x00158d00054408ee
_target_entity_off: null
target_entity_off: light.switch_kitchen_0x00158d00054408ee
_target_entity_state: 'on'
target_entity_state: 'on'
_target_entity_action_on: homeassistant.turn_on
target_entity_action_on: homeassistant.turn_on
_target_entity_action_off: homeassistant.turn_off
target_entity_action_off: homeassistant.turn_off
_trigger_entity: binary_sensor.0x00158d000462dce1_occupancy
trigger_entity: binary_sensor.0x00158d000462dce1_occupancy
_trigger_entity_state: 'on'
trigger_entity_state: 'on'
_trigger_entity_state_off: null
trigger_entity_state_off: ''
_trigger_timeout: '60'
illuminance_sensor: null
illuminance_below: null
blocker_entity: switch.control_mode
_blocker_entity_state: 'off'
blocker_entity_state: 'off'
timeout_blocker_entity: switch.control_mode
_timeout_blocker_entity_state: 'off'
timeout_blocker_entity_state: 'off'
_alt_trigger_timeouts: null
_alt_trigger_timeout: ''
trigger_timeout: 60
_execution_time_ranges: null
execution_time_ranges: ''
execution_time_range_matched: ''
trigger_entities_available: 'binary_sensor.0x00158d000462dce1_occupancy:on;'
trigger_entities_matched: 'binary_sensor.0x00158d000462dce1_occupancy:on;'
trigger_entities_off_matched: ''
target_entities_matched: 'light.switch_kitchen_0x00158d00054408ee:on;'
triggered_entity: binary_sensor.0x00158d000462dce1_occupancy
sun_elevation_below: 7

The light did not turned on

It’s weird. Could you check the light’s state in Developer Tool in Home Assistant when it happens?
The trace info you posted showed the light.switch_kitchen_0x00158d00054408ee is already on