I have a zigbee device with the Level Control channel enabled and the channel is linked to a switch and a dimmer. According to ZCL Spec section 126.96.36.199.2:
There are two sets of commands provided in the Level Control cluster. These are identical, except that the first set (Move to Level, Move and Step) SHALL NOT affect the OnOff attribute, whereas the second set (‘with On/Off’ variants) SHALL.
The second set is used to link the CurrentLevel and OnOff attributes. When the level is reduced to its minimum the OnOff attribute is automatically turned to Off, and when the level is increased above its minimum the OnOff attribute is automatically turned to On. As an example, this represents the behavior of a light dimmer with no independent on/off switch.
The dimmer works as expected when the switch is on. When the switch is set to off, the dimmer goes to 0 and vice versa. However, in this state (Switch Off) is I get a strange behavior when I try to set the dimmer to a 0+ value. Whenever I move the dimmer to a desired value, the switch does not turn on and the dimmer slider goes back to 0. I checked the logs and my zigbee device is sending a ReportAttributesCommand with OnOff attribute set to true (switch is on), but as soon as OH receives the command this is when the dimmer goes back to 0 and the switch stays Off.
If set my zigbee device to not send a ReportAttributesCommand for the OnOff status change, then the dimmer slider stays at the desired value but the switch does not turn On until several minutes later when OH sends a ReadAttributeRequest for the OnOff attribute.