ControllerX. Bring full functionality to light and media player controllers

I couldn’t figure out how to setup a toggle and a hold action on one single button at the same time.
I’m using a PTM215X device which has four different buttons and I want button 1 to turn on the light and also increase the brightness.
I haven’t found a way to do so in the documentation. Is that possible?

Sorry if this is not the right way to get support for ControllerX.
I’m experiencing an issue, and I wonder if it’s a configuration issue or a code issue.

My config is

nachtlampje:
  module: controllerx
  class: E1743Controller
  controller: sensor.nachtlampje_schakelaar_action
  integration: z2m
  light: light.nachtlampje

But I get this error in the logs

Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/appdaemon/app_management.py", line 163, in initialize_app await init() 
File "/config/appdaemon/apps/controllerx/cx_core/controller.py", line 104, in initialize await self.init() 
File "/config/appdaemon/apps/controllerx/cx_core/type/light_controller.py", line 148, in init await super().init() 
File "/config/appdaemon/apps/controllerx/cx_core/type_controller.py", line 66, in init await super().init() 
File "/config/appdaemon/apps/controllerx/cx_core/release_hold_controller.py", line 27, in init await super().init() 
File "/config/appdaemon/apps/controllerx/cx_core/controller.py", line 108, in init self.integration = self.get_integration(self.args["integration"]) 
File "/config/appdaemon/apps/controllerx/cx_core/controller.py", line 225, in get_integration integrations = integration_module.get_integrations(self, kwargs) 
File "/config/appdaemon/apps/controllerx/cx_core/integration/__init__.py", line 36, in get_integrations return integrations 
File "/config/appdaemon/apps/controllerx/cx_core/integration/__init__.py", line 36, in <listcomp> return integrations 
TypeError: Can't instantiate abstract class EventIntegration with abstract method get_default_actions_mapping 

The problem started happening a short time ago when I installed the latest version of ControllerX.

In the code, I don’t really see get_default_actions_mapping marked as abstract, so not sure what happens controllerx/apps/controllerx/cx_core/integration at e03ebdffa517132fd2389794a152630d2fd6f1d9 · xaviml/controllerx · GitHubinit.py#L23

TypeError: Can't instantiate abstract class EventIntegration with abstract method get_default_actions_mapping 

I’ve found that the issue was a bad state of appdaemon. This was resolved, not by restarting home assistant (which I had tried many times), but by restarting the appdaemon integration itself.

Is the Shelly 1 able to be used as a controller? Can’t seem to get it working

Tnx for this integration, finally i can use my dimmers.
I have a question, i have blinds (iblinds z-wave motor) and use them with the ikea E1743 controller, this works but not the way i would like to use it.
What i want is when i push the button they go open but while they go open and i click the button again i want it too stop. Is this possible?

Gr Pedro

Great app. I’ve been searching for a decent way to control my Ika E27 bulbs with a Ikea Styrbar controller. Thanks to this app it works flawless.

 switch_diningroom:
  module: controllerx
  class: E2002Z2MLightController
  integration: z2m
  controller: sensor.switch_diningroom_action
  light: light.diningroom

When I turn on the lights (there are 2 in the light.diningroom group) the brightness and color is that of the previous state. I would like that to be a fixed starting point when I turn the light on. I’m sure it can be done with merge_mapping but haven’t been able to figure that out.
The other question is: where can if define the rate of dimming cq color change? As in
"brightness_move": -40, // Starts moving brightness down at 40 units per second

Figured out the first question:

  module: controllerx
  class: E2002Z2MLightController
  integration: z2m
  controller: sensor.switch_diningroom_action
  light: light.diningroom
  merge_mapping:
    "on":
      action: "on"
      attributes:
        brightness: 91
        color_temp: 454

haven’t searched long enough (-;

I would like to request to add funtionality for the : Prolight 5412748727388 https://www.zigbee2mqtt.io/devices/5412748727388.html#prolight-5412748727388
Is it possible to add this device ?

Hi @sandoz.cloud ,

Sorry for the late reply. ControllerX works on top of AppDaemon, and its configuration is ust an AppDaemon app, so you can just add the config on the same apps.yaml as a new entry like done for nspanel-1.

Regards,
Xavi M.

Hi @SmartLiving.Rocks,

This is the list of supported controllers by ControllerX: Supported controllers - ControllerX If it is not there, it is not currently supported.

However, adding support for a controller is just defining its default mapping, you can create a “New device” request on GitHub. You can take a look at this issue as an example.

Regards,
Xavi M.

1 Like

Hi @Sleepwalker0908,

You can find the mapping for this device here. Note that only deCONZ supports hold actions for this device, so for example, this config toggles a light when pressed, and changes its brightness when held:

example_app:
  module: controllerx
  class: PTM215XLightController
  integration: deconz
  controller: my_controller
  light: light.my_entity_id
  mapping:
    3002: toggle
    3001: hold_brightness_toggle
    3003: release

Regards,
Xavi M.

Hi @kheyse ,

Sorry for the late reply. I am glad you figured it out at the end. I just want to stand out that it is necessary to restart AppDaemon addon everytime you update ControllerX. It is stated in the release notes:

Note: Remember to restart the AppDaemon addon/server after updating to a new version.

Regards,
Xavi M.

Thank you @Canaletto , I created following ticket to add support to such device. I will be working on it when I get some time.

Regards,
Xavi M.

1 Like

Hi @ChrisHA,

Shelly 1 is not added as a supported device in ControllerX, but if the integration you use is supported by ControllerX, you should have no problems on using it. Which integration are you using for this device? Is it sending HA events or changing entity state?

Regards,
Xavi M.

Hi @Peke ,

Yes, this is possible, and in fact, this is what it does by default. You can check the default mapping for E1743 here, and the CoverController predefined actions here.

Note that this will not work out of the box if the cover does not report opening or closing state when is moving since ControllerX will not now if it is moving or not. However, the CoverController has an attribute called cover_duration which is the duration (in seconds) of the cover to open and/or close in seconds, so toggle_open and toggle_close can stop the cover if the cover is still moving. This is recommended to be used when the cover does not report opening and closing states, otherwise, it is not necessary. An example configuration would be:

example_app:
  module: controllerx
  class: E1743CoverController
  integration: z2m
  controller: sensor.my_controller_action
  cover: cover.my_entity_id
  cover_duration: 10

You can read more about the CoverController attributes here.

Regards,
Xavi M.

1 Like

Hi @Toepmeister,

This can be changed with automatic_steps/manual_steps (for LightController), and hold_steps/click_steps (for Z2MLightController). For example:

module: controllerx
  class: E2002LightController # This is a LightController
  integration: z2m
  controller: sensor.switch_diningroom_action
  light: light.diningroom
  automatic_steps: 5  # Default is 10
  merge_mapping:
    "on":
      action: "on"
      attributes:
        brightness: 91
        color_temp: 454

This is what documentation says about automatic_steps:

Number of steps to go from min to max when smoothing. If the value is 2 with one click you will set the light to 50% and with another one to 100%.

This is what documentation says about hold_steps:

Number of steps that are passed to Zigbee2MQTT for hold actions.

In addition, you can also use delay (default is 300 in most of the controllers):

Delay in milliseconds that takes between sending the volume up/down instructions. Note that the maximum value is 1000 and if leaving to 0, you might get uncommon behavior.

Regards,
Xavi M.

Hi @TheCosmicGate ,

Is this a light that exposes an action? If it can be used as a controller, we could add it to ControllerX with Zigbee2MQTT support. You can create a “New Device” issue on GitHub, and fill in the form. You can use this ticket as an example.

Regards,
Xavi M.

1 Like

Hi! Thanks for a great app. I’m new to HA and home automation but I’m learning slowly.
ContrlollerX works great for controlling my lights but it doesn’t seem to be able to dim lights in a group (I’ve put all the lights in a room in a group) but it works if I add all the lights separately.
Is dimming for groups supposed to work or am I doing something wrong?

Cheers.

Office_lights:
  module: controllerx
  class: E2002LightController
  controller: sensor.ikea_styrbar_ha1_action
  integration: z2m
  light: light.all_lights
  min_brightness: 10

I have here four WLAN LED as a group and I can control them (brightnes and colour) with ControllerX and an IKEA 1810:

  julian_controller_licht:
    module: controllerx
    class: E1810Controller
    controller: fernbedienung_julian
    integration: deconz
    light:
      name: light.julian_deckenlicht

This is my configuration inside light_groups.yaml:

- platform: group
  name: "Julian Deckenlicht"
  entities:
    - light.julian_decke_1
    - light.julian_decke_2
    - light.julian_decke_3
    - light.julian_decke_4

Hi @Habiben ,

I recommend you checking the following link where it explains how groups work with ControllerX:

https://xaviml.github.io/controllerx/advanced/entity-groups/

Could you give more details of your group and which light you are using?

Regards,
Xavi M.