Koenkk / Koenkk/zigbee2mqtt

[TS0505B / ZB-LZD10-RCW / _TZ3210_s9lumfhn] Intermittent invalid brightness level 256 prevents light from turning on

Open
#32,736 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

problem
Dominant language
TypeScript
Stars
15.7k
Forks
2k
Avg merge
18h 55m
Merged PRs (30d)
35

Description

What happened?

Multiple Moes ZB-LZD10-RCW downlights intermittently fail to turn on after they have been off or unused for several hours.

When the problem occurs, Zigbee2MQTT attempts to send a genLevelCtrl.moveToLevelWithOnOff command using brightness level 256. The command is rejected because the level exceeds the valid ZCL value:

[03/08/2026, 10:54:56] z2m: Publish 'set' 'state' to 'Office light' failed: 'Error: ZCL command 0xa4c13882a5a83b6c/1 genLevelCtrl.moveToLevelWithOnOff({"level":256,"transtime":1,"optionsMask":0,"optionsOverride":0}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (Status 'INVALID_VALUE' level requires max of 255)'
The Zigbee2MQTT frontend has also shown a brightness value of 256, even though the brightness exposure shows a maximum of 254.

Immediately before one failure, Zigbee2MQTT published the following state:

[03/08/2026, 10:54:51] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Office light', payload '{"brightness":1,"color":{"h":218,"hue":218,"s":17,"saturation":17,"x":0.3065,"y":0.3166},"color_mode":"color_temp","color_power_on_behavior":null,"color_temp":143,"do_not_disturb":null,"effect":null,"linkquality":176,"state":"OFF"}'

[03/08/2026, 10:54:52] z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/Office light', payload '{"brightness":1,"color":{"h":21

What did you expect to happen?
What did you expect to happen?

Turning the light on should use a valid brightness level within the device's exposed range of 1–254.

Zigbee2MQTT should not store, restore or send brightness level 256. If an invalid remembered value exists, it should be clamped to the supported maximum before sending the ZCL command.

A state-only ON or TOGGLE command should not fail because of an invalid internally remembered brightness value.

How to reproduce it (minimal and precise)

The issue is intermittent and does not occur on every toggle.

  1. Pair a TS0505B / ZB-LZD10-RCW downlight manufactured by _TZ3210_s9lumfhn.
  2. Control the light normally through Zigbee2MQTT and Home Assistant.
  3. Turn the light off and leave it unused for several hours.
  4. Send a state-only ON or TOGGLE command. In my setup this is sent by a Home Assistant light.toggle automation.
  5. The light sometimes fails to turn on.
  6. Zigbee2MQTT logs show moveToLevelWithOnOff being sent with "level":256.
  7. Manually send a valid brightness, such as 254, and the light begins working again.

I have observed the issue on multiple downlights of this model.

Zigbee2MQTT version

2.13.0 (unknown)

Adapter firmware version

{"build":0,"ezsp":13,"major":7,"minor":4,"patch":3,"revision":"7.4.3 [GA]","special":0,"type":170}

Adapter

EmberZNet

Setup

os: #1 SMP PREEMPT_DYNAMIC Thu Jul 30 12:31:10 UTC 2026 - 6.18.39-haos - x64
node: v24.18.1
ha: true

Device database.db entry

No response

Debug log

log.log

Notes
Device

definition: ZB-LZD10-RCW - Moes (v0.0.0)
software_build_id: z.1.0
date_code: undefined
endpoints:

{"1":{"bindings":[],"clusters":{"input":["genBasic","genIdentify","6280","genGroups","genScenes","genOnOff","genLevelCtrl","lightingColorCtrl","genTime","touchlink","65518"],"output":["genOta","touchlink","65518"]},"configured_reportings":[],"scenes":[]}}
Health

time: Mon Aug 03 2026 10:57:16 GMT+1000 (Australian Eastern Standard Time)
os.load_average: 3.52, 1.97, 1.2
os.memory_percent: 56.8398
process.memory_percent: 2.1305
process.uptime_sec: 96004

{"leave_count":0,"messages":4101,"messages_per_sec":0.0427,"network_address_changes":0}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the state-only ON/TOGGLE path that sends genLevelCtrl.moveToLevelWithOnOff and the handling of the remembered brightness value. Reproduce with the TS0505B / ZB-LZD10-RCW device after several hours off, then verify that ON and TOGGLE never publish level 256 and use a value within the exposed 1–254 range.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend, embedded-iot
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.