Change brightness level smoothly on GE/Jasco Dimmers (12724, 45715)

When I change the brightness level of my GE dimmers (models 12724 and 45715) the new brightness is set immediately instead of the dimmer ramping up or down to the desired brightness. This is jarring. It would be a lot nicer if they could have smooth brightness transitions. The only time the dimmer smoothly changes value (via zwave control) is when transitioning to off.

Looking at the documentation for the dimmers it seems that they may be capable of this. Perhaps some configuration is needed in the zwave binding to make it work?

Docs here: http://www.ezzwave.com/advanced-operation/ say the following:

Dim Rate Adjustments
Both the number of steps (or levels) that the dimmer will change and the timing of the steps can be modified to suit personal preferences. The timing of the steps can be adjusted in 10 millisecond intervals. As an example, the default setting for parameter 8 is “3”. This means that the lighting level will change every 30 milliseconds when the Dim Command is received. A value of 255 would mean that the level would change every 2.55 seconds. Combined, the two parameters allow dim rate adjustments from 10 milliseconds to 4.2 minutes to go from maximum-to-minimum or minimum-to-maximum brightness levels.

  1. When Receiving a Z-Wave Dim Command

Parameter 7 (number of steps or levels)
Parameter 8 (timing of the steps)
Length: 1 Byte
Valid Values:
Parameter 7 (default = 1) Valid Values: 1-99
Parameter 8 (default = 3) Valid Values: 1-255

Unfortunately I don’t know enough about zwave or the internals of openhab yet to diagnose this myself. Any clues about how to figure this out?

It there is a configuration parameter, you can see them and change their values using habmin.

You simply need to update the configuration parameters that you’ve listed - there’s nothing needed to change in the binding itself. You can do this directly in the UI (assuming the database is configured correctly which looks to be the case).

Changing the configuration parameters does not seem to affect the behavior when setting a brightness level via zwave. It always sets the brightness instantly regardless of the setting of the configuration parameters (except for dimming to the off state as I stated above).

Well, according to the documentation, it should do. Parameter 7 and 8 should affect what happens when controlled by ZWave, and parameter 9 and 10 should be manual.

If that doesn’t work, then I don’t think I can help and you might need to look at implementing some sort of rule.

When I change parameters 7 and 8 it only changes the behavior of transitioning to 0 brightness. All other brightness levels take effect immediately. I don’t know much about zwave, but is it possible that the dimmer is expecting a different sort of command to set its level than the one that openhab is sending?

Well, there are only 2 types of commands. Either the ON/OFF, or the dimmer style. So, if you’re setting a value other than ON or OFF, then the MULTILEVEL class will be used, so I don’t think there’s any other options.

@imagio: I’m using a whole ton of the 12724 dimmers with OH2 without any issues. They’re all running with default parameters. They do ramp up quicker than they fade off, but it definitely is a fade effect. I am using LED bulbs in all of them, so I don’t know if that changes anything or not.

Can someone post the XML for this device please (using OH2).

Thanks.

They ramp up/down when changing brightness via openhab? Not just on/off? Mine ramp up/down if the switch is used to turn them on or off or adjust brightness. They only ramp down when controlled via openhab if they are being turned off. Any other adjustment to brightness via openhab takes effect instantly.

How can I retrieve the XML for it?

Strange - ON/OFF uses the same command class as brightness - it just sets the brightness to 0% or 99% for ON and OFF…

It’s in the userdata/zwave folder.

Here is the XML

<node>
  <deviceClass>
    <basicDeviceClass>ROUTING_SLAVE</basicDeviceClass>
    <genericDeviceClass>MULTILEVEL_SWITCH</genericDeviceClass>
    <specificDeviceClass>POWER_SWITCH_MULTILEVEL</specificDeviceClass>
  </deviceClass>
  <homeId>0x18526d9</homeId>
  <nodeId>3</nodeId>
  <version>4</version>
  <manufacturer>0x63</manufacturer>
  <deviceId>0x3031</deviceId>
  <deviceType>0x4944</deviceType>
  <listening>true</listening>
  <frequentlyListening>false</frequentlyListening>
  <routing>true</routing>
  <security>false</security>
  <beaming>true</beaming>
  <maxBaudRate>40000</maxBaudRate>
  <nodeInformationFrame>
    <commandClass>SWITCH_MULTILEVEL</commandClass>
    <commandClass>SWITCH_ALL</commandClass>
    <commandClass>POWERLEVEL</commandClass>
    <commandClass>CONFIGURATION</commandClass>
    <commandClass>VERSION</commandClass>
    <commandClass>MANUFACTURER_SPECIFIC</commandClass>
    <commandClass>NODE_NAMING</commandClass>
  </nodeInformationFrame>
  <supportedCommandClasses>
    <entry>
      <commandClass>NO_OPERATION</commandClass>
      <noOperationCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
      </noOperationCommandClass>
    </entry>
    <entry>
      <commandClass>POWERLEVEL</commandClass>
      <powerLevelCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <powerLevel>0</powerLevel>
        <powerTimeout>0</powerTimeout>
      </powerLevelCommandClass>
    </entry>
    <entry>
      <commandClass>CONFIGURATION</commandClass>
      <configurationCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <configParameters>
          <entry>
            <int>3</int>
            <configurationParameter>
              <index>3</index>
              <size>1</size>
              <value>0</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>4</int>
            <configurationParameter>
              <index>4</index>
              <size>1</size>
              <value>0</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>5</int>
            <configurationParameter>
              <index>5</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>7</int>
            <configurationParameter>
              <index>7</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>8</int>
            <configurationParameter>
              <index>8</index>
              <size>1</size>
              <value>3</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>9</int>
            <configurationParameter>
              <index>9</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>10</int>
            <configurationParameter>
              <index>10</index>
              <size>1</size>
              <value>3</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>11</int>
            <configurationParameter>
              <index>11</index>
              <size>1</size>
              <value>1</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
          <entry>
            <int>12</int>
            <configurationParameter>
              <index>12</index>
              <size>1</size>
              <value>3</value>
              <readOnly>false</readOnly>
              <writeOnly>false</writeOnly>
            </configurationParameter>
          </entry>
        </configParameters>
      </configurationCommandClass>
    </entry>
    <entry>
      <commandClass>NODE_NAMING</commandClass>
      <nodeNamingCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <name>office_light</name>
        <location></location>
      </nodeNamingCommandClass>
    </entry>
    <entry>
      <commandClass>VERSION</commandClass>
      <versionCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <libraryType>LIB_CONTROLLER_BRIDGE</libraryType>
        <protocolVersion>3.67</protocolVersion>
        <applicationVersion>3.37</applicationVersion>
      </versionCommandClass>
    </entry>
    <entry>
      <commandClass>MANUFACTURER_SPECIFIC</commandClass>
      <manufacturerSpecificCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
      </manufacturerSpecificCommandClass>
    </entry>
    <entry>
      <commandClass>BASIC</commandClass>
      <basicCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <isGetSupported>true</isGetSupported>
      </basicCommandClass>
    </entry>
    <entry>
      <commandClass>SWITCH_MULTILEVEL</commandClass>
      <multiLevelSwitchCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <isGetSupported>true</isGetSupported>
      </multiLevelSwitchCommandClass>
    </entry>
    <entry>
      <commandClass>SWITCH_ALL</commandClass>
      <switchAllCommandClass>
        <version>1</version>
        <instances>1</instances>
        <versionSupported>1</versionSupported>
        <isGetSupported>true</isGetSupported>
        <mode>SWITCH_ALL_INCLUDE_ON_OFF</mode>
      </switchAllCommandClass>
    </entry>
  </supportedCommandClasses>
  <securedCommandClasses/>
  <nodeNeighbors>
    <int>1</int>
    <int>2</int>
    <int>4</int>
  </nodeNeighbors>
  <lastSent>2016-06-20 02:02:27.547 UTC</lastSent>
  <lastReceived>2016-06-20 02:02:27.681 UTC</lastReceived>

I think there is a shortcoming in openHAB in that it can’t send dim durations with individual dimmer level commands. You are only able to set the level, not the rate at which to reach that level. It would require passing two values simultaneously to the openHAB dimmer item.

The ZWave Multilevel Switch Command Class v2 protocol supports optionally sending the dimming duration with a level set.

In lieu of that, you get whatever the individual switches default behavior is when it receives a set to a specific level. Some jump immediately, some fade to it, some only fade down to 0 when turned off, etc.

Interesting. Do you know if the GE/Jasco dimmers support multilevel switch command class v2?

Hmm… I’m not really sure. The specification for v2 has been around for at least 8 years or so. But, I suppose it’s possible that most switches still don’t implement it?

This is exactly what I added a couple of days ago :slight_smile:

1 Like

Look in the XML created by OH2 - it will say there. However, in the database at the moment, it only shows V1. This might be wrong though as for some devices this isn’t set correctly.

If I update to a recent build and edit my local XML to use multilevel switch v2 will that cause openhab to use the newer command class you recently added?