Lutron Caseta Smart Dimmer - observations and configuration

In my search for the perfect smart dimmer, I have purchased, installed, and played with most of the popular brands and devices out there (at least in the zwave world).
Recently, I saw some youtubes on the Caseta Diva smart dimmer switch, and I got really excited for one reason;
This switch has a physical dimmer slider!
That’s right, you can slide the slider up and down, and have immediate dimming response, from the switch, without having to hold a button down to dim up or down. It’s a small thing, but being able to just quickly slide to the top, knowing you are at 100%, quick, instant, high WAF.
in addition, you can, of course, also set the dimming level via HA, and the switch will behave like any other smart switch, and change accordingly. the little led dimmer bar (behind the physical slider) will update to show the new dimming level.

So… now to the devil in the details.

Cons;

  • In order to use this switch, or any other Caseta device, you need to have a smart hub. - yet another integration for HA.
  • cost. these are quite expensive, 80 canadian pesos each, or 160 for the starter kit (hub+dimmer+Pico remote)
  • Not as fully featured as other smart switches. No native double-click, hold, or other events. Limited switch options for min/max dimmer settings. No option to change ramp rate.
  • lacks a neutral wire - needs an attached load to function. vampire.
  • does not remember last brightness value when turning on via HA
  • proprietary wireless / not z-wave. potentially limited range, or RF issues.

Pros;

  • physical dimmer slider.
  • instant response, very snappy, high WAF, functions like a normal switch
  • does not need a neutral wire.
  • integration appears to be all local. I will need to cut my internet one of these days just to be sure on that point…
  • Pico can control switches natively (no HA), quick and easy. Can also use Pico as a limited scene controller; single click events by default only

The hub.
I’ve read, in the past, a PRO version of the hub would be required. looks like that is no longer the case. the Smart Hub which came in my startup kit works fine, supports up to 75 devices. Setting this up was painless. Super easy. (requires ethernet and dhcp). Adding the Caseta integration to HA was also super easy. no complaints here other than i have another device (the hub) to manage.
My hub is a L-BDG2-WH

The First switch
Much like the hub setup, adding the first switch was quite easy. Requires the Caseta app to add devices.
Physically, the switch is fairly standard as far as smart switches go. It doesn’t require the additional aluminum fins on the front plate for heat dissipation, so no tabs to break off for a multi-gang install. The switch has pigtails as opposed to wire terminals; not really a pro or a con. easy install if you are using Wago or other similar connectors. The fact the switch doesn’t have even an option for a neutral cable is annoying to me. I’ve already got neutrals in all my switch boxes, and because it dones’t have a neutral, you MUST have a load attached for the switch to function. basically it will pass a small voltage through the load in order to function. While no neutral is a huge plus in a lot of retrofit cases, it also means you cant simply power the switch on a test bench without an attached load.
Once installed, easily adds into the app by holding the bottom button for 10 seconds.
The dimmer on this thing is awesome… Have i mentioned that before?
Once added to the app, showed up almost immediately in HA, as a light object.

Home assistant integration
If you simply utilize the light object that gets created by the integration, it works well enough for basic control. You can drive the dimmer value from HA by setting brightness with service light.turn_on, and it functions as you would expect from a basic switch.
you can do triggers based on turned on, turned off, and toggle ONLY.
Here is where is somewhat starts to fall apart.

Control from the physical switch: Because there is a physical dimmer slider, when you turn the light ON at the switch, the dimmer will go to the placement of the slider. No problem, and I think this is the most intuitive behaviour.

Control from HA. when you call light_on with no additional settings, the switch will turn on at 100% brightness. (does not remember prior setting) This is the most annoying part. You can turn on the switch, set the brightness to 50%, turn off, and turn on again, and it’s back to 100%. I dont know if this is a limitation of the integration, or just how the Caseta functions by default.

To correct for this, and this is where we get a little into the territory of kludgey, you can create a light template on top of the light object, and implement an input_number to keep track of the brightness. I put this together based on a few other threads i found about these and other lights. It’s a bit ugly to have to repeat this process for multiple switches.

here is my light template for my Kitchen Island:
light.kitchen_island is the Caseta entity.

  - platform: template
    lights:
      kitchen_island_t:
        unique_id: "kitchen_island_template" 
        friendly_name: "Kitchen Island"
        value_template: "{{ is_state('light.kitchen_island', 'on') }}"
        level_template: "{{ state_attr('light.kitchen_island', 'brightness')|int }}"
        turn_on:
          service: light.turn_on
          data_template:
            entity_id: light.kitchen_island
            brightness: "{{ states('input_number.kitchen_island_brightness') | int }}"
        turn_off:
          - service: input_number.set_value
            data_template:
              entity_id: input_number.kitchen_island_brightness
              value: "{{ state_attr('light.kitchen_island', 'brightness') | int }}"
          - service: light.turn_off
            entity_id: light.kitchen_island
        set_level:
          - service: light.turn_on
            data_template:
              entity_id: light.kitchen_island
              brightness: "{{ brightness }}"
          - delay: '00:00:01'
          - service: input_number.set_value
            data_template:
              entity_id: input_number.kitchen_island_brightness
              value: "{{ brightness }}"

Just using this template, and interacting only from HA, it will remember the brightness value, and restore it when you turn on.
BUT… the input_number wont update itself if you change the dimmer value via the physical switch.
It will capture the brightness value when you toggle the template off, so that might very well be good enough.
If you want the variable to always be up to date, you will also need an automation to trigger on brightness state change, as follows;

alias: kitchen Island template brightness update
description: ""
trigger:
  - platform: state
    entity_id:
      - light.kitchen_island
    attribute: brightness
condition: []
action:
  - service: input_number.set_value
    data:
      entity_id: input_number.kitchen_island_brightness
      value: "{{ state_attr('light.kitchen_island', 'brightness') }}"
mode: restart

when updating the brightness from the switch, it’s actually very good about sending state updates. it will send state updates while the slider is being adjusted to very fine detail. As such, the automation is mode:restart
**You only really need this automation if you are planning on driving other devices / settings based on the brightness value being change. Example; changing the brightness value of a second light when you physically adjust brightness value at the switch.

between the template and the automation, the switch is operating as i would expect any other smart dimmer to operate. Toggling the template light off and on again will keep the same brightness setting through the cycle.

Conclusion
I really like this switch, despite all the issues. Given the cost and integration headache with templates, I will be very selective as to which lights would get one of these switches. The lack of scene control could be a big deal for some. I will have a zooz zen32 scene controller in the same gang box as these switches, so my smarts can be taken care of with that. I do a lot of double tap logic in other rooms, and while i could make an event handler to get that to work on these, i dont think it’s worth the effort.

If another producer (zooz… looking at you) would come out with a z-wave switch that just simply rips off this design, i would switch them out and kijiji these in a heartbeat, but in the mean time, they do what i need them to do, and function beautifully as a tactile dimmer control while still being “smart”

Thanks a lot for this feedback, really helpfull :+1:
So the switch is only able to send ON/OFF/toggle event to HA ?
Could you share with us a screenshot of the ‘entities’ that are exposed in HA for the Diva smart switch ?

Have you been able to replicate a double click, or even a click that can be instantly responded to on the Diva?

With me the same experience and feeling as you! Bonus point, I can’t dim my dimmable G9 LED bulbs (corn slab style) at all!

The question remains, in your opinion, what is the best dimmer for the HA?

I’m testing some, and I’m almost concluding that the best one is a Sonoff NSPanel with an Android update running a WebBrowserContent with an HA dashboard!

How did you add it as a device to HA? I used the Lutron Caséta integration but the Diva switch cannot be detected by the integration. It works fine with the Lutron app on my phone.

The integration documentation explains that it works with the Lutron hub.

I have the Lutron hub. All of my other Lutron smart dimmers can be detected except for this Diva switch.

Late on a response, but I had the same problem when I added a bunch of new Diva’s during a remodel.

Simply go into the Lutron Caseta integration service, click the 3-dot menu and Reload. Any new devices on your bridge should show up.

Thanks to @jgudnas for the information. The brightness 100% problem when turning on from my dashboard has been bugging me. I’ll be trying to tackle that with the great information in this article. As part of my big remodel, I’ve attempted to standardize on Lutron Caseta for all lights and fan controls. It’s expensive, but it’s dead reliable from my experience. If I sell this house, the next owner has all physical controls as well without an automation system.

Hey Jared,

In your search for the perfect z-wave dimmer have you been successful?

I’m building a new house and will be outfitting with all smart dimmers and switches, likely z-wave. I have only tried Leviton so far and they are okay.

Would you recommend anything?

Thanks,
Kevin

I know I’m receiving an old thread here, but it’s helped some one issue and I’m hoping it can help with another. Have you figured out a way to adjust the trim values from HA? I’d like to automate the adjustment of the max brightness based on time of day, but it doesn’t appear that the trim values are exposed to HA. Any luck there?

I have been using Radio Ra3 now for some time and I am working on my sunata scene switches. I have a big problem where the only way to use the switch in automation is to get the ID of the device. The only way I could ascertain that ID is using the web interface to make an automation and then look at the yaml.

My BIG problem is that I created a series of automation using said ID and they stopped working. Now when I look in automation my switches are duplicated (And I tried reloading the integration to no avail). When I used the “other” id it now works - but this is going to be a problem if the identies of these switches are going to change all the time it’s not going to work? Does anyone else see this issue?

@jgudnas Is this integration still working for you? I’m testing this out on a Diva dimmer and I’m getting an error:

Failed to perform the action light/turn_on. Error rendering data template: ValueError: Template error: int got invalid input 'unknown' when rendering template '{{ states('input_number.kitchen_island_brightness') | int }}' but no default was specified

I’m using your template exactly, even renamed my device to light.kitchen_island to rule out any mistakes on my end.

It doesn’t seem to be storing the brightness value in the input, when it goes to turn it on from an off state it’s passing null (which is what the switch reports when its off)

I’ve gotten around this by using int(10) to get my desired on brightness, but it doesn’t seem to update/store any other value if i change the brightness value on the device in HA

Managed to get this to work, probably due to my lack of HA knowledge thus far. Bit of a pain in the ass to do this per Diva, but as it’s been said they have the best WAF so I’ll keep buying them.

For anyone else looking this up in the future, you need three parts:

  1. input_number to storage the brightness value (basically a global variable)
input_number:
  kitchen_sink_pendant_brightness:
    name: kitchen_sink_pendant_brightness
    initial: 128
    min: 0
    max: 255
    step: 1
  1. virtual light template
light:
  - platform: template
    lights:
      kitchen_sink_pendant_t:
        unique_id: "kitchen_sink_pendant_template" 
        friendly_name: "Kitchen Sink Pendant"
        value_template: "{{ is_state('light.kitchen_sink_pendant', 'on') }}"
        level_template: "{{ state_attr('light.kitchen_sink_pendant', 'brightness') | int }}"
        turn_on:
          service: light.turn_on
          data_template:
            entity_id: light.kitchen_sink_pendant
            brightness: "{{ states('input_number.kitchen_sink_pendant_brightness') | int }}"
        turn_off:
          - service: input_number.set_value
            data_template:
              entity_id: input_number.kitchen_sink_pendant_brightness
              value: "{{ state_attr('light.kitchen_sink_pendant', 'brightness') | int }}"
          - service: light.turn_off
            entity_id: light.kitchen_sink_pendant
        set_level:
          - service: light.turn_on
            data_template:
              entity_id: light.kitchen_sink_pendant
              brightness: "{{ brightness }}"
          - delay: '00:00:01'
          - service: input_number.set_value
            data_template:
              entity_id: input_number.kitchen_sink_pendant_brightness
              value: "{{ brightness }}"
  1. automation to update the brightness input_number if the on-dimmer adjustment is made
alias: kitchen_sink_pendant_brightness
description: ""
triggers:
  - entity_id:
      - light.kitchen_sink_pendant
    attribute: brightness
    trigger: state
conditions: []
actions:
  - data:
      entity_id: input_number.kitchen_sink_pendant_brightness
      value: "{{ state_attr('light.kitchen_sink_pendant', 'brightness') }}"
    action: input_number.set_value
mode: restart

Hopefully this helps someone out!

Huge thanks for sharing this solution. I have this working thanks to this thread. One quick question - is it necessary to set the brightness value as part of turn_off? If so can someone explain to me why?

Not not strictly necessary, but if you physically change the brightness after turning the light on it will revert the the last digitally set brightness level next time you turn it on. By collecting the current brightness number before turning it off, the next power on you’ll always have the previous brightness level.

Decided to go with Lutron Caseta dimmers & switches because I like the slider and reports of “rock solid” performance.
Their physical behavior is:

  • Clicking “on” will turn on the light to the slider’s brightness
  • Double clicking “on” will turn on the light to max brightness
  • Clicking “off” will turn off the light
  • Holding “off” will turn off the light after some time, giving you enough time to move out of the area while it is still light.

The Home Assistant integration will turn on the dimmer to maximum brightness independent of the slider’s position, which I don’t love, especially when sitting down to dinner or when the family is asleep and someone is heading to the bathroom.

To mimic the physical dimmer’s behavior, there are some good ideas above about saving the previous brightness value for each dimmer and restoring it from Home Assistant. But what I really want is to turn on the dimmer to a brightness appropriate for the time of day, mostly setting it lower in the evening and even lower for the middle of the night bathroom visit.

To implement this, I chose three times of day: Day (sun is up), Evening (sun is down, but before bed), Night (after bed). A Morning setting could be considered as well for dark winter days.

input_number’s specify the brightness for each time of day, perhaps 100 for day, 50 for evening and 10 for night.
input_number.dimmer_brightness_day (specifies brightness during “day”)
1-100 step 1

input_number.dimmer_brightness_evening (specifies brightness during “evening”)
1-100 step 1

input_number.dimmer_brightness_night (specifies brightness during “night”)
1-100 step 1

An input_datetime specifies when “night” starts.
input_datetime.nighttime (time after this is “night”)
time only

A template sensor reports the time of day based on the sun and the input_datetime
sensor.time_of_day (day (sun is up), evening (sun down, before “nighttime”) or night)
template:

{% set time = now().strftime('%H:%M:%S') %}
{% set sunrise = (states('sensor.sun_next_rising') | as_datetime | as_local).strftime('%H:%M:%S') %}
{% set nighttime = states('input_datetime.nighttime') %}

{% if is_state('sun.sun', 'above_horizon') %}
  Day
{% elif nighttime <= time or time < sunrise %}
  Night
{% else %}
  Evening
{% endif %}

And finally a script toggles a list of dimmers and sets brightness based on their state and the sensor.time_of_day.
script.toggle_dimmers_time_of_day

alias: Toggle Dimmers Time Of Day
fields:
  dimmers:  # multiple dimmers
    selector:
      entity:
        domain: light
        multiple: true
    name: Dimmers
    description: Dimmers to toggle
    required: true
sequence:
  - if:
      - condition: template  # if any are off, turn them all on to specified brightness
        value_template: "{{ 'off' in expand(dimmers) | map(attribute='state') | list }}"
    then:
      - action: light.turn_on
        data:
          brightness_pct: |
            {% if is_state('sensor.time_of_day', 'Day') %}
              {{ states('input_number.dimmer_brightness_day') | float(100.0) }}
            {% elif is_state('sensor.time_of_day', 'Evening') %}
              {{ states('input_number.dimmer_brightness_evening') | float(50.0) }}
            {% elif is_state('sensor.time_of_day', 'Night') %}
              {{ states('input_number.dimmer_brightness_night') | float(25.0) }}
            {% else %}
              100.0
            {% endif %}
        target:
          entity_id: "{{ dimmers }}"
    else:  # if all are on, turn them off
      - action: light.turn_off
        data: {}
        target:
          entity_id: "{{ dimmers }}"
mode: queued
max: 5

User Interface
A button can be configured to report the state of, and toggle a dimmer (holding the button can manually set the brightness).
Button to toggle office_desk_ceiling_light dimmer

type: horizontal-stack
cards:
  - show_name: false
    show_icon: true
    type: button
    tap_action:
      action: perform-action
      perform_action: script.toggle_dimmers_time_of_day
      target: {}
      data:
        dimmers:
          - light.office_desk_ceiling_light
    entity: light.office_desk_ceiling_light
    show_state: false

An administrative card can configure the dimmer settings

type: grid
cards:
  - type: heading
    heading: Dimmer Brightness
    heading_style: title
    icon: mdi:lightbulb-on-50
    badges:
      - type: entity
        show_state: true
        show_icon: false
        entity: sensor.time_of_day
  - type: entities
    entities:
      - entity: sensor.time_of_day
      - entity: input_number.dimmer_brightness_day
      - entity: input_number.dimmer_brightness_evening
      - entity: input_number.dimmer_brightness_night
      - entity: input_datetime.nighttime

Are you able to disable the LED light behind the slider via HA? Thinking about doing this overnight to keep bedroom nice and dark :slight_smile: