O NasBlogKontakt
Zaawansowane i Poradniki

Konfiguracja Wielokliku (Multi-click)

Naucz się, jak skonfigurować jeden przycisk do obsługi wielu akcji (klik, dwuklik, przytrzymanie) w ESPHome na urządzeniach boneIO.

Konfiguracja Wielokliku (Multi-click) w ESPHome

Funkcja wielokliku (multi-click) to jedna z najpotężniejszych możliwości automatyzacji. Pozwala jednemu fizycznemu przyciskowi na ścianie wywoływać różne akcje w zależności od sposobu jego naciśnięcia.

Przykładowe zastosowania:

  • Pojedyncze kliknięcie: Włącz/wyłącz główne światło w pokoju.
  • Podwójne kliknięcie: Aktywuj scenę "relaks" (np. światło główne na 30%, włączona lampa stojąca).
  • Długie przytrzymanie: Płynnie rozjaśniaj/ściemniaj oświetlenie.

Ten poradnik pokaże Ci, jak to skonfigurować na dwa sposoby.

Wymagania Wstępne

Zanim zaczniesz, upewnij się, że:

  1. Masz zainstalowany i działający dodatek ESPHome.
  2. Twoje urządzenie boneIO jest dodane ("adoptowane") w panelu ESPHome.
  3. Wiesz, jak edytować plik konfiguracyjny YAML swojego urządzenia.
  4. Używasz przycisków monostabilnych (dzwonkowych), co jest warunkiem koniecznym do działania wielokliku.

Metoda 1: Logika bezpośrednio w ESPHome (Zalecane dla prostych akcji)

Ta metoda jest najszybsza i idealna, gdy akcje, które chcesz wywołać, dotyczą encji dostępnych bezpośrednio w ESPHome (np. włączanie/wyłączanie przekaźników w tym samym urządzeniu).

Krok 1: Przygotuj swoje encje light

Na potrzeby tego przykładu załóżmy, że masz trzy obwody oświetlenia podłączone do wyjść OUT01, OUT02 i OUT03. Twoja konfiguracja powinna zawierać podobny blok:

light:
  - platform: binary
    name: 'Główne Światło'
    output: out_01
    id: light_01
  - platform: binary
    name: 'Kinkiet'
    output: out_02
    id: light_02
  - platform: binary
    name: 'Lampa Stojąca'
    output: out_03
    id: light_03

Krok 2: Znajdź i zmodyfikuj swój binary_sensor

Odszukaj w konfiguracji wejście (binary_sensor), które chcesz zaprogramować, np. IN_01. Standardowa konfiguracja wygląda tak:

binary_sensor:
  - platform: gpio
    name: 'Przycisk Salon'
    pin:
      pcf8574: pcf_inputs_1to14
      number: 0
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - light.toggle: light_01

Usuń całą sekcję on_press. Jest ona zbyt prosta do naszych celów. Musimy ją zastąpić bardziej zaawansowaną logiką.

Krok 3: Dodaj akcję on_multi_click

W miejsce usuniętej sekcji on_press dodaj nową, o nazwie on_multi_click. To tutaj zdefiniujemy nasze akcje.

binary_sensor:
  - platform: gpio
    name: 'Przycisk Salon'
    id: in_01
    pin:
      pcf8574: pcf_inputs_1to14
      number: 0 # Odpowiada IN01
      mode:
        input: true
      inverted: true
    # Nowa, zaawansowana sekcja
    on_multi_click:
    # WAŻNE: Kolejność ma znaczenie! ESPHome sprawdza warunki od góry do dołu.
    # Najpierw definiujemy najbardziej złożone kliknięcia (np. potrójne, podwójne).
      - timing: # Podwójne kliknięcie (dwuklik)
          - ON for at most 1s   # Naciśnięcie trwało krócej niż 1 sek.
          - OFF for at most 0.5s # Puszczenie trwało krócej niż 0.5 sek.
          - ON for at most 1s   # Drugie naciśnięcie trwało krócej niż 1 sek.
          - OFF for at least 0.2s# Końcowe puszczenie
        then:
          - light.toggle: light_02 # Akcja: przełącz kinkiet
      - timing: # Długie przytrzymanie
          - ON for at least 1s   # Naciśnięcie trwało DŁUŻEJ niż 1 sek.
        then:
          - light.toggle: light_03 # Akcja: przełącz lampę stojącą
      - timing: # Pojedyncze kliknięcie
          - ON for at most 1s   # Naciśnięcie trwało krócej niż 1 sek.
          - OFF for at least 0.5s# Puszczenie trwało DŁUŻEJ niż 0.5 sek.
        then:
          - light.toggle: light_01 # Akcja: przełącz światło główne

Wskazówka: Wartości timing (np. 1s, 0.5s) możesz dostosować do swoich preferencji, aby kliknięcia były bardziej lub mniej czułe.

Po zapisaniu pliku wgraj nową konfigurację na urządzenie. Twój przycisk obsługuje teraz trzy różne akcje!

Metoda 2: Wysyłanie zdarzeń do Home Assistant (Dla zaawansowanych)

Ta metoda jest idealna, gdy chcesz, aby kliknięcie przycisku wywołało złożoną automatyzację w Home Assistant, która steruje wieloma różnymi urządzeniami (nie tylko tymi podpiętymi do boneIO).

Krok 1: Stwórz encję event w ESPHome

Najpierw musimy stworzyć "kanał" do wysyłania zdarzeń do Home Assistant. Dodaj poniższy kod na górze swojej konfiguracji YAML.

event:
  - platform: template
    name: "Zdarzenia Przycisku Salon"
    id: "in_01_events"
    event_types:
      - "single"
      - "double"
      - "long"

Krok 2: Modyfikacja akcji on_multi_click

Teraz, oprócz przełączania światła, dodamy akcję wysyłania zdarzenia do Home Assistant dla każdego rodzaju kliknięcia.

# ... (sekcja binary_sensor pozostaje bez zmian, modyfikujemy tylko sekcje 'then')

    on_multi_click:
      - timing: # Podwójne kliknięcie
          # ... (definicja czasu bez zmian)
        then:
          - light.toggle: light_02 # Akcja lokalna (opcjonalne)
          - event.trigger:
              id: in_01_events
              event_type: "double" # Wyślij zdarzenie "double" (podwójne)
      - timing: # Długie naciśnięcie
          # ... (definicja czasu bez zmian)
        then:
          - light.toggle: light_03
          - event.trigger:
              id: in_01_events
              event_type: "long" # Wyślij zdarzenie "long" (długie)
      - timing: # Pojedyncze kliknięcie
          # ... (definicja czasu bez zmian)
        then:
          - light.toggle: light_01
          - event.trigger:
              id: in_01_events
              event_type: "single" # Wyślij zdarzenie "single" (pojedyncze)

Krok 3: Utworzenie automatyzacji w Home Assistant

Po wgraniu nowej konfiguracji, w Home Assistant pojawi się nowa encja event.in01_events. Możesz teraz użyć jej do wyzwalania automatyzacji.

Przejdź do Ustawienia > Automatyzacje i sceny > Utwórz automatyzację i wybierz "Utwórz nową automatyzację". W trybie YAML wyzwalacz będzie wyglądał następująco:

# Przykładowa automatyzacja dla podwójnego kliknięcia
trigger:
  - platform: event
    event_type: esphome.in_01_events # Nazwa zdarzenia, zgodna z ID w ESPHome
    event_data:
      type: "double" # Nasłuchuj tylko zdarzenia "double"
condition: []
action:
  # Zdefiniuj tutaj, co powinno się wydarzyć w Home Assistant
  - service: scene.turn_on
    target:
      entity_id: scene.movie_night
mode: single