This Blueprint is designed for the IKEA E2001/E2002 Styrbar switch remote, tailored to work seamlessly with Zigbee2MQTT v2.0 Actions. It enables you to control multiple lights/switches (on/off and brightness control, if supported by light) with a single Styrbar switch remote.
Features:
Switch between multiple target (light/switch) Entities: Short press left/right arrow buttons to select the previous/next target Entity
Visual indication of the selected target Entity: The selected target Entity will blink - turn on/off (or off/on if already on).
Turn lights/switches on: Short press the top button (large bulb).
Turn lights/switches off: Short press the bottom button (small bulb).
Increase brightness: Hold the top button (large bulb).
Decrease brightness: Hold the bottom button (small bulb).
Customizable Actions: Assign your own Actions for left/right arrow button hold/release Actions.
Target switching delay: Adjust the delay after selecting different target Entities.
Force brightness: Enable this option and set the brightness level in order to have a specific brightness whenever you turn the light on, instead of the last set brightness.
Brightness change delay: Delay after each brightness level change.
Brightness repeat count: Maximum number of brightness level changes per Action.
Brightness step: Brightness change percentage.
Zigbee2MQTT 2.0.0+ Compatibility: Fully compatible with the latest version; no need to enable the legacy action sensor.
Single light/switch or Group control: Works with any Light/Switch Entity you select.
Requirements:
IKEA E2001/E2002 Styrbar remote control integrated with Zigbee2MQTT.
A single light/switch or group of lights/switches configured in Zigbee2MQTT.
Home Assistant with MQTT integration enabled.
Release Notes:
Version 1.0 (2025-01-29):
Initial release.
Version 1.1 (2025-03-14):
Removed the “Target Switching Delay” option.
Eliminated unnecessary variables.
Fixed the “Force Brightness” option.
Future Improvements:
Bug fixes?
Might be able to use Text Helper to save selected light/switch Device ID instead of using it’s index number which will avoid controlling the wrong light/switch if you modify light/switch target Entity list.
How to Use:
Import the blueprint using the link below.
Create one Number Helpers for each Styrbar remote (details below).
Configure the required inputs:
Choose the Styrbar remote control device.
Select the Light/Switch Entities (single or group).
Select the Light/Switch Number Helper matching the Styrbar remote.
Configure the optional inputs:
Assign Actions to Left/Right Arrow button long press/release clicks.
Adjust additional settings like target switching delay, force brightness level, brightness change delay and step size, and maximum brightness change repeat count.
Save and activate the Automation.
Enjoy controlling your lights and switches with the Styrbar remote!
Number Helper Creation:
Icon: mdi:numeric
Minimum value: 0
Maximum value: 127 (should be sufficient)
Display mode: Input field
Step size: 1
Unit of measurement: (leave blank)
Create one Number Helper per Styrbar remote as it will hold the index of the currently selected Light/Switch entity.
This is my first ever Blueprint, so please go easy on me. Feedback and suggestions are welcome.
Thanks! Seem to work well, but why no settings to control arrow_left_click and arrow_right_click ?
Now, it just turns on/off the light, it’s that correct intended behaivour? I rather have the default, which is toggle the color tempratur profiles?
Using TRADFRI bulb E14
Zigbee2MQTT 2.1.1
SONOFF Zigbee 3.0 USB Dongle Plus V2
Zigbee Model
Remote Control N2
Zigbee Manufacturer
IKEA of Sweden
Description
STYRBAR remote control
so they aren’t selectable in the blueprints i can fix that localy and they are selectable.
however i’m curious how does the “control multiple lights/switches” work if i set multiple lights can i switch with the remote then what light i want to control and how do you do that then?
I’ve created this Blueprint to control multiple target Entities using a single Styrbar switch remote. To swiftly switch between multiple target entities, I’ve assigned a single left/right press to choose which entity I’m controlling.
To help you identify which target entity you’re controlling, I’ve implemented a “blinking” feature on switching. I should add this in the Features list of the original post…
For those who want to manage multiple target Entities, I suggest configuring the color control actions to the left/right long press. However, if you only plan to control one light with your Styrbar, this Blueprint might be more than necessary and I would suggest using a simpler one.
This is what my Zigbee2MQTT device page looks like:
Zigbee Model: Remote Control N2
Zigbee Manufacturer: IKEA of Sweden
Description: STYRBAR remote control
Manufacturer: IKEA
Model: E2001/E2002
I’m guessing it works for you when you delete/comment line 14 of the Blueprint?
model: STYRBAR remote control
Or did you change the model String to something else?
That’s exactly right - you populate the target entity list with multiple light/switch Entities, and then you can use a single press of the left/right arrow buttons to select a different target Entity. The selected target Entity will turn on/off (or off/on if it’s already on) so you know which target Entity is selected. Then, you can use the small/large lightbulb buttons to control the on/off states and brightness (with a long press of the lightbulb buttons).
For me, a blink time of 300ms works best, particularly with budget Zigbee LED drivers like the Ltech LM-150-24-G1Z2, which always transition gradually to the target brightness. When I set it to 150ms, they only have time to dim by a few percent - barely noticeable.
I’ll run some tests with lower delays - what value was causing issues for you?
Dimming is limited to Entities within the “light” Domain, as I added a condition in the Blueprint to prevent errors when attempting to dim Entities in the “switch” Domain. If the lights don’t support the “brightness_step_pct” setting, I assume the automation will log an error and halt execution. Unfortunately, I don’t have any non-dimmable bulbs or LED drivers to test this behavior myself.
Hi there. Hi have the same trouble, nothing in the list when using the blueprint.
I’ve tried to remove the line 14, but nothing happen. I removed the whole “model” part and still nothing. I tried to rename my styrbar to match the name, but yet nothing.
Thank you, @jtosic, for sharing this excellent blueprint. I did notice a few limitations for my specific use case, so I made some modifications and improvements to better suit my needs.
I hope you like the changes, and just to be clear, I don’t intend to take any credit for your original work. I’m simply sharing my version because I thought some users might find it useful as well.
Release Notes:
Version 1.4 (2025-10-28):
Added smooth dimming transition for selectable lights.
Add per-entity smooth dimming selection so only chosen lights use transition-based smooth dimming.
Keep raw targets list (do not expand groups) so group entities are treated as single targets.
Add option to prevent a lamp from being turned fully off while dimming, with a configurable threshold slider.
blueprint:
name: IKEA Styrbar - control multiple Light/Switch Entities
description: "**Manage multiple Light/Switch Entities with the IKEA Styrbar Switch\nRemote via Zigbee2MQTT**\n\n_Release Notes_:\n\n**Version 1.4** (2025-10-28):\n- Make smooth dimming transition max 2s.\n- Add per-entity smooth dimming selection so only chosen lights use transition-based smooth dimming.\n- Keep raw targets list (do not expand groups) so group entities are treated as single targets.\n- Add option to prevent a lamp from being turned fully off while dimming, with a configurable threshold slider.\n"
domain: automation
input:
switch_remote:
name: Styrbar switch remote
description: Choose IKEA Styrbar switch remote
selector:
device:
integration: mqtt
manufacturer: IKEA
model: STYRBAR remote control
multiple: false
targets:
name: Light/Switch
description: Choose one or more Light/Switch Entities you want to control
selector:
entity:
filter:
- domain:
- light
- switch
multiple: true
reorder: false
selected_target:
name: Selected Light/Switch Input Number Helper
description: Choose the Input Number Helper to be exclusively used by the selected
Styrbar switch remote to retain the last selected target Entity index
selector:
entity:
multiple: false
filter:
- domain:
- input_number
reorder: false
arrow_left_hold:
name: Long press - left
description: Action to execute when the Left button (left arrow icon) is held
down
default: []
selector:
action: {}
arrow_left_release:
name: Release press - left
description: Action to execute when the Left button (left arrow icon) is released
after a long press
default: []
selector:
action: {}
arrow_right_hold:
name: Long press - right
description: Action to execute when the Right button (right arrow icon) is held
down
default: []
selector:
action: {}
arrow_right_release:
name: Release press - right
description: Action to execute when the Right button (right arrow icon) is released
after a long press
default: []
selector:
action: {}
force_brightness:
name: Set the brightness to the Brightness Level (%) option value for every
On command
selector:
boolean: {}
default: false
brightness_pct:
name: Brightness (%) when the Force Brightness option is enabled
selector:
number:
min: 0.0
max: 100.0
step: 1.0
mode: slider
default: 50
repeat_delay:
name: Delay for brightness decrement/increment (in milliseconds)
selector:
number:
min: 0.0
max: 1000.0
step: 1.0
mode: slider
default: 150
repeat_count:
name: Maximum number of iterations for brightness decrement/increment
selector:
number:
min: 0.0
max: 100.0
step: 1.0
mode: slider
default: 20
brightness_step_pct:
name: Brightness Level step for each iteration (%)
selector:
number:
min: 0.0
max: 100.0
step: 1.0
mode: slider
default: 20
blink_time:
name: Delay after changing the selected Light/Switch State to indicate selected
target (in milliseconds)
selector:
number:
min: 0.0
max: 1000.0
step: 1.0
mode: slider
default: 100
smooth_dimming:
name: Enable smooth dimming for brightness up/down (global)
description: Use transition-based smooth dimming instead of immediate step increments.
selector:
boolean: {}
default: true
smooth_dimming_targets:
name: Entities using smooth dimming
description: If empty, smooth dimming applies to all targets when enabled. Otherwise only the selected entities will use smooth dimming.
selector:
entity:
filter:
- domain:
- light
- switch
multiple: true
reorder: false
default: []
smooth_step_pct:
name: Smooth dimming step (%) per repeat iteration
description: Percent change applied per repeat when smooth_dimming is enabled for the target.
selector:
number:
min: 1.0
max: 100.0
step: 1.0
mode: slider
default: 5
dimming_transition:
name: Transition time for smooth dimming (seconds)
description: Transition duration passed to light.turn_on for each step (seconds). Maximum 2.0s.
selector:
number:
min: 0.0
max: 2.0
step: 0.1
default: 0.5
prevent_turn_off_when_dimming:
name: Prevent turning off when dimming
description: When enabled, dimming down will not turn lights fully off. Brightness will not go below the configured threshold.
selector:
boolean: {}
default: true
dimming_off_threshold_pct:
name: Minimum brightness (%) when preventing turn off
description: If Prevent turning off when dimming is enabled, this slider sets the minimum brightness (%) the automation will allow while dimming down.
selector:
number:
min: 0.0
max: 100.0
step: 1.0
mode: slider
default: 1
source_url: https://github.com/jtosic/home_assistant/blob/58b72200bac2c5b0fdfe97653368a12d3b5cfc1a/automation/ikea_styrbar_remote-control_multiple_entities.yaml
description: ''
mode: restart
trigger:
- id: 'on'
device_id: !input switch_remote
domain: mqtt
type: action
subtype: 'on'
trigger: device
- id: 'off'
device_id: !input switch_remote
domain: mqtt
type: action
subtype: 'off'
trigger: device
- id: brightness_move_up
device_id: !input switch_remote
domain: mqtt
type: action
subtype: brightness_move_up
trigger: device
- id: brightness_move_down
device_id: !input switch_remote
domain: mqtt
type: action
subtype: brightness_move_down
trigger: device
- id: brightness_stop
device_id: !input switch_remote
domain: mqtt
type: action
subtype: brightness_stop
trigger: device
- id: arrow_left_click
device_id: !input switch_remote
domain: mqtt
type: action
subtype: arrow_left_click
trigger: device
- id: arrow_left_hold
device_id: !input switch_remote
domain: mqtt
type: action
subtype: arrow_left_hold
trigger: device
- id: arrow_left_release
device_id: !input switch_remote
domain: mqtt
type: action
subtype: arrow_left_release
trigger: device
- id: arrow_right_click
device_id: !input switch_remote
domain: mqtt
type: action
subtype: arrow_right_click
trigger: device
- id: arrow_right_hold
device_id: !input switch_remote
domain: mqtt
type: action
subtype: arrow_right_hold
trigger: device
- id: arrow_right_release
device_id: !input switch_remote
domain: mqtt
type: action
subtype: arrow_right_release
trigger: device
action:
- variables:
targets: !input targets
selected_target: !input selected_target
brightness_step_pct: !input brightness_step_pct
# Smooth dimming inputs available as variables
smooth_dimming: !input smooth_dimming
smooth_dimming_targets: !input smooth_dimming_targets
smooth_step_pct: !input smooth_step_pct
dimming_transition: !input dimming_transition
# new inputs to prevent turning off while dimming
prevent_turn_off_when_dimming: !input prevent_turn_off_when_dimming
dimming_off_threshold_pct: !input dimming_off_threshold_pct
# Use the raw selected targets list (do NOT expand groups) so a group entity
# selected by the user is treated as a single target.
target_index: >-
{% set tlist = targets | list %}
{% set count = tlist | count | int %}
{% set cur = states(selected_target) | int %}
{% if cur < 0 %}0{% elif cur >= count %}{{ count - 1 }}{% else %}{{ cur }}{% endif %}
# Access entity id directly from the targets list (no expand — avoids expanding group members)
target_entity_id: '{{ (targets | list)[target_index] }}'
target_entity_domain: '{{ target_entity_id.split(''.'')[0] }}'
# computed: is smooth dimming enabled for this target?
smooth_enabled: >-
{{ smooth_dimming and ((smooth_dimming_targets | list | count) == 0 or target_entity_id in (smooth_dimming_targets | list)) }}
- service: system_log.write
data:
level: info
message: 'Blueprint Script - IKEA Styrbar - control multiple Lights/Switches:
command = {{ trigger.id }}, selected_target = {{ states(selected_target) | int
}}, target_index = {{ target_index }}, target_entity_id = {{ target_entity_id
}}, target_entity_domain = {{ target_entity_domain }}, target_status = {{ states(target_entity_id)
}}'
- choose:
- conditions:
- condition: template
value_template: '{{ trigger.id == ''on'' }}'
- condition: template
value_template: '{{ target_entity_domain == ''light'' }}'
- condition: template
value_template: !input force_brightness
sequence:
- service: '{{ target_entity_domain }}.turn_on'
target:
entity_id: '{{ target_entity_id }}'
data:
brightness_pct: !input brightness_pct
alias: on_force
- conditions:
- condition: template
value_template: '{{ trigger.id == ''on'' }}'
sequence:
- service: '{{ target_entity_domain }}.turn_on'
target:
entity_id: '{{ target_entity_id }}'
alias: 'on'
- conditions:
- condition: template
value_template: '{{ trigger.id == ''off'' }}'
sequence:
- service: '{{ target_entity_domain }}.turn_off'
target:
entity_id: '{{ target_entity_id }}'
alias: 'off'
- conditions:
- condition: template
value_template: '{{ trigger.id == ''brightness_move_up'' }}'
- condition: template
value_template: '{{ target_entity_domain == ''light'' }}'
sequence:
- choose:
# If smooth dimming enabled for this specific target, use transition-based smooth steps
- conditions:
- condition: template
value_template: '{{ smooth_enabled }}'
sequence:
- repeat:
count: !input repeat_count
sequence:
- variables:
# current brightness in percent (0..100)
cur_brightness: >-
{{ (state_attr(target_entity_id, 'brightness') | int(0) * 100 / 255) | round(0) }}
# new brightness (min 100)
new_brightness: >-
{{ [ (cur_brightness | int) + (smooth_step_pct | int), 100 ] | min }}
- service: light.turn_on
data:
brightness_pct: '{{ new_brightness }}'
transition: '{{ dimming_transition }}'
target:
entity_id: '{{ target_entity_id }}'
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: !input repeat_delay
# default: existing step-based (instant) brightness_step_pct used previously
default:
- repeat:
count: !input repeat_count
sequence:
- service: light.turn_on
metadata: {}
data:
brightness_step_pct: '{{ brightness_step_pct }}'
target:
entity_id: '{{ target_entity_id }}'
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: !input repeat_delay
alias: brightness_move_up
- conditions:
- condition: template
value_template: '{{ trigger.id == ''brightness_move_down'' }}'
- condition: template
value_template: '{{ target_entity_domain == ''light'' }}'
sequence:
- choose:
# Smooth dimming down: use transition-based smooth steps
- conditions:
- condition: template
value_template: '{{ smooth_enabled }}'
sequence:
- repeat:
count: !input repeat_count
sequence:
- variables:
cur_brightness: >-
{{ (state_attr(target_entity_id, 'brightness') | int(0) * 100 / 255) | round(0) }}
off_threshold: >-
{% if prevent_turn_off_when_dimming %}{{ dimming_off_threshold_pct | int }}{% else %}0{% endif %}
new_brightness: >-
{{ [ (cur_brightness | int) - (smooth_step_pct | int), off_threshold ] | max }}
- service: light.turn_on
data:
brightness_pct: '{{ new_brightness }}'
transition: '{{ dimming_transition }}'
target:
entity_id: '{{ target_entity_id }}'
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: !input repeat_delay
default:
- repeat:
count: !input repeat_count
sequence:
- variables:
cur_brightness: >-
{{ (state_attr(target_entity_id, 'brightness') | int(0) * 100 / 255) | round(0) }}
off_threshold: >-
{% if prevent_turn_off_when_dimming %}{{ dimming_off_threshold_pct | int }}{% else %}0{% endif %}
new_brightness: >-
{{ [ (cur_brightness | int) - (brightness_step_pct | int), off_threshold ] | max }}
- service: light.turn_on
metadata: {}
data:
brightness_pct: '{{ new_brightness }}'
target:
entity_id: '{{ target_entity_id }}'
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: !input repeat_delay
alias: brightness_move_down
- conditions:
- condition: template
value_template: '{{ trigger.id == ''brightness_stop'' }}'
- condition: template
value_template: '{{ target_entity_domain == ''light'' }}'
sequence: []
alias: brightness_stop
- conditions:
- condition: template
value_template: '{{ trigger.id == ''arrow_left_click'' }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ states(selected_target) | int <= 0 }}'
sequence:
- service: input_number.set_value
data_template:
entity_id: !input selected_target
value: '{{ (targets | list | count | int) - 1 }}'
default:
- service: input_number.decrement
entity_id: !input selected_target
- variables:
target_index: !input selected_target
target_entity_id: '{{ (targets | list)[states(selected_target) | int] }}'
target_entity_domain: '{{ target_entity_id.split(''.'')[0] }}'
- sequence:
- service: '{{ target_entity_domain }}.turn_{% if states(target_entity_id) ==
''off'' %}on{% else %}off{% endif %}'
target:
entity_id: '{{ target_entity_id }}'
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: !input blink_time
- service: '{{ target_entity_domain }}.turn_{% if states(target_entity_id) ==
''off'' %}on{% else %}off{% endif %}'
target:
entity_id: '{{ target_entity_id }}'
alias: arrow_left_click
- conditions:
- condition: template
value_template: '{{ trigger.id == ''arrow_left_hold'' }}'
sequence: !input arrow_left_hold
alias: arrow_left_hold
- conditions:
- condition: template
value_template: '{{ trigger.id == ''arrow_left_release'' }}'
sequence: !input arrow_left_release
alias: arrow_left_release
- conditions:
- condition: template
value_template: '{{ trigger.id == ''arrow_right_click'' }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ states(selected_target) | int >= (targets | list | count | int) - 1 }}'
sequence:
- service: input_number.set_value
entity_id: !input selected_target
data:
value: 0
default:
- service: input_number.increment
entity_id: !input selected_target
- variables:
target_index: !input selected_target
target_entity_id: '{{ (targets | list)[states(selected_target) | int] }}'
target_entity_domain: '{{ target_entity_id.split(''.'')[0] }}'
- sequence:
- service: '{{ target_entity_domain }}.turn_{% if states(target_entity_id) ==
''off'' %}on{% else %}off{% endif %}'
target:
entity_id: '{{ target_entity_id }}'
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: !input blink_time
- service: '{{ target_entity_domain }}.turn_{% if states(target_entity_id) ==
''off'' %}on{% else %}off{% endif %}'
target:
entity_id: '{{ target_entity_id }}'
alias: arrow_right_click
- conditions:
- condition: template
value_template: '{{ trigger.id == ''arrow_right_hold'' }}'
sequence: !input arrow_right_hold
alias: arrow_right_hold
- conditions:
- condition: template
value_template: '{{ trigger.id == ''arrow_right_release'' }}'
sequence: !input arrow_right_release
alias: arrow_right_release
I have a problem with them. They don’t recognize my styrbar. My styrbar type is E2313. Will it work or not? I couldn’t find my styrbar in the list.