Lutron Caséta Pico 4/5 Button Remote Advanced Actions (Core Integration)

This is a Blueprint that allows you to configure custom actions for all 4/5 buttons as well as additional 4/5 actions for long presses and 2/3 additional actions for double presses for a total of 10/13 actions off of a single remote. This integration uses the Core Lutron Caséta Integration unlike many others from a while ago.

Caveat: make sure that at least one of the entities is enabled for each Pico that you want to use, otherwise it will not show up in the dropdown selector.

5 Button Remote Blueprint: Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

4 Button Remote Blueprint: Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

5 Button Remote:

blueprint:
  name: Lutron Pico 5 Button Actions
  description: |
    Different Actions on Short, Long, and Double Click button presses.
    There is no Double Click for up/down as those are slower to respond and produce bad experience.
    
    Make sure you have enabled at least one Pico Event Entity for each device, they are default to not enabled as of 2023.3, otherwise they won't show up as an available device in the drop down list.
  domain: automation
  input:
    pico_id:
      name: Lutron Pico
      description: The Lutron Pico used to trigger the automations
      selector:
        device:
          model: PJ2-3BRL-GXX-X01 (Pico3ButtonRaiseLower)
          multiple: false
    short_click_action_on:
      name: On Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_up:
      name: Up Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_stop:
      name: Middle Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_down:
      name: Down Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_off:
      name: Off Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    long_click_action_on:
      name: On Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_up:
      name: Up Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_stop:
      name: Middle Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_down:
      name: Down Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_off:
      name: Off Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    double_click_action_on:
      name: On Button Double Click
      description: The action(s) to launch for a double click
      default: []
      selector:
        action: {}
    double_click_action_stop:
      name: Middle Button Double Click
      description: The action(s) to launch for a double click
      default: []
      selector:
        action: {}
    double_click_action_off:
      name: Off Button Double Click
      description: The action(s) to launch for a double click
      default: []
      selector:
        action: {}
    delay_click:
      name: Double Click Delay
      description: The time in milliseconds used for the double click detection
      default: 250
      selector:
        number:
          min: 100
          max: 1000
          unit_of_measurement: milliseconds
          step: 1
          mode: slider
    delay_hold:
      name: Hold Delay
      description: The time in milliseconds used for the hold detection
      default: 1000
      selector:
        number:
          min: 1000
          max: 4000
          unit_of_measurement: milliseconds
          step: 1
          mode: slider
trigger:
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: 'on'
    id: on_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: raise
    id: up_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: stop
    id: stop_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: lower
    id: down_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: 'off'
    id: off_pressed    
action:
  - variables:
      hold_ms: !input delay_hold
      tap_ms: !input delay_click
      pico_id: "{{ trigger.event.data.device_id }}"
      button_name: "{{ trigger.event.data.button_type }}"
  - choose:
      - conditions:
          - condition: trigger
            id: on_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: "on"
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_on
            default:
              - wait_for_trigger:
                  - platform: device
                    device_id: !input pico_id
                    domain: lutron_caseta
                    type: press
                    subtype: "on"
                timeout:
                  milliseconds: "{{ tap_ms }}"
              - choose:
                  - conditions:
                      - condition: template
                        value_template: "{{ wait.trigger == none }}"
                    sequence: !input short_click_action_on
                default: !input double_click_action_on
      - conditions:
          - condition: trigger
            id: up_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: raise
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_up
            default: !input short_click_action_up
      - conditions:
          - condition: trigger
            id: stop_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: stop
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_stop
            default:
              - wait_for_trigger:
                  - platform: device
                    device_id: !input pico_id
                    domain: lutron_caseta
                    type: press
                    subtype: stop
                timeout:
                  milliseconds: "{{ tap_ms }}"
              - choose:
                  - conditions:
                      - condition: template
                        value_template: "{{ wait.trigger == none }}"
                    sequence: !input short_click_action_stop
                default: !input double_click_action_stop
      - conditions:
          - condition: trigger
            id: down_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: lower
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_down
            default: !input short_click_action_down
      - conditions:
          - condition: trigger
            id: off_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: "off"
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_off
            default:
              - wait_for_trigger:
                  - platform: device
                    device_id: !input pico_id
                    domain: lutron_caseta
                    type: press
                    subtype: "off"
                timeout:
                  milliseconds: "{{ tap_ms }}"
              - choose:
                  - conditions:
                      - condition: template
                        value_template: "{{ wait.trigger == none }}"
                    sequence: !input short_click_action_off
                default: !input double_click_action_off
mode: single

4 Button Remote:

blueprint:
  name: Lutron Pico 4 Button Actions
  description: |
    Different Actions on Short, Long, and Double Click button presses.

    There is no Double Click for up/down as those are slower to respond and produce bad experience.
    
    Make sure you have enabled at least one Pico Event Entity for each device, they are default to not enabled as of 2023.3, otherwise they won't show up as an available device in the drop down list.
  domain: automation
  input:
    pico_id:
      name: Lutron Pico
      description: The Lutron Pico used to trigger the automations
      selector:
        device:
          model: PJ2-4B-GXX-X01 (Pico4ButtonZone)
          multiple: false
    short_click_action_on:
      name: On Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_up:
      name: Up Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_down:
      name: Down Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_off:
      name: Off Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    long_click_action_on:
      name: On Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_up:
      name: Up Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_down:
      name: Down Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_off:
      name: Off Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    double_click_action_on:
      name: On Button Double Click
      description: The action(s) to launch for a double click
      default: []
      selector:
        action: {}
    double_click_action_off:
      name: Off Button Double Click
      description: The action(s) to launch for a double click
      default: []
      selector:
        action: {}
    delay_click:
      name: Double Click Delay
      description: The time in milliseconds used for the double click detection
      default: 250
      selector:
        number:
          min: 100
          max: 1000
          unit_of_measurement: milliseconds
          step: 1
          mode: slider
    delay_hold:
      name: Hold Delay
      description: The time in milliseconds used for the hold detection
      default: 1000
      selector:
        number:
          min: 1000
          max: 4000
          unit_of_measurement: milliseconds
          step: 1
          mode: slider
trigger:
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: 'on'
    id: on_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: raise
    id: up_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: lower
    id: down_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: 'off'
    id: off_pressed    
action:
  - variables:
      hold_ms: !input delay_hold
      tap_ms: !input delay_click
      pico_id: "{{ trigger.event.data.device_id }}"
      button_name: "{{ trigger.event.data.button_type }}"
  - choose:
      - conditions:
          - condition: trigger
            id: on_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: "on"
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_on
            default:
              - wait_for_trigger:
                  - platform: device
                    device_id: !input pico_id
                    domain: lutron_caseta
                    type: press
                    subtype: "on"
                timeout:
                  milliseconds: "{{ tap_ms }}"
              - choose:
                  - conditions:
                      - condition: template
                        value_template: "{{ wait.trigger == none }}"
                    sequence: !input short_click_action_on
                default: !input double_click_action_on
      - conditions:
          - condition: trigger
            id: up_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: raise
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_up
            default: !input short_click_action_up
      - conditions:
          - condition: trigger
            id: down_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: lower
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_down
            default: !input short_click_action_down
      - conditions:
          - condition: trigger
            id: off_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: "off"
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_off
            default:
              - wait_for_trigger:
                  - platform: device
                    device_id: !input pico_id
                    domain: lutron_caseta
                    type: press
                    subtype: "off"
                timeout:
                  milliseconds: "{{ tap_ms }}"
              - choose:
                  - conditions:
                      - condition: template
                        value_template: "{{ wait.trigger == none }}"
                    sequence: !input short_click_action_off
                default: !input double_click_action_off
mode: single
8 Likes

Have been wanting something like this for a while, excellent work!

Are the new pico paddle remotes supported yet?

Awesome work but I was wondering if you can help. I have multiple Pico remote at home and half are model: PJ2-3BRL-GXX-F01 and the other half are model: PJ2-3BRL-GXX-X01… Can you add both models to the blueprint please?

Thanks Greg, this works perfect. I took the liberty to modify it for the 2-button remote too. If anyone wants it, let me know.

@mjkosin68 I’d be interested in the 2 button pick blueprint! Currently have one setup at my workbench and wanna add some extra controls to it

Hey Blinks, sorry I missed your post. Let me know if you still need it.

awesome blueprint. But I went on eBay to get another pico 5 Remote, this one has fan on the on and off, but the blueprint won’t recognize it. I enabled the entities, delete, restart, reinstall, created new account with Lutron… I’m goin nuts tonight

That is because it’s not the type the Blueprint was written for. You’ll need to look in your “Devices” list in HA, and search for “PJ2-3BRL” and find your new Pico there with it’s model number (I suspect it’s PJ2-3BRL-GWH-F01)

Select it, and you’ll need to update the Blueprint to match the model, including the part in the parentheses. Please share back so others will know what to set the model field to.

Yes its the F01… can I just add that under the model number in the yaml file of the blueprint or do I have to duplicate the blueprint and make one with that model number instead?

You can try to add it and see if it can pick up both (would be ideal) or make a separate Blueprint for that one. Let us know which worked so we can either add the new blueprint or modify the existing one.

I ended up duplicating that blueprint and just changing the model number on the copy. I tried to modify the original blueprint in different ways to let it see both at the same time but it gives me a duplicate error.

New to HA…Can you describe how to setup the raise & lower buttons. It was working by clicking multiple times but not sure how to get press & hold to raise & lower to work.
Thanks in advance!

The button names between models of 4 button remote are actually different and I had to change the script to accommodate. For the PJ2-4B-GWH-P03 model, which has Bright, Entertain, Relax and Off, the buttons are named button_1, button_2, button_3 and off. I’m not a wiz at the home assistant blueprint syntax so I’m sure this could be handled much more gracefully than I did.

Also, is there a way to enable double click for ALL the buttons? I think the way it’s set up, unless this is my fault the way I edited it, it only allows double click for two of the buttons (off and bright in this case).

blueprint:
  name: Lutron Pico 4 Button Actions - PJ2-4B-GWH-P03
  description: |
    Different Actions on Short, Long, and Double Click button presses.

    There is no Double Click for up/down as those are slower to respond and produce bad experience.

    Make sure you have enabled at least one Pico Event Entity for each device, they are default to not enabled as of 2023.3, otherwise they won't show up as an available device in the drop down list.
  domain: automation
  input:
    pico_id:
      name: Lutron Pico
      description: The Lutron Pico used to trigger the automations
      selector:
        device:
          model: PJ2-4B-GXX-P03 (Pico4ButtonScene)
          multiple: false
    short_click_action_on:
      name: Bright Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_up:
      name: Entertain Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_down:
      name: Relax Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    short_click_action_off:
      name: Off Button Short Click
      description: The action(s) to launch for a single short click
      default: []
      selector:
        action: {}
    long_click_action_on:
      name: Bright Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_up:
      name: Entertain Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_down:
      name: Relax Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    long_click_action_off:
      name: Off Button Long Click
      description: The action(s) to launch for a long click
      default: []
      selector:
        action: {}
    double_click_action_on:
      name: Bright Button Double Click
      description: The action(s) to launch for a double click
      default: []
      selector:
        action: {}
    double_click_action_off:
      name: Off Button Double Click
      description: The action(s) to launch for a double click
      default: []
      selector:
        action: {}
    delay_click:
      name: Double Click Delay
      description: The time in milliseconds used for the double click detection
      default: 250
      selector:
        number:
          min: 100
          max: 1000
          unit_of_measurement: milliseconds
          step: 1
          mode: slider
    delay_hold:
      name: Hold Delay
      description: The time in milliseconds used for the hold detection
      default: 1000
      selector:
        number:
          min: 1000
          max: 4000
          unit_of_measurement: milliseconds
          step: 1
          mode: slider
trigger:
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: "button_1"
    id: on_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: button_2
    id: up_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: button_3
    id: down_pressed
  - platform: device
    device_id: !input pico_id
    domain: lutron_caseta
    type: press
    subtype: "off"
    id: off_pressed
action:
  - variables:
      hold_ms: !input delay_hold
      tap_ms: !input delay_click
      pico_id: "{{ trigger.event.data.device_id }}"
      button_name: "{{ trigger.event.data.button_type }}"
  - choose:
      - conditions:
          - condition: trigger
            id: on_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: "button_1"
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_on
            default:
              - wait_for_trigger:
                  - platform: device
                    device_id: !input pico_id
                    domain: lutron_caseta
                    type: press
                    subtype: "button_1"
                timeout:
                  milliseconds: "{{ tap_ms }}"
              - choose:
                  - conditions:
                      - condition: template
                        value_template: "{{ wait.trigger == none }}"
                    sequence: !input short_click_action_on
                default: !input double_click_action_on
      - conditions:
          - condition: trigger
            id: up_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: button_2
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_up
            default: !input short_click_action_up
      - conditions:
          - condition: trigger
            id: down_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: button_3
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_down
            default: !input short_click_action_down
      - conditions:
          - condition: trigger
            id: off_pressed
        sequence:
          - wait_for_trigger:
              - platform: device
                device_id: !input pico_id
                domain: lutron_caseta
                type: release
                subtype: "off"
            timeout:
              milliseconds: "{{ hold_ms }}"
          - choose:
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger == none }}"
                sequence: !input long_click_action_off
            default:
              - wait_for_trigger:
                  - platform: device
                    device_id: !input pico_id
                    domain: lutron_caseta
                    type: press
                    subtype: "off"
                timeout:
                  milliseconds: "{{ tap_ms }}"
              - choose:
                  - conditions:
                      - condition: template
                        value_template: "{{ wait.trigger == none }}"
                    sequence: !input short_click_action_off
                default: !input double_click_action_off
mode: single

I’d be interested in seeing this. Could you post?

Is there a way to set rgb colors? I’m using this for Hue lights, I’d like to be able to use the on button long press to set a specific color to the lights.

Of course. I use these to set colors on sone zigbee bulbs, you may need to make an automation that triggers when you push the button.

@BongoMan:

Here’s an updated version I made for the P03 Pico, including double-click and long-press support for all buttons. Hope this helps!

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

Also added a version for the L41 Pico. See below.

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

Last but not least, a version for the dual group 4-button Picos (reporting as X21).

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.