🎮 ZHA, deCONZ, Zigbee2MQTT - Ikea E1744 SYMFONISK rotary remote Universal blueprint - all actions - control lights, media players and more with Hooks

Tags: #<Tag:0x00007fc418654b98> #<Tag:0x00007fc4186548f0> #<Tag:0x00007fc418654648> #<Tag:0x00007fc4186543f0> #<Tag:0x00007fc418654148>

This blueprint is part of the Awesome HA Blueprints project.
Read more about it on the related Community Forum topic. :rocket:

Updates will be published on the project’s GitHub repository.

:arrow_down: Get Started

Option 1: My Home Assistant

Click the badge to import this Blueprint (needs Home Assistant Core 2021.3 or higher)

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

Option 2: Direct Link

Copy this link if you want to import the blueprint in your installation.

:link: Blueprint URL

:page_facing_up: Description

IKEA E1744 SYMFONISK Rotary Remote|200X200

This blueprint provides universal support for running any custom action when a button is pressed on the provided IKEA E1744 SYMFONISK Rotary Remote. Supports controllers integrated with one of the following integrations: deCONZ, ZHA, Zigbee2MQTT.

Just specify the integration used to connect the remote to Home Assistant when setting up the automation, and the blueprint will take care of all the rest.

In addition of being able to provide custom actions for every kind of button press supported by the remote, the blueprint allows to optionally loop the rotate actions while the remote is rotating either left or right. Once the remote stops rotating, the loop stops as well. This is useful when rotating the controller should result in a continuous action (such as lowering the volume of a media player, or controlling a light brightness).

Moreover, automations created with this blueprint can be connected with one or more Hooks supported by this controller.

Hooks allow to easily create controller-based automations for interacting with media players, lights, covers and more. See the list of Hooks available for this controller for additional details.

:closed_book: Full Documentation

Full documentation regarding requirements, inputs and action mappings for the supported Hooks is available here.

Docs provide all the information you need to properly configure this blueprint on your instance.

:electric_plug: Available Hooks

:bulb: Light

This Hook blueprint allows to build a controller-based automation to control a light. Supports brightness and color control both for white temperature and rgb lights.

Light Hook docs

:loud_sound: Media Player

This Hook blueprint allows to build a controller-based automation to control a media player. Supports volume setting, play/pause and track selection.

Media Player Hook docs

Changelog

  • 2021-03-07: first blueprint version :tada:
    • 2021-03-25: :warning: Breaking Change: standardize input names across all the Controller blueprints.
      If you plan to update this blueprint, please update the inputs in your automations as follows:
    • remotecontroller_device
    • zigbee2mqtt_remotecontroller_entity
    • action_clickaction_click_short
  • 2021-04-19: align action mapping format for deCONZ across all the Controller blueprints

Happy automating to everyone! :fire:

6 Likes

Hi,

I think there is something wrong with this blueprint.
This is what I have:
Hook:

alias: Gabinet mała IKEA E1744 Hook
description: ''
use_blueprint:
  path: EPMatt/light.yaml
  input:
    light_color_mode: Auto
    controller_entity: sensor.sypialnia_obrotowy_pilot_action
    controller_model: IKEA E1744 SYMFONISK rotary remote
    light: light.gabinet_lampka_mala

And the integration:

alias: Gabinet mała IKEA E1744  SYMFONISK rotary remote
description: ''
use_blueprint:
  path: EPMatt/ikea_e1744.yaml
  input:
    integration: Zigbee2MQTT
    zigbee2mqtt_remote: sensor.sypialnia_obrotowy_pilot_action
    action_rotate_left:
      - type: brightness_decrease
        device_id: Dev_id
        entity_id: light.gabinet_lampka_mala
        domain: light
    action_rotate_right:
      - type: brightness_increase
        device_id: Dev_id
        entity_id: light.gabinet_lampka_mala
        domain: light
    action_click:
      - type: toggle
        device_id: Dev_id
        entity_id: light.gabinet_lampka_mala
        domain: light
    rotate_left_loop: false
    rotate_right_loop: false
    helper_last_controller_event: input_text.e1744_obrotowypilottexthelper

When rotating right the helper changes to ‘brightness_move_up’, but when rotating left it is not changed at all.

Z2M logs:

Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot/action', payload 'brightness_move_up'
Info MQTT publish: topic 'zigbee2mqtt/Gabinet lampka mala', payload '{"brightness":26,"color_temp":295,"color_temp_startup":410,"linkquality":118,"state":"ON","update":{"state":"available"},"update_available":true}'
Info MQTT publish: topic 'zigbee2mqtt/Gabinet lampka mala', payload '{"brightness":26,"color_temp":295,"color_temp_startup":410,"linkquality":117,"state":"ON","update":{"state":"available"},"update_available":true}'
Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot', payload '{"action":"brightness_stop","battery":60,"brightness":183,"linkquality":118,"rate":195,"update":{"state":"idle"},"update_available":false}'
Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot', payload '{"action":"","battery":60,"brightness":183,"linkquality":118,"rate":195,"update":{"state":"idle"},"update_available":false}'
Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot/action', payload 'brightness_stop'
Info MQTT publish: topic 'zigbee2mqtt/Gabinet lampka mala', payload '{"brightness":52,"color_temp":295,"color_temp_startup":410,"linkquality":118,"state":"ON","update":{"state":"available"},"update_available":true}'

Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot/action', payload 'brightness_move_down'
Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot', payload '{"action":"brightness_stop","battery":60,"brightness":183,"linkquality":118,"rate":195,"update":{"state":"idle"},"update_available":false}'
Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot', payload '{"action":"","battery":60,"brightness":183,"linkquality":118,"rate":195,"update":{"state":"idle"},"update_available":false}'
Info MQTT publish: topic 'zigbee2mqtt/Sypialnia obrotowy pilot/action', payload 'brightness_stop'

I can’t get the rotate left working. Any ideas how to solve that?

Ok, found it:
Line 120
There is a typo.
It says: brightness_mode_down should be brightness_move_down

The blueprint works after the change.

Hi @GrabkaMan, thank you for reporting. :slight_smile:
That typo should already be fixed, please update your blueprint to the latest version. :+1:

Edit: To update the blueprint you can simply delete it from the Home Assistant UI, then import it again via URL or My Home Assistant (as described in the original post).

Thanks!

Hi Matteo, I’ve just set this controller up and I’m a little confused as to why I would then need the media player blueprint, since this works to control volume etc by itself. Can you please elaborate on how the two work together?



The thing is though, the volume control is SUPER sensitive, to the point that it goes from quite to very loud in one little notch spinning right. Is there a way to reduce how much the volume is adjusted per spin?

Or is it that I need to create an automation with the media player hook as well? In that case was I not supposed to specify the media player entity in the controller blueprint automation? (otherwise it will be in two automations)

Hi @sparkydave, sorry for my late response.

Can you please elaborate on how the two work together?

In the past days I worked on improving docs for the Controllers-Hooks Ecosystem; I’ve just completed the update.

You can read docs for Controllers and Hooks here. I’ve also included some usage examples, as well as different configuration scenarios for controller-based automations.

To make it short, Hooks allow you not to write the actions for common functionality such as controlling Lights or Media Players.

Or is it that I need to create an automation with the media player hook as well? In that case was I not supposed to specify the media player entity in the controller blueprint automation? (otherwise it will be in two automations)

Exactly. In your case, you can remove the custom actions you provided to the Controller blueprint, and configure an automation with the Media Player Hook.

Just as a feedback, could you please read the updated docs and report here if they look clear to you?

Of course, if you still have doubts and docs are not able to address them, I’m here to help. :slight_smile:

The thing is though, the volume control is SUPER sensitive, to the point that it goes from quite to very loud in one little notch spinning right. Is there a way to reduce how much the volume is adjusted per spin?

Yeah, this behaviour with the Media Player Hook was reported also by another user. I’ll add an input to tune sensitivity for volume control. I’ll let you know as soon as the feature gets implemented. :+1:

Thank you!

Hi @epmatt thanks so much for the detail response. The docs are great. I’ve removed the action parts from the controller automation and created a hook automation. Testing time :slight_smile:

Hi @sparkydave, thank you for your precious feedback.
Let me know if everything runs great. :smiley:

Volume control is working with the new setup however I tried to remap the triple click to another function but that doesn’t seem to be working. I guess it can’t be done the way I have?


Hi @sparkydave,
what you did is correct, but I think the two blueprints are conflicting with each other: the Media Player Hook is setting the media_player to the previous track, while the Controller blueprint is trying to turn off the media player.

Currently, there’s no way to completely override an action which is indeed executed by one of the connected Hooks. You can of course specify the custom actions, but both of them will run when pressing the button.

I don’t know if it’s a good idea to allow users to disable certain button events, preventing Hooks to catch them: it would add a lot of complexity to the Controller blueprints, and would require many additional inputs (for example, the E1524 would require 19 more inputs).

Maybe we can provide different mappings for the same controller in the Media Player Hook, so users can choose the one which best suits their needs.

What do you think might be the best solution?

When I used the Controller only and didn’t have a Hook setup I was able to make it work, as you say, they are now conflicting. I guess my question is why have the Hook at all when the Controller automation can provide the functionality?

Hi @sparkydave,

I guess my question is why have the Hook at all when the Controller automation can provide the functionality?

Hooks can be particularly useful for users which don’t want to write any custom action for common functionality (such as controlling lights etc.).

Think of them like a safe and easy “Plug and Play” solution. Of course, if you want more control on actions to perform with your controller, you can directly write custom actions in the controller blueprint, which can also run alongside a Hook (eg. if you want to extend the Hook functionality).

By the way, you raised an important point. The fact is, especially with media players, more customization must be available, since features may vary a lot depending on the controlled media player: not all of them have, for example, the previous track feature.

In my opinion, this is something we should take into account. The Controllers-Hooks ecosystem has to be able to address these situations as well, maybe with different mappings for the same controller, or with more customization regarding which events to expose to Hooks.

Hrm, I seem to be having trouble with this blueprint. While I find it works well, the single press action seems to be called twice. It’s as if it needs to debounce the command.

Hi @anthonylavado, thank you for reporting.

What integration are you using for connecting your E1744 to Home Assistant?

I’ve got it connected through ZHA with a CC2531 at the moment. Just noticed that rotating events aren’t firing, so I’m going to try resetting the whole thing.

Hi @anthonylavado,

thank you. If after resetting you still have isues with this blueprint, you can report back here.

Hi I am having an issue with the double press action firing up multiple times.

I think it’s user error as I don’t completely understand why you would need the media blueprint.

I am trying to use the symfonisk dial as volume + and -, 1 press mute, 2 Press select a certain channel, 3 turn off media player.

I am using the smart ir HACS integration combined with a broadlink rm pro, and what I am controlling uses IR.

For Volume +/-, Mute and On/Off everything works as expected.

For the channel selection, I have to press 3 buttons on the remote (I am trying to achieve channel 500), the Smart IR integration is not exactly intended for tv remotes so it uses “sources” as if they where numbers of the remote. (This does not have to make sense to you, it’s just to prepare you for the fact that the upcoming code calls for “media_player.select_source” and then I need to state in the data field “Channel 5” and that means it’s simulating a button press on the remote). in between button presses I have a delay of one second just to be safe.

The intended behaviour on the TV is: 5, delay, 0, delay, 0

When I double press the symfonisk what the TV gets is: 5, 5, 0, 0, 5, 0 with no delay.

Trying to diagnose the problem I created a simple script that does what the 2Presses are intended to do, as expected it works, so I put the script in the action to fire up in the 2presses in the blueprint and I get the same problem as before

To me it looked like the Script got fired up multiple times “in parallel” so I set it to fire up in queue expecting that if the problem is the blueprint firing up multiple times I would get 5,0,0,5,0,0,5,0,0 as an output, but no, apparently it keeps firing up like when I first encountered the problem.

So, I set up a simple automation where I use the 2presses as a trigger (I used device configuration, unlike the blueprint that listens to zha_events), and the buttons and delays as action sequences and everything works as expected.

This is the automation I initially used:

alias: Ikea Dial Automation but with action sequence
description: ''
use_blueprint:
  path: EPMatt/ikea_e1744.yaml
  input:
    integration: ZHA
    controller_device: 9ca352eefe4ea328cce7e411e65f41dd
    action_rotate_left:
      - service: media_player.volume_down
        target:
          entity_id: media_player.living_room_tv
    action_rotate_right:
      - service: media_player.volume_up
        target:
          entity_id: media_player.living_room_tv
    action_click_short:
      - service: media_player.volume_mute
        target:
          entity_id: media_player.living_room_tv
        data:
          is_volume_muted: true
    action_click_double:
      - service: media_player.select_source
        data:
          source: Channel 5
        target:
          entity_id: media_player.living_room_tv
      - delay:
          hours: 0
          minutes: 0
          seconds: 1
          milliseconds: 0
      - service: media_player.select_source
        data:
          source: Channel 0
        target:
          entity_id: media_player.living_room_tv
      - delay:
          hours: 0
          minutes: 0
          seconds: 1
          milliseconds: 0
      - service: media_player.select_source
        data:
          source: Channel 0
        target:
          entity_id: media_player.living_room_tv
    action_click_triple:
      - service: media_player.turn_on
        target:
          entity_id: media_player.living_room_tv
    helper_last_controller_event: input_text.ikea_dial_aiutante

This is the blueprint automation with the script:

alias: Ikea Dial Automation
description: ''
use_blueprint:
  path: EPMatt/ikea_e1744.yaml
  input:
    integration: ZHA
    controller_device: 9ca352eefe4ea328cce7e411e65f41dd
    action_rotate_left:
      - service: media_player.volume_down
        target:
          entity_id: media_player.living_room_tv
    action_rotate_right:
      - service: media_player.volume_up
        target:
          entity_id: media_player.living_room_tv
    action_click_short:
      - service: media_player.volume_mute
        target:
          entity_id: media_player.living_room_tv
        data:
          is_volume_muted: true
    action_click_double:
      - service: script.telegiornale
    action_click_triple:
      - service: media_player.turn_on
        target:
          entity_id: media_player.living_room_tv
    helper_last_controller_event: input_text.ikea_dial_aiutante

This is the Script:

alias: telegiornale
sequence:
  - service: media_player.select_source
    data:
      source: Channel 5
    target:
      entity_id: media_player.living_room_tv
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: media_player.select_source
    data:
      source: Channel 0
    target:
      entity_id: media_player.living_room_tv
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: media_player.select_source
    data:
      source: Channel 0
    target:
      entity_id: media_player.living_room_tv
mode: queued
max: 2

And this is the simple device based automation:

alias: aaaaaaaaaa
description: ''
trigger:
  - device_id: 9ca352eefe4ea328cce7e411e65f41dd
    domain: zha
    platform: device
    type: remote_button_double_press
    subtype: turn_on
condition: []
action:
  - service: media_player.select_source
    data:
      source: Channel 5
    target:
      entity_id: media_player.living_room_tv
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: media_player.select_source
    data:
      source: Channel 0
    target:
      entity_id: media_player.living_room_tv
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: media_player.select_source
    data:
      source: Channel 0
    target:
      entity_id: media_player.living_room_tv
mode: single

As a final note, I am not using a simple device based automation because apparently the 2 and 3 button presses actions get fired up at the same time, no matter if I activate 2 button presses or 3, so I used this blueprint because it’s already using zha_events.

When testing with lights the blueprint seems to be working perfectly.

Tomorrow I’ll try and write my own automation listening to zha events, but I just can’t see why what I have done wouldn’t work. It’s probably something very silly, I suspect it has to do with me not using the media hook

Hi @MikiZed, thank you for reporting and for your tests.

I think it’s user error as I don’t completely understand why you would need the media blueprint.

Hooks can be particularly useful for users which don’t want to write any custom action for common functionality (such as controlling lights etc.).

Think of them like a safe and easy “Plug and Play” solution. Of course, if you want more control on actions to perform with your controller, you can directly write custom actions in the controller blueprint, which can also run alongside a Hook (eg. if you want to extend the Hook functionality). Given your case, I think using the Controller blueprint only is the right choice. :slight_smile:

It looks like this issue is related with the same one other users are experiencing with the E1812 controller, which sends multiple zha_event events when single pressing the button. Hence, we might need to apply debouncing also to this controller.

To help solving this issue, It’d be extremely helpful if you could post here the list of events fired by the controller when clicking it.

In your Home Assistant UI, navigate to Developer Tools -> Events. At the bottom of the page, in the “Listen to Events” form type zha_event , click on “Start Listening”, then press the controller only once. Copy the events which appear on the page and paste them here (or as PM). If you can, please repeat the operation also for the double and triple press, and post the results separately.

Thank you!

Yeah, as you expected that’s what is happening, zha_event get fired up multiple times

For one press:

Evento 2 generato 16:05:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0006",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 6,
        "command": "toggle",
        "args": []
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:05:19.436120+00:00",
    "context": {
        "id": "480d52b955299fc9a0fec3294880d13e",
        "parent_id": null,
        "user_id": null
    }
}
Evento 1 generato 16:05:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0006",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 6,
        "command": "toggle",
        "args": []
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:05:19.429082+00:00",
    "context": {
        "id": "afc3e19297c8727753605fab2a80477c",
        "parent_id": null,
        "user_id": null
    }
}
Evento 0 generato 16:05:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0006",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 6,
        "command": "toggle",
        "args": []
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:05:19.409546+00:00",
    "context": {
        "id": "01f4a44673a9deb35a7d5215080d7e34",
        "parent_id": null,
        "user_id": null
    }
}

For 2 presses:

Evento 2 generato 16:07:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0008",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "step",
        "args": [
            0,
            1,
            0
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:07:36.836012+00:00",
    "context": {
        "id": "ae6fdcd3a299c8db0e76738808c9b077",
        "parent_id": null,
        "user_id": null
    }
}
Evento 1 generato 16:07:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0008",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "step",
        "args": [
            0,
            1,
            0
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:07:36.828631+00:00",
    "context": {
        "id": "a51f2987bdbbf8c843a980991542ac65",
        "parent_id": null,
        "user_id": null
    }
}
Evento 0 generato 16:07:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0008",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "step",
        "args": [
            0,
            1,
            0
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:07:36.818352+00:00",
    "context": {
        "id": "ffe7ba92018da08c7891d3a9977b8028",
        "parent_id": null,
        "user_id": null
    }
}

For 3 presses:

Evento 2 generato 16:08:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0008",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "step",
        "args": [
            1,
            1,
            0
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:08:45.270836+00:00",
    "context": {
        "id": "938b59f17f4f729765b2df643eabc0a2",
        "parent_id": null,
        "user_id": null
    }
}
Evento 1 generato 16:08:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0008",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "step",
        "args": [
            1,
            1,
            0
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:08:45.208193+00:00",
    "context": {
        "id": "962ad65335b955abb93a1619b080e4f0",
        "parent_id": null,
        "user_id": null
    }
}
Evento 0 generato 16:08:
{
    "event_type": "zha_event",
    "data": {
        "device_ieee": "14:b4:57:ff:fe:6c:0e:fe",
        "unique_id": "14:b4:57:ff:fe:6c:0e:fe:1:0x0008",
        "device_id": "9ca352eefe4ea328cce7e411e65f41dd",
        "endpoint_id": 1,
        "cluster_id": 8,
        "command": "step",
        "args": [
            1,
            1,
            0
        ]
    },
    "origin": "LOCAL",
    "time_fired": "2021-04-06T14:08:45.196091+00:00",
    "context": {
        "id": "fa95992246f8b34a84c54e287f709a96",
        "parent_id": null,
        "user_id": null
    }
}

As a temporaty fix I will be using scripts with a 30 seconds delay at the end and put them in single mode, I don’t know why yesterday I thought queued was a good idea

[Edit] the temporary fix doesn’t work, for some reason if i double press quickly I get the issue already described, if i double click slowly it seems to work fine, I didn’t investigate much, it’s possible that I missed something

Hi, I’m having trouble with the short press action in this blueprint. Successfully paired the IKEA Symfonisk sound control with ZHA (using a Conbee2 stick).
Trying to control a stereo-coupled pair of Sonos speakers, but the play/pause toggle action does not work as intended. Toggling play from paused state works fine, but toggling pause from playing state just causes the player to pause briefly and then start playing again. Tried both the “manual” mapping for the play/pause action and using the hook blueprint - the behavior is the same.

I tried removing the sound control and pairing it again, but the results stay the same. I noticed that double press also seems to send multiple events, since it skips multiple songs…