ControllerX. Bring full functionality to light and media player controllers

Managed to accidentally pair one of them, so I’m on the right track. Thanks for the help!

1 Like

Not sure how you can accidently do it :slight_smile: but they both appear to go into pairing mode the same way, clicking the button next to the battery 4 times.

Then go to Configuration>Integrations>click on ‘CONFIGURE’ in the ZHA panel>click the big plus button bottom right. You’ll see ‘show logs’ appear top right, click that and you should see it doing it’s stuff.

A big box with the device details will appear on that page when it has finished pairing.

1 Like

Thanks. Got it figured out. I knew I was missing something simple… it has been a long few days :smile:

2 Likes

I made the switch today from deCONZ to zigbee2mqtt. Now I’m trying to get Controller X working again, however I can’t seem to get it to work. I have added the IKEA Symfonisk controller through z2m (the sensor works and shows events). I use this code, but no luck:

symfonisk_muziek:
  module: controllerx
  class: E1744MediaPlayerController
  controller: sensor.symfonisk_woonkamer_action
  integration: z2m
  media_player: media_player.google_cast
  constrain_input_select: input_select.symfonisk,Muziek
  update_supported_features: true
  volume_steps: 100
  delay: 150

I double checked the input_select, that is on Muziek. Any ideas what I’m missing?

Hi @ASNNetworks,

Please check FAQ #8, I believe it is the problem you are currently having. You will also see that the controller is rather laggy, this is because you integrated it with the default config for z2m, but you can change it so it listens from MQTT. Read FAQ #9 for that.

Let me know if you have any questions.

Regards,
Xavi M.

I went through the docs and tried multiple times, but I can’t get it to work. I used the credentials like I have with my MTQQ broker and zigbee2mqtt. Perhaps I’m missing something.

plugins:
  HASS:
    type: hass
  MQTT:
    type: mqtt
    namespace: mqtt  # I have no idea what to do with this?
    client_host: mqtt://core-mosquitto # I use this also at zigbee2mqtt
    client_user: [username like MQTT Broker] # same credentials I use for zigbee2mqtt
    client_password:  [password like MQTT Broker]  # same credentials I use for zigbee2mqtt

symfonisk_muziek:
  module: controllerx
  class: E1744MediaPlayerController
  controller: zigbee2mqtt/Symfonisk Woonkamer/action
  integration:
    name: z2m
    listen_to: mqtt
  media_player: media_player.google_cast
  constrain_input_select: input_select.symfonisk,Muziek
  volume_steps: 100
  delay: 150

I also have this in devices.yaml and restarted zigbee2mqtt

'0x14b457fffe6be2fe':
  friendly_name: Symfonisk Woonkamer
  legacy: false

Any thoughts? Just to clarify: zigbee2mqtt works fine and the controller is recognized (also updates the sensor). So I think the credentials aren’t the issue right?

Hi @ASNNetworks,

The “plugins” part is something that goes to the appdaemon.yaml file and not to the apps.yaml. You will see the HASS plugin there, just add the MQTT part.

Also, in the client_host you should specify on the the host name (without the protocol part). So in this case it would be core-mosquitto. However, I have it with the IP address, something like client_host: 192.168.0.123.

The namespace: mqtt should stays as it is as stated in the documentation.

Another thing I spotted is that the controller attribute from the configuration should be the friendly name of the device from Zigbee2MQTT, so: controller: Symfonisk Woonkamer.

I believe this is all, with these fixes your controller should work with MQTT instead of using HA for the communication. I hope it is clear, otherwise I can explain further.

Regards,
Xavi M.

1 Like

Works like a charm now, thanks a lot for your help! Looks like I’ll post a new request over at github this week for the Muller remote, but now with Z2M instead of deCONZ :wink:

1 Like

Glad it helped :slight_smile: no problem about the z2m integration for the muller device, open an issue as you did for the ZHA integration.

Cheers,
Xavi M.

1 Like

Hi there - thanks so much for ControllerX. It’s making my home assistant config so much easier!

I have one thing I can’t get to work – I want to use a multiple click action from an E1743 (Ikea Trådfri on/off switch) using deconz.

I can see the single click actions coming in fine, but the multiple clicks seem to be ignored.

My config is as follows – am I missing something? Thank you again!

our_bedroom_wall_switch:         
  module: controllerx                   
  class: E1743Controller                
  controller: our_bedroom_tradfri_on_off
  integration: deconz                         
  light: light.bedroom_ceiling          
  merge_mapping:                        
    1002$1: "on"                        
    1002$2:                             
      service: light.toggle             
      data:                          
        entity_id: light.bedroom_leds
    1002$3:                          
      service: light.toggle          
      data:                          
        entity_id: light.hue_go_1

Hi @adamcohenrose,

Welcome to the HA community :slight_smile: As I understand from your question is that the configuration without the mapping attribute works as expected, is that correct? I don’t see any issues with the configuration, so could you also please share the AppDaemon logs when clicking once, twice, and 3 times? Also the 1002$1: "on" is unnecessary since it is already part of the default behaviour. I would also recommend you to play around with mutliple_click_delay attribute (default is 500ms). With this attribute you can control the delay between each click to detect the next one. So the higher, the more time you have between the multiple clicks. An example would be:

our_bedroom_wall_switch:         
  module: controllerx                   
  class: E1743Controller                
  controller: our_bedroom_tradfri_on_off
  integration: deconz                         
  light: light.bedroom_ceiling
  multiple_click_delay: 1000
  merge_mapping:                        
    1002$1: "on"                        
    1002$2:                             
      service: light.toggle             
      data:                          
        entity_id: light.bedroom_leds
    1002$3:                          
      service: light.toggle          
      data:                          
        entity_id: light.hue_go_1

Regards,
Xavi M.

Hey @xaviml! Sorry for the multi-platform spam - I found that the only way to get the E1744 controller to send input correctly was to manually map the actions - I’m wondering if I have a different version to what you might have seen so far?

With “legacy: false” set in the zigbee2mqtt config of each of the E1744 controllers I get no response on any of the different E1744 classes you have set up at all (Light/MediaPlayer/etc) without manually mapping each of the payload actions coming from the device itself.

The actions I have coming from it are:

rotate_left
rotate_right
rotate_stop
play_pause (single click)
skip_forward (double click)
skip_backward (triple click)

I also note that the payload also shows a specific “brightness” value (i.e: it remembers its own brightness value from 1-255). Would this be usable rather than just having the left/right rotations triggering volume/brightness up/down, etc?

Happy to give you any more information that might help you here! :slight_smile:

Thanks a lot for all of your help so far!

zigbee2mqtt:info  2020-10-28 09:10:55: MQTT publish: topic 'zigbee2mqtt/0xec1bbdfffe299c62', payload '{"rate":195,"linkquality":102,"update_available":false,"brightness":215,"battery":87,"action":"rotate_left"}'
zigbee2mqtt:info  2020-10-28 09:10:55: MQTT publish: topic 'zigbee2mqtt/0xec1bbdfffe299c62', payload '{"rate":195,"linkquality":102,"update_available":false,"brightness":215,"battery":87,"action":""}'
zigbee2mqtt:info  2020-10-28 09:10:55: MQTT publish: topic 'zigbee2mqtt/0xec1bbdfffe299c62/action', payload 'rotate_left'
zigbee2mqtt:info  2020-10-28 09:10:55: MQTT publish: topic 'zigbee2mqtt/0xec1bbdfffe299c62', payload '{"rate":195,"linkquality":102,"update_available":false,"brightness":195,"battery":87,"action":"rotate_left"}'
zigbee2mqtt:info  2020-10-28 09:10:55: MQTT publish: topic 'zigbee2mqtt/0xec1bbdfffe299c62', payload '{"rate":195,"linkquality":102,"update_available":false,"brightness":195,"battery":87,"action":""}'
zigbee2mqtt:info  2020-10-28 09:10:55: MQTT publish: topic 'zigbee2mqtt/0xec1bbdfffe299c62/action', payload 'rotate_left'

It looks like there will be a new remote from Ikea named Styrbar in the not so far future:
https://stadt-bremerhaven.de/styrbar-ikea-wird-eine-neue-fernbedienung-auf-den-markt-bringen/

Here is another link with a photo (also German): https://www.iphone-ticker.de/ikea-home-smart-neue-styrbar-fernbedienung-im-anmarsch-165343/
In the text you can read that maybe this remote should exchange the E1810 remote.

Hi @Veeedka,

With “legacy: false” set in the zigbee2mqtt config of each of the E1744 controllers I get no response on any of the different E1744 classes you have set up at all (Light/MediaPlayer/etc) without manually mapping each of the payload actions coming from the device itself.

How and where did you set the legacy: false attribute, and have you restart Zigbee2MQTT after doing so?

I also note that the payload also shows a specific “brightness” value (i.e: it remembers its own brightness value from 1-255). Would this be usable rather than just having the left/right rotations triggering volume/brightness up/down, etc?

Not all controller give support to this value, this is why it does not make use of this value and just listens to the changes done from the controller.

Regards,
Xavi M.

Nice! it looks neat! Looking forward to get one of those. I will be integrating it to ControllerX once I get the events from each integration. Thank you for sharing :slight_smile:

Hey @xaviml :slight_smile:

I use a docker container for zigbee2mqtt, and I added it into the configuration.yaml file which shows the device list as follows:

homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://REMOVED'
  user: REMOVED
  password: REMOVED
serial:
  port: /dev/ttyACM0
advanced:
  log_level: debug
devices:
  '0x842REMOVED479304':
    friendly_name: '0x842e14fffe479304'
  '0xec1REMOVED299c62':
    friendly_name: '0xec1bbdfffe299c62'
    legacy: false
  '0xcccREMOVEDe06d45':
    friendly_name: '0xccccccfffee06d45'
    legacy: false

Hi @Veeedka,

I am not sure where to place the configuration when installed by docker, but by reading the documentation seems that you need to place the whole “device” inside of “device_options” attribute. However, the first thing I would try is to change the friendly name of your round controller and make sure the name changed after restarting the container.

Could you try that? The mistake seems to be in the Zigbee2MQTT configuration part I would say, if you are still not able to see the other topics when rotating the controller.

Cheers,
Xavi M.

Hey @xaviml, found the issue - My version of zigbee2mqtt was ONE minor version too old to support the “legacy: false” flag. My apologies! Works perfectly now :slight_smile:

Thank you very much for your help! :slight_smile:

1 Like

@xaviml Is there any way to map buttons by yourself? I have normal IKEA bulbs that don’t support color temperature, so I could map actions to arrow keys?

Hi,

I'm, new to home automation. Just installed Home Assistant and now I try to add a Tradfi On/Off switch to my HA. Paired it using Condenz --> no problem (at least I don't see any ;)). In HA I see a device called 'TRADFRI on/off switch' and using the developer tools I see HA reads the deconz-events.

But after adding the controller to the apps.yaml of controllerx my light is not responding. I want to control a FLOALT Panel (Ikea) using the on/off switch through HA.

Of course I restarted all components several time.

Any idea/suggestions what might go wrong?

apps.yaml:
---
hello_world:
  module: hello
  class: HelloWorld

zolder_panel_controller:
  module: controllerx
  class: E1743Controller
  controller: sensor.tradfri_on_off_switch
  integration: deconz
  light: light.panel_werkkamer

Events from deconz_event in developer tools:

Event 1 fired 5:11 PM:
{
    "event_type": "deconz_event",
    "data": {
        "id": "tradfri_on_off_switch",
        "unique_id": "84:2e:14:ff:fe:b0:85:d1",
        "event": 2002
    },
    "origin": "LOCAL",
    "time_fired": "2020-11-04T16:11:38.895091+00:00",
    "context": {
        "id": "a8ccee7bc5cbb218586a95ea55f036b9",
        "parent_id": null,
        "user_id": null
    }
}
Event 0 fired 5:11 PM:
{
    "event_type": "deconz_event",
    "data": {
        "id": "tradfri_on_off_switch",
        "unique_id": "84:2e:14:ff:fe:b0:85:d1",
        "event": 1002
    },
    "origin": "LOCAL",
    "time_fired": "2020-11-04T16:11:36.023437+00:00",
    "context": {
        "id": "1f44e89b6cde956b6bc30e99372676b1",
        "parent_id": null,
        "user_id": null
    }
}


Versions used:
xcontroller: v4.1.0
appdaemon 4:  0.3.1
Home Assistant Core 0.117.3 (running on raspi4 with conbee II)
deconz integration: 6.4.1

Thanks for the help,
Guido