Dimmer Switch Turns On at Lowest Brightness

I recently purchased two (2) Leviton DG6HD Zigbee Dimmer switches from Amazon and I have installed them and they are working fine on their own. I’ve paired them with my Zigbee network (Zigbee2MQTT) and I am able to control them via Home Assistant.

The issue that I have is that when I use Home Assistant to turn off the switches, they turn off just fine. When I use the switch to turn them back on again, they turn on at the lowest possible brightness level which is almost off. It seems like it is turning on with the previous brightness level, which for some reason is zero (or at least close to it). It’s annoying to have to manually increase brightness when this happens.

Has anyone experienced this and/or solved it?

Answering my own question.

I did initially setup an automation to force the dimmer to full brightness after turning on.

platform: state
entity_id:
  - light.playroom_lights_a_2
from: 'off'
to: 'on'
for:
  hours: 0
  minutes: 0
  seconds: 2

While this all works OK, it’s a little janky due to the required delay of 2 seconds (any faster and the command is ignored).

The solution is actually with Zigbee2MQTT (Z2M). After speaking to Leviton support and poking around on the discussions for Zigbee2MQTT on GitHub, I came to find out that the switch is programmable via the coordinator software. Some coordinators have these features exposed for the switch, and some do not. For Zigbee2MQTT v1.26.0, I was able to use the dev console in the device settings. I’ve created some instructions for modifying the settings on a gist here: Programming the Leviton DG6HD-1BW ZigBee Dimmer Switch with ZigBee2MQTT · GitHub

The discussion thread is here: Question about the best practices for making changes and testing. · Discussion #12680 · Koenkk/zigbee2mqtt · GitHub

1 Like

Apologies for necro’ing this thread.

@nebhead77 your gist has been very helpful. I just wanted to share a custom external converter I use in Z2M that helps expose a few features with this switch that aren’t in Z2M.

(I’m not a coder and barely know how to use github, therefore I know the best thing to do is to submit a PR(?) but no clue on how or protocol.)

DG6HD-1BW.js

const exposes = require('zigbee-herdsman-converters/lib/exposes');
const fz = {...require('zigbee-herdsman-converters/converters/fromZigbee'), legacy: require('zigbee-herdsman-converters/lib/legacy').fromZigbee};
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;

module.exports = [
    {
        zigbeeModel: ['DG6HD'],
        model: 'DG6HD-1BW',
        vendor: 'Leviton',
        description: 'Zigbee in-wall smart dimmer',
        extend: extend.light_onoff_brightness({disableEffect: true, noConfigure: true}),
        fromZigbee: [fz.brightness, fz.identify, fz.lighting_ballast_configuration, fz.level_config],
        toZigbee: [tz.light_onoff_brightness, tz.ballast_config, tz.level_config],
        exposes: [e.light_brightness(),
            exposes.numeric('ballast_minimum_level', ea.ALL).withValueMin(1).withValueMax(254)
                .withDescription('Specifies the minimum brightness value. [Set to 10 for LED bulbs]'),
            exposes.numeric('ballast_maximum_level', ea.ALL).withValueMin(1).withValueMax(254)
                .withDescription('Specifies the maximum brightness value. [Set to 254 for LED bulbs]'),
            exposes.numeric('ballast_power_on_level', ea.ALL).withValueMin(1).withValueMax(255)
                .withDescription('Specifies the initialisation light level. Can not be set lower than "ballast_minimum_level" ' +
                                 '[254=Full Brightness, 255=Previous Level]')],
        configure: async (device, coordinatorEndpoint, logger) => {
            await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
            const endpoint = device.getEndpoint(1);
            await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl', 'lightingBallastCfg']);
            await reporting.onOff(endpoint);
        },
    },
];

I forget where I got this from or if I made it, but wanted to share it for others.