[ZHA] Inovelli VZM35-SN Blue Series Fan Switch

This is an adaptation of @fxlt’s fantastic [ZHA] Inovelli VZM31-SN Blue Series 2-1 Switch blueprint to support the new Inovelli Blue Series Fan Switch (VZM35-SN), codenamed “Zephyr.” As with the original blueprint, it supports ZHA.

blueprint:
  name: "Inovelli VZM35-SN Blue Series Fan Switch (ZHA)"
  description: Create automations for the Inovelli VZM35-SN using ZHA.
  domain: automation
  input:
    inovelli_switch:
      name: Inovelli VZM35-SN
      description: "List of available Inovelli VZM35-SN switches."
      selector:
        device:
          integration: zha
          manufacturer: Inovelli
          model: VZM35-SN
    ## Pressed Once
    button_1:
      name: Down paddle pressed
      description: "Action to run when down paddle is pressed once."
      default: []
      selector:
        action:
    button_2:
      name: Up paddle pressed
      description: "Action to run when up paddle is pressed once."
      default: []
      selector:
        action:
    button_3:
      name: Config button pressed
      description: "Action to run when config button is pressed once."
      default: []
      selector:
        action:
    ## Held
    button_1_hold:
      name: Down paddle held
      description: "Action to run when down paddle is held."
      default: []
      selector:
        action:
    button_2_hold:
      name: Up paddle held
      description: "Action to run when up paddle is held."
      default: []
      selector:
        action:
    button_3_hold:
      name: Config button held
      description: "Action to run when config button is held."
      default: []
      selector:
        action:
    ## Released
    button_1_release:
      name: Down paddle released
      description: "Action to run when down paddle is released."
      default: []
      selector:
        action:
    button_2_release:
      name: Up paddle released
      description: "Action to run when up paddle is released."
      default: []
      selector:
        action:
    button_3_release:
      name: Config button released
      description: "Action to run when config button is released."
      default: []
      selector:
        action:
    ## Pressed Twice
    button_1_double:
      name: Down paddle pressed twice
      description: "Action to run when down paddle is pressed twice."
      default: []
      selector:
        action:
    button_2_double:
      name: Up paddle pressed twice
      description: "Action to run when up paddle is pressed twice."
      default: []
      selector:
        action:
    button_3_double:
      name: Config button pressed twice
      description: "Action to run when config button is pressed twice."
      default: []
      selector:
        action:
    ## Pressed Thrice
    button_1_triple:
      name: Down paddle pressed three times
      description: "Action to run when down paddle is pressed three times."
      default: []
      selector:
        action:
    button_2_triple:
      name: Up paddle pressed three times
      description: "Action to run when up paddle is pressed three times."
      default: []
      selector:
        action:
    button_3_triple:
      name: Config button pressed three times
      description: "Action to run when config button is pressed three times."
      default: []
      selector:
        action:
    ## Pressed Four Times
    button_1_quadruple:
      name: Down paddle pressed four times
      description: "Action to run when down paddle is pressed four times."
      default: []
      selector:
        action:
    button_2_quadruple:
      name: Up paddle pressed four times
      description: "Action to run when up paddle is pressed four times."
      default: []
      selector:
        action:
    button_3_quadruple:
      name: Config button pressed four times
      description: "Action to run when config button is pressed four times."
      default: []
      selector:
        action:
    ## Pressed Five Times
    button_1_quintuple:
      name: Down paddle pressed five times
      description: "Action to run when down paddle is pressed five times."
      default: []
      selector:
        action:
    button_2_quintuple:
      name: Up paddle pressed five times
      description: "Action to run when up paddle is pressed five times."
      default: []
      selector:
        action:
    button_3_quintuple:
      name: Config button pressed five times
      description: "Action to run when config button is pressed five times."
      default: []
      selector:
        action:
mode: single
max_exceeded: silent
variables:
  device_id: !input "inovelli_switch"
trigger:
  - platform: event
    event_type: zha_event
condition: "{{ trigger.event.data.device_id == device_id }}"
action:
  - variables:
      command: '{{ trigger.event.data.command }}'
  - service: "logbook.log"
    data:
      name: 'ZHA'
      message: 'received event: {{ command }}'
  - choose:
      ### Button 1 (Down Paddle)
      - conditions: "{{ command == 'button_1_press' }}"
        sequence: !input button_1
      - conditions: "{{ command == 'button_1_hold' }}"
        sequence: !input button_1_hold
      - conditions: "{{ command == 'button_1_release' }}"
        sequence: !input button_1_release
      - conditions: "{{ command == 'button_1_double' }}"
        sequence: !input button_1_double
      - conditions: "{{ command == 'button_1_triple' }}"
        sequence: !input button_1_triple
      - conditions: "{{ command == 'button_1_quadruple' }}"
        sequence: !input button_1_quadruple
      - conditions: "{{ command == 'button_1_quintuple' }}"
        sequence: !input button_1_quintuple
      ### Button 2 (Upper Paddle)
      - conditions: "{{ command == 'button_2_press' }}"
        sequence: !input button_2
      - conditions: "{{ command == 'button_2_hold' }}"
        sequence: !input button_2_hold
      - conditions: "{{ command == 'button_2_release' }}"
        sequence: !input button_2_release
      - conditions: "{{ command == 'button_2_double' }}"
        sequence: !input button_2_double
      - conditions: "{{ command == 'button_2_triple' }}"
        sequence: !input button_2_triple
      - conditions: "{{ command == 'button_2_quadruple' }}"
        sequence: !input button_2_quadruple
      - conditions: "{{ command == 'button_2_quintuple' }}"
        sequence: !input button_2_quintuple
      ### Button 3 (Config Button)
      - conditions: "{{ command == 'button_3_press' }}"
        sequence: !input button_3
      - conditions: "{{ command == 'button_3_hold' }}"
        sequence: !input button_3_hold
      - conditions: "{{ command == 'button_3_release' }}"
        sequence: !input button_3_release
      - conditions: "{{ command == 'button_3_double' }}"
        sequence: !input button_3_double
      - conditions: "{{ command == 'button_3_triple' }}"
        sequence: !input button_3_triple
      - conditions: "{{ command == 'button_3_quadruple' }}"
        sequence: !input button_3_quadruple
      - conditions: "{{ command == 'button_3_quintuple' }}"
        sequence: !input button_3_quintuple

Note: There’s a bug with the ZHA quirk for this switch which prevents button press events from being fired. Inovelli has a fix and it should hopefully be deployed soon. I’ve confirmed that this blueprint works with the fix.

1 Like

Don’t both switches support the same scenes? Seems like it would be better to extend the same blueprint to support both rather than making a new one.

1 Like