zigbee2mqtt icon indicating copy to clipboard operation
zigbee2mqtt copied to clipboard

[New device support]: Shelly BLU Remote Control ZB

Open pboese opened this issue 4 months ago • 42 comments

Link

https://www.shelly.com/products/shelly-blu-remote-control-zb-white

Database entry

{"id":45,"type":"EndDevice","ieeeAddr":"0x694f69634762684a","nwkAddr":26002,"manufId":4098,"manufName":"Shelly","powerSource":"Battery","modelId":"BLU Remote Control ZB","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":1,"inClusterList":[0,1,3,32],"outClusterList":[6,8],"clusters":{"genBasic":{"attributes":{"modelId":"BLU Remote Control ZB","manufacturerName":"Shelly","powerSource":3,"zclVersion":8,"appVersion":0,"stackVersion":0,"hwVersion":0,"dateCode":"20250505","swBuildId":"0.0.1"}},"genPollCtrl":{"attributes":{"checkinInterval":14400}},"genPowerCfg":{"attributes":{"batteryPercentageRemaining":200}}},"binds":[{"cluster":32,"type":"endpoint","deviceIeeeAddress":"0x00124b002f89a2ba","endpointID":1},{"cluster":1,"type":"endpoint","deviceIeeeAddress":"0x00124b002f89a2ba","endpointID":1},{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00124b002f89a2ba","endpointID":1}],"configuredReportings":[{"cluster":1,"attrId":33,"minRepIntval":3600,"maxRepIntval":65000,"repChange":10}],"meta":{}}},"appVersion":0,"stackVersion":0,"hwVersion":0,"dateCode":"20250505","swBuildId":"0.0.1","zclVersion":8,"interviewCompleted":true,"interviewState":"SUCCESSFUL","meta":{},"lastSeen":1760534362203,"checkinInterval":3600}

Zigbee2MQTT version

2.6.2

Comments

Would be lovely if this cool new device by Shelly could be supported

External definition

import * as m from 'zigbee-herdsman-converters/lib/modernExtend';

export default {
    zigbeeModel: ['BLU Remote Control ZB'],
    model: 'BLU Remote Control ZB',
    vendor: 'Shelly',
    description: 'Automatically generated definition',
    extend: [m.battery(), m.commandsOnOff(), m.commandsLevelCtrl()],
    meta: {},
};

What does/doesn't work with the external definition?

I can't really say since I'm new to this and it's a very recent device

pboese avatar Oct 15 '25 13:10 pboese

Device is out in stores now. Would be great if it can be supported.

baloo2 avatar Oct 23 '25 12:10 baloo2

🙏 Thank you for creating this issue and sharing your external converter!

In case all features work, please submit a pull request on this repository so the device can be supported out-of-the-box with the next release. For instructions on how to create a pull request see the docs.

If NOT all features work, please follow the How To Support new devices

If you need help with the process, feel free to ask here and we'll be happy to assist.

github-actions[bot] avatar Oct 23 '25 17:10 github-actions[bot]

Just got mine, I will try to figure out the converter over the weekend, if anyone has more experience, here's what the device reports:

Left button (Channel 1 selected)
[10/24/2025, 3:30:16 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote', payload '{"action":"on","action_group":1,"battery":100,"linkquality":131}'
[10/24/2025, 3:30:16 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote/action', payload 'on'

Right Button (Channel 1 selected)
[10/24/2025, 3:30:17 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote', payload '{"action":"off","action_group":1,"battery":100,"linkquality":21}'
[10/24/2025, 3:30:17 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote/action', payload 'off'

Scrollwheel up: (Channel 2 selected)
[10/24/2025, 3:30:21 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote', payload '{"action":"brightness_step_up","action_group":2,"action_step_size":6,"action_transition_time":0.03,"battery":100,"linkquality":54}'
[10/24/2025, 3:30:21 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote/action', payload 'brightness_step_up'

Scrollwheel down: (Channel 2 selected)
[10/24/2025, 3:30:24 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote', payload '{"action":"brightness_step_down","action_group":2,"action_step_size":9,"action_transition_time":0.03,"battery":100,"linkquality":131}'
[10/24/2025, 3:30:24 PM] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/shelly_remote/action', payload 'brightness_step_down'```

Plawasan avatar Oct 24 '25 14:10 Plawasan

Same here, got mine connected to Home Assistant. If I can help in any way please ask!

baskraai avatar Oct 24 '25 15:10 baskraai

Not to derail the discussion but I managed to integrate it fully using BTHome and the many ESP/Shelly BT Proxies around the house, works great. For me that solves the problem, I'll still try to figure the converter for those who rely on zigbee

Plawasan avatar Oct 24 '25 16:10 Plawasan

Hi,

can't wait of the native ZB support for this. For me BT is so unreliable, so I hope ZB will solve my issues. I'm trying to use some advanced functions like change light intensity by the wheel and cycle color by button2, but this is quite unreliable. Anyone tried the same with it maybe?

Played with the automation a bit and this is the current one. I'm not sure if this is becuase of lagginess of BT or something not totally right with the remote

alias: Halo Remote Control Bedroom Multi-Light Advanced Automation HSV
trigger:
  - platform: state
    entity_id: event.haloremote_button_1
  - platform: state
    entity_id: event.haloremote_button_2
  - platform: state
    entity_id: event.haloremote_dimmer

condition:
  - condition: state
    entity_id: sensor.haloremote_channel
    state: "0"

action:
  - choose:
      # Toggle lights & plug with Button 1
      - conditions:
          - condition: template
            value_template: >
              {{ trigger.entity_id == 'event.haloremote_button_1'
                 and state_attr('event.haloremote_button_1', 'event_type') == 'press' }}
        sequence:
          - choose:
              - conditions:
                  - condition: state
                    entity_id: input_boolean.halo_lights_helper
                    state: "off"
                sequence:
                  - service: input_boolean.turn_on
                    target:
                      entity_id: input_boolean.halo_lights_helper
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.elefant
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                  - service: switch.turn_on
                    target:
                      entity_id: switch.solampa_plug
              - conditions:
                  - condition: state
                    entity_id: input_boolean.halo_lights_helper
                    state: "on"
                sequence:
                  - service: input_boolean.turn_off
                    target:
                      entity_id: input_boolean.halo_lights_helper
                  - service: light.turn_off
                    target:
                      entity_id:
                        - light.elefant
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                  - service: switch.turn_off
                    target:
                      entity_id: switch.solampa_plug

      # Color cycling with Button 2 using HSV (no variables block)
      - conditions:
          - condition: template
            value_template: >
              {{ trigger.entity_id == 'event.haloremote_button_2'
                 and state_attr('event.haloremote_button_2', 'event_type') == 'press' }}
        sequence:
          - service: input_number.set_value
            target:
              entity_id: input_number.color_hue
            data:
              value: >
                {% set hue = states('input_number.color_hue') | int(0) %}
                {% set next = (hue + 10) if (hue + 10) < 360 else 0 %}
                {{ next }}
          - service: light.turn_on
            target:
              entity_id:
                - light.elefant
                - light.bedroomspot1
                - light.bedroomspot2
                - light.bedroomspot3
            data:
              hsv_color: ["{{ states('input_number.color_hue') | int(0) }}", 100, 100]

      # Adjust brightness with Wheel (right=increase, left=decrease)
      - conditions:
          - condition: template
            value_template: >
              {{ trigger.entity_id == 'event.haloremote_dimmer'
                 and (state_attr('event.haloremote_dimmer', 'event_type') == 'rotate_left'
                      or state_attr('event.haloremote_dimmer', 'event_type') == 'rotate_right') }}
        sequence:
          - service: light.turn_on
            target:
              entity_id:
                - light.elefant
                - light.bedroomspot1
                - light.bedroomspot2
                - light.bedroomspot3
            data:
              brightness: >
                {% set current = state_attr('light.bedroomspot1', 'brightness') | default(128) %}
                {% set steps = state_attr('event.haloremote_dimmer', 'steps') | int %}
                {% set event_type = state_attr('event.haloremote_dimmer', 'event_type') %}
                {% set change = steps * 25 if event_type == 'rotate_right' else -1 * steps * 25 %}
                {% set result = current + change %}
                {% if result > 255 %} 255
                {% elif result < 1 %} 1
                {% else %} {{ result }}
                {% endif %}

Vladx71 avatar Nov 05 '25 08:11 Vladx71

Have same remote for a week but BT is unreliable for me as well. It misses clicks and there is just basic functionality available through BT Home. I hope ZB support will be available here soon.

baloo2 avatar Nov 05 '25 08:11 baloo2

Here is an automation works pretty well, however I think if we can move these whole thing to ZB / MQTT it would be much smoother

alias: Halo Remote Control Bedroom Multi-Light Complete Final
trigger:
  - platform: state
    entity_id: event.haloremote_button_1
  - platform: state
    entity_id: event.haloremote_button_2
  - platform: state
    entity_id: event.haloremote_dimmer

condition:
  - condition: state
    entity_id: sensor.haloremote_channel
    state: "0"

action:
  - choose:
      # Button 1: Toggle lights and plug
      - conditions:
          - condition: template
            value_template: "{{ trigger.entity_id == 'event.haloremote_button_1' and state_attr('event.haloremote_button_1', 'event_type') == 'press' }}"
        sequence:
          - choose:
              - conditions:
                  - condition: state
                    entity_id: input_boolean.halo_lights_helper
                    state: "off"
                sequence:
                  - service: input_boolean.turn_on
                    target:
                      entity_id: input_boolean.halo_lights_helper
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.elefant
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                  - service: switch.turn_on
                    target:
                      entity_id: switch.solampa_plug
              - conditions:
                  - condition: state
                    entity_id: input_boolean.halo_lights_helper
                    state: "on"
                sequence:
                  - service: input_boolean.turn_off
                    target:
                      entity_id: input_boolean.halo_lights_helper
                  - service: light.turn_off
                    target:
                      entity_id:
                        - light.elefant
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                  - service: switch.turn_off
                    target:
                      entity_id: switch.solampa_plug

      # Button 2: Cycle through 10 colors (blue to red spectrum)
      - conditions:
          - condition: template
            value_template: "{{ trigger.entity_id == 'event.haloremote_button_2' and state_attr('event.haloremote_button_2', 'event_type') == 'press' }}"
        sequence:
          - choose:
              # Color 0: Deep Blue
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 0 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [0, 0, 255, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.138, 0.08]
              # Color 1: Cyan (Blue-Green)
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 1 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [0, 255, 255, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.169, 0.331]
              # Color 2: Green
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 2 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [0, 255, 0, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.2151, 0.711]
              # Color 3: Yellow-Green
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 3 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [128, 255, 0, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.325, 0.538]
              # Color 4: Yellow
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 4 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [255, 255, 0, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.444, 0.517]
              # Color 5: Orange
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 5 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [255, 165, 0, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.549, 0.387]
              # Color 6: Red
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 6 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [255, 0, 0, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.704, 0.296]
              # Color 7: Purple (Red-Blue)
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 7 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [255, 0, 255, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.418, 0.156]
              # Color 8: Magenta
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 8 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [200, 0, 200, 0]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.366, 0.133]
              # Color 9: Warm White
              - conditions:
                  - condition: template
                    value_template: "{{ (now().timestamp() | int) % 10 == 9 }}"
                sequence:
                  - service: light.turn_on
                    target:
                      entity_id: light.elefant
                    data:
                      rgbw_color: [255, 200, 100, 50]
                  - service: light.turn_on
                    target:
                      entity_id:
                        - light.bedroomspot1
                        - light.bedroomspot2
                        - light.bedroomspot3
                    data:
                      xy_color: [0.382, 0.388]

      # Wheel: Aggressive brightness adjustment with fixed steps
      - conditions:
          - condition: template
            value_template: "{{ trigger.entity_id == 'event.haloremote_dimmer' and (state_attr('event.haloremote_dimmer', 'event_type') == 'rotate_left' or state_attr('event.haloremote_dimmer', 'event_type') == 'rotate_right') }}"
        sequence:
          - variables:
              current_brightness: "{{ state_attr('light.bedroomspot1', 'brightness') | default(128) | int }}"
              steps: "{{ state_attr('event.haloremote_dimmer', 'steps') | int }}"
              event_type: "{{ state_attr('event.haloremote_dimmer', 'event_type') }}"
              change: "{{ (-steps * 5) if event_type == 'rotate_right' else (steps * 5) }}"
              new_brightness: "{% set result = current_brightness + change | int %}{% if result > 255 %}255{% elif result < 10 %}10{% else %}{{ result }}{% endif %}"
          - service: light.turn_on
            target:
              entity_id:
                - light.elefant
                - light.bedroomspot1
                - light.bedroomspot2
                - light.bedroomspot3
            data:
              brightness: "{{ new_brightness }}"

Vladx71 avatar Nov 05 '25 11:11 Vladx71

Do all features work with the external definition provided in the OP? If yes then I can add it.

Koenkk avatar Nov 05 '25 19:11 Koenkk

Do all features work with the external definition provided in the OP? If yes then I can add it.

No it's missing a couple values - see https://github.com/Koenkk/zigbee2mqtt/issues/29104#issuecomment-3443343877

Plawasan avatar Nov 05 '25 21:11 Plawasan

What values are missing?

Koenkk avatar Nov 06 '25 18:11 Koenkk

{
  "action": "brightness_step_up",
  "action_group": 4,
  "action_step_size": 15,
  "action_transition_time": 0.03,
  "battery": 100,
  "linkquality": 43
}

action already shows up in Z2M but not in HA (battery and linkquality do) action_group and action_step_size are missing and useful I don't see any meaningful info stored in action_transition_time, it's always the same

action_step_size and action_transition_time are only included when action is brightness_step_(up|down), for (on|off) they are omitted:

{
  "action": "off",
  "action_group": 4,
  "battery": 100,
  "linkquality": 51
}

Plawasan avatar Nov 06 '25 19:11 Plawasan

Some more info on the advanced functions here - https://shelly-api-docs.shelly.cloud/docs-ble/Devices/BLU_ZB/blu_remote although it seems to be more BTHome than Zigbee

Plawasan avatar Nov 10 '25 09:11 Plawasan

For actions no sensor is discovered, this is expected, see https://www.zigbee2mqtt.io/guide/usage/integrations/home_assistant.html#via-mqtt-device-trigger-recommended

Koenkk avatar Nov 10 '25 17:11 Koenkk

For actions no sensor is discovered, this is expected, see https://www.zigbee2mqtt.io/guide/usage/integrations/home_assistant.html#via-mqtt-device-trigger-recommended

Well I'll have to set aside my intense hate of device triggers and accept it as the only option then...

Image

In that case action_group and action_step_size is all that's needed to use the device to its full extent

Plawasan avatar Nov 10 '25 20:11 Plawasan

As an alternative, you can also directly respond to the published MQTT messages.

Since the device works now: Could you make a PR by clicking here?

Koenkk avatar Nov 11 '25 20:11 Koenkk

The device also seems to support the identify cluster via the built-in buzzer.

I am using the following definition:
import * as m from 'zigbee-herdsman-converters/lib/modernExtend';

export default {
    zigbeeModel: ['BLU Remote Control ZB'],
    model: 'SBRC-005B',
    vendor: 'Shelly',
    description: 'BLU Remote Control ZB',
    extend: [m.battery(), m.commandsOnOff({commands: ["on", "off"]}), m.commandsLevelCtrl({commands: ["brightness_step_up", "brightness_step_down"]}), m.identify()],
    meta: {},
};

This also supports:

  • The central volume wheel (albeit with a small delay after release)
  • The left and right ring buttons (on and off respectively, and perhaps counterintuitively)

Unfortunately, comparing with the BLE documentation, I could not find any way to:

  • Identify long or simultaneous presses for the ring buttons
  • Identify button presses for the bottom left/right buttons (only the action_group attribute changes)
  • Receive accelerometer data
  • Set whether buzzer feedback is enabled.

I will create a pull request soon if no one beats me to it.

kongr45gpen avatar Nov 14 '25 01:11 kongr45gpen

Just got my remote, didn't check if it was supported, just kind of assumed it. Is there any progress on this issue?

nosamorufalo avatar Nov 26 '25 20:11 nosamorufalo

OK so I decided to follow the tested and proven principle of "instead of asking a question, post the wrong answer, the internet will correct you". Here's an external converter generated using Gemini (I know, I know...) and then fine-tuned a bit by hand. It works (as far as I can tell) but I'm sure is somehow horribly wrong. I will therefore not submit it formally until somebody who actually has an idea what they're doing validates it:

const exposes = require("zigbee-herdsman-converters/lib/exposes");
const fz = require("zigbee-herdsman-converters/converters/fromZigbee");
const e = exposes.presets;
const ea = exposes.access;

const device = {
    zigbeeModel: ["BLU Remote Control ZB"],
    model: "BLU Remote Control ZB",
    vendor: "Shelly",
    description: "Shelly Zigbee Remote (Adds action_group, action_step_size, and action_transition_time)",

    // The exposes array defines which properties are made available to MQTT and the Z2M frontend.
    exposes: [
         // This is the main action trigger. Add other actions supported by the remote here.
        e.action(["on", "off", "brightness_step_up", "brightness_step_down"]),

        // The three missing properties from the request, exposed as state/event properties (ea.STATE = 4).
        exposes
            .numeric("action_group", ea.STATE)
            .withDescription("Group ID associated with the action command."),
        exposes.numeric("action_step_size", ea.STATE).withDescription("Step size value used for brightness step actions."),
        exposes.numeric("action_transition_time", ea.STATE).withDescription("Transition time in seconds for the action."),
    ],

    // We rely on the standard Z2M converters for handling the Level Control and Battery clusters.
    fromZigbee: [fz.battery, fz.command_off, fz.command_on, fz.command_step, fz.linkquality_from_basic],
    toZigbee: [], // This is a remote, so it typically doesn't listen for Z2M commands (read-only).
};

module.exports = device;
Image Image

Plawasan avatar Dec 09 '25 19:12 Plawasan

Hey, I got this device and wanted to experiment a little. My code skills are poor, but I succeeded in merging Plawasan and kongr45gpen scripts. Please review this code before using it for anything: This can be saved as my-first-converter.mjs:

import * as exposes from 'zigbee-herdsman-converters/lib/exposes';
import * as fz       from 'zigbee-herdsman-converters/converters/fromZigbee';
import * as m from 'zigbee-herdsman-converters/lib/modernExtend';

const e  = exposes.presets;
const ea = exposes.access;

const device = {
  zigbeeModel: ['BLU Remote Control ZB'],
  model:       'BLU Remote Control ZB',
  vendor:      'Shelly',
  description:
    'Shelly Zigbee Remote (Adds action_group, action_step_size, and action_transition_time)',

  exposes: [
    e.action(['on', 'off', 'brightness_step_up', 'brightness_step_down']),
    e.numeric('action_group', ea.STATE)
      .withDescription('Group ID associated with the action command.'),
    e.numeric('action_step_size', ea.STATE)
      .withDescription('Step size value used for brightness step actions.'),
    e.numeric('action_transition_time', ea.STATE)
      .withDescription('Transition time in seconds for the action.'),
  ],

extend: [
    m.battery(),
    m.commandsOnOff({commands: ['on', 'off']}),
    m.commandsLevelCtrl({commands: ['brightness_step_up', 'brightness_step_down']}),
    m.identify(),
  ],

};

export default device;

It adds battery and Identify to both Z2M and HA. And I can confirm the Identify button is working. It should be possible to make automatons from the sensors in HA now.

One thing i noticed however - I have created groups in Z2M with light bulbs in my different rooms, and they are assigned group id's from 1-9. This remote will start controlling the light in group id 1-4 using the 4 zones on the remote. It's an easy way to get started, but it could be a problem for some, so it would be nice to have an option to disable that feature.

Grohnheit avatar Dec 23 '25 13:12 Grohnheit

has this device made it into the latest verion of z2m? I don't like updating to test :) thanks!

marc-gist avatar Dec 24 '25 19:12 marc-gist

One thing i noticed however - I have created groups in Z2M with light bulbs in my different rooms, and they are assigned group id's from 1-9. This remote will start controlling the light in group id 1-4 using the 4 zones on the remote. It's an easy way to get started, but it could be a problem for some, so it would be nice to have an option to disable that feature.

@Koenkk Do you know if we can change that behavior? I had to delete the groups with ID 1-4 and recreate them with new IDs in order to control via HA.

Grohnheit avatar Dec 29 '25 09:12 Grohnheit

@Grohnheit

Could you check if the issue is fixed with the following external converter:

  • save this as file next to configuration.yaml in the external_converters directory (create if it doesn't exist yet) as ext_converter.js (so external_converters/ext_converter.js)
  • start z2m,
  • in the frontend, check if the description of this device now ends with CUSTOM (this indicates the external converter has been loaded correctly)
  • check if issue is fixed

Koenkk avatar Dec 30 '25 13:12 Koenkk

@Koenkk

I used your external converter instead of my own, and it loaded fine, but it didn't fix the problem unfortunately. Before I recreated a group with id 1, this error was written in the log, maybe it can be useful:

[2025-12-30 15:35:50] error: 	z2m: Failed to configure 'Shelly Remote Control', attempt 3 (Error: Unbind 0x694f69634762684a/1 genOnOff invalid target '1' (no group with this ID exists).
    at Endpoint.unbind (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman/src/controller/model/endpoint.ts:723:23)
    at configure (file:///config/zigbee2mqtt/external_converters/.tmp-ed42d4f2-my-first-converter-a4f58458-2168-4786-a568-6a73b373c6a3.mjs:19:22)
    at Object.configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/index.ts:365:27)
    at Configure.configure (/app/lib/extension/configure.ts:123:37)
    at /app/lib/extension/configure.ts:79:62
    at EventEmitter.wrappedCallback (/app/lib/eventBus.ts:252:23)
    at EventEmitter.emit (node:events:530:35)
    at EventBus.emitLastSeenChanged (/app/lib/eventBus.ts:90:22)
    at Controller.<anonymous> (/app/lib/zigbee.ts:82:27)
    at Controller.emit (node:events:518:28))

After I recreated a group with id 1, the Shelly controller controls that group, both on/off and brightness up/down are still working.

Can I provide you with some data to help fix the issue? In the log, this is written:

[30.12.2025, 15.51.09] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Shelly Remote Control', payload '{"action":"on","action_group":1,"battery":100,"identify":null,"linkquality":134}'

[30.12.2025, 15.51.09] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Shelly Remote Control/action', payload 'on'

Nothing regarding the light bulbs are logged.

Grohnheit avatar Dec 30 '25 14:12 Grohnheit

After I recreated a group with id 1,

After recreating the group, could you configure it again?

If not: Could you provide the debug log when configuring the device via the frontend -> yellow refresh icon? Make sure to wake up the device right before doing so by clicking a button on it.

See this on how to enable debug logging.

Koenkk avatar Dec 30 '25 20:12 Koenkk

After I recreated a group with id 1,

After recreating the group, could you configure it again?

If not: Could you provide the debug log when configuring the device via the frontend -> yellow refresh icon? Make sure to wake up the device right before doing so by clicking a button on it.

See this on how to enable debug logging.

I get this error when I try to reconfigure with group id 1 created, and group id 2-4 not created.

[1.1.2026, 10.33.14] z2m: Configuring 'Shelly Remote Control'

[1.1.2026, 10.33.14] z2m: Failed to configure 'Shelly Remote Control', attempt 5 (Error: Unbind 0x694f69634762684a/1 genOnOff invalid target '2' (no group with this ID exists).
    at Endpoint.unbind (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman/src/controller/model/endpoint.ts:723:23)
    at configure (file:///config/zigbee2mqtt/external_converters/.tmp-ed42d4f2-my-first-converter-a4f58458-2168-4786-a568-6a73b373c6a3.mjs:19:22)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at Object.configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/index.ts:365:21)
    at Configure.configure (/app/lib/extension/configure.ts:123:13)
    at Configure.onMQTTMessage (/app/lib/extension/configure.ts:46:25)
    at EventEmitter.wrappedCallback (/app/lib/eventBus.ts:252:17))

[1.1.2026, 10.33.14] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/bridge/response/device/configure', payload '{"data":{},"error":"Failed to configure (Unbind 0x694f69634762684a/1 genOnOff invalid target '2' (no group with this ID exists).)","status":"error","transaction":"gzvy3-1"}'

Then I created empty groups with id 2-4 and tried again, and got this error when reconfiguring:

[1.1.2026, 10.38.18] z2m: Failed to configure 'Shelly Remote Control', attempt 7 (Error: Bind 0x694f69634762684a/1 genLevelCtrl from '0x00124b002a2e35c8/1' failed (Status 'TABLE_FULL')
    at Endpoint.bind (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman/src/controller/model/endpoint.ts:698:23)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/lib/modernExtend.ts:265:17)
    at Object.configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/index.ts:365:21)
    at Configure.configure (/app/lib/extension/configure.ts:123:13)
    at Configure.onMQTTMessage (/app/lib/extension/configure.ts:46:25)
    at EventEmitter.wrappedCallback (/app/lib/eventBus.ts:252:17))

Grohnheit avatar Jan 01 '26 09:01 Grohnheit

I get this error when I try to reconfigure with group id 1 created, and group id 2-4 not created.

Does it still control group 1 after this?

Koenkk avatar Jan 01 '26 14:01 Koenkk

I get this error when I try to reconfigure with group id 1 created, and group id 2-4 not created.

Does it still control group 1 after this?

Yes.

Grohnheit avatar Jan 01 '26 14:01 Grohnheit

Could you provide the debug log when configuring the device via the frontend -> yellow refresh icon? Make sure to wake up the device right before doing so by clicking a button on it.

See this on how to enable debug logging.

Koenkk avatar Jan 03 '26 20:01 Koenkk

Could you provide the debug log when configuring the device via the frontend -> yellow refresh icon? Make sure to wake up the device right before doing so by clicking a button on it.

See this on how to enable debug logging.

I keep getting this error, when I reconfigure with the groups 1-4 created.

[4.1.2026, 09.51.35] z2m: Configuring 'Shelly Remote Control'

[4.1.2026, 09.51.38] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Shelly Remote Control', payload '{"battery":100,"identify":null,"linkquality":120}'

[4.1.2026, 09.51.40] z2m: Failed to configure 'Shelly Remote Control', attempt 5 (Error: Bind 0x694f69634762684a/1 genLevelCtrl from '0x00124b002a2e35c8/1' failed (Status 'TABLE_FULL')
    at Endpoint.bind (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman/src/controller/model/endpoint.ts:722:23)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/lib/modernExtend.ts:265:17)
    at Object.configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/index.ts:365:21)
    at Configure.configure (/app/lib/extension/configure.ts:123:13)
    at Configure.onMQTTMessage (/app/lib/extension/configure.ts:46:25)
    at EventEmitter.wrappedCallback (/app/lib/eventBus.ts:252:17))

[4.1.2026, 09.51.40] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/bridge/response/device/configure', payload '{"data":{},"error":"Failed to configure (Bind 0x694f69634762684a/1 genLevelCtrl from '0x00124b002a2e35c8/1' failed (Status 'TABLE_FULL'))","status":"error","transaction":"x295s-3"}'

From the "other" log:

[2026-01-04 09:51:33] info: 	z2m: Configuring 'Shelly Remote Control'
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genOnOff from '1' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genLevelCtrl from '1' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genOnOff from '2' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genLevelCtrl from '2' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genOnOff from '3' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genLevelCtrl from '3' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genOnOff from '4' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Unbind 0x694f69634762684a/1 genLevelCtrl from '4' no bind present, skipping.
[2026-01-04 09:51:33] debug: 	zhc:setupattribute: Configure reporting: true, read: true for 0x694f69634762684a/1 genPowerCfg [{"min":"1_HOUR","max":"MAX","change":10,"attribute":"batteryPercentageRemaining"}]
[2026-01-04 09:51:33] debug: 	zh:controller:endpoint: Bind 0x694f69634762684a/1 genPowerCfg from '0x00124b002a2e35c8/1'
[2026-01-04 09:51:33] debug: 	zh:zstack:unpi:writer: --> frame [254,23,37,33,137,99,74,104,98,71,99,105,79,105,1,1,0,3,200,53,46,42,0,75,18,0,1,112]
[2026-01-04 09:51:33] debug: 	zh:zstack:unpi:parser: <-- [254,1,101,33,0,69]
[2026-01-04 09:51:33] debug: 	zh:zstack:unpi:parser: --- parseNext [254,1,101,33,0,69]
[2026-01-04 09:51:33] debug: 	zh:zstack:unpi:parser: --> parsed 1 - 3 - 5 - 33 - [0] - 69
[2026-01-04 09:51:33] debug: 	zh:zstack:znp: <-- SRSP: ZDO - bindReq
[2026-01-04 09:51:33] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: <-- [254,3,69,161,137,99,0,13]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,69,161,137,99,0,13]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 5 - 161 - [137,99,0] - 13
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - bindRsp
[2026-01-04 09:51:36] debug: 	zh:controller: Received ZDO response: clusterId=BIND_RESPONSE, status=SUCCESS, payload=undefined
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:36] debug: 	zh:controller:endpoint: ZCL command 0x694f69634762684a/1 genPowerCfg.configReport([{"minimumReportInterval":3600,"maximumReportInterval":65000,"reportableChange":10,"attribute":"batteryPercentageRemaining"}], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false})
[2026-01-04 09:51:36] debug: 	zh:controller:endpoint: Request Queue (0x694f69634762684a/1): send request
[2026-01-04 09:51:36] debug: 	zh:zstack: sendZclFrameToEndpointInternal 0x694f69634762684a:25481/1 (0,0,1)
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: --> SREQ: AF - dataRequest - {"dstaddr":25481,"destendpoint":1,"srcendpoint":1,"clusterid":1,"transid":136,"options":0,"radius":30,"len":12,"data":{"type":"Buffer","data":[16,26,6,0,33,0,32,16,14,232,253,10]}}
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:writer: --> frame [254,22,36,1,137,99,1,1,1,0,136,0,30,12,16,26,6,0,33,0,32,16,14,232,253,10,78]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: <-- [254,3,69,161,137,99,0,13,254,3,69,161,137,99,0,13]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,69,161,137,99,0,13,254,3,69,161,137,99,0,13]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 5 - 161 - [137,99,0] - 13
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - bindRsp
[2026-01-04 09:51:36] debug: 	zh:controller: Received ZDO response: clusterId=BIND_RESPONSE, status=SUCCESS, payload=undefined
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,69,161,137,99,0,13]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 5 - 161 - [137,99,0] - 13
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: ZDO - bindRsp
[2026-01-04 09:51:36] debug: 	zh:controller: Received ZDO response: clusterId=BIND_RESPONSE, status=SUCCESS, payload=undefined
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: <-- [254,1,100,1,0,100,254,3,68,128,0,1,136,78]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,1,100,1,0,100,254,3,68,128,0,1,136,78]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 1 - 3 - 4 - 1 - [0] - 100
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- SRSP: AF - dataRequest - {"status":0}
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,68,128,0,1,136,78]
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 4 - 128 - [0,1,136] - 78
[2026-01-04 09:51:36] debug: 	zh:zstack:znp: <-- AREQ: AF - dataConfirm - {"status":0,"endpoint":1,"transid":136}
[2026-01-04 09:51:36] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,24,68,129,0,0,1,0,137,99,1,1,0,120,0,105,205,142,0,0,4,8,26,7,0,21,211,28,175]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,24,68,129,0,0,1,0,137,99,1,1,0,120,0,105,205,142,0,0,4,8,26,7,0,21,211,28,175]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 24 - 2 - 4 - 129 - [0,0,1,0,137,99,1,1,0,120,0,105,205,142,0,0,4,8,26,7,0,21,211,28] - 175
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- AREQ: AF - incomingMsg - {"groupid":0,"clusterid":1,"srcaddr":25481,"srcendpoint":1,"dstendpoint":1,"wasbroadcast":0,"linkquality":120,"securityuse":0,"timestamp":9358697,"transseqnumber":0,"len":4,"data":{"type":"Buffer","data":[8,26,7,0]}}
[2026-01-04 09:51:37] debug: 	zh:controller: Received payload: clusterID=1, address=25481, groupID=0, endpoint=1, destinationEndpoint=1, wasBroadcast=false, linkQuality=120, frame={"header":{"frameControl":{"frameType":0,"manufacturerSpecific":false,"direction":1,"disableDefaultResponse":false,"reservedBits":0},"transactionSequenceNumber":26,"commandIdentifier":7},"payload":[{"status":0}],"command":{"ID":7,"name":"configReportRsp","parameters":[{"name":"status","type":48},{"name":"direction","type":8,"conditions":[{"type":"minimumRemainingBufferBytes","value":3}]},{"name":"attrId","type":9,"conditions":[{"type":"minimumRemainingBufferBytes","value":2}]}]}}
[2026-01-04 09:51:37] debug: 	zh:controller:endpoint: ZCL command 0x694f69634762684a/1 genPowerCfg.defaultRsp({"cmdId":7,"statusCode":0}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":1,"reservedBits":0,"transactionSequenceNumber":26,"writeUndiv":false})
[2026-01-04 09:51:37] debug: 	zh:controller:endpoint: Request Queue (0x694f69634762684a/1): send defaultRsp request immediately (sendPolicy=undefined)
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	zh:zstack: sendZclFrameToEndpointInternal 0x694f69634762684a:25481/1 (0,0,1)
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: --> SREQ: AF - dataRequest - {"dstaddr":25481,"destendpoint":1,"srcendpoint":1,"clusterid":1,"transid":137,"options":0,"radius":30,"len":5,"data":{"type":"Buffer","data":[24,26,11,7,0]}}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:writer: --> frame [254,15,36,1,137,99,1,1,1,0,137,0,30,5,24,26,11,7,0,93]
[2026-01-04 09:51:37] debug: 	zh:controller:database: Writing database to '/config/zigbee2mqtt/database.db'
[2026-01-04 09:51:37] debug: 	zh:controller:endpoint: ZCL command 0x694f69634762684a/1 genPowerCfg.read(["batteryPercentageRemaining"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false})
[2026-01-04 09:51:37] debug: 	zh:controller:endpoint: Request Queue (0x694f69634762684a/1): send request
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,1,100,1,0,100,254,3,68,128,0,1,137,79]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,1,100,1,0,100,254,3,68,128,0,1,137,79]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 1 - 3 - 4 - 1 - [0] - 100
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- SRSP: AF - dataRequest - {"status":0}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,68,128,0,1,137,79]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 4 - 128 - [0,1,137] - 79
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- AREQ: AF - dataConfirm - {"status":0,"endpoint":1,"transid":137}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	zh:zstack: sendZclFrameToEndpointInternal 0x694f69634762684a:25481/1 (0,0,1)
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: --> SREQ: AF - dataRequest - {"dstaddr":25481,"destendpoint":1,"srcendpoint":1,"clusterid":1,"transid":138,"options":0,"radius":30,"len":5,"data":{"type":"Buffer","data":[16,27,0,33,0]}}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:writer: --> frame [254,15,36,1,137,99,1,1,1,0,138,0,30,5,16,27,0,33,0,122]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,1,100,1,0,100,254,3,68,128,0,1,138,76]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,1,100,1,0,100,254,3,68,128,0,1,138,76]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 1 - 3 - 4 - 1 - [0] - 100
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- SRSP: AF - dataRequest - {"status":0}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,68,128,0,1,138,76]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 4 - 128 - [0,1,138] - 76
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- AREQ: AF - dataConfirm - {"status":0,"endpoint":1,"transid":138}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,28,68,129,0,0,1,0,137,99,1,1,0,120,0,58,73,143,0,0,8,8,27,1,33,0,0,32,200,21,211,28,191]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,28,68,129,0,0,1,0,137,99,1,1,0,120,0,58,73,143,0,0,8,8,27,1,33,0,0,32,200,21,211,28,191]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 28 - 2 - 4 - 129 - [0,0,1,0,137,99,1,1,0,120,0,58,73,143,0,0,8,8,27,1,33,0,0,32,200,21,211,28] - 191
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- AREQ: AF - incomingMsg - {"groupid":0,"clusterid":1,"srcaddr":25481,"srcendpoint":1,"dstendpoint":1,"wasbroadcast":0,"linkquality":120,"securityuse":0,"timestamp":9390394,"transseqnumber":0,"len":8,"data":{"type":"Buffer","data":[8,27,1,33,0,0,32,200]}}
[2026-01-04 09:51:37] debug: 	zh:controller: Received payload: clusterID=1, address=25481, groupID=0, endpoint=1, destinationEndpoint=1, wasBroadcast=false, linkQuality=120, frame={"header":{"frameControl":{"frameType":0,"manufacturerSpecific":false,"direction":1,"disableDefaultResponse":false,"reservedBits":0},"transactionSequenceNumber":27,"commandIdentifier":1},"payload":[{"attrId":33,"status":0,"dataType":32,"attrData":200}],"command":{"ID":1,"name":"readRsp","parameters":[{"name":"attrId","type":9},{"name":"status","type":8},{"name":"dataType","type":8,"conditions":[{"type":"fieldEquals","field":"status","value":0}]},{"name":"attrData","type":1000,"conditions":[{"type":"fieldEquals","field":"status","value":0}]}]}}
[2026-01-04 09:51:37] debug: 	zh:controller:endpoint: ZCL command 0x694f69634762684a/1 genPowerCfg.defaultRsp({"cmdId":1,"statusCode":0}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":1,"reservedBits":0,"transactionSequenceNumber":27,"writeUndiv":false})
[2026-01-04 09:51:37] debug: 	zh:controller:endpoint: Request Queue (0x694f69634762684a/1): send defaultRsp request immediately (sendPolicy=undefined)
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	z2m: Received Zigbee message from 'Shelly Remote Control', type 'readResponse', cluster 'genPowerCfg', data '{"batteryPercentageRemaining":200}' from endpoint 1 with groupID 0
[2026-01-04 09:51:37] info: 	z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Shelly Remote Control', payload '{"battery":100,"identify":null,"linkquality":120}'
[2026-01-04 09:51:37] debug: 	zh:zstack: sendZclFrameToEndpointInternal 0x694f69634762684a:25481/1 (0,0,1)
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: --> SREQ: AF - dataRequest - {"dstaddr":25481,"destendpoint":1,"srcendpoint":1,"clusterid":1,"transid":139,"options":0,"radius":30,"len":5,"data":{"type":"Buffer","data":[24,27,11,1,0]}}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:writer: --> frame [254,15,36,1,137,99,1,1,1,0,139,0,30,5,24,27,11,1,0,88]
[2026-01-04 09:51:37] debug: 	zh:controller:endpoint: Bind 0x694f69634762684a/1 genOnOff from '0x00124b002a2e35c8/1'
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,1,100,1,0,100,254,3,68,128,0,1,139,77]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,1,100,1,0,100,254,3,68,128,0,1,139,77]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 1 - 3 - 4 - 1 - [0] - 100
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- SRSP: AF - dataRequest - {"status":0}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,68,128,0,1,139,77]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 4 - 128 - [0,1,139] - 77
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- AREQ: AF - dataConfirm - {"status":0,"endpoint":1,"transid":139}
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:writer: --> frame [254,23,37,33,137,99,74,104,98,71,99,105,79,105,1,6,0,3,200,53,46,42,0,75,18,0,1,119]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: <-- [254,1,101,33,0,69]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext [254,1,101,33,0,69]
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --> parsed 1 - 3 - 5 - 33 - [0] - 69
[2026-01-04 09:51:37] debug: 	zh:zstack:znp: <-- SRSP: ZDO - bindReq
[2026-01-04 09:51:37] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:38] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:38] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: <-- [254,3,69,161,137,99,0,13]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,69,161,137,99,0,13]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 5 - 161 - [137,99,0] - 13
[2026-01-04 09:51:38] debug: 	zh:zstack:znp: <-- AREQ: ZDO - bindRsp
[2026-01-04 09:51:38] debug: 	zh:controller: Received ZDO response: clusterId=BIND_RESPONSE, status=SUCCESS, payload=undefined
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:38] debug: 	zh:controller:endpoint: Bind 0x694f69634762684a/1 genLevelCtrl from '0x00124b002a2e35c8/1'
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:writer: --> frame [254,23,37,33,137,99,74,104,98,71,99,105,79,105,1,8,0,3,200,53,46,42,0,75,18,0,1,121]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: <-- [254,1,101,33,0,69]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext [254,1,101,33,0,69]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --> parsed 1 - 3 - 5 - 33 - [0] - 69
[2026-01-04 09:51:38] debug: 	zh:zstack:znp: <-- SRSP: ZDO - bindReq
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: <-- [254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169,254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:38] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext [254,5,69,196,137,99,1,21,211,169]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --> parsed 5 - 2 - 5 - 196 - [137,99,1,21,211] - 169
[2026-01-04 09:51:38] debug: 	zh:zstack:znp: <-- AREQ: ZDO - srcRtgInd
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: <-- [254,3,69,161,137,99,140,129]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext [254,3,69,161,137,99,140,129]
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --> parsed 3 - 2 - 5 - 161 - [137,99,140] - 129
[2026-01-04 09:51:38] debug: 	zh:zstack:znp: <-- AREQ: ZDO - bindRsp
[2026-01-04 09:51:38] debug: 	zh:controller: Received ZDO response: clusterId=BIND_RESPONSE, status=TABLE_FULL, payload=undefined
[2026-01-04 09:51:38] debug: 	zh:zstack:unpi:parser: --- parseNext []
[2026-01-04 09:51:38] debug: 	zh:controller:endpoint: Error: Bind 0x694f69634762684a/1 genLevelCtrl from '0x00124b002a2e35c8/1' failed (Status 'TABLE_FULL')
    at Endpoint.bind (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman/src/controller/model/endpoint.ts:722:23)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/lib/modernExtend.ts:265:17)
    at Object.configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/index.ts:365:21)
    at Configure.configure (/app/lib/extension/configure.ts:123:13)
    at Configure.onMQTTMessage (/app/lib/extension/configure.ts:46:25)
    at EventEmitter.wrappedCallback (/app/lib/eventBus.ts:252:17)
[2026-01-04 09:51:38] error: 	z2m: Failed to configure 'Shelly Remote Control', attempt 5 (Error: Bind 0x694f69634762684a/1 genLevelCtrl from '0x00124b002a2e35c8/1' failed (Status 'TABLE_FULL')
    at Endpoint.bind (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman/src/controller/model/endpoint.ts:722:23)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/lib/modernExtend.ts:265:17)
    at Object.configure (/app/node_modules/.pnpm/[email protected]/node_modules/zigbee-herdsman-converters/src/index.ts:365:21)
    at Configure.configure (/app/lib/extension/configure.ts:123:13)
    at Configure.onMQTTMessage (/app/lib/extension/configure.ts:46:25)
    at EventEmitter.wrappedCallback (/app/lib/eventBus.ts:252:17))
[2026-01-04 09:51:38] info: 	z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/bridge/response/device/configure', payload '{"data":{},"error":"Failed to configure (Bind 0x694f69634762684a/1 genLevelCtrl from '0x00124b002a2e35c8/1' failed (Status 'TABLE_FULL'))","status":"error","transaction":"x295s-3"}'

Grohnheit avatar Jan 04 '26 09:01 Grohnheit