IKEA BILRESA scroll wheel (Matter) - Yet another blueprint

Hey guys,
here’s another blueprint for the IKEA BILRESA Scrollwheel (Matter).
I mainly use it to control my Phillips Hue lights in 3 different rooms, thought maybe someone else might be interested in it. So here you go…


Yet another blueprint to turn the IKEA BILRESA scroll wheel (Matter version) into a versatile multi-channel remote. Control up to three different lights or light groups and execute custom actions with multi-click support.

Features

  • Scrolling: Precise adjustment of brightness, color temperature or hue of any light or light group.
  • Scene Cycler: Cycle through a list of your favorite scenes with a single click.
  • Multi-Click Support: Separate actions for Single, Double, and Triple clicks, as well as Long Press (Hold & Release) for every channel.
  • Clean UI: Organized and collapsible configuration groups for an easier setup.

Setup & Requirements

Event Entities

For this blueprint to work, all events of the BILRESA device must be properly exposed and be enabled in Home Assistant.

The automation logic maps functions based on event entity ids ending in _1 through _9. If the remote doesn’t trigger anything, ensure the event entities are enabled in the device settings.\In some cases, you may need to regenerate or manually rename the entity ids of the device to match the expected sequence (_1 to _9).

Philips Hue Options

The blueprint offers the selection of “Color Temperature (Philips Hue)” and “Color (Philips Hue)”.

When to use? Select these options if your lights are connected directly via a Philips Hue Hub.
Why? These modes use absolute value calculations instead of relative steps to ensure smooth transitions when controlled through the Hue bridge.

Installation

Import Blueprint (EN)

German version

Import Blueprint (DE)

Manual installation
  1. Go to your Home Assistant instance: SettingsAutomations & ScenesBlueprints.
  2. Click Import Blueprint, copy & paste one of those URLs:
    • English: https://gist.github.com/SvKRO/52f246362a19f0297fd18969b383181b
    • German: https://gist.github.com/SvKRO/8c6b3676658672b4663b0dfa1a4624e3
  3. Create a new automation based on the imported blueprint.

Other

Im using it to control the brightness, switch between selected scenes and simply turn devices on or off. So far it seems to work just fine, not sure about the other options though. Maybe i’ll continue to work on it later to support more options, like media volume control and things like that.
Feel free to leave any feedback and/or report issues you might have. Enjoy!

9 Likes

Thank you @SvKRO for sharing, all WORKS

except for one functionality:
Channel 2 - > Scroll Wheel Settings → Scroll Function: Colour Temperature

If I rotate than will trigger the error, BUT if I change as bellow will work fine
Channel 2 → Scroll Wheel Setting → Scroll Function: Colour Temperature (Philips Hue)

Error in describing trigger: can’t access property “includes”, t is undefined

I asked ChatGPT about and here is the answer:

The extra keys not allowed error occurs because color_temp_step_pct is not a valid parameter for the standard light.turn_on service in Home Assistant. The t is undefined error is just a harmless UI bug caused by the visual editor failing to render the blueprint’s complex template triggers. Switching to the “Philips Hue” mode fixes the functionality because it calculates absolute color temperature values instead of sending the unsupported step command.

.
Also I would like to suggest a section with a global setting for brightness to be smooth when increasing steps, maybe a filed to set 0.2ms transition

.
Just sharing other blueprints that worked for me as well - BILRESA Matter - Sonoff usb dongle

IKEA Bilresa Scrollwheel (Matter) – Ultimate Light Controller (Atomic Edition)

Ikea Bilresa scroll wheel blueprint (Matter) - The Original

1 Like

Thank you very much for the detailed feedback, much appreciated.

I finally found some time to fix the bugs and incorporate your suggestions. I removed the items now marked as deprecated from the blueprint, and it should now work with HA2026.3 again.

Unfortunately, I am not allowed to edit my original post, so here is the changelog:

Version 1.0.1
  • Minor bugs fixed.
  • Support for multiple Bilresa remote controls added. (Thanks dhoerner-git)
Version 1.1
  • Deprecated options removed.
  • Transition duration added as a new option. (Thanks @philippeantonietti)

Use the installation buttons from the original post to update the blueprint.

1 Like

Hi thank you @SvKRO for fixing, I downloaded your new code and works great :+1:

I found some odd behaviour, if you spin fast maybe 2x or 3x times all freezes, I guess it makes too many calls to HA and does not know what to do about it, basically the lamp does not respond for about 10 seconds, I guess Matter and Threads have some issues with high number of requests,

but if wait for like 10 seconds all gets fixed by itself and works perfectly fine

thank you for sharing the blue print

----- Edit:

@SvKRO I found this post which probably is related

Try using a transition of 0 seconds for the light. Some Matter lights, especially with old firmwares, are problematic with transitions.

New issue with this, just appeared from nowhere - have deleted the automation and re-setup but getting again. All devices are ok: From Spook: This automation references the following actions, which are unknown to Home Assistant:* script.light_color_temp_helper, * script.light_color_hs_helper

Dimming of light no longer working.

You are blaming the wrong blueprint, I am pretty sure you are currently using this one… here you need to add these scripts.

Thanks, will try this one then. All has been ok for last two months, but no idea why that bp started the issue. Well spotted! lol

So psyched that this blueprint is making the Bilresa scroll switch do exactly what I wanted: three groups controlled with varying settings. THANK YOU SO MUCH!!

1 Like

The blueprint works well except on scrolling. If I scroll too fast, the remote reports pressed twice or pressed x times and the blueprint does nothing with it. Or am I missing something?

1 Like

Thanks for this great blueprint! I've had it installed a couple of days an noticed something odd: the automation seems to trigger on its own sometimes an activates my light in my abscence. Anyone else experienced something similar?

1 Like

[quote="philippeantonietti, post:3, topic:983749"]
Thanks @SvKRO
this is really great, I want to use scroll where to control light brightness that it does currently, but instead of colour and colour temp on the same lights, to instead control volume on my amp and radiator temp settings. So I'd need to be able to select other devices. I'm pretty new to home assistant and modifying blueprints, any advise as to the best way to got out adding that?

I think 2026.7 update broke this unless I'm only just now realizing... Single click doesn't work anymore and scroll is very slow.

Trace:

{
...
    "trigger": "event 'state_changed'",
    "trace": {
      "trigger/2": [
        {
          "path": "trigger/2",
          "timestamp": "2026-07-02T08:56:12.971303+00:00",
          "changed_variables": {
            "this": {
              "entity_id": "automation.ikea_bilresa_light_controller_v1_2",
              "state": "on",
              "attributes": {
                "id": "1780189764347",
                "last_triggered": "2026-07-02T00:05:26.982420+00:00",
                "mode": "single",
                "current": 0,
                "friendly_name": "Bilresa Scroll Wheel Controller Living Room"
              },
              "last_changed": "2026-07-01T23:56:59.778825+00:00",
              "last_reported": "2026-07-02T00:05:27.003771+00:00",
              "last_updated": "2026-07-02T00:05:27.003771+00:00",
              "context": {
                "id": "01KWG2A3A445N3CQ6N045CMQP6",
                "parent_id": "01KWG2A3A31XNDRBHFJGZ870NB",
                "user_id": null
              }
            },
            "trigger": {
              "id": "trigger_kanal1_klick",
              "idx": "2",
              "alias": null,
              "platform": "event",
              "event": {
                "event_type": "state_changed",
                "data": {
                  "entity_id": "event.bilresa_scroll_wheel_button_3",
                  "old_state": {
                    "entity_id": "event.bilresa_scroll_wheel_button_3",
                    "state": "2026-07-02T00:03:32.959+00:00",
                    "attributes": {
                      "event_types": [
                        "multi_press_ongoing",
                        "multi_press_complete",
                        "multi_press_1",
                        "multi_press_2",
                        "multi_press_3",
                        "long_press",
                        "long_release"
                      ],
                      "event_type": "multi_press_1",
                      "previousPosition": 1,
                      "totalNumberOfPressesCounted": 1,
                      "device_class": "button",
                      "friendly_name": "BILRESA scroll wheel Button (3)"
                    },
                    "last_changed": "2026-07-02T00:03:32.959846+00:00",
                    "last_reported": "2026-07-02T00:03:32.959846+00:00",
                    "last_updated": "2026-07-02T00:03:32.959846+00:00",
                    "context": {
                      "id": "01KWG26KYZ40EW5T9R95QGT170",
                      "parent_id": null,
                      "user_id": null
                    }
                  },
                  "new_state": {
                    "entity_id": "event.bilresa_scroll_wheel_button_3",
                    "state": "2026-07-02T08:56:12.969+00:00",
                    "attributes": {
                      "event_types": [
                        "multi_press_ongoing",
                        "multi_press_complete",
                        "multi_press_1",
                        "multi_press_2",
                        "multi_press_3",
                        "long_press",
                        "long_release"
                      ],
                      "event_type": "multi_press_1",
                      "previousPosition": 1,
                      "totalNumberOfPressesCounted": 1,
                      "device_class": "button",
                      "friendly_name": "BILRESA scroll wheel Button (3)"
                    },
                    "last_changed": "2026-07-02T08:56:12.969138+00:00",
                    "last_reported": "2026-07-02T08:56:12.969138+00:00",
                    "last_updated": "2026-07-02T08:56:12.969138+00:00",
                    "context": {
                      "id": "01KWH0NYX9BMW8E7ARR4CADYD4",
                      "parent_id": null,
                      "user_id": null
                    }
                  }
                },
                "origin": "LOCAL",
                "time_fired": "2026-07-02T08:56:12.969138+00:00",
                "context": {
                  "id": "01KWH0NYX9BMW8E7ARR4CADYD4",
                  "parent_id": null,
                  "user_id": null
                }
              },
              "description": "event 'state_changed'"
            },
            "var_remote": "af64be2deb037660aba2013b8326d97c",
            "var_events": [
              "event.bilresa_scroll_wheel_button_1",
              "event.bilresa_scroll_wheel_button_2",
              "event.bilresa_scroll_wheel_button_3",
              "event.bilresa_scroll_wheel_button_4",
              "event.bilresa_scroll_wheel_button_5",
              "event.bilresa_scroll_wheel_button_6",
              "event.bilresa_scroll_wheel_button_7",
              "event.bilresa_scroll_wheel_button_8",
              "event.bilresa_scroll_wheel_button_9"
            ],
            "temp_kanal1_rechts": "event.bilresa_scroll_wheel_button_1",
            "temp_kanal1_links": "event.bilresa_scroll_wheel_button_2",
            "temp_kanal1_klick": "event.bilresa_scroll_wheel_button_3",
            "temp_kanal2_rechts": "event.bilresa_scroll_wheel_button_4",
            "temp_kanal2_links": "event.bilresa_scroll_wheel_button_5",
            "temp_kanal2_klick": "event.bilresa_scroll_wheel_button_6",
            "temp_kanal3_rechts": "event.bilresa_scroll_wheel_button_7",
            "temp_kanal3_links": "event.bilresa_scroll_wheel_button_8",
            "temp_kanal3_klick": "event.bilresa_scroll_wheel_button_9"
          }
        }
      ],
      "action/0": [
        {
          "path": "action/0",
          "timestamp": "2026-07-02T08:56:12.972168+00:00",
          "changed_variables": {
            "context": {
              "id": "01KWH0NYX9VD26E65CQN2RG2V1",
              "parent_id": "01KWH0NYX9BMW8E7ARR4CADYD4",
              "user_id": null
            }
          },
          "result": {
            "result": true,
            "entities": []
          }
        }
      ],
      "action/1": [
        {
          "path": "action/1",
          "timestamp": "2026-07-02T08:56:12.973072+00:00",
          "changed_variables": {
            "m_1": "brightness",
            "m_2": "brightness",
            "m_3": "brightness",
            "s_1": 5,
            "s_2": 5,
            "s_3": 5,
            "l_1": {
              "entity_id": "light.living_room_lights"
            },
            "l_2": {},
            "l_3": {},
            "tr_1": 200,
            "tr_2": 200,
            "tr_3": 200,
            "action_kanal_id": "kanal1",
            "event_attr": "{<EventEntityCapabilityAttribute.EVENT_TYPES: 'event_types'>: ['multi_press_ongoing', 'multi_press_complete', 'multi_press_1', 'multi_press_2', 'multi_press_3', 'long_press', 'long_release'], <EventEntityStateAttribute.EVENT_TYPE: 'event_type'>: 'multi_press_1', 'previousPosition': 1, 'totalNumberOfPressesCounted': 1, <EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'button', <EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'BILRESA scroll wheel Button (3)'}",
            "ticks": 1,
            "action_event_type": "none",
            "curr_mode": "brightness",
            "base_sens": 5,
            "step_val": -5,
            "transition_ms": 200,
            "transition_s": 0.2,
            "curr_target_obj": {
              "entity_id": "light.living_room_lights"
            },
            "curr_target_list": [
              "light.living_room_lights"
            ],
            "curr_target": "light.living_room_lights"
          }
        }
      ],
      "action/2": [
        {
          "path": "action/2",
          "timestamp": "2026-07-02T08:56:12.975859+00:00",
          "changed_variables": {
            "cm_1": "action",
            "cm_2": "action",
            "cm_3": "action",
            "cs_1": [],
            "cs_2": [],
            "cs_3": [],
            "c_mode": "action",
            "c_scenes": []
          },
          "result": {
            "choice": 1
          }
        }
      ],
      "action/2/choose/0": [
        {
          "path": "action/2/choose/0",
          "timestamp": "2026-07-02T08:56:12.976147+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/2/choose/0/conditions/0": [
        {
          "path": "action/2/choose/0/conditions/0",
          "timestamp": "2026-07-02T08:56:12.976305+00:00",
          "result": {
            "result": false,
            "entities": []
          }
        }
      ],
      "action/2/choose/1": [
        {
          "path": "action/2/choose/1",
          "timestamp": "2026-07-02T08:56:12.976882+00:00",
          "result": {
            "result": true
          }
        }
      ],
      "action/2/choose/1/conditions/0": [
        {
          "path": "action/2/choose/1/conditions/0",
          "timestamp": "2026-07-02T08:56:12.977086+00:00",
          "result": {
            "result": true,
            "entities": []
          }
        }
      ],
      "action/2/choose/1/sequence/0": [
        {
          "path": "action/2/choose/1/sequence/0",
          "timestamp": "2026-07-02T08:56:12.977829+00:00",
          "changed_variables": {
            "cm_1": "action",
            "cm_2": "action",
            "cm_3": "action",
            "cs_1": [],
            "cs_2": [],
            "cs_3": [],
            "c_mode": "action",
            "c_scenes": []
          }
        }
      ],
      "action/2/choose/1/sequence/1": [
        {
          "path": "action/2/choose/1/sequence/1",
          "timestamp": "2026-07-02T08:56:12.978723+00:00"
        }
      ],
      "action/2/choose/1/sequence/1/choose/0": [
        {
          "path": "action/2/choose/1/sequence/1/choose/0",
          "timestamp": "2026-07-02T08:56:12.978910+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/0/conditions/0": [
        {
          "path": "action/2/choose/1/sequence/1/choose/0/conditions/0",
          "timestamp": "2026-07-02T08:56:12.979118+00:00",
          "result": {
            "result": false,
            "entities": []
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/1": [
        {
          "path": "action/2/choose/1/sequence/1/choose/1",
          "timestamp": "2026-07-02T08:56:12.979644+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/1/conditions/0": [
        {
          "path": "action/2/choose/1/sequence/1/choose/1/conditions/0",
          "timestamp": "2026-07-02T08:56:12.979806+00:00",
          "result": {
            "result": false,
            "entities": []
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/2": [
        {
          "path": "action/2/choose/1/sequence/1/choose/2",
          "timestamp": "2026-07-02T08:56:12.980301+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/2/conditions/0": [
        {
          "path": "action/2/choose/1/sequence/1/choose/2/conditions/0",
          "timestamp": "2026-07-02T08:56:12.980451+00:00",
          "result": {
            "result": false,
            "entities": []
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/3": [
        {
          "path": "action/2/choose/1/sequence/1/choose/3",
          "timestamp": "2026-07-02T08:56:12.985355+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/3/conditions/0": [
        {
          "path": "action/2/choose/1/sequence/1/choose/3/conditions/0",
          "timestamp": "2026-07-02T08:56:12.985592+00:00",
          "result": {
            "result": false,
            "entities": []
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/4": [
        {
          "path": "action/2/choose/1/sequence/1/choose/4",
          "timestamp": "2026-07-02T08:56:12.986218+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/2/choose/1/sequence/1/choose/4/conditions/0": [
        {
          "path": "action/2/choose/1/sequence/1/choose/4/conditions/0",
          "timestamp": "2026-07-02T08:56:12.986377+00:00",
          "result": {
            "result": false,
            "entities": []
          }
        }
      ]
    },
    "config": {
      "mode": "single",
      "max_exceeded": "silent",
      "trigger_variables": {
        "var_remote": "af64be2deb037660aba2013b8326d97c",
        "var_events": "{{ device_entities(var_remote) | select('match', 'event\\.') | sort | list }}\n",
        "temp_kanal1_rechts": "{{ var_events[0] if var_events | length > 0 else 'none' }}",
        "temp_kanal1_links": "{{ var_events[1] if var_events | length > 1 else 'none' }}",
        "temp_kanal1_klick": "{{ var_events[2] if var_events | length > 2 else 'none' }}",
        "temp_kanal2_rechts": "{{ var_events[3] if var_events | length > 3 else 'none' }}",
        "temp_kanal2_links": "{{ var_events[4] if var_events | length > 4 else 'none' }}",
        "temp_kanal2_klick": "{{ var_events[5] if var_events | length > 5 else 'none' }}",
        "temp_kanal3_rechts": "{{ var_events[6] if var_events | length > 6 else 'none' }}",
        "temp_kanal3_links": "{{ var_events[7] if var_events | length > 7 else 'none' }}",
        "temp_kanal3_klick": "{{ var_events[8] if var_events | length > 8 else 'none' }}"
      },
      "triggers": [
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal1_links }}"
          },
          "id": "trigger_kanal1_links"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal1_rechts }}"
          },
          "id": "trigger_kanal1_rechts"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal1_klick }}"
          },
          "id": "trigger_kanal1_klick"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal2_links }}"
          },
          "id": "trigger_kanal2_links"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal2_rechts }}"
          },
          "id": "trigger_kanal2_rechts"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal2_klick }}"
          },
          "id": "trigger_kanal2_klick"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal3_links }}"
          },
          "id": "trigger_kanal3_links"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal3_rechts }}"
          },
          "id": "trigger_kanal3_rechts"
        },
        {
          "trigger": "event",
          "event_type": "state_changed",
          "event_data": {
            "entity_id": "{{ temp_kanal3_klick }}"
          },
          "id": "trigger_kanal3_klick"
        }
      ],
      "actions": [
        {
          "condition": "template",
          "value_template": "{% if trigger.event.data.new_state is none %}\n  false\n{% else %}\n  {% set old_attr = trigger.event.data.old_state.attributes if trigger.event.data.old_state is not none else {} %}\n  {% set new_attr = trigger.event.data.new_state.attributes %}\n  {% set old_ts = old_attr.get('last_reported', 'none') %}\n  {% set new_ts = new_attr.get('last_reported', 'new') %}\n  {{ old_ts != new_ts }}\n{% endif %}\n"
        },
        {
          "variables": {
            "m_1": "brightness",
            "m_2": "brightness",
            "m_3": "brightness",
            "s_1": 5,
            "s_2": 5,
            "s_3": 5,
            "l_1": {
              "entity_id": "light.living_room_lights"
            },
            "l_2": {},
            "l_3": {},
            "tr_1": 200,
            "tr_2": 200,
            "tr_3": 200,
            "action_kanal_id": "{{ trigger.id.split('_')[1] }}",
            "event_attr": "{{ trigger.event.data.new_state.attributes }}",
            "ticks": "{{ event_attr.totalNumberOfPressesCounted | default(1) | int }}",
            "action_event_type": "{{ event_attr.event_type | default('none') }}",
            "curr_mode": "{% if action_kanal_id == 'kanal1' %}{{ m_1 }}{% elif action_kanal_id == 'kanal2' %}{{ m_2 }}{% else %}{{ m_3 }}{% endif %}",
            "base_sens": "{% if action_kanal_id == 'kanal1' %}{{ s_1 }}{% elif action_kanal_id == 'kanal2' %}{{ s_2 }}{% else %}{{ s_3 }}{% endif %}",
            "step_val": "{% set val = base_sens * ticks %}{{ val if trigger.id.endswith('_rechts') else val * -1 }}",
            "transition_ms": "{% if action_kanal_id == 'kanal1' %}{{ tr_1 }}{% elif action_kanal_id == 'kanal2' %}{{ tr_2 }}{% else %}{{ tr_3 }}{% endif %}",
            "transition_s": "{{ transition_ms / 1000 }}",
            "curr_target_obj": "{% if action_kanal_id == 'kanal1' %}{{ l_1 }} {% elif action_kanal_id == 'kanal2' %}{{ l_2 }} {% else %}{{ l_3 }}{% endif %}\n",
            "curr_target_list": "{% set t = curr_target_obj %} {% set ns = namespace(entities=[]) %}\n{% set e_ids = t.entity_id if t.entity_id is defined else [] %} {% set ns.entities = [e_ids] if e_ids is string else e_ids %}\n{% set d_ids = t.device_id if t.device_id is defined else [] %} {% set d_ids = [d_ids] if d_ids is string else d_ids %} {% for d in d_ids %}\n  {% set ns.entities = ns.entities + (device_entities(d) | select('match', 'light\\.') | list) %}\n{% endfor %}\n{% set a_ids = t.area_id if t.area_id is defined else [] %} {% set a_ids = [a_ids] if a_ids is string else a_ids %} {% for a in a_ids %}\n  {% set ns.entities = ns.entities + (area_entities(a) | select('match', 'light\\.') | list) %}\n{% endfor %}\n{% set lb_ids = t.label_id if t.label_id is defined else [] %} {% set lb_ids = [lb_ids] if lb_ids is string else lb_ids %} {% for l in lb_ids %}\n  {% set ns.entities = ns.entities + (label_entities(l) | select('match', 'light\\.') | list) %}\n{% endfor %}\n{{ ns.entities | unique | reject('none') | list }}\n",
            "curr_target": "{{ curr_target_list | first | default('none') }}"
          }
        },
        {
          "choose": [
            {
              "conditions": "{{ trigger.id.endswith('_rechts') or trigger.id.endswith('_links') }}",
              "sequence": [
                {
                  "choose": [
                    {
                      "conditions": "{{ curr_mode == 'brightness' }}",
                      "sequence": [
                        {
                          "variables": {
                            "target_value": "{% set current = state_attr(curr_target, 'brightness') | int(128) %} {{ [([current + (step_val | int * 2.55 | int), 0] | max), 255] | min }}\n"
                          }
                        },
                        {
                          "target": {
                            "entity_id": "{{ curr_target_list }}"
                          },
                          "data": {
                            "transition": "{{ transition_s }}",
                            "brightness": "{{ target_value }}"
                          },
                          "action": "light.turn_on"
                        }
                      ]
                    },
                    {
                      "conditions": "{{ curr_mode == 'temp_kelvin' }}",
                      "sequence": [
                        {
                          "variables": {
                            "target_value": "{% set curr = state_attr(curr_target, 'color_temp_kelvin') | int(3000) %} {% set min_v = state_attr(curr_target, 'min_color_temp_kelvin') | int(2000) %} {% set max_v = state_attr(curr_target, 'max_color_temp_kelvin') | int(6535) %} {{ [([curr + (step_val * 10) | int, min_v] | max), max_v] | min }}\n"
                          }
                        },
                        {
                          "target": {
                            "entity_id": "{{ curr_target_list }}"
                          },
                          "data": {
                            "transition": "{{ transition_s }}",
                            "color_temp_kelvin": "{{ target_value }}"
                          },
                          "action": "light.turn_on"
                        }
                      ]
                    },
                    {
                      "conditions": "{{ curr_mode == 'hs_color' }}",
                      "sequence": [
                        {
                          "variables": {
                            "target_value": "{% set hs = state_attr(curr_target, 'hs_color') | default([0, 100], true) %} {{ [((hs[0] | float(0) + step_val) % 360) | round(2), hs[1] | float(100)] }}\n"
                          }
                        },
                        {
                          "target": {
                            "entity_id": "{{ curr_target_list }}"
                          },
                          "data": {
                            "transition": "{{ transition_s }}",
                            "hs_color": "{{ target_value }}"
                          },
                          "action": "light.turn_on"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "conditions": "{{ trigger.id.endswith('_klick') }}",
              "sequence": [
                {
                  "variables": {
                    "cm_1": "action",
                    "cm_2": "action",
                    "cm_3": "action",
                    "cs_1": [],
                    "cs_2": [],
                    "cs_3": [],
                    "c_mode": "{% if action_kanal_id == 'kanal1' %}{{ cm_1 }}{% elif action_kanal_id == 'kanal2' %}{{ cm_2 }}{% else %}{{ cm_3 }}{% endif %}",
                    "c_scenes": "{% if action_kanal_id == 'kanal1' %}{{ cs_1 }}{% elif action_kanal_id == 'kanal2' %}{{ cs_2 }}{% else %}{{ cs_3 }}{% endif %}"
                  }
                },
                {
                  "choose": [
                    {
                      "conditions": "{{ action_event_type == 'multi_press_1' }}",
                      "sequence": [
                        {
                          "choose": [
                            {
                              "conditions": "{{ c_mode == 'scene_cycle' and c_scenes | count > 0 }}",
                              "sequence": [
                                {
                                  "target": {
                                    "entity_id": "{% set count = c_scenes | count %}{% set idx = (as_timestamp(now()) | int // 2) % count %}{{ c_scenes[idx] }}"
                                  },
                                  "action": "scene.turn_on"
                                }
                              ]
                            },
                            {
                              "conditions": "{{ c_mode == 'action' }}",
                              "sequence": [
                                {
                                  "choose": [
                                    {
                                      "conditions": "{{ action_kanal_id == 'kanal1' }}",
                                      "sequence": [
                                        {
                                          "action": "light.toggle",
                                          "metadata": {},
                                          "target": {
                                            "entity_id": "light.living_room_lights"
                                          },
                                          "data": {}
                                        }
                                      ]
                                    },
                                    {
                                      "conditions": "{{ action_kanal_id == 'kanal2' }}",
                                      "sequence": []
                                    },
                                    {
                                      "conditions": "{{ action_kanal_id == 'kanal3' }}",
                                      "sequence": []
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "conditions": "{{ action_event_type == 'multi_press_2' }}",
                      "sequence": [
                        {
                          "choose": [
                            {
                              "conditions": "{{ action_kanal_id == 'kanal1' }}",
                              "sequence": [
                                {
                                  "action": "light.turn_on",
                                  "metadata": {},
                                  "target": {
                                    "entity_id": "light.living_room_lights"
                                  },
                                  "data": {
                                    "color_temp_kelvin": "{{ states('input_select.livingroom_light_colors') | int }}\n"
                                  }
                                },
                                {
                                  "action": "input_select.select_next",
                                  "metadata": {},
                                  "target": {
                                    "entity_id": "input_select.livingroom_light_colors"
                                  },
                                  "data": {
                                    "cycle": true
                                  }
                                }
                              ]
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal2' }}",
                              "sequence": []
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal3' }}",
                              "sequence": []
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "conditions": "{{ action_event_type == 'multi_press_3' }}",
                      "sequence": [
                        {
                          "choose": [
                            {
                              "conditions": "{{ action_kanal_id == 'kanal1' }}",
                              "sequence": []
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal2' }}",
                              "sequence": []
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal3' }}",
                              "sequence": []
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "conditions": "{{ action_event_type == 'long_press' }}",
                      "sequence": [
                        {
                          "choose": [
                            {
                              "conditions": "{{ action_kanal_id == 'kanal1' }}",
                              "sequence": []
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal2' }}",
                              "sequence": []
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal3' }}",
                              "sequence": []
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "conditions": "{{ action_event_type == 'long_release' }}",
                      "sequence": [
                        {
                          "choose": [
                            {
                              "conditions": "{{ action_kanal_id == 'kanal1' }}",
                              "sequence": []
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal2' }}",
                              "sequence": []
                            },
                            {
                              "conditions": "{{ action_kanal_id == 'kanal3' }}",
                              "sequence": []
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "id": "1780189764347",
      "alias": "IKEA BILRESA - Light Controller (v1.2)",
      "description": ""
    },
    "blueprint_inputs": {
      "id": "1780189764347",
      "alias": "IKEA BILRESA - Light Controller (v1.2)",
      "description": "",
      "use_blueprint": {
        "path": "SvKRO/ha-blueprint-ikea-bilresa-scrollwheel_en.yaml",
        "input": {
          "remote_device": "af64be2deb037660aba2013b8326d97c",
          "input_light_1": {
            "entity_id": "light.living_room_lights"
          },
          "input_click_1": [
            {
              "action": "light.toggle",
              "metadata": {},
              "target": {
                "entity_id": "light.living_room_lights"
              },
              "data": {}
            }
          ],
          "input_double_1": [
            {
              "action": "light.turn_on",
              "metadata": {},
              "target": {
                "entity_id": "light.living_room_lights"
              },
              "data": {
                "color_temp_kelvin": "{{ states('input_select.livingroom_light_colors') | int }}\n"
              }
            },
            {
              "action": "input_select.select_next",
              "metadata": {},
              "target": {
                "entity_id": "input_select.livingroom_light_colors"
              },
              "data": {
                "cycle": true
              }
            }
          ],
          "input_sens_1": 5
        }
      }
    },
    "context": {
      "id": "01KWH0NYX9VD26E65CQN2RG2V1",
      "parent_id": "01KWH0NYX9BMW8E7ARR4CADYD4",
      "user_id": null
    }
  },
}

replying again since the trace was too long, following change fixed it:

      ticks: >-
        {{
        trigger.event.data.new_state.attributes.get('totalNumberOfPressesCounted',
        1) | int }}
      action_event_type: "{{ trigger.event.data.new_state.attributes.get('event_type', 'none') }}"

instead of

      ticks: "{{ event_attr.totalNumberOfPressesCounted | default(1) | int }}"
      action_event_type: "{{ event_attr.event_type | default('none') }}"
2 Likes

life saver fr

The single click broke for me too since the last update to 2026.7

1 Like

The fix works.

The response to changes of this blueprint with my Matter setup is painfully slow. It can take a few seconds before a toggle command is received and a brightness or scene change by turning the wheel takes up to 10 seconds or won't work at all. Does anyone have any thoughts on this?

For me switching to this blueprint helped Ikea Bilresa scroll wheel blueprint (Matter) - The Original

Thanks for reporting, was able to reproduce the issue and applied a quick fix.
Regular clicks should be working again, simply reimport the blueprint.

Blueprint version 1.3 tested with HA 2026.7.1 and Bilresa 1.9.15.


I agree, scrolling isn't exactly the fastest.
For my use case, it seems to be working well so far. I just adjust the brightness and switch back and forth between different scenes. I actually find the response time quite sufficient for that; I haven't noticed it taking more than a few seconds so far.

If dependencies on helpers or scripts aren’t an issue, have you tried the other available Blueprints? You might get better response times with them.

1 Like

Hi,
the latest change doesn't work for the HOLD action.

This change made it all work for me:
from:
ticks: "{{ event_attr.get('totalNumberOfPressesCounted') | default(1) | int }}"
to:
ticks: "{{ event_attr.get('totalNumberOfPressesCounted') | int(1) }}"

Explanation if anyone cares:

  • multi_press_* events carry a totalNumberOfPressesCounted attribute → this computes fine → clicks work.
  • long_press and long_release events do not carry that attribute – its event_attr had previousPosition but no totalNumberOfPressesCounted. So .get(...) returns None.
  • | default(1) does not catch None — Jinja's default only replaces undefined values, not None. So None flows into | int, which throws int got invalid input 'None'.
3 Likes