That’s pretty cool, thanks.
I haven’t found a good cook-book of techniques like this. Is there one anywhere?
That’s pretty cool, thanks.
I haven’t found a good cook-book of techniques like this. Is there one anywhere?
Another option: Use an input number to store a scene index. That works if all the scenes you want to cycle through are named something like bedroom_lights_X
.
alias: Bedroom Lights
trigger:
... next_scene, prev_scene, etc ...
action:
- choose:
- conditions:
- condition: trigger
id:
- next_scene
sequence:
- service: scene.turn_on
metadata:
transition: 1
target:
entity_id: >-
{{ 'scene.bedroom_lights_' ~ ((cur_selected_scene + 1) %
num_available_scenes ) }}
- service: input_number.set_value
target:
entity_id: input_number.bedroom_scene_idx
data:
value: "{{ (cur_selected_scene + 1) % num_available_scenes }}"
- ... same for prev_scene (obviously s/+1/-1/) ...
variables:
num_available_scenes: |-
{{ int((states.scene
| selectattr("name", "search", "bedroom_lights_")
| map(attribute='name')
| sort
| list
| last).split("_")[2]) + 1 }}
cur_selected_scene: "{{ states('input_number.bedroom_scene_idx') | int }} "
Wow, you’re solution is exactly what I’ve been looking for. THANK YOU!
One follow-up question… where exactly does one put that template select in the configuration files?
Sorry for the very noob question; this is the first time I’m finding the need to define a template select (and most all other helpers I’ve configured so far have been via the Helpers UI)
edit: For example, I was thinking I’d add template: !include templates.yaml
to configuration.yaml, and then create a new templates.yaml
file that would contain the following:
- select:
- name: Office Scenes
state: "{{ states('input_text.office_selected_scene') }}"
options: >
{{ expand(area_entities("Office"))
| selectattr('domain', 'eq', 'scene')
| map(attribute='name') | list }}
select_option:
- variables:
entity: >
{{ states.scene | selectattr('name', 'eq', option)
|map(attribute='entity_id')|join }}
- service: input_text.set_value
target:
entity_id: input_text.office_selected_scene
data:
value: "{{ option }}"
- service: scene.turn_on
target:
entity_id: "{{ entity }}"
That YAML loads, but I’m not seeing anything in HA where I’d have that new Template Select Help?
edit2: NEVERMIND! Doing the above totally worked. When I said I couldn’t find anything in HA, it’s because I was searching for “input_select.office_scenes” —> it’s totally just “select.office_scenes”. :sigh:
Looks like I’m all set to go. THANKS!
This was very helpful, thank you very much.
As a new user of Home Assistant, I have to say though that this was surprisingly complex to set up - in fact it kept me busy for several evenings.
I found a way to automatically set the options of the dropdown to the available scenes in a particular area. This is useful because then you don’t need to keep them in sync manually.
Important to point out (for other beginners like me), when you create a drop-down through the UI, it creates an ‘input_select’. The second comment of this thread suggests to use a ‘select’ instead - and a ‘select’ somehow doesn’t have a ‘select_next’ service.
Therefore, for the one below, you create a dropdown via the UI. No need to populate it, this will automatically happen on every trigger.
Add the following to your configuration.yaml, then reload the automations via the UI:
automation wohnzimmer-cycle-button:
- id: wohnzimmer-cycle-button3
alias: wohnzimmer-cycle3
description: ""
trigger:
- device_id: 394f0b4ac5b46b1ad7b5e61d114ba465
domain: deconz
platform: device
type: remote_button_short_release
subtype: dim_down
id: single press
- platform: state
entity_id:
- input_select.wohnzimmer3
id: selected
condition: []
action:
- sequence:
- service: input_select.set_options
target:
entity_id: input_select.wohnzimmer3
data:
options: >
{{expand(area_entities("Wohnzimmer"))
| selectattr('domain', 'eq', 'scene')
|map(attribute='entity_id')
| list }}
- choose:
- conditions:
- condition: trigger
id:
- single press
sequence:
- service: input_select.select_next
data:
cycle: true
target:
entity_id: input_select.wohnzimmer3
- conditions:
- condition: trigger
id:
- selected
sequence:
- service: scene.turn_on
metadata:
transition: 1
target:
entity_id: >-
{{ states('input_select.wohnzimmer3')
}}
mode: queued
max: 10
Let me also post the full automation that you need to mimic the behavior of the regular Hue Dimmer with four buttons:
To switch off the lights, I use a special scene here called scene.wohnzimmer_aus that I didn’t add to the area “Wohnzimmer” (because otherwise the dimmer would also cycle through the “off” scene - that at least not what I want). All other scenes I added to the area “Wohnzimmer”. I used the name to sort them automatically (e.g., “1 dark”, “2 more lights”, “3 even brigher”, …).
Good luck. As I said, this was surprisingly difficult and I hope that a simple functionality like this becomes easier to set up in the future.
automation wohnzimmer-cycle-button:
- id: wohnzimmer-cycle-button3
alias: wohnzimmer-cycle3
description: ""
trigger:
- device_id: 394f0b4ac5b46b1ad7b5e61d114ba465
domain: deconz
platform: device
type: remote_button_short_release
subtype: turn_on
id: turn on
- device_id: 394f0b4ac5b46b1ad7b5e61d114ba465
domain: deconz
platform: device
type: remote_button_short_release
subtype: dim_up
id: dim up
- device_id: 394f0b4ac5b46b1ad7b5e61d114ba465
domain: deconz
platform: device
type: remote_button_short_release
subtype: dim_down
id: dim down
- device_id: 394f0b4ac5b46b1ad7b5e61d114ba465
domain: deconz
platform: device
type: remote_button_short_release
subtype: turn_off
id: turn off
- platform: state
entity_id:
- input_select.wohnzimmer3
id: turn on
condition: []
action:
- sequence:
- service: input_select.set_options
target:
entity_id: input_select.wohnzimmer3
data:
options: >
{{expand(area_entities("Wohnzimmer"))
| selectattr('domain', 'eq', 'scene')
| sort(attribute='name', reverse=true)
| map(attribute='entity_id')
| list }}
- choose:
- conditions:
- condition: trigger
id:
- dim up
sequence:
- service: input_select.select_previous
data:
cycle: false
target:
entity_id: input_select.wohnzimmer3
- conditions:
- condition: trigger
id:
- dim down
sequence:
- service: input_select.select_next
data:
cycle: false
target:
entity_id: input_select.wohnzimmer3
- conditions:
- condition: trigger
id:
- turn off
sequence:
- service: scene.turn_on
metadata:
transition: 1
target:
entity_id: scene.wohnzimmer_aus
- conditions:
- condition: trigger
id:
- turn on
sequence:
- service: scene.turn_on
metadata:
transition: 1
target:
entity_id: >-
{{ states('input_select.wohnzimmer3')
}}
mode: queued
max: 10
You could use the scene with the most recent date as the state value, then you don’t need the input_text.
template:
- select:
- name: "Basement Scenes"
state: >
{% set area = "Basement" %}
{{
expand(area_entities(area))
| selectattr('domain', 'eq', 'scene')
| sort(attribute='state', reverse=true)
| map(attribute='name')
| list
| first
}}
options: >
{% set area = "Basement" %}
{{
expand(area_entities(area))
| selectattr('domain', 'eq', 'scene')
| map(attribute='name')
| list
| sort
}}
select_option:
- service: scene.turn_on
target:
entity_id: >
{{
states.scene
| selectattr('name', 'eq', option)
| map(attribute='entity_id')
| first
}}
I am not sure what am i doing wrong, however the template helper always got the state unknown. If i execute the state template alone i get the right scene which is currently activated.
Are the scenes added to the area in the entity settings?
The Template Select Helper creator does not seem to fully support the method proposed by TheFes, I get an error directly in the creator UI:
However, the helper entity is created and, like you mentioned, choosing an option does run the action properly. The state of the select
entity just remains “unknown”. TheFes’ method does work fully when configured in YAML.
The method I posted in the second post of this thread works in both.
I will create some scenes and have a look (I actually don’t use scenes myself)
Me neither… I literally have three scenes, all of which I created to help answer a question someone posted a while back.
@regnets @Didgeridrew I see what the issue is, for the options I mapped the name
, but for the state I accidentally used entity_id
. So the the state template renders a value which is not a valid option.
I corrected it above.
Here’s how it looks when creating a helper:
And here’s the result
Hello, I’m new to Home Assistant, I tried this as per the last post (thank you @TheFes ), but the state isn’t being recalled correctly, although the scene is set…
What state is being reported?
“Unknown” right now. Initially it was showing a random scene that never changed although the scenes I was selecting did apply. I should mention that these are Hue scenes.
The most common reason for the state to return a continuous value of “unknown” is the user accidentally putting YAML configuration in the “State template” field of the Helper.
I don’t have any Hue devices to test against…
Do the scene
entities’ states update when they are activated?
Are you using the basic scene.turn_on
action or hue.activate_scene
?
My template is exactly the same as TheFes screenshot right above.
When I active the Hue Scene from the entity it doesn’t seem to update the state although the scene gets applied. So I guess that’s the problem. I’m using scene.turn_on, hue.activate_scene doesn’t seem to be available?
I changed the action to use hue_hue_activate_scene like so
action: hue.hue_activate_scene
data:
group_name: >-
{{ state_attr('scene.' + (option | replace(' ', '_') | lower), 'group_name')
}}
scene_name: "{{ option | replace('Livingroom ', '') }}"
It again set the scene just fine, but the state doesn’t work
Well, you shouldn’t need to replace stuff in the name.
What are the other templates you are using (for state and available options)
I’m using the the state and option templates from your screenshot