Created
April 27, 2026 20:31
-
-
Save ToddAlvord/0340113a5e03b5eddd8dd765bca49929 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| # This blueprint controls lights through an IKEA STYRBAR remote connected via ZHA. | |
| blueprint: | |
| name: ZHA - IKEA STYRBAR control for IKEA TRADFRI color bulbs | |
| description: 'Control lights with an IKEA STYRBAR four button remote (the square ones), | |
| for use with [ZHA](https://www.home-assistant.io/integrations/zha/). | |
| It adds color selection and extends [Malte](https://community.home-assistant.io/u/Malte)''s [blueprint](https://community.home-assistant.io/t/zha-ikea-four-button-remote-styrbar-for-lights-e2001-e2002/384482). | |
| That, in turn, is based on [SwerveShot](https://community.home-assistant.io/u/SwerveShot)''s [version](https://community.home-assistant.io/t/zha-ikea-four-button-remote-for-lights/347657) | |
| which is based on the work of [frenck](https://community.home-assistant.io/u/frenck). | |
| Pressing the up button will turn on the lights at the last set brightness and color (unless | |
| the force brightness is toggled on in the blueprint). Pressing the down button will turn the lights off again. | |
| Pressing and holding the up/down buttons will change the brightness smoothly and | |
| can be pressed and hold until the brightness is satisfactory. | |
| Short presses of the "left" and "right" buttons rotate through the colours in the associated helper. | |
| Valid values are: <integer> color temperature in Kelvin (e.g. 2700), <#RGBCODE> RGB color code (e.g. #FFFAFA), or <ColorName> color name (e.g. lightskyblue) listed in [homeassistant source](https://github.com/home-assistant/core/blob/d68ee8dceae7acd2fbdc2be0724847ac0827dcde/homeassistant/util/color.py) which is based on [CSS3 color names](https://www.w3.org/TR/css-color-3/#svg-color). | |
| If the entry isn''t a number, and doesn''t start with a "\#", then it is treated as a colorname. | |
| An initial useful set of values for the helper could be 4000, 2700, 2200, 1780, gold, darksalmon, pink, mediumpurple, mediumblue. | |
| The "left" and "right" buttons can be assigned to a long button press | |
| action. This allows you to assign, e.g., a scene or anything else. Use the left | |
| and right button events with care, as before the long press event is sent, the | |
| "on" event gets triggered. | |
| ' | |
| domain: automation | |
| input: | |
| remote: | |
| name: Remote | |
| description: IKEA remote to use | |
| selector: | |
| device: | |
| integration: zha | |
| manufacturer: IKEA of Sweden | |
| model: Remote Control N2 | |
| multiple: false | |
| light: | |
| name: Light(s) | |
| description: The light(s) to control | |
| selector: | |
| target: | |
| entity: | |
| - domain: | |
| - light | |
| force_brightness: | |
| name: Force turn on brightness | |
| description: Force the brightness to the set level below, when the "on" button | |
| on the remote is pushed and lights turn on. | |
| default: false | |
| selector: | |
| boolean: {} | |
| brightness: | |
| name: Brightness | |
| description: Brightness of the light(s) when turning on | |
| default: 50 | |
| selector: | |
| number: | |
| min: 0.0 | |
| max: 100.0 | |
| mode: slider | |
| step: 1.0 | |
| unit_of_measurement: '%' | |
| hold_time: | |
| name: Hold Time | |
| description: Time between the execution of the brighter/darker actions when | |
| holding the brighter/darker button. | |
| default: 0.2 | |
| selector: | |
| number: | |
| min: 0.1 | |
| max: 2.0 | |
| step: 0.1 | |
| unit_of_measurement: seconds | |
| mode: slider | |
| color_set: | |
| name: Color and Temperature List | |
| description: Select (or create) a helper listing the colors to use with left and right button presses. | |
| Accepts color names, RGB hex color codes, or integer numeric values for temperature in Kelvin. | |
| default: [] | |
| selector: | |
| entity: | |
| filter: | |
| - domain: | |
| - input_select | |
| multiple: false | |
| button_left_long: | |
| name: Left button - long press | |
| description: Action to run on long left button press. Use with care, as before | |
| the long press event is sent, the "on" event gets triggered. | |
| default: [] | |
| selector: | |
| action: {} | |
| button_right_long: | |
| name: Right button - long press | |
| description: Action to run on long right button press. Use with care, as before | |
| the long press event is sent, the "on" event gets triggered. | |
| default: [] | |
| selector: | |
| action: {} | |
| source_url: https://github.com/kedmison/homeassistant-config/blob/6306fdfd9a710a9edba37b50d79cf89cba426745/blueprints/automation/kedmison/zha-ikea-styrbar-4button-for-color-lights.yaml | |
| mode: restart | |
| max_exceeded: silent | |
| variables: | |
| force_brightness: !input force_brightness | |
| color_set: !input color_set | |
| trigger: | |
| - platform: event | |
| event_type: zha_event | |
| event_data: | |
| device_id: !input remote | |
| action: | |
| - variables: | |
| command: '{{ trigger.event.data.command }}' | |
| cluster_id: '{{ trigger.event.data.cluster_id }}' | |
| endpoint_id: '{{ trigger.event.data.endpoint_id }}' | |
| args: '{{ trigger.event.data.args }}' | |
| - choose: | |
| - conditions: # Up button, short press | |
| - '{{ command == ''on'' }}' | |
| - '{{ cluster_id == 6 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| sequence: | |
| - choose: | |
| - conditions: '{{ force_brightness }}' | |
| sequence: | |
| - service: light.turn_on | |
| target: !input light | |
| data: | |
| transition: 1 | |
| brightness_pct: !input brightness | |
| default: | |
| - service: light.turn_on | |
| target: !input light | |
| data: | |
| transition: 1 | |
| - conditions: # Down button, short press | |
| - '{{ command == ''off'' }}' | |
| - '{{ cluster_id == 6 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| sequence: | |
| - service: light.turn_off | |
| target: !input light | |
| data: | |
| transition: 1 | |
| - conditions: # Up button, long press | |
| - '{{ command == ''move_with_on_off'' }}' | |
| - '{{ cluster_id == 8 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| sequence: | |
| - repeat: | |
| count: 10 | |
| sequence: | |
| - service: light.turn_on | |
| target: !input light | |
| data: | |
| brightness_step_pct: 10 | |
| transition: !input hold_time | |
| - delay: !input hold_time | |
| - conditions: # Down button, long press | |
| - '{{ command == ''move'' }}' | |
| - '{{ cluster_id == 8 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| sequence: | |
| - repeat: | |
| count: 10 | |
| sequence: | |
| - service: light.turn_on | |
| target: !input light | |
| data: | |
| brightness_step_pct: -10 | |
| transition: !input hold_time | |
| - delay: !input hold_time | |
| - conditions: # Left button, short press | |
| - '{{ command == ''press'' }}' | |
| - '{{ cluster_id == 5 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| - '{{ args == [257, 13, 0] }}' | |
| sequence: | |
| - service: input_select.select_previous | |
| data: | |
| entity_id: !input color_set | |
| - service: light.turn_on | |
| target: !input light | |
| data: > | |
| {%- set inputval = states(color_set) %} | |
| {%- set color_attrs = dict() %} | |
| {%- if inputval|int(-1) != -1 %} | |
| {%- set color_attrs = dict(color_attrs, color_temp_kelvin=inputval) %} | |
| {%- elif inputval | first == '#' %} | |
| {%- set color_attrs = dict(color_attrs, | |
| rgb_color=(inputval[1:3]|int(base=16), | |
| inputval[3:5]|int(base=16), | |
| inputval[5:7]|int(base=16)) | list ) %} | |
| {%- else %} | |
| {%- set color_attrs = dict(color_attrs, color_name=inputval ) %} | |
| {%- endif %} | |
| {%- set color_attrs = dict(color_attrs, transition=1) %} | |
| {{ color_attrs }} | |
| - conditions: # Left button, long press | |
| - '{{ command == ''hold'' }}' | |
| - '{{ cluster_id == 5 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| - '{{ args == [3329, 0] }}' | |
| sequence: !input button_left_long | |
| - conditions: # Right button, short press | |
| - '{{ command == ''press'' }}' | |
| - '{{ cluster_id == 5 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| - '{{ args == [256, 13, 0] }}' | |
| sequence: | |
| - service: input_select.select_next | |
| data: | |
| entity_id: !input color_set | |
| - service: light.turn_on | |
| target: !input light | |
| data: > | |
| {%- set inputval = states(color_set) %} | |
| {%- set color_attrs = dict() %} | |
| {%- if inputval|int(-1) != -1 %} | |
| {%- set color_attrs = dict(color_attrs, color_temp_kelvin=inputval) %} | |
| {%- elif inputval | first == '#' %} | |
| {%- set color_attrs = dict(color_attrs, | |
| rgb_color=(inputval[1:3]|int(base=16), | |
| inputval[3:5]|int(base=16), | |
| inputval[5:7]|int(base=16)) | list ) %} | |
| {%- else %} | |
| {%- set color_attrs = dict(color_attrs, color_name=inputval ) %} | |
| {%- endif %} | |
| {%- set color_attrs = dict(color_attrs, transition=1) %} | |
| {{ color_attrs }} | |
| - conditions: # Right button, long press | |
| - '{{ command == ''hold'' }}' | |
| - '{{ cluster_id == 5 }}' | |
| - '{{ endpoint_id == 1 }}' | |
| - '{{ args == [3328, 0] }}' | |
| sequence: !input button_right_long |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment