O NasBlogKontakt

Automatyzacje Wewnętrzne

Przygotuj swoje pierwsze automatyzacje wewnętrzne!

Czym są Automatyzacje Wewnętrzne?

Automatyzacje wewnętrzne to potężny sposób na tworzenie prostych, kluczowych automatyzacji, które działają bezpośrednio na Twoim sterowniku boneIO ESP. Oznacza to, że będą działać nawet wtedy, gdy Twoja główna centrala inteligentnego domu (jak Home Assistant) będzie offline. Są idealne do obsługi krytycznych funkcji, takich jak włączanie światła za pomocą przełącznika naściennego.

Podstawowa automatyzacja: Przełączanie światła

Zacznijmy od domyślnej konfiguracji, która łączy naciśnięcie przycisku ze światłem.

binary_sensor:
  - platform: gpio
    name: 'IN_01_Przycisk_Sypialnia1'
    id: in_01
    pin:
      pcf8574: pcf_inputs
      number: 0
      mode:
        input: true
      inverted: true
    on_press: # To jest nasz wyzwalacz automatyzacji
      then:
        - light.toggle: lchl_01 # To jest akcja do wykonania

light:
  - platform: monochromatic
    output: chl01
    name: 'CHL 01'
    id: chl_01
    default_transition_length: 2s
    gamma_correct: 0

W sekcji on_press: definiujemy, co dzieje się po naciśnięciu przycisku.
Akcja - light.toggle: lchl_01 przełączy stan światła o identyfikatorze light_01.

Zaawansowana automatyzacja: Multi-Click (Wielokrotne Kliknięcie)

ESPHome pozwala zdefiniować wiele akcji dla jednego przycisku w zależności od sposobu jego naciśnięcia (pojedyncze, podwójne lub długie naciśnięcie). Służy do tego komponent on_multi_click.

Skonfigurujmy jeden przycisk (in_01) do sterowania trzema różnymi światłami.

1. Cel

  • Pojedyncze kliknięcie: Przełącz chl_01.
  • Podwójne kliknięcie: Przełącz chl_02.
  • Długie naciśnięcie: Przełącz chl_03.

2. Konfiguracja

Najpierw upewnij się, że masz zdefiniowane swoje światła. Następnie w konfiguracji binary_sensor zamień on_press na on_multi_click.

# Upewnij się, że te światła są zdefiniowane w innej części Twojej konfiguracji
light:
  - platform: monochromatic
    output: chl01
    name: 'CHL 01'
    id: chl_01
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chl02
    name: 'CHL 02'
    id: chl_02
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chl03
    name: 'CHL 03'
    id: chl_03
    default_transition_length: 2s
    gamma_correct: 0

# Teraz skonfiguruj automatyzację multi-click
binary_sensor:
  - platform: gpio
    name: 'IN_01_Przycisk_MultiClick'
    id: in_01
    pin:
      pcf8574: pcf_inputs
      number: 0
      mode:
        input: true
      inverted: true
    on_multi_click:
      # Uwaga: Kolejność ma znaczenie! ESPHome sprawdza od góry do dołu.
      # Najlepiej jest definiować najbardziej złożone wzorce (najdłuższe kliknięcia) jako pierwsze.

      # 1. Akcja dla długiego naciśnięcia
      - timing:
          - ON for at least 1.4s
        then:
          - logger.log: 'Wykryto długie naciśnięcie, przełączam Światło 1'
          - light.toggle: chl_01

      # 2. Akcja dla podwójnego kliknięcia
      - timing:
          - ON for at most 1s
          - OFF for at most 0.5s
          - ON for at most 1s
          - OFF for at least 0.2s
        then:
          - logger.log: 'Wykryto podwójne kliknięcie, przełączam Światło 2'
          - light.toggle: chl_02

      # 3. Akcja dla pojedynczego kliknięcia
      - timing:
          - ON for at most 1s
          - OFF for at least 0.5s
        then:
          - logger.log: 'Wykryto pojedyncze kliknięcie, przełączam Światło 3'
          - light.toggle: chl_03

3. Jak to działa?

Automatyzacja on_multi_click sprawdza sekwencję bloków timing od góry do dołu. Wykonywany jest pierwszy, który pasuje do wzorca naciśnięcia przycisku przez użytkownika.

  • timing: Definiuje wzorzec stanów ON (wciśnięty) i OFF (puszczony). Możesz dostosować wartości czasu (np. at most 1s, at least 0.5s), aby precyzyjnie dostroić responsywność, ale domyślne ustawienia są zazwyczaj dobrym punktem wyjścia.

  • then: Ten blok zawiera akcje do wykonania, gdy wzorzec timing zostanie dopasowany. Dodaliśmy akcję logger.log, która jest bardzo pomocna przy debugowaniu automatyzacji w logach urządzenia.

Układając kliknięcia od najbardziej złożonego (długie naciśnięcie) do najprostszego (pojedyncze kliknięcie), zapewniasz, że długie naciśnięcie nie wywoła również akcji pojedynczego kliknięcia.

Rozjaśnianie świateł przy pomocy przycisku

binary_sensor:
  - platform: gpio
    name: 'IN_01'
    id: in_01
    pin:
      pcf8574: pcf_inputs
      number: 1
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - while:
            condition:
              binary_sensor.is_on: in_01
            then:
              - if:
                  condition:
                    lambda: 'return id(chl_01).current_values.get_brightness() >= 0.90f;'
                  then:
                    - light.control:
                        id: chl_01
                        brightness: 0%
                    - light.turn_off:
                        id: chl_01
                  else:
                    - light.dim_relative:
                        id: chl_01
                        relative_brightness: 5%
                        transition_length: 0.2s
              - delay: 200ms

Jak to działa?

  • Wyzwalacz on_press: Automatyzacja uruchamia się przy naciśnięciu przycisku i natychmiast wchodzi w pętlę while.
  • while z warunkiem: binary_sensor.is_on: in_01 utrzymuje działanie pętli tak długo, jak długo przycisk jest fizycznie wciśnięty.
  • Próg jasności: lambda: 'return id(chl_01).current_values.get_brightness() >= 0.90f;' odczytuje aktualną jasność światła chl_01 (0.0–1.0). Gdy osiągnie ≥ 90%, wykonywana jest sekwencja wyłączenia:
    • light.control: brightness: 0% ustawia jasność na 0 bez przejścia,
    • light.turn_off wyłącza światło, aby upewnić się, że jest w stanie OFF.
  • Rozjaśnianie krokiem: Jeśli próg nie został osiągnięty, light.dim_relative: relative_brightness: 5% zwiększa jasność o 5% z krótkim przejściem 0.2s.
  • Kadencja zmian: delay: 200ms ustala tempo powtarzania kroku w pętli (co 200 ms) aż do puszczenia przycisku lub osiągnięcia progu.

Wskazówki

  • Upewnij się, że światło o id: chl_01 jest zdefiniowane w konfiguracji light: (jak w przykładach powyżej).
  • Chcesz ściemniać zamiast rozjaśniać? Użyj wartości ujemnej, np. relative_brightness: -5%.
  • Dostosuj 5%, 0.2s i 200ms, aby zmienić wielkość kroku, płynność i szybkość reakcji.

Multi-Click: Pojedynczy klik — toggle, krótkie przytrzymanie — ściemnianie

Uwaga

Poniższy przykład nie był testowany w środowisku produkcyjnym — może wymagać dostosowań, aby działał poprawnie.

binary_sensor:
  - platform: gpio
    name: 'IN_01_MultiClick_Sciemniaj'
    id: in_01
    pin:
      pcf8574: pcf_inputs
      number: 1
      mode:
        input: true
      inverted: true
    on_multi_click:
      # 1. Krótkie przytrzymanie: ściemnianie podczas trzymania
      - timing:
          - ON for at least 0.6s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_01
              then:
                - light.dim_relative:
                    id: chl_01
                    relative_brightness: -5%
                    transition_length: 0.2s
                - delay: 200ms
      
      # 2. Pojedynczy klik: przełącz światło
      - timing:
          - ON for at most 0.5s
          - OFF for at least 0.2s
        then:
          - light.toggle: chl_01

Jak to działa?

  • Kolejność wzorców: Krótszy wzorzec pojedynczego kliknięcia jest na dole, aby nie „przechwytywał” przytrzymania.
  • Ściemniaj podczas trzymania: Gdy przycisk jest ON co najmniej 0.6s, zaczyna działać pętla, która co 200ms zmniejsza jasność o 5% aż do puszczenia.
  • Dostosowanie progów: Zmieniaj 0.6s, 0.5s i 0.2s, aby dostroić rozpoznawanie gestów — zależą od typu przycisku i oczekiwanej responsywności.

Zmiana barwy RGBW przy kliknięciu

Uwaga

Poniższy przykład nie był testowany w środowisku produkcyjnym — może wymagać dostosowań, aby działał poprawnie.

# Paleta kolorów dostępna jako select (widoczna w Home Assistant)
select:
  - platform: template
    name: "RGBW Color Preset"
    id: rgbw_palette
    optimistic: true
    options:
      - White
      - Red
      - Green
      - Blue
      - Cyan
      - Magenta
      - Yellow
      - Amber
      - Purple
    set_action:
      # White (kanał W)
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "White";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                white: 100%
                red: 0%
                green: 0%
                blue: 0%
      # Red
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Red";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 100%
                green: 0%
                blue: 0%
                white: 0%
      # Green
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Green";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 0%
                green: 100%
                blue: 0%
                white: 0%
      # Blue
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Blue";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 0%
                green: 0%
                blue: 100%
                white: 0%
      # Cyan
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Cyan";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 0%
                green: 100%
                blue: 100%
                white: 0%
      # Magenta
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Magenta";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 100%
                green: 0%
                blue: 100%
                white: 0%
      # Yellow
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Yellow";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 100%
                green: 100%
                blue: 0%
                white: 0%
      # Amber
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Amber";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 100%
                green: 60%
                blue: 0%
                white: 0%
      # Purple
      - if:
          condition:
            lambda: 'return id(rgbw_palette).state == "Purple";'
          then:
            - light.turn_on:
                id: rgbw_l
                brightness: 80%
                red: 60%
                green: 0%
                blue: 100%
                white: 0%

# Klik = następny kolor z palety
binary_sensor:
  - platform: gpio
    id: in_01
    name: "IN_01_Color_Next"
    pin:
      pcf8574: pcf_inputs
      number: 1
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - select.next: rgbw_palette

Jak to działa?

  • Paleta jako select: Umożliwia wybór i podgląd aktualnego koloru również z poziomu Home Assistant.
  • select.next na klik: Każde naciśnięcie przechodzi do kolejnego presetu i ustawia barwę na rgbw_l.
  • Przewidywalność: Ustalona lista (White, Red, Green, …) ułatwia obsługę i szybki powrót do bieli.

Wskazówki

  • Upewnij się, że masz zdefiniowaną lampę rgbw_l (typ RGBW) w sekcji light:.
  • Możesz dodać podwójny klik do szybkiego powrotu na „White” lub długie przytrzymanie do ściemniania/rozjaśniania.