Lutron Caseta Fan Speed vs. Percentage (core integration)

I’ve added many Lutron Caséta dimmers and switches and have them working perfectly. However, I just installed my first Lutron Caséta Smart Fan Speed Control switch (model PD-FSQN-WH) and have run into some oddities with the core Caseta integration (core-2021.7.4, Home Assistant OS on NUC). I’m hoping someone can shed some light on whether there’s an issue with the integration, documentation, or just my understanding of how things should work.

Using the physical switch, the fan has four speed settings in addition to “off”. Monitoring the switch through the HASS developer tools while using the physical switch, I see the following sequence, starting at “off” and clicking the switch up one speed each time:

off button   reported speed: off      reported percentage: 0
up button    reported speed: low      reported percentage: 25
up button    reported speed: medium   reported percentage: 50
up button    reported speed: high     reported percentage: 75
up button    reported speed: high     reported percentage: 100

The attributes also include a speed_list which contains “off”, “low”, “medium”, and “high” which correspond to what’s displayed above. The first oddity is that “high” is displayed for both 75% and 100% speed. Looking at the integration source code, I see the following line which implies there should also be a “medium_high” speed available for the 75% level:

ORDERED_NAMED_FAN_SPEEDS = [FAN_LOW, FAN_MEDIUM, FAN_MEDIUM_HIGH, FAN_HIGH]

Moving on to controlling via HASS, the core Lutron Caséta docs say "Available services: fan.turn_on , fan.turn_off , and fan.set_speed". The Fan integration docs say that fan.set_speed is deprecated, but takes a string such as “low”, “medium”, or “high”. The newer fan.set_percentage is not listed as an available service.

Using service fan.set_speed, below is what the fan reports back after receiving the associated speed command:

fan.set_speed: off      reported speed: off      reported percentage: 0
fan.set_speed: low      reported speed: medium   reported percentage: 50
fan.set_speed: medium   reported speed: high     reported percentage: 75
fan.set_speed: high     reported speed: high     reported percentage: 100

So, using fan.set_speed with “low”, “medium”, and “high” does NOT result in the correct speeds of the fan. I’m guessing this is because the Lutron switch uses percentage_step: 25 (as reported by the attributes) but fan.set_speed has only three settings, which I assume roughly translate to 33%, 67%, and 100%.

Even though it’s not listed as supported, I tried service fan.set_percentage on the switch, and it worked correctly (using 25% increments). It did still report back “speed: high” for both 75% and for 100% though, just like the first test above.

So, since fan.set_percentage works correctly, and fan.set_speed does not, should the documentation be updated to reflect this, and discourage the use of fan.set_speed? The integration source also says that fan.set_speed is the only “supported_feature” so I’d think code changes would be required as well to ensure everything’s in sync.

Wasn’t sure if I should open an issue on github before getting some input here, in case I’m confused about how things should work.

Thanks!

I had opened an issue on GitHub when this first occurred (2021.4.X or earlier, I can’t remember). I was basically told use the percentage, not set speed as the latter is deprecated. No further info, no further discussion. Yet there was no notice the set speed service was being deprecated, just a change that broke a few of my automations.

Ah, ok. I just poked around and found your issue (now closed) from earlier this year. I also did a search of pull requests (before my post I only searched open issues) and found this active pull request which looks like it should fix the issue: