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

I’ve just finished with a PR to give the zwave_js fan component explicit stop-points for the actual speeds used by the HomeSeer FC-200+ Z-Wave fan controller, and it should be easy enough to extend my approach towards other fan controllers.

But I don’t have access to any other fan controllers, so I’m hoping to get some info from people who actually have them.

So if you’ve got another Z-Wave fan controller, I’d like the following info:

  • How many actual speeds does it support

  • What Z-Wave speed ranges map to those speeds (e.g., 1-33=low, 34-66=med, 67-99=high). Note that this is not exactly the same as the percentages in the UI.

  • A dump of the device info from zwave_js (from the “Download a dump of your network to help diagnose issues” link on the Z-Wave Integration config page, then pull out the info for the fan node).

If you’d be able to help test the PR once it’s ready, that’d help too.

GE/Jasco - In-Wall Smart Fan Control - 14287 / ZW4002

3 speeds

  • low: 1-32
  • med: 33-66
  • high: 67-99
Dump
{
    "nodeId": 24,
    "index": 0,
    "installerIcon": 1024,
    "userIcon": 1024,
    "status": 4,
    "ready": true,
    "isListening": true,
    "isRouting": true,
    "isSecure": false,
    "manufacturerId": 99,
    "productId": 12593,
    "productType": 18756,
    "firmwareVersion": "5.20",
    "zwavePlusVersion": 1,
    "location": "Office",
    "deviceConfig": {
        "filename": "/usr/src/app/store/.config-db/devices/0x0063/14287.json",
        "isEmbedded": true,
        "manufacturer": "GE/Jasco",
        "manufacturerId": 99,
        "label": "14287 / ZW4002",
        "description": "In-Wall Smart Fan Control",
        "devices": [
            {
                "productType": 18756,
                "productId": 12593
            }
        ],
        "firmwareVersion": {
            "min": "0.0",
            "max": "255.255"
        },
        "associations": {},
        "paramInformation": {
            "_map": {}
        },
        "compat": {
            "valueIdRegex": {},
            "treatBasicSetAsEvent": true,
            "removeCCs": {}
        },
        "metadata": {
            "inclusion": "1. Follow the instructions for your Z-Wave certified controller to include a device to the Z-Wave network.\n2. Once the controller is ready to include your device, press and release the top or bottom of the smart fan control switch (rocker) to include it in the network.\n3. Once your controller has confirmed the device has been included, refresh the Z-Wave network to optimize performance",
            "exclusion": "1. Follow the instructions for your Z-Wave certified controller to exclude a device from the Z-Wave network. \n2. Once the controller is ready to Exclude your device, press and release the top or bottom of the wireless smart switch (rocker) to exclude it from the network",
            "reset": "1. Quickly press ON (Top) button three (3) times then immediately press the OFF (Bottom) button three (3) times. The LED will flash ON/OFF 5 times when completed successfully.\nNote: This should only be used in the event your network’s primary controller is missing or otherwise inoperable",
            "manual": "https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/2506/Binder2.pdf"
        }
    },
    "label": "14287 / ZW4002",
    "interviewAttempts": 0,
    "endpoints": [
        {
            "nodeId": 24,
            "index": 0,
            "installerIcon": 1024,
            "userIcon": 1024,
            "deviceClass": {
                "basic": {
                    "key": 4,
                    "label": "Routing Slave"
                },
                "generic": {
                    "key": 17,
                    "label": "Multilevel Switch"
                },
                "specific": {
                    "key": 8,
                    "label": "Fan Switch"
                },
                "mandatorySupportedCCs": [
                    32,
                    38,
                    133,
                    89,
                    114,
                    115,
                    134,
                    94
                ],
                "mandatoryControlledCCs": []
            }
        }
    ],
    "values": [
        {
            "endpoint": 0,
            "commandClass": 32,
            "commandClassName": "Basic",
            "property": "currentValue",
            "propertyName": "currentValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Current value",
                "min": 0,
                "max": 99
            },
            "value": 0
        },
        {
            "endpoint": 0,
            "commandClass": 32,
            "commandClassName": "Basic",
            "property": "targetValue",
            "propertyName": "targetValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "label": "Target value",
                "min": 0,
                "max": 99
            }
        },
        {
            "endpoint": 0,
            "commandClass": 32,
            "commandClassName": "Basic",
            "property": "event",
            "propertyName": "event",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Event value",
                "min": 0,
                "max": 255
            }
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "targetValue",
            "propertyName": "targetValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "label": "Target value",
                "valueChangeOptions": [
                    "transitionDuration"
                ],
                "min": 0,
                "max": 99
            },
            "value": 66
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "duration",
            "propertyName": "duration",
            "ccVersion": 1,
            "metadata": {
                "type": "duration",
                "readable": true,
                "writeable": true,
                "label": "Transition duration"
            }
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "currentValue",
            "propertyName": "currentValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Current value",
                "min": 0,
                "max": 99
            },
            "value": 62
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "Up",
            "propertyName": "Up",
            "ccVersion": 1,
            "metadata": {
                "type": "boolean",
                "readable": true,
                "writeable": true,
                "label": "Perform a level change (Up)",
                "ccSpecific": {
                    "switchType": 2
                }
            }
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "Down",
            "propertyName": "Down",
            "ccVersion": 1,
            "metadata": {
                "type": "boolean",
                "readable": true,
                "writeable": true,
                "label": "Perform a level change (Down)",
                "ccSpecific": {
                    "switchType": 2
                }
            }
        },
        {
            "endpoint": 0,
            "commandClass": 43,
            "commandClassName": "Scene Activation",
            "property": "sceneId",
            "propertyName": "sceneId",
            "ccVersion": 0,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "label": "Scene ID",
                "valueChangeOptions": [
                    "transitionDuration"
                ],
                "min": 1,
                "max": 255
            }
        },
        {
            "endpoint": 0,
            "commandClass": 43,
            "commandClassName": "Scene Activation",
            "property": "dimmingDuration",
            "propertyName": "dimmingDuration",
            "ccVersion": 0,
            "metadata": {
                "type": "any",
                "readable": true,
                "writeable": true,
                "label": "Dimming duration"
            }
        },
        {
            "endpoint": 0,
            "commandClass": 112,
            "commandClassName": "Configuration",
            "property": 4,
            "propertyName": "Invert Switch",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "description": "Invert the ON/OFF Switch State",
                "label": "Invert Switch",
                "default": 0,
                "min": 0,
                "max": 1,
                "states": {
                    "0": "Default",
                    "1": "Invert"
                },
                "valueSize": 1,
                "format": 1,
                "allowManualEntry": false,
                "isFromConfig": true
            },
            "value": 0
        },
        {
            "endpoint": 0,
            "commandClass": 114,
            "commandClassName": "Manufacturer Specific",
            "property": "manufacturerId",
            "propertyName": "manufacturerId",
            "ccVersion": 2,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Manufacturer ID",
                "min": 0,
                "max": 65535
            },
            "value": 99
        },
        {
            "endpoint": 0,
            "commandClass": 114,
            "commandClassName": "Manufacturer Specific",
            "property": "productType",
            "propertyName": "productType",
            "ccVersion": 2,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Product type",
                "min": 0,
                "max": 65535
            },
            "value": 18756
        },
        {
            "endpoint": 0,
            "commandClass": 114,
            "commandClassName": "Manufacturer Specific",
            "property": "productId",
            "propertyName": "productId",
            "ccVersion": 2,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Product ID",
                "min": 0,
                "max": 65535
            },
            "value": 12593
        },
        {
            "endpoint": 0,
            "commandClass": 134,
            "commandClassName": "Version",
            "property": "libraryType",
            "propertyName": "libraryType",
            "ccVersion": 2,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Library type",
                "states": {
                    "0": "Unknown",
                    "1": "Static Controller",
                    "2": "Controller",
                    "3": "Enhanced Slave",
                    "4": "Slave",
                    "5": "Installer",
                    "6": "Routing Slave",
                    "7": "Bridge Controller",
                    "8": "Device under Test",
                    "9": "N/A",
                    "10": "AV Remote",
                    "11": "AV Device"
                }
            },
            "value": 3
        },
        {
            "endpoint": 0,
            "commandClass": 134,
            "commandClassName": "Version",
            "property": "protocolVersion",
            "propertyName": "protocolVersion",
            "ccVersion": 2,
            "metadata": {
                "type": "string",
                "readable": true,
                "writeable": false,
                "label": "Z-Wave protocol version"
            },
            "value": "4.5"
        },
        {
            "endpoint": 0,
            "commandClass": 134,
            "commandClassName": "Version",
            "property": "firmwareVersions",
            "propertyName": "firmwareVersions",
            "ccVersion": 2,
            "metadata": {
                "type": "string[]",
                "readable": true,
                "writeable": false,
                "label": "Z-Wave chip firmware versions"
            },
            "value": [
                "5.20"
            ]
        },
        {
            "endpoint": 0,
            "commandClass": 134,
            "commandClassName": "Version",
            "property": "hardwareVersion",
            "propertyName": "hardwareVersion",
            "ccVersion": 2,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Z-Wave chip hardware version"
            },
            "value": 255
        }
    ],
    "isFrequentListening": false,
    "maxDataRate": 100000,
    "supportedDataRates": [
        40000,
        100000
    ],
    "protocolVersion": 3,
    "supportsBeaming": true,
    "supportsSecurity": false,
    "nodeType": 1,
    "zwavePlusNodeType": 0,
    "zwavePlusRoleType": 5,
    "deviceClass": {
        "basic": {
            "key": 4,
            "label": "Routing Slave"
        },
        "generic": {
            "key": 17,
            "label": "Multilevel Switch"
        },
        "specific": {
            "key": 8,
            "label": "Fan Switch"
        },
        "mandatorySupportedCCs": [
            32,
            38,
            133,
            89,
            114,
            115,
            134,
            94
        ],
        "mandatoryControlledCCs": []
    },
    "commandClasses": [
        {
            "id": 32,
            "name": "Basic",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 38,
            "name": "Multilevel Switch",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 43,
            "name": "Scene Activation",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 86,
            "name": "CRC-16 Encapsulation",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 89,
            "name": "Association Group Information",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 90,
            "name": "Device Reset Locally",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 94,
            "name": "Z-Wave Plus Info",
            "version": 2,
            "isSecure": false
        },
        {
            "id": 112,
            "name": "Configuration",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 114,
            "name": "Manufacturer Specific",
            "version": 2,
            "isSecure": false
        },
        {
            "id": 115,
            "name": "Powerlevel",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 122,
            "name": "Firmware Update Meta Data",
            "version": 2,
            "isSecure": false
        },
        {
            "id": 133,
            "name": "Association",
            "version": 2,
            "isSecure": false
        },
        {
            "id": 134,
            "name": "Version",
            "version": 2,
            "isSecure": false
        }
    ],
    "interviewStage": "Complete",
    "deviceDatabaseUrl": "https://devices.zwave-js.io/?jumpTo=0x0063:0x4944:0x3131:5.20",
    "statistics": {
        "commandsTX": 27,
        "commandsRX": 16,
        "commandsDroppedRX": 0,
        "commandsDroppedTX": 0,
        "timeoutResponse": 0
    },
    "highestSecurityClass": -1
}

GE/Jasco - In-Wall Smart Fan Control - 12730 / ZW4002

3 speeds

  • low: 1-33
  • med: 34-67
  • high: 68-99

Yes, the ranges really are off by one compared to the other GE.

Dump
{
    "nodeId": 21,
    "index": 0,
    "status": 4,
    "ready": true,
    "isListening": true,
    "isRouting": true,
    "isSecure": false,
    "manufacturerId": 99,
    "productId": 12340,
    "productType": 18756,
    "firmwareVersion": "3.10",
    "location": "Master Bedroom",
    "deviceConfig": {
        "filename": "/usr/src/app/store/.config-db/devices/0x0063/ge_12730_zw4002.json",
        "isEmbedded": true,
        "manufacturer": "GE/Jasco",
        "manufacturerId": 99,
        "label": "12730  / ZW4002",
        "description": "In-Wall Smart Fan Control",
        "devices": [
            {
                "productType": 18756,
                "productId": 12340
            }
        ],
        "firmwareVersion": {
            "min": "0.0",
            "max": "255.255"
        },
        "associations": {},
        "paramInformation": {
            "_map": {}
        },
        "compat": {
            "valueIdRegex": {},
            "treatBasicSetAsEvent": true,
            "removeCCs": {}
        }
    },
    "label": "12730  / ZW4002",
    "interviewAttempts": 0,
    "endpoints": [
        {
            "nodeId": 21,
            "index": 0,
            "deviceClass": {
                "basic": {
                    "key": 4,
                    "label": "Routing Slave"
                },
                "generic": {
                    "key": 17,
                    "label": "Multilevel Switch"
                },
                "specific": {
                    "key": 1,
                    "label": "Multilevel Power Switch"
                },
                "mandatorySupportedCCs": [
                    32,
                    38,
                    39
                ],
                "mandatoryControlledCCs": []
            }
        }
    ],
    "values": [
        {
            "endpoint": 0,
            "commandClass": 32,
            "commandClassName": "Basic",
            "property": "currentValue",
            "propertyName": "currentValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Current value",
                "min": 0,
                "max": 99
            },
            "value": 1
        },
        {
            "endpoint": 0,
            "commandClass": 32,
            "commandClassName": "Basic",
            "property": "targetValue",
            "propertyName": "targetValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "label": "Target value",
                "min": 0,
                "max": 99
            }
        },
        {
            "endpoint": 0,
            "commandClass": 32,
            "commandClassName": "Basic",
            "property": "event",
            "propertyName": "event",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Event value",
                "min": 0,
                "max": 255
            }
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "targetValue",
            "propertyName": "targetValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "label": "Target value",
                "valueChangeOptions": [
                    "transitionDuration"
                ],
                "min": 0,
                "max": 99
            },
            "value": 0
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "duration",
            "propertyName": "duration",
            "ccVersion": 1,
            "metadata": {
                "type": "duration",
                "readable": true,
                "writeable": true,
                "label": "Transition duration"
            }
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "currentValue",
            "propertyName": "currentValue",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Current value",
                "min": 0,
                "max": 99
            },
            "value": 0
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "Up",
            "propertyName": "Up",
            "ccVersion": 1,
            "metadata": {
                "type": "boolean",
                "readable": true,
                "writeable": true,
                "label": "Perform a level change (Up)",
                "ccSpecific": {
                    "switchType": 2
                }
            }
        },
        {
            "endpoint": 0,
            "commandClass": 38,
            "commandClassName": "Multilevel Switch",
            "property": "Down",
            "propertyName": "Down",
            "ccVersion": 1,
            "metadata": {
                "type": "boolean",
                "readable": true,
                "writeable": true,
                "label": "Perform a level change (Down)",
                "ccSpecific": {
                    "switchType": 2
                }
            }
        },
        {
            "endpoint": 0,
            "commandClass": 112,
            "commandClassName": "Configuration",
            "property": 3,
            "propertyName": "LED Light",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "description": "Sets when the LED on the switch is lit.",
                "label": "LED Light",
                "default": 0,
                "min": 0,
                "max": 1,
                "states": {
                    "0": "LED on when light off",
                    "1": "LED on when light on"
                },
                "valueSize": 1,
                "format": 0,
                "allowManualEntry": false,
                "isFromConfig": true
            },
            "value": 1
        },
        {
            "endpoint": 0,
            "commandClass": 112,
            "commandClassName": "Configuration",
            "property": 4,
            "propertyName": "Invert Switch",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": true,
                "label": "Invert Switch",
                "default": 0,
                "min": 0,
                "max": 1,
                "states": {
                    "0": "No",
                    "1": "Yes"
                },
                "valueSize": 1,
                "format": 0,
                "allowManualEntry": false,
                "isFromConfig": true
            },
            "value": 0
        },
        {
            "endpoint": 0,
            "commandClass": 114,
            "commandClassName": "Manufacturer Specific",
            "property": "manufacturerId",
            "propertyName": "manufacturerId",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Manufacturer ID",
                "min": 0,
                "max": 65535
            },
            "value": 99
        },
        {
            "endpoint": 0,
            "commandClass": 114,
            "commandClassName": "Manufacturer Specific",
            "property": "productType",
            "propertyName": "productType",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Product type",
                "min": 0,
                "max": 65535
            },
            "value": 18756
        },
        {
            "endpoint": 0,
            "commandClass": 114,
            "commandClassName": "Manufacturer Specific",
            "property": "productId",
            "propertyName": "productId",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Product ID",
                "min": 0,
                "max": 65535
            },
            "value": 12340
        },
        {
            "endpoint": 0,
            "commandClass": 134,
            "commandClassName": "Version",
            "property": "libraryType",
            "propertyName": "libraryType",
            "ccVersion": 1,
            "metadata": {
                "type": "number",
                "readable": true,
                "writeable": false,
                "label": "Library type",
                "states": {
                    "0": "Unknown",
                    "1": "Static Controller",
                    "2": "Controller",
                    "3": "Enhanced Slave",
                    "4": "Slave",
                    "5": "Installer",
                    "6": "Routing Slave",
                    "7": "Bridge Controller",
                    "8": "Device under Test",
                    "9": "N/A",
                    "10": "AV Remote",
                    "11": "AV Device"
                }
            },
            "value": 6
        },
        {
            "endpoint": 0,
            "commandClass": 134,
            "commandClassName": "Version",
            "property": "protocolVersion",
            "propertyName": "protocolVersion",
            "ccVersion": 1,
            "metadata": {
                "type": "string",
                "readable": true,
                "writeable": false,
                "label": "Z-Wave protocol version"
            },
            "value": "3.67"
        },
        {
            "endpoint": 0,
            "commandClass": 134,
            "commandClassName": "Version",
            "property": "firmwareVersions",
            "propertyName": "firmwareVersions",
            "ccVersion": 1,
            "metadata": {
                "type": "string[]",
                "readable": true,
                "writeable": false,
                "label": "Z-Wave chip firmware versions"
            },
            "value": [
                "3.10"
            ]
        }
    ],
    "isFrequentListening": false,
    "maxDataRate": 40000,
    "supportedDataRates": [
        40000
    ],
    "protocolVersion": 3,
    "supportsBeaming": true,
    "supportsSecurity": false,
    "nodeType": 1,
    "deviceClass": {
        "basic": {
            "key": 4,
            "label": "Routing Slave"
        },
        "generic": {
            "key": 17,
            "label": "Multilevel Switch"
        },
        "specific": {
            "key": 1,
            "label": "Multilevel Power Switch"
        },
        "mandatorySupportedCCs": [
            32,
            38,
            39
        ],
        "mandatoryControlledCCs": []
    },
    "commandClasses": [
        {
            "id": 32,
            "name": "Basic",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 38,
            "name": "Multilevel Switch",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 112,
            "name": "Configuration",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 114,
            "name": "Manufacturer Specific",
            "version": 1,
            "isSecure": false
        },
        {
            "id": 134,
            "name": "Version",
            "version": 1,
            "isSecure": false
        }
    ],
    "interviewStage": "Complete",
    "deviceDatabaseUrl": "https://devices.zwave-js.io/?jumpTo=0x0063:0x4944:0x3034:3.10",
    "statistics": {
        "commandsTX": 3,
        "commandsRX": 1,
        "commandsDroppedRX": 0,
        "commandsDroppedTX": 0,
        "timeoutResponse": 0
    },
    "highestSecurityClass": -1
}

Thanks! I’ve used your info in PR #60517.

I managed to get some info from Leviton and Inovelli’s tech support.

Leviton ZW4SF:
0 is off, 1-25 is level 1, 26-50 is level 2, 51-75 is level 3, 76-99 is level 4

Inovelli LZW36:
0 is off, 1 is “breeze mode”, 2-33 is low, 34-66 is medium, 67-99 is high

So I’ve put together PRs for both the Leviton ZW4SF and the Inovelli LZW36, but I need some help from people who have those devices.

  1. Can anyone with the Leviton ZW4SF help test Add zwave_js speed configuration for Leviton ZW4SF fans by mkowalchuk · Pull Request #60677 · home-assistant/core · GitHub?

  2. Can anyone with an Inovelli LZW36 help test Add support for preset modes in the zwave_js fan component, and enable them for the Inovelli LZW36 by mkowalchuk · Pull Request #60947 · home-assistant/core · GitHub, and provide me with a zwave_js device dump?