IKEA Styrbar (E2001/E2002) - control Multiple Light/Switch Entities (Zigbee2MQTT v2.0 Compatible) [Version 1.1 (2025-03-14)]

Blueprint: IKEA Styrbar (E2001/E2002) - control Multiple Light/Switch Entities (Zigbee2MQTT v2.0 Compatible)

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:

  1. Import the blueprint using the link below.
  2. Create one Number Helpers for each Styrbar remote (details below).
  3. 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.
  4. 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.
  5. Save and activate the Automation.
  6. Enjoy controlling your lights and switches with the Styrbar remote!

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

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.

This Blueprint is based on Z2M - IKEA STYRBAR remote for multiple lights done by @Spanching. I just had an idea to do away with multiple Automations requirement and wanted support for switches.

Share and Enjoy!

1 Like

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

in my zigbee2mqtt the remotes show up as

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).

I have a question, everything works well except for the selection of the bulbs, if they are on they turn off and if they are off they blink.

What could be causing this problem?

EDIT: Fixed it by increasing the time of the last parameter in the blueprint :smiley:

@jtosic also what happens if you try to adjust brightness on a non-dimable switch?

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.

I think I set my blink delay to ~600 ms for a hue white bulb to flash consistently

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.

Any other idea?

Hi!

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
1 Like

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.