Toggle my dimmer in the UI doesn't register

I’m having a problem when I try to toggle my light dimmer in the UI.
The dimmer is a HZC Electronics D688-ZG dimmer.
My HA instance is totally new as I tried to fix this with a clean install.
When I press to turn the light off, the light turns off but it doen’t seem to register in the UI and the switch goes back to its on-state in the UI while the real light is still off.

This is how it looks like:
2024-02-07_00-16-18

If I turn on/off the light with the light-switch, HA will register this and print it in the log book

If I go to the switch’s Manage Zigbee Device I can send the light-toggle from there and it works as expected. I do get an error: Failed to call service zha/issue_zigbee_cluster_command. Failed to issue cluster command with status: <Status.UNSUP_CLUSTER_COMMAND: 129> but the light works as expected and it’s being logged in the logbook.

This is giving me problems where I can’t automate stuff as HA will think the light is on when it’s off etc…

I tried to capture debug logging with my single press from the video about and this is what I got (the switch is called light.dimmer_living_room_light):

2024-02-07 00:16:24.149 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x46B2](RWL022): Device seen - marking the device available and resetting counter
2024-02-07 00:16:24.150 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x46B2](RWL022): Update device availability -  device available: True - new availability: True - changed: False
2024-02-07 00:16:24.351 DEBUG (MainThread) [homeassistant.components.zha.entity] light.dimmer_living_room_light: setting transitioning flag to True
2024-02-07 00:16:24.351 DEBUG (MainThread) [zigpy.util] Tries remaining: 3
2024-02-07 00:16:24.351 DEBUG (MainThread) [zigpy.zcl] [0xA3E8:1:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl<0x01>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False), tsn=15, command_id=0, *direction=<Direction.Server_to_Client: 0>)
2024-02-07 00:16:24.352 DEBUG (MainThread) [zigpy.zcl] [0xA3E8:1:0x0006] Sending request: off()
2024-02-07 00:16:24.352 DEBUG (MainThread) [bellows.zigbee.application] Sending packet ZigbeePacket(timestamp=datetime.datetime(2024, 2, 6, 23, 16, 24, 352540, tzinfo=datetime.timezone.utc), src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xA3E8), dst_ep=1, source_route=None, extended_timeout=False, tsn=15, profile_id=260, cluster_id=6, data=Serialized[b'\x01\x0f\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2024-02-07 00:16:24.352 DEBUG (MainThread) [bellows.ezsp.protocol] Send command sendUnicast: (<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 0xa3e8, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_RETRY|APS_OPTION_ENABLE_ROUTE_DISCOVERY: 320>, groupId=0, sequence=15), 79, b'\x01\x0f\x00')
2024-02-07 00:16:24.353 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'337021a9602a155afa904b23aa5493099d4e27a4a2cd6684fd23fb7e'
2024-02-07 00:16:24.362 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'3470a1a9602a152dcbe27e'
2024-02-07 00:16:24.362 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8430fc7e'
2024-02-07 00:16:24.362 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received sendUnicast: [<EmberStatus.SUCCESS: 0>, 159]
2024-02-07 00:16:24.386 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'4470b1a90d2afd117d3c06db55ed4cdd088f2701d27e'
2024-02-07 00:16:24.386 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8520dd7e'
2024-02-07 00:16:24.387 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received incomingRouteRecordHandler: [0xa3e8, 94:de:b8:ff:fe:4c:a8:24, 148, -63, []]
2024-02-07 00:16:24.387 DEBUG (MainThread) [bellows.zigbee.application] Received incomingRouteRecordHandler frame with [0xa3e8, 94:de:b8:ff:fe:4c:a8:24, 148, -63, []]
2024-02-07 00:16:24.387 DEBUG (MainThread) [bellows.zigbee.application] Processing route record request: (0xa3e8, 94:de:b8:ff:fe:4c:a8:24, 148, -63, [])
2024-02-07 00:16:24.387 DEBUG (Thread-3) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f1b1e18e890>, 'INSERT INTO relays_v12 VALUES (:ieee, :relays)\n                        ON CONFLICT (ieee)\n                        DO UPDATE SET relays=excluded.relays WHERE relays != :relays', {'ieee': 94:de:b8:ff:fe:4c:a8:24, 'relays': b'\x00'})
2024-02-07 00:16:24.388 DEBUG (Thread-3) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f1b1e18e890>, 'INSERT INTO relays_v12 VALUES (:ieee, :relays)\n                        ON CONFLICT (ieee)\n                        DO UPDATE SET relays=excluded.relays WHERE relays != :relays', {'ieee': 94:de:b8:ff:fe:4c:a8:24, 'relays': b'\x00'}) completed
2024-02-07 00:16:24.389 DEBUG (Thread-3) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f1b1e18e890>)
2024-02-07 00:16:24.389 DEBUG (Thread-3) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f1b1e18e890>) completed
2024-02-07 00:16:24.393 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'5470b1a90d2afd117d3c06db55ed4cdd088f27318f7e'
2024-02-07 00:16:24.393 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8610be7e'
2024-02-07 00:16:24.394 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received incomingRouteRecordHandler: [0xa3e8, 94:de:b8:ff:fe:4c:a8:24, 148, -63, []]
2024-02-07 00:16:24.394 DEBUG (MainThread) [bellows.zigbee.application] Received incomingRouteRecordHandler frame with [0xa3e8, 94:de:b8:ff:fe:4c:a8:24, 148, -63, []]
2024-02-07 00:16:24.394 DEBUG (MainThread) [bellows.zigbee.application] Processing route record request: (0xa3e8, 94:de:b8:ff:fe:4c:a8:24, 148, -63, [])
2024-02-07 00:16:24.394 DEBUG (Thread-3) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f1b1e18e890>, 'INSERT INTO relays_v12 VALUES (:ieee, :relays)\n                        ON CONFLICT (ieee)\n                        DO UPDATE SET relays=excluded.relays WHERE relays != :relays', {'ieee': 94:de:b8:ff:fe:4c:a8:24, 'relays': b'\x00'})
2024-02-07 00:16:24.394 DEBUG (Thread-3) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f1b1e18e890>, 'INSERT INTO relays_v12 VALUES (:ieee, :relays)\n                        ON CONFLICT (ieee)\n                        DO UPDATE SET relays=excluded.relays WHERE relays != :relays', {'ieee': 94:de:b8:ff:fe:4c:a8:24, 'relays': b'\x00'}) completed
2024-02-07 00:16:24.395 DEBUG (Thread-3) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f1b1e18e890>)
2024-02-07 00:16:24.395 DEBUG (Thread-3) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f1b1e18e890>) completed
2024-02-07 00:16:24.435 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'6470b1a9112a15b658924a24ab1593499cfcbb68056d9874f8ce6c82fcff3d395d7e'
2024-02-07 00:16:24.435 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'87009f7e'
2024-02-07 00:16:24.436 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received incomingMessageHandler: [<EmberIncomingMessageType.INCOMING_UNICAST: 0>, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_RETRY|APS_OPTION_ENABLE_ROUTE_DISCOVERY: 320>, groupId=0, sequence=178), 156, -61, 0xa3e8, 255, 255, b'\x08\x0f\x0b\x00\x81']
2024-02-07 00:16:24.436 DEBUG (MainThread) [bellows.ezsp.protocol] Frame contains trailing data: b'\x02'
2024-02-07 00:16:24.436 DEBUG (MainThread) [bellows.zigbee.application] Received incomingMessageHandler frame with [<EmberIncomingMessageType.INCOMING_UNICAST: 0>, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_RETRY|APS_OPTION_ENABLE_ROUTE_DISCOVERY: 320>, groupId=0, sequence=178), 156, -61, 0xa3e8, 255, 255, b'\x08\x0f\x0b\x00\x81']
2024-02-07 00:16:24.436 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 2, 6, 23, 16, 24, 436687, tzinfo=datetime.timezone.utc), src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xA3E8), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=178, profile_id=260, cluster_id=6, data=Serialized[b'\x08\x0f\x0b\x00\x81'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=156, rssi=-61)
2024-02-07 00:16:24.437 DEBUG (MainThread) [zigpy.zcl] [0xA3E8:1:0x0006] Received ZCL frame: b'\x08\x0f\x0b\x00\x81'
2024-02-07 00:16:24.437 DEBUG (MainThread) [zigpy.zcl] [0xA3E8:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl<0x08>(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=15, command_id=11, *direction=<Direction.Client_to_Server: 1>)
2024-02-07 00:16:24.437 DEBUG (MainThread) [zigpy.zcl] [0xA3E8:1:0x0006] Decoded ZCL frame: OnOff:Default_Response(command_id=0, status=<Status.UNSUP_CLUSTER_COMMAND: 129>)
2024-02-07 00:16:24.438 DEBUG (Thread-3) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f1b1e18e890>, 'UPDATE devices_v12\n                    SET last_seen=:ts\n                    WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1707261384.436687, 'ieee': 94:de:b8:ff:fe:4c:a8:24, 'min_update_delta': 30.0})
2024-02-07 00:16:24.438 DEBUG (Thread-3) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f1b1e18e890>, 'UPDATE devices_v12\n                    SET last_seen=:ts\n                    WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1707261384.436687, 'ieee': 94:de:b8:ff:fe:4c:a8:24, 'min_update_delta': 30.0}) completed
2024-02-07 00:16:24.439 DEBUG (Thread-3) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f1b1e18e890>)
2024-02-07 00:16:24.439 DEBUG (Thread-3) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f1b1e18e890>) completed
2024-02-07 00:16:24.440 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'7470b1a96b2a155afa904b23aa5493099d4e2734a2ce673f457e'
2024-02-07 00:16:24.440 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8070787e'
2024-02-07 00:16:24.441 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received messageSentHandler: [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 41960, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_RETRY|APS_OPTION_ENABLE_ROUTE_DISCOVERY: 320>, groupId=0, sequence=159), 79, <EmberStatus.SUCCESS: 0>, b'']
2024-02-07 00:16:24.441 DEBUG (MainThread) [bellows.zigbee.application] Received messageSentHandler frame with [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 41960, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_RETRY|APS_OPTION_ENABLE_ROUTE_DISCOVERY: 320>, groupId=0, sequence=159), 79, <EmberStatus.SUCCESS: 0>, b'']
2024-02-07 00:16:24.442 DEBUG (MainThread) [homeassistant.components.zha.entity] light.dimmer_living_room_light: starting transitioning timer for 1.25
2024-02-07 00:16:24.442 DEBUG (MainThread) [homeassistant.components.zha.entity] light.dimmer_living_room_light: turned off: Default_Response(command_id=0, status=<Status.UNSUP_CLUSTER_COMMAND: 129>)
2024-02-07 00:16:25.693 DEBUG (MainThread) [homeassistant.components.zha.entity] light.dimmer_living_room_light: transition complete - future attribute reports will write HA state
2024-02-07 00:16:26.079 DEBUG (MainThread) [zigpy.application] Feeding watchdog
2024-02-07 00:16:26.079 DEBUG (MainThread) [bellows.ezsp.protocol] Send command readCounters: ()
2024-02-07 00:16:26.080 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'407121a9a52ad6837e'
2024-02-07 00:16:26.096 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'0571a1a9a52a40b26e948d25215594499c4e25abefce358bb0c66389fc7e3da7e9cdde6f8fffc7dbd5d2698c4623a9ec763ba5ea758241984c2613b1e070381c0e07bbe5ca6588459a4d9e4f9ff7c3d9d46a35a2519048247c337e'
2024-02-07 00:16:26.096 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8160597e'
2024-02-07 00:16:26.097 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received readCounters: [[85, 55, 199, 139, 6, 0, 2, 2, 82, 77, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0]]
2024-02-07 00:16:26.097 DEBUG (MainThread) [bellows.ezsp.protocol] Send command getValue: (<EzspValueId.VALUE_FREE_BUFFERS: 3>,)
2024-02-07 00:16:26.098 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'517621a9fe2a16b3287e'
2024-02-07 00:16:26.103 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'1676a1a9fe2a15b3a55cfe7e'
2024-02-07 00:16:26.104 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'82503a7e'
2024-02-07 00:16:26.104 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received getValue: [<EzspStatus.SUCCESS: 0>, b'\xfc']
2024-02-07 00:16:26.104 DEBUG (MainThread) [bellows.zigbee.application] Free buffers status EzspStatus.SUCCESS, value: 252
2024-02-07 00:16:26.104 DEBUG (MainThread) [bellows.zigbee.application] ezsp_counters: [MAC_RX_BROADCAST = 85, MAC_TX_BROADCAST = 55, MAC_RX_UNICAST = 199, MAC_TX_UNICAST_SUCCESS = 139, MAC_TX_UNICAST_RETRY = 6, MAC_TX_UNICAST_FAILED = 0, APS_DATA_RX_BROADCAST = 2, APS_DATA_TX_BROADCAST = 2, APS_DATA_RX_UNICAST = 82, APS_DATA_TX_UNICAST_SUCCESS = 77, APS_DATA_TX_UNICAST_RETRY = 0, APS_DATA_TX_UNICAST_FAILED = 0, ROUTE_DISCOVERY_INITIATED = 2, NEIGHBOR_ADDED = 2, NEIGHBOR_REMOVED = 0, NEIGHBOR_STALE = 0, JOIN_INDICATION = 0, CHILD_REMOVED = 0, ASH_OVERFLOW_ERROR = 0, ASH_FRAMING_ERROR = 0, ASH_OVERRUN_ERROR = 0, NWK_FRAME_COUNTER_FAILURE = 0, APS_FRAME_COUNTER_FAILURE = 0, UTILITY = 0, APS_LINK_KEY_NOT_AUTHORIZED = 0, NWK_DECRYPTION_FAILURE = 0, APS_DECRYPTION_FAILURE = 0, ALLOCATE_PACKET_BUFFER_FAILURE = 0, RELAYED_UNICAST = 0, PHY_TO_MAC_QUEUE_LIMIT_REACHED = 0, PACKET_VALIDATE_LIBRARY_DROPPED_COUNT = 0, TYPE_NWK_RETRY_OVERFLOW = 0, PHY_CCA_FAIL_COUNT = 2, BROADCAST_TABLE_FULL = 0, PTA_LO_PRI_REQUESTED = 0, PTA_HI_PRI_REQUESTED = 0, PTA_LO_PRI_DENIED = 0, PTA_HI_PRI_DENIED = 0, PTA_LO_PRI_TX_ABORTED = 0, PTA_HI_PRI_TX_ABORTED = 0, ADDRESS_CONFLICT_SENT = 0, EZSP_FREE_BUFFERS = 252]

Idk if it helps but this is the switch’s signature:

{
  "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.FullFunctionDevice|MainsPowered|RxOnWhenIdle|AllocateAddress: 142>, manufacturer_code=4714, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
  "endpoints": {
    "1": {
      "profile_id": "0x0104",
      "device_type": "0x0101",
      "input_clusters": [
        "0x0000",
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006",
        "0x0008",
        "0x0b05",
        "0x1000"
      ],
      "output_clusters": [
        "0x0019"
      ]
    },
    "242": {
      "profile_id": "0xa1e0",
      "device_type": "0x0061",
      "input_clusters": [],
      "output_clusters": [
        "0x0021"
      ]
    }
  },
  "manufacturer": "HZC",
  "model": "Dimmer-Switch-ZB3.0",
  "class": "zigpy.device.Device"
}

Pump up this question

Hi @danell are you aware that there is an open change request on this device type to add the support for ZHA? (nevermind… seems to have included the same video so probably your own change…)
For others that bump into this issue:
[Device Support Request] HZC Electronics D688-ZG · Issue #2987 · zigpy/zha-device-handlers · GitHub

See also related topics:
[Device Support Request] Ecodim 05 · Issue #2865 · zigpy/zha-device-handlers · GitHub (same device type)
ECO-DIM.05 dual dimmer not supported in ZHA?