MH03-3Z-OLED: Home Assistant discovery generates invalid command_topic for L1/L2/L3 switches
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 15.7k
- Forks
- 2k
- Avg merge
- 18h 55m
- Merged PRs (30d)
- 35
Description
What happened?
I paired a Manhot MH03-3Z-OLED (TS0601, _TZE284_59dz7ioi) with Zigbee2MQTT 2.12.1-1 and enabled Home Assistant discovery.
The automatically discovered Home Assistant entities for L1, L2 and L3 do not work.
When a discovered entity is turned ON or OFF from Home Assistant, MQTT messages are published to:
zigbee2mqtt/<friendly_name>/l1/set
zigbee2mqtt/<friendly_name>/l2/set
zigbee2mqtt/<friendly_name>/l3/set
and Zigbee2MQTT logs:
Device '<friendly_name>' has no endpoint 'l1'
Device '<friendly_name>' has no endpoint 'l2'
Device '<friendly_name>' has no endpoint 'l3'
I verified with MQTT Explorer that the discovered entities publish to the endpoint-specific topics above.
The device itself works correctly from the Zigbee2MQTT web UI.
What did you expect to happen?
I expected the automatically discovered Home Assistant entities for L1, L2 and L3 to control the device correctly.
According to the Zigbee2MQTT documentation for the MH03-3Z-OLED, the device exposes state_l1, state_l2 and state_l3 and can be controlled by publishing:
{"state_l1":"ON"}
{"state_l2":"ON"}
{"state_l3":"ON"}
to:
zigbee2mqtt/<friendly_name>/set
I expected the Home Assistant discovery configuration to generate command topics and payloads that match the documented control method.
The discovered entities should operate the switches without generating endpoint errors.
The device itself works correctly when controlled from the Zigbee2MQTT frontend.
It also works correctly when publishing the documented MQTT payloads such as:
{"state_l1":"ON"}
to:
zigbee2mqtt/<friendly_name>/set
The problem only affects the Home Assistant entities created through MQTT discovery.
How to reproduce it (minimal and precise)
-
Pair a Manhot MH03-3Z-OLED (TS0601, _TZE284_59dz7ioi) with Zigbee2MQTT.
-
Enable Home Assistant MQTT discovery.
-
Wait for Home Assistant to create the discovered entities for L1, L2 and L3.
-
Turn one of the discovered entities ON or OFF from Home Assistant.
-
Observe that Zigbee2MQTT logs:
Device '<friendly_name>' has no endpoint 'l1'
(or l2 / l3 depending on the entity used)
-
Observe with MQTT Explorer that Home Assistant publishes to:
zigbee2mqtt/<friendly_name>/l1/set
-
Publish the documented command manually:
Topic:
zigbee2mqtt/<friendly_name>/setPayload:
{"state_l1":"ON"} -
Observe that the switch operates correctly.
Zigbee2MQTT version
2.12.1
Adapter firmware version
Revision: 9.0.1 [GA]
Adapter
SLZB-06Mg24
Setup
Home Assistant OS 2026.7.4
Supervisor 2026.07.3
Operating System 18.1
Add-on on HAOS, Raspberry Pi4
Device database.db entry
No response
Debug log
[2026/7/28 23:32:47] z2m: Device 'Zigbee Switch Garden' has no endpoint 'l1'
[2026/7/28 23:32:48] z2m: Device 'Zigbee Switch Garden' has no endpoint 'l2'
[2026/7/28 23:32:49] z2m: Device 'Zigbee Switch Garden' has no endpoint 'l3'
Notes
Additional findings:
-
The device works correctly from the Zigbee2MQTT frontend.
-
The device also works correctly when publishing:
Topic:
zigbee2mqtt/<friendly_name>/setPayload:
{"state_l1":"ON"} -
This behavior matches the official documentation for MH03-3Z-OLED.
-
The problem seems limited to the Home Assistant MQTT discovery entities.
-
MQTT Explorer confirms that the discovered entities publish to:
zigbee2mqtt/<friendly_name>/l1/set
zigbee2mqtt/<friendly_name>/l2/set
zigbee2mqtt/<friendly_name>/l3/setwhile the documented control method uses:
zigbee2mqtt/<friendly_name>/set
with payloads containing state_l1, state_l2 and state_l3.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No source file or test is named in the issue. Reproduce the problem with the MH03-3Z-OLED and trace the Home Assistant MQTT discovery entry point for the L1/L2/L3 entities, comparing their generated topics and payloads with the documented zigbee2mqtt/<friendly_name>/set commands. Done means the discovered switches control all three outputs without endpoint errors.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100