MOES smart knob - ZHA

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.
This BP has been built for MOES Smart knob paired with ZHA only. you can set different action for the 2 Mods of the rotary knob.
MOD 1:
Single-double-hold press + rotate left/right
MOD 2:
single-double press + rotate left/right (no hold on mod 2)
TRIPLE CLICK to switch between mode

blueprint:
  name: "MOES Smart Knob (ZHA) - Azioni personalizzabili per modalita'"
  description: >
    Blueprint per lo smart knob MOES collegato via ZHA, con 2 modalita'
    (switch_mode, cambiate con il triple click). Ogni evento fisico ha un
    campo "azioni" vuoto da popolare tramite l'editor azioni di Home
    Assistant (UI a blocchi o YAML).


    IMPORTANTE - leggere prima di usare:

    1) Crea manualmente un helper "input_boolean" (Impostazioni > Dispositivi
       e servizi > Helper > Interruttore), es. input_boolean.knob_modo.
       L'helper viene aggiornato leggendo il valore assoluto dell'attributo
       switch_mode ad ogni triple-click. L'Unica cosa da fare è determinare quale
       valore (0 o 1) corrisponda alla modalita' fisica, vedi il campo
       "Valore attributo = modalita' 2" negli input del blueprint. Finche' non
       viene fatto il primo triple-click dopo l'installazione, lo stato dell'helper e'
       indeterminato (parte da OFF di default).

    2) Il doppio click genera lo stesso evento ZHA in entrambe le modalita'
       (il device non lo distingue a livello di payload). Per questo motivo,
       e solo per questo evento, lo smistamento mod.1/mod.2 avviene tramite
       l'helper del punto 1 e non tramite il campo azioni da solo.

    3) L'hold esiste solo in modalita' 1. In modalita' 2 il device NON genera
       alcun evento ZHA per la pressione lunga.
       
    4) Identificare quale modalità sia la 1 e quale la 2.
        Sviluppatori > Eventi, ascolta "zha_event" --> eseguire triple click
        mentre il knob è fisicamente nella modalita' che viene considerata
        "modalità 1". il campo data.args.value dell'evento con command attribute_updated contiene ora il valore della modalità due (switch_mode). Inserisci
        qui quel valore.

  domain: automation

  input:
    knob_device:
      name: Smart knob (dispositivo ZHA)
      description: Seleziona il device MOES nell'elenco (integrazione ZHA).
      selector:
        device:
          integration: zha

    mode_helper:
      name: Helper modalita'
      description: >
        input_boolean da creare a mano. Il valore viene impostato in automatico
        ad ogni triple-click. Usato SOLO per smistare
        il doppio click.
      selector:
        entity:
          domain: input_boolean

    mode2_attribute_value:
      name: Valore attributo switch_mode = modalita' 2
      description: >
        Il triple click alterna l'attributo switch_mode tra 0 e 1. Vedi punto 4 sopra.
      default: "0"
      selector:
        select:
          options:
            - "0"
            - "1"

    action_click_m1:
      name: "[Mod.1] Click singolo"
      default: []
      selector:
        action: {}

    action_doppio_m1:
      name: "[Mod.1] Doppio click"
      default: []
      selector:
        action: {}

    action_hold_m1:
      name: "[Mod.1] Hold (pressione lunga)"
      default: []
      selector:
        action: {}

    action_rotate_dx_m1:
      name: "[Mod.1] Rotazione destra"
      default: []
      selector:
        action: {}

    action_rotate_sx_m1:
      name: "[Mod.1] Rotazione sinistra"
      default: []
      selector:
        action: {}

    action_click_m2:
      name: "[Mod.2] Click singolo"
      default: []
      selector:
        action: {}

    action_doppio_m2:
      name: "[Mod.2] Doppio click"
      default: []
      selector:
        action: {}

    action_rotate_dx_m2:
      name: "[Mod.2] Rotazione destra"
      default: []
      selector:
        action: {}

    action_rotate_sx_m2:
      name: "[Mod.2] Rotazione sinistra"
      default: []
      selector:
        action: {}

variables:
  mode_helper: !input mode_helper
  mode2_attribute_value: !input mode2_attribute_value

trigger:
  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: remote_button_short_press
    id: click_singolo_m1

  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: remote_button_double_press
    id: click_doppio

  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: remote_button_long_press
    id: hold

  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: right
    id: rotate_destra_m1

  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: left
    id: rotate_sinistra_m1

  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: toggle
    id: click_singolo_m2

  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: step
      cluster_id: 8
    id: rotate_m2

  - platform: event
    event_type: zha_event
    event_data:
      device_id: !input knob_device
      command: attribute_updated
    id: cambio_modo

condition: []

action:
  - choose:
      # ---------- MODALITA' 1 ----------
      - conditions: "{{ trigger.id == 'click_singolo_m1' }}"
        sequence: !input action_click_m1

      - conditions: "{{ trigger.id == 'hold' }}"
        sequence: !input action_hold_m1

      - conditions: "{{ trigger.id == 'rotate_destra_m1' }}"
        sequence: !input action_rotate_dx_m1

      - conditions: "{{ trigger.id == 'rotate_sinistra_m1' }}"
        sequence: !input action_rotate_sx_m1

      # ---------- MODALITA' 2 ----------
      - conditions: "{{ trigger.id == 'click_singolo_m2' }}"
        sequence: !input action_click_m2

      - conditions: "{{ trigger.id == 'rotate_m2' and trigger.event.data.params.step_mode == 0 }}"
        sequence: !input action_rotate_dx_m2

      - conditions: "{{ trigger.id == 'rotate_m2' and trigger.event.data.params.step_mode == 1 }}"
        sequence: !input action_rotate_sx_m2

      # ---------- DOPPIO CLICK: evento identico in entrambe le modalita', smistato via helper ----------
      - conditions: "{{ trigger.id == 'click_doppio' and is_state(mode_helper, 'off') }}"
        sequence: !input action_doppio_m1

      - conditions: "{{ trigger.id == 'click_doppio' and is_state(mode_helper, 'on') }}"
        sequence: !input action_doppio_m2

      # ---------- TRIPLE CLICK: aggiorna l'helper leggendo il valore assoluto ----------

      - conditions: >
          {{ trigger.id == 'cambio_modo'
             and (trigger.event.data.args.value | int) == (mode2_attribute_value | int) }}
        sequence:
          - service: input_boolean.turn_on
            target:
              entity_id: "{{ mode_helper }}"

      - conditions: >
          {{ trigger.id == 'cambio_modo'
             and (trigger.event.data.args.value | int) != (mode2_attribute_value | int) }}
        sequence:
          - service: input_boolean.turn_off
            target:
              entity_id: "{{ mode_helper }}"

mode: queued
max: 10