Requesting info on speed ranges for various Z-Wave fan controllers (e.g., GE/Jasco, Leviton)

Thank you for the guidance.

Here’s the settings that I tried and the speeds/percentages reported.

targetValue=0, speed=off, percentage=0
targetValue=1, speed=low, percentage=33
targetValue=32, speed=low, percentage=33
targetValue=33, speed=high, percentage=67
targetValue=34, speed=high, percentage=67
targetValue=65, speed=high, percentage=67
targetValue=66, speed=high, percentage=67
targetValue=67, speed=high, percentage=100
targetValue=99, speed=high, percentage=100

This doesn’t look right. The medium speed seems to be missing. You should be reporting what the targetValue does to the fan itself. Ignore HA and just report what the switch is doing.

I agree. The speed percentage is accurate, but not the reported speed. It’s like medium just went missing.

When I change manually via the paddle, I get 33/low, 67/high, 100/high
If I use fan.set_speed to medium, it reports 67/high.
All my fan_entity_row objects display “high” when pressing “med”

I don’t recall specifically if this happened on update to 2021.12.3 or if it happened when I updated to 2021.11.5 and migrated from legacy zwave to zwave-js

You’re missing the point of the exercise. We are trying to determine which targetValues correspond to low/med/high on your switch. That’s why I said ignore HA. Set a targetValue, what does your switch physically do? Does level 33 set it to low or medium? Repeat for other values. If the targetValues differ from the range of values I reported above, then a code change needs to be made in HA.

Perhaps I misunderstood your original question, but I assumed the percentages were not working. It looks like you might just be concerned about the speed settings.

Can you clarify, are the percentages setting the correct fan speed on the switch itself? Is it just the HA fan speed value that is wrong?

Sorry for the confusion.
The percentages are working. The HA fan speed is not.

Any of the targetValue=33,34,65,66 are actually the medium speed on the fan
(any time the percentage = 67)

Alternatively, targetValue 0 off, targetValue 1-32 is low speed, targetValue 33-66 medium speed, targetValue 67-99 high speed

Gotcha, sorry for the confusion on my end. The values you are reporting are the same as my switch with the different firmware. So that is good, no changes necessary.

I confirmed that I do see the same fan speed problem as you. I’ve never paid attention before because fan speeds are deprecated and will (supposedly) be removed in a future version of HA. So while this is definitely a bug of some sort, I’m not sure it will get any attention. @mkowalchuk Do you think the fan speed issue identified here was introduced by any of your changes? Is it worth fixing if so?

@freshcoast Thanks for all your feedback.

I have switched my fan entities in the UI to GitHub - finity69x2/fan-percent-button-row: Frontend plugin to control fans in Home Assistant using percent values for speeds and updated all my automatons to use percent instead of speed.

This custom card was on my todo list. Took a few minutes to install and configure. Much better now, thanks for the reminder!

@mkowalchuk Do you think the fan speed issue identified here was introduced by any of your changes? Is it worth fixing if so?

Yeah, this is definitely because of my PR. The legacy speed MEDIUM is reported as the speed only if the percentage is in [34, 66]. But for 3-speed fans the selectable percentages are 0%, 33%, 67%, and 100%, which completely bypasses the MEDIUM range.

At a glance, I think this wouldn’t be too difficult to fix by overriding speed_to_percentage and percentage_to_speed… but I’m also a bit doubtful that it’d be worth it, since they’re slated to be removed in the 2022.3 release.

I have the same issue but actually curious about fan speeds being removed, there won’t be a way to set the fan speed anymore?

Ignore me please, you will just use the fan percentage, sorry

In case you still need it, I just installed one of these, and I can confirm that these are precisely the mappings on the actual controller. In addition, the physical paddle buttons and up/down Z-Wave controls set 0, 25, 50, 75, and 99, respectively. (Setting 100 also works, however.)

Dump
{
    "id": 26,
    "name": "Living Room Ceiling Fan",
    "loc": "Living Room",
    "values": [
      {
        "id": "26-38-0-targetValue",
        "nodeId": 26,
        "commandClass": 38,
        "commandClassName": "Multilevel Switch",
        "endpoint": 0,
        "property": "targetValue",
        "propertyName": "targetValue",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Target value",
        "stateless": false,
        "commandClassVersion": 4,
        "min": 0,
        "max": 99,
        "list": false,
        "value": 75,
        "lastUpdate": 1649563501315,
        "newValue": 75,
        "toUpdate": false
      },
      {
        "id": "26-38-0-duration",
        "nodeId": 26,
        "commandClass": 38,
        "commandClassName": "Multilevel Switch",
        "endpoint": 0,
        "property": "duration",
        "propertyName": "duration",
        "type": "duration",
        "readable": true,
        "writeable": true,
        "label": "Transition duration",
        "stateless": false,
        "commandClassVersion": 4,
        "list": false,
        "value": {
          "value": 0,
          "unit": "seconds"
        },
        "lastUpdate": 1649548129029,
        "newValue": {
          "value": 0,
          "unit": "seconds"
        },
        "toUpdate": false
      },
      {
        "id": "26-38-0-currentValue",
        "nodeId": 26,
        "commandClass": 38,
        "commandClassName": "Multilevel Switch",
        "endpoint": 0,
        "property": "currentValue",
        "propertyName": "currentValue",
        "type": "number",
        "readable": true,
        "writeable": false,
        "label": "Current value",
        "stateless": false,
        "commandClassVersion": 4,
        "min": 0,
        "max": 99,
        "list": false,
        "value": 75,
        "isCurrentValue": true,
        "targetValue": "38-0-targetValue",
        "lastUpdate": 1649563501313,
        "newValue": 75
      },
      {
        "id": "26-38-0-Up",
        "nodeId": 26,
        "commandClass": 38,
        "commandClassName": "Multilevel Switch",
        "endpoint": 0,
        "property": "Up",
        "propertyName": "Up",
        "type": "boolean",
        "readable": true,
        "writeable": true,
        "label": "Perform a level change (Up)",
        "ccSpecific": {
          "switchType": 2
        },
        "stateless": false,
        "commandClassVersion": 4,
        "list": false,
        "value": true,
        "lastUpdate": 1649346638284,
        "newValue": true,
        "toUpdate": false
      },
      {
        "id": "26-38-0-Down",
        "nodeId": 26,
        "commandClass": 38,
        "commandClassName": "Multilevel Switch",
        "endpoint": 0,
        "property": "Down",
        "propertyName": "Down",
        "type": "boolean",
        "readable": true,
        "writeable": true,
        "label": "Perform a level change (Down)",
        "ccSpecific": {
          "switchType": 2
        },
        "stateless": false,
        "commandClassVersion": 4,
        "list": false,
        "value": true,
        "lastUpdate": 1649346655813,
        "newValue": true,
        "toUpdate": false
      },
      {
        "id": "26-134-0-libraryType",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "libraryType",
        "propertyName": "libraryType",
        "type": "number",
        "readable": true,
        "writeable": false,
        "label": "Library type",
        "stateless": false,
        "commandClassVersion": 3,
        "list": true,
        "states": [
          {
            "text": "Unknown",
            "value": 0
          },
          {
            "text": "Static Controller",
            "value": 1
          },
          {
            "text": "Controller",
            "value": 2
          },
          {
            "text": "Enhanced Slave",
            "value": 3
          },
          {
            "text": "Slave",
            "value": 4
          },
          {
            "text": "Installer",
            "value": 5
          },
          {
            "text": "Routing Slave",
            "value": 6
          },
          {
            "text": "Bridge Controller",
            "value": 7
          },
          {
            "text": "Device under Test",
            "value": 8
          },
          {
            "text": "N/A",
            "value": 9
          },
          {
            "text": "AV Remote",
            "value": 10
          },
          {
            "text": "AV Device",
            "value": 11
          }
        ],
        "value": 3,
        "lastUpdate": 1649346421714,
        "newValue": 3
      },
      {
        "id": "26-134-0-protocolVersion",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "protocolVersion",
        "propertyName": "protocolVersion",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Z-Wave protocol version",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": "7.12",
        "lastUpdate": 1649346421715,
        "newValue": "7.12"
      },
      {
        "id": "26-134-0-firmwareVersions",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "firmwareVersions",
        "propertyName": "firmwareVersions",
        "type": "string[]",
        "readable": true,
        "writeable": false,
        "label": "Z-Wave chip firmware versions",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": [
          "1.8"
        ],
        "lastUpdate": 1649346421715,
        "newValue": [
          "1.8"
        ]
      },
      {
        "id": "26-134-0-hardwareVersion",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "hardwareVersion",
        "propertyName": "hardwareVersion",
        "type": "number",
        "readable": true,
        "writeable": false,
        "label": "Z-Wave chip hardware version",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 1,
        "lastUpdate": 1649346421715,
        "newValue": 1
      },
      {
        "id": "26-134-0-sdkVersion",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "sdkVersion",
        "propertyName": "sdkVersion",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "SDK version",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": "7.12.2",
        "lastUpdate": 1649346421716,
        "newValue": "7.12.2"
      },
      {
        "id": "26-134-0-applicationFrameworkAPIVersion",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "applicationFrameworkAPIVersion",
        "propertyName": "applicationFrameworkAPIVersion",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Z-Wave application framework API version",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": "1.8.1",
        "lastUpdate": 1649346421716,
        "newValue": "1.8.1"
      },
      {
        "id": "26-134-0-applicationFrameworkBuildNumber",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "applicationFrameworkBuildNumber",
        "propertyName": "applicationFrameworkBuildNumber",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Z-Wave application framework API build number",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 35,
        "lastUpdate": 1649346421716,
        "newValue": 35
      },
      {
        "id": "26-134-0-hostInterfaceVersion",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "hostInterfaceVersion",
        "propertyName": "hostInterfaceVersion",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Serial API version",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": "unused",
        "lastUpdate": 1649346421716,
        "newValue": "unused"
      },
      {
        "id": "26-134-0-hostInterfaceBuildNumber",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "hostInterfaceBuildNumber",
        "propertyName": "hostInterfaceBuildNumber",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Serial API build number",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 0,
        "lastUpdate": 1649346421717,
        "newValue": 0
      },
      {
        "id": "26-134-0-zWaveProtocolVersion",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "zWaveProtocolVersion",
        "propertyName": "zWaveProtocolVersion",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Z-Wave protocol version",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": "7.12.2",
        "lastUpdate": 1649346421717,
        "newValue": "7.12.2"
      },
      {
        "id": "26-134-0-zWaveProtocolBuildNumber",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "zWaveProtocolBuildNumber",
        "propertyName": "zWaveProtocolBuildNumber",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Z-Wave protocol build number",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 35,
        "lastUpdate": 1649346421717,
        "newValue": 35
      },
      {
        "id": "26-134-0-applicationVersion",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "applicationVersion",
        "propertyName": "applicationVersion",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Application version",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": "1.8.1",
        "lastUpdate": 1649346421718,
        "newValue": "1.8.1"
      },
      {
        "id": "26-134-0-applicationBuildNumber",
        "nodeId": 26,
        "commandClass": 134,
        "commandClassName": "Version",
        "endpoint": 0,
        "property": "applicationBuildNumber",
        "propertyName": "applicationBuildNumber",
        "type": "string",
        "readable": true,
        "writeable": false,
        "label": "Application build number",
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 43707,
        "lastUpdate": 1649346421718,
        "newValue": 43707
      },
      {
        "id": "26-114-0-manufacturerId",
        "nodeId": 26,
        "commandClass": 114,
        "commandClassName": "Manufacturer Specific",
        "endpoint": 0,
        "property": "manufacturerId",
        "propertyName": "manufacturerId",
        "type": "number",
        "readable": true,
        "writeable": false,
        "label": "Manufacturer ID",
        "stateless": false,
        "commandClassVersion": 2,
        "min": 0,
        "max": 65535,
        "list": false,
        "value": 29,
        "newValue": 29
      },
      {
        "id": "26-114-0-productType",
        "nodeId": 26,
        "commandClass": 114,
        "commandClassName": "Manufacturer Specific",
        "endpoint": 0,
        "property": "productType",
        "propertyName": "productType",
        "type": "number",
        "readable": true,
        "writeable": false,
        "label": "Product type",
        "stateless": false,
        "commandClassVersion": 2,
        "min": 0,
        "max": 65535,
        "list": false,
        "value": 56,
        "newValue": 56
      },
      {
        "id": "26-114-0-productId",
        "nodeId": 26,
        "commandClass": 114,
        "commandClassName": "Manufacturer Specific",
        "endpoint": 0,
        "property": "productId",
        "propertyName": "productId",
        "type": "number",
        "readable": true,
        "writeable": false,
        "label": "Product ID",
        "stateless": false,
        "commandClassVersion": 2,
        "min": 0,
        "max": 65535,
        "list": false,
        "value": 2,
        "newValue": 2
      },
      {
        "id": "26-135-0-80-3",
        "nodeId": 26,
        "commandClass": 135,
        "commandClassName": "Indicator",
        "endpoint": 0,
        "property": 80,
        "propertyName": "Node Identify",
        "propertyKey": 3,
        "propertyKeyName": "On/Off Period: Duration",
        "type": "number",
        "readable": true,
        "writeable": true,
        "description": "Sets the duration of an on/off period in 1/10th seconds. Must be set together with \"On/Off Cycle Count\"",
        "label": "Node Identify - On/Off Period: Duration",
        "ccSpecific": {
          "indicatorId": 80,
          "propertyId": 3
        },
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 0,
        "newValue": 0
      },
      {
        "id": "26-135-0-80-4",
        "nodeId": 26,
        "commandClass": 135,
        "commandClassName": "Indicator",
        "endpoint": 0,
        "property": 80,
        "propertyName": "Node Identify",
        "propertyKey": 4,
        "propertyKeyName": "On/Off Cycle Count",
        "type": "number",
        "readable": true,
        "writeable": true,
        "description": "Sets the number of on/off periods. 0xff means infinite. Must be set together with \"On/Off Period duration\"",
        "label": "Node Identify - On/Off Cycle Count",
        "ccSpecific": {
          "indicatorId": 80,
          "propertyId": 4
        },
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 0,
        "newValue": 0
      },
      {
        "id": "26-135-0-80-5",
        "nodeId": 26,
        "commandClass": 135,
        "commandClassName": "Indicator",
        "endpoint": 0,
        "property": 80,
        "propertyName": "Node Identify",
        "propertyKey": 5,
        "propertyKeyName": "On/Off Period: On time",
        "type": "number",
        "readable": true,
        "writeable": true,
        "description": "This property is used to set the length of the On time during an On/Off period. It allows asymetic On/Off periods. The value 0x00 MUST represent symmetric On/Off period (On time equal to Off time)",
        "label": "Node Identify - On/Off Period: On time",
        "ccSpecific": {
          "indicatorId": 80,
          "propertyId": 5
        },
        "stateless": false,
        "commandClassVersion": 3,
        "list": false,
        "value": 0,
        "newValue": 0
      },
      {
        "id": "26-112-0-3",
        "nodeId": 26,
        "commandClass": 112,
        "commandClassName": "Configuration",
        "endpoint": 0,
        "property": 3,
        "propertyName": "Min Level",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Min Level",
        "default": 10,
        "stateless": false,
        "commandClassVersion": 4,
        "min": 0,
        "max": 99,
        "list": false,
        "value": 0,
        "lastUpdate": 1649346421720,
        "newValue": 0
      },
      {
        "id": "26-112-0-4",
        "nodeId": 26,
        "commandClass": 112,
        "commandClassName": "Configuration",
        "endpoint": 0,
        "property": 4,
        "propertyName": "Max Level",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Max Level",
        "default": 99,
        "stateless": false,
        "commandClassVersion": 4,
        "min": 0,
        "max": 99,
        "list": false,
        "value": 99,
        "lastUpdate": 1649346421720,
        "newValue": 99
      },
      {
        "id": "26-112-0-5",
        "nodeId": 26,
        "commandClass": 112,
        "commandClassName": "Configuration",
        "endpoint": 0,
        "property": 5,
        "propertyName": "Preset Level",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Preset Level",
        "default": 0,
        "stateless": false,
        "commandClassVersion": 4,
        "min": 0,
        "max": 99,
        "list": false,
        "value": 0,
        "lastUpdate": 1649346421720,
        "newValue": 0
      },
      {
        "id": "26-112-0-6",
        "nodeId": 26,
        "commandClass": 112,
        "commandClassName": "Configuration",
        "endpoint": 0,
        "property": 6,
        "propertyName": "LED Dim Level Indicator Timeout",
        "type": "number",
        "readable": true,
        "writeable": true,
        "description": "How long the level indicators should stay illuminated after the dimming level is changed",
        "label": "LED Dim Level Indicator Timeout",
        "default": 3,
        "stateless": false,
        "commandClassVersion": 4,
        "min": 0,
        "max": 255,
        "unit": "seconds",
        "list": true,
        "allowManualEntry": true,
        "states": [
          {
            "text": "Always Off",
            "value": 0
          },
          {
            "text": "Always On",
            "value": 255
          }
        ],
        "value": 3,
        "lastUpdate": 1649346421720,
        "newValue": 3
      },
      {
        "id": "26-112-0-7",
        "nodeId": 26,
        "commandClass": 112,
        "commandClassName": "Configuration",
        "endpoint": 0,
        "property": 7,
        "propertyName": "Locator LED Status",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Locator LED Status",
        "default": 255,
        "stateless": false,
        "commandClassVersion": 4,
        "min": 0,
        "max": 255,
        "list": true,
        "allowManualEntry": false,
        "states": [
          {
            "text": "Always off",
            "value": 0
          },
          {
            "text": "LED on when switch is on",
            "value": 254
          },
          {
            "text": "LED on when switch is off",
            "value": 255
          }
        ],
        "value": 0,
        "lastUpdate": 1649346695721,
        "newValue": 0
      },
      {
        "id": "26-43-0-sceneId",
        "nodeId": 26,
        "commandClass": 43,
        "commandClassName": "Scene Activation",
        "endpoint": 0,
        "property": "sceneId",
        "propertyName": "sceneId",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Scene ID",
        "stateless": false,
        "commandClassVersion": 0,
        "min": 1,
        "max": 255,
        "list": false,
        "lastUpdate": 1649346421721
      },
      {
        "id": "26-43-0-dimmingDuration",
        "nodeId": 26,
        "commandClass": 43,
        "commandClassName": "Scene Activation",
        "endpoint": 0,
        "property": "dimmingDuration",
        "propertyName": "dimmingDuration",
        "type": "any",
        "readable": true,
        "writeable": true,
        "label": "Dimming duration",
        "stateless": false,
        "commandClassVersion": 0,
        "list": false,
        "lastUpdate": 1649346421721
      },
      {
        "id": "26-44-0-level-1",
        "nodeId": 26,
        "commandClass": 44,
        "commandClassName": "Scene Actuator Configuration",
        "endpoint": 0,
        "property": "level",
        "propertyName": "level",
        "propertyKey": 1,
        "propertyKeyName": "1",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Level (1)",
        "stateless": false,
        "commandClassVersion": 0,
        "min": 0,
        "max": 255,
        "list": false
      },
      {
        "id": "26-44-0-dimmingDuration-1",
        "nodeId": 26,
        "commandClass": 44,
        "commandClassName": "Scene Actuator Configuration",
        "endpoint": 0,
        "property": "dimmingDuration",
        "propertyName": "dimmingDuration",
        "propertyKey": 1,
        "propertyKeyName": "1",
        "type": "duration",
        "readable": true,
        "writeable": true,
        "label": "Dimming duration (1)",
        "stateless": false,
        "commandClassVersion": 0,
        "list": false,
        "value": {
          "unit": "seconds"
        },
        "lastUpdate": 1649346421722,
        "newValue": {
          "unit": "seconds"
        }
      },
      {
        "id": "26-44-0-level-2",
        "nodeId": 26,
        "commandClass": 44,
        "commandClassName": "Scene Actuator Configuration",
        "endpoint": 0,
        "property": "level",
        "propertyName": "level",
        "propertyKey": 2,
        "propertyKeyName": "2",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Level (2)",
        "stateless": false,
        "commandClassVersion": 0,
        "min": 0,
        "max": 255,
        "list": false
      },
      {
        "id": "26-44-0-dimmingDuration-2",
        "nodeId": 26,
        "commandClass": 44,
        "commandClassName": "Scene Actuator Configuration",
        "endpoint": 0,
        "property": "dimmingDuration",
        "propertyName": "dimmingDuration",
        "propertyKey": 2,
        "propertyKeyName": "2",
        "type": "duration",
        "readable": true,
        "writeable": true,
        "label": "Dimming duration (2)",
        "stateless": false,
        "commandClassVersion": 0,
        "list": false,
        "value": {
          "unit": "seconds"
        },
        "lastUpdate": 1649346421722,
        "newValue": {
          "unit": "seconds"
        }
      },

Removed about 500 more entries that are functionally identical, in order to comply with message size limits

      {
        "id": "26-44-0-level-255",
        "nodeId": 26,
        "commandClass": 44,
        "commandClassName": "Scene Actuator Configuration",
        "endpoint": 0,
        "property": "level",
        "propertyName": "level",
        "propertyKey": 255,
        "propertyKeyName": "255",
        "type": "number",
        "readable": true,
        "writeable": true,
        "label": "Level (255)",
        "stateless": false,
        "commandClassVersion": 0,
        "min": 0,
        "max": 255,
        "list": false
      },
      {
        "id": "26-44-0-dimmingDuration-255",
        "nodeId": 26,
        "commandClass": 44,
        "commandClassName": "Scene Actuator Configuration",
        "endpoint": 0,
        "property": "dimmingDuration",
        "propertyName": "dimmingDuration",
        "propertyKey": 255,
        "propertyKeyName": "255",
        "type": "duration",
        "readable": true,
        "writeable": true,
        "label": "Dimming duration (255)",
        "stateless": false,
        "commandClassVersion": 0,
        "list": false,
        "value": {
          "unit": "seconds"
        },
        "lastUpdate": 1649346421855,
        "newValue": {
          "unit": "seconds"
        }
      }
    ],
    "groups": [
      {
        "text": "Lifeline",
        "endpoint": 0,
        "value": 1,
        "maxNodes": 6,
        "isLifeline": true,
        "multiChannel": true
      }
    ],
    "neighbors": [],
    "ready": true,
    "available": true,
    "hassDevices": {},
    "failed": false,
    "inited": true,
    "hexId": "0x001d-0x0038-0x0002",
    "dbLink": "https://devices.zwave-js.io/?jumpTo=0x001d:0x0038:0x0002:0.0",
    "manufacturerId": 29,
    "productId": 2,
    "productType": 56,
    "deviceConfig": {
      "filename": "/usr/src/app/store/.config-db/devices/0x001d/zw4sf.json",
      "isEmbedded": true,
      "manufacturer": "Leviton",
      "manufacturerId": 29,
      "label": "ZW4SF",
      "description": "4 Speed Fan Controller",
      "devices": [
        {
          "productType": 56,
          "productId": 2
        }
      ],
      "firmwareVersion": {
        "min": "0.0",
        "max": "255.255"
      },
      "paramInformation": {
        "_map": {}
      },
      "metadata": {
        "inclusion": "Classic Inclusion To A Z-Wave Network\nFor older controllers Classic Inclusion is supported. Depending on the age of the controller the controller will need to be 3 to 35 feet from the device when including.\n1. To enter programming mode, hold the button for 7 seconds. The status light will turn amber, release and the status light will blink.\n2. Follow the Z-Wave controller instructions to enter inclusion mode.\n3. Tap the top or the paddle of the paddle one time. The status light will quickly flash green.\n4. The Z-Wave controller will confirm successful inclusion to the network",
        "exclusion": "Exclusion From A Z-Wave Network\nWhen removing an fan speed controller from a Z-Wave network,\nbest practice is to use the exclusion command found in the Z-Wave\ncontroller.\n1. To enter programming mode, hold the button for 7 seconds. The\nstatus light will turn amber, release and the status light will blink.\n2. Follow Z-Wave controller directions to enter exclusion mode\n3. Tap the the top of the paddle 1 time. The status light will quickly\nflash green.\n4. The Z-Wave controller will remove the device from the network",
        "reset": "Factory Default\nWhen removing a fan speed controller from a network it is best\npractice to use the exclusion process. In situations where a device\nneeds to be returned to factory default follow the following steps. A\nreset should only be used when a controller is\ninoperable or missing.\n1. Hold the top of the paddle for 7 seconds, the status light will turn amber.\nContinue holding the top paddle for another 7 seconds (total of 14 seconds).\nThe status light will quickly flash red/ amber.\n2. Release the top of the paddle and the device will reset",
        "manual": "https://products.z-wavealliance.org/ProductManual/File?folder=&filename=product_documents/3832/Draft%20ZW4SF%203-25-20.pdf"
      }
    },
    "productLabel": "ZW4SF",
    "productDescription": "4 Speed Fan Controller",
    "manufacturer": "Leviton",
    "firmwareVersion": "1.8",
    "sdkVersion": "7.12.2",
    "protocolVersion": 3,
    "zwavePlusVersion": 2,
    "zwavePlusNodeType": 0,
    "zwavePlusRoleType": 5,
    "nodeType": 1,
    "endpointsCount": 0,
    "endpointIndizes": [],
    "isSecure": false,
    "security": "None",
    "supportsSecurity": false,
    "supportsBeaming": true,
    "isControllerNode": false,
    "isListening": true,
    "isFrequentListening": false,
    "isRouting": true,
    "keepAwake": false,
    "maxDataRate": 100000,
    "deviceClass": {
      "basic": 4,
      "generic": 17,
      "specific": 0
    },
    "deviceId": "29-2-56",
    "status": "Alive",
    "interviewStage": "Complete",
    "statistics": {
      "commandsTX": 288,
      "commandsRX": 293,
      "commandsDroppedRX": 0,
      "commandsDroppedTX": 0,
      "timeoutResponse": 6,
      "rtt": 53.5,
      "rssi": -58,
      "lwr": {
        "protocolDataRate": 3,
        "repeaters": [
          2
        ],
        "rssi": -58,
        "repeaterRSSI": [
          127
        ]
      },
      "nlwr": {
        "protocolDataRate": 3,
        "repeaters": [],
        "rssi": -83,
        "repeaterRSSI": []
      }
    },
    "lastActive": 1649604560120,
    "_name": "Living Room Ceiling Fan (Living Room)",
    "lastReceive": 1649604560120,
    "lastTransmit": 1649604559869,
    "errorReceive": false,
    "errorTransmit": false
  }

@mkowalchuk were you still planning on any other changes here? I’ve got yet another flavor of GE/Jasco in-wall controller (GE/Jasco 55258 / ZW4002) and am happy to provide values or help with testing.

Either way, super grateful for people like you that are plugging in these improvements that benefit HA noobs like me!

@bkowalk, I can definitely add more if you can provide the fan-speed info and help test the PR.

Hi!

I am sorry if I am misunderstanding this thread, but how do I enable off-low-medium-high scheme in stead of the 0…100%?

I have the GE/Jasco 55258/ZW4002

Thanks!

I also have a GE 12730 and I’m not seeing the percentage change when the switch is physically interacted to dim up/down. On/off report fine when the switch is clicked though.

NVM, this is an unrelated polling issue Some ZWave devices not updating status after moving to ZWave JS - #21 by freshcoast

(Reviving a 3-year old thread, I know, but this is exactly the issue I’ve been looking for)
These are the same speeds used for the GE 14314 / ZW4002, which is the switch that Jasco sent me as a warranty replacement for the 14287 that failed. I’ve confirmed these are the right values, and as of HA 2024.5.5, the 14314 switch does not correctly change fan levels.

I’ve dumped the node information here in the hopes this can help correct the fan levels for this switch. Something looks off in the node info, though, as there are WAY too many “Scene Actuator Configuration” items for it to make sense. I had to link it rather than include the text because it was way too long to put in a post: GE14314_ZW4002_dump.json · GitHub

@mkowalchuk Is the pull request for updating the speed level mapping as simple as this: Correct fan speed level mapping for GE 14314 fan switch · strikeir13/core@510677f · GitHub

I’m not a developer so opening a pull request is beyond my skills, given what is required by the HA team. I opened an issue on it a few months ago but it went stale and got closed without any attention (understandably). It seems like a simple issue with a relatively straightforward fix, but again, I’m not a developer.