I wasn’t very happy with the dimming using the wheel so I’ve added some advanced features. Updated comment for version 2026-01-29 using new stock capabilities.
Basic dimming with BILRESA scroll wheel
The easiest way to dim is assigning a fixed brightness step to the left and right actions.
Step or Adjust actions depend on the driver you use for the lights:
- Stock drivers do not support them yet, when they do you’ll see the Adjust brightness action.
- For Matter bulbs you can use this same Matter Playground driver which also supports adding transition times and On/Off behaviour.
- For Zigbee bulbs you can use Lights Multifunction Mc.
- For any light you can use Virtual Dimmer with Steps.
The wheel more or less repeats the events while scrolling, many if you go slow, not so many if you go fast to avoid flooding the hub. You’ll get multiple steps and kind of works. You could say it’s fine, but not great. Lacks precision and speed.
Advanced dimming with BILRESA scroll wheel
Using the Rules API, the button can feed the step size required to the light driver, changing it depending on how much you scroll and matching the native experience inside IKEA ecosystem. Gives both precision and speed, you can go slowly by small increments or quickly scroll the wheel a large amount for a large step.
The attribute rotateAmount in capability knob of BILRESA is the step level value you have to pass to the step level command of the lights driver. The Rule, although verbose, is quite simple and would look like this for lights supporting the official statelessSwitchLevelStep capability, like this Matter Playground and, soon, stock Matter drivers:
[
{
"if": {
"greaterThanOrEquals": {
"left": {
"device": {
"devices": [
"BILRESA-SCROLL-DEVICE-ID"
],
"component": "main",
"capability": "knob",
"attribute": "rotateAmount",
"trigger": "Always"
}
},
"right": {
"integer": -100
},
"changesOnly": false
},
"then": [
{
"command": {
"devices": [
"LIGHT-DEVICE-ID",
"ANOTHER-LIGHT-DEVICE-ID"
],
"commands": [
{
"component": "main",
"capability": "statelessSwitchLevelStep",
"command": "stepLevel",
"arguments": [
{
"device": {
"devices": [
"BILRESA-SCROLL-DEVICE-ID"
],
"component": "main",
"capability": "knob",
"attribute": "rotateAmount"
}
}
]
}
]
}
}
]
}
}
]
The component names for the knob are main for first group, group2 and group3.
Adapting the Rule for other custom drivers
There are settings to change the default behaviour but that’s only needed for specific cases mentioned below.
- For lights using the official
statelessSwitchLevelStepcapability like Matter Playground and, soon, Matter stock drivers, no action is needed. Keep the Max step size at 100 and just copy the rule changing the IDs. - For Virtual Dimmer use capability
islandtheme02751.stepLeveland commandsetStepLevel. Change the Max step size to 25 or won’t work as expected since the driver sends steps up to 100% by default if you fully scroll the wheel. - For Lights Multifunction would be capability
legendabsolute60149.levelStepsand commandsetLevelSteps, with Max step size being 30.
Improving the smoothness
When using Matter Playground, you can improve the smoothness of the steps by adding a transition time.
An option is changing the step level transition in the settings of the light. It’s in seconds, I recommend 0.3 for IKEA KAJPLATS, 0.1 for Nanoleaf and 0 for WiZ since they already add their own smoothness.
Alternatively, if you use panelorange55982.stepLevel capability you can add the second and third optional stepLevel parameters to the rule which are an integer for the transition time in tenths of a second and a boolean for the WithOnOff behaviour.
Recent changes
Feb 13th, 2026 note. SmartThings is officially adding support for dimming by scrolling and hopefully the app will provide a user interface so the Rules API is not needed
. It is not there yet but SmartThings has created a new knob capability to communicate the level steps that my driver already uses and so will stock drivers. A previous version of the instructions used the Scrolled sectors as step options but they are no longer needed. If you were using scrolledSectors for the steps feel free to migrate to knob using attribute rotateAmount instead of scrolledSectors , integer instead of decimal and capability knob instead of panelorange55982.scrolledSectors.
There are also new official capabilities for the steps so I’ve changed the screenshots to use them instead. The Adjust brightness action is the English translation but in your language may be Ajustar brillo or other text. You can still use the Step dimmer level action too, it’s exactly the same internally except using my custom capability. I’ve also updated the Rule to use the official statelessSwitchLevelStep that more drivers will use in the near future.


