# Dwie funkcje na jednym GPIO?

**URL:** <https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295>\
**Category:** ESPHome\
**Tags:** esphome\
**Created:** [3 Luty 2025 11:08 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295 "2025-02-03T11:08:28Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Autor:** ![Wojteck](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/w/d26b3c/32.png) [@Wojteck](https://forum.arturhome.pl/u/Wojteck)\
**Data wpisu:** [3 Luty 2025 11:08 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/1 "2025-02-03T11:08:28Z")

</div>

Cześć.  
Czy możliwe jest aby do jednego GPIO w esp przypisać dwie różne funkcje? Zrobiłem termostat do lodówki na ~~ESP02~~ ESP01S. Totalne minimum moduł z przekaźnikiem i wyświetlaczem oled plus DS18B20. Mam już wykorzystane wszystkie GPIO: 2 na I2C do wyświetlacza, jeden na 1wire do dallasa i jeden na przekaźnik. Czy dałoby się zrobić tak aby GPIO 1 wire współdzielić z przyciskiem ? Odczyt temperatury może odbywać się co minutę lub nawet dwie a przycisk miałby działać jako zmiana temperatury zadanej termostatu w pętli np. 6 zaprogramowanych temperatur ( 0/2/4/6/8/10 st.) Czyli nic nie klikam i esp co minutkę czyta temperaturę klikam raz esp zmienia temp. o jeden kroczek z np. 2 stopnie na 4 i wraca do czytania temperatury. Nie chce zaprzęgać do tego większej płytki bo to nie ma sensu ani dokładać scalaka i klawiatury i2c. Mogę sterować temperaturą z HA lub www ale guziczek spodobałby pełną autonomię. Wejście 1wire jest teraz podciągnięte a button mógłby być na niskim stanie.

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [3 Luty 2025 11:24 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/2 "2025-02-03T11:24:45Z")

</div>

> [@Wojteck](#):
>
> Czy możliwe jest aby do jednego GPIO w esp przypisać dwie różne funkcje?

Nie, nie jest to możliwe.  
(wręcz wprowadzono kontrolę GPIO już na poziomie lintera by tak nie robić, bo ludzie zanadto kombinowali)  
Dodatkowo akurat magistral zazwyczaj nie wolno zwierać do masy, 1-wire póki co z tego co wiem w ESPHome nie ma obsługi strong-pullup (w ESP to i tak wymaga 2 pinów GPIO, bo nie jest realizowane wewnątrz MCU), ale w wielu innych realizacjach ma i to jest przyczyna formalna dla której nie wolno jej zwierać do masy, bo strong-pullup normalnie podpina magistralę do `Vcc`, więc robiłbyś zwarcie na zasilaniu MCU.

W ciemno podpowiem, że jeśli to ESP8266 to na przycisk wykorzystaj GPIO0 (które pewnie masz wolne)

PS to taka płytka ESP02?

 ![esp-02-modul-wifi-z-esp8266-bez-anteny1](https://forum.arturhome.pl/uploads/default/original/3X/9/6/9654932bc99d847487a4e76cc5b97c6b48c6f1d4.jpeg)  
to ja tam widzę 5 GPIO do potencjalnego wykorzystania

skorzystaj z bryku

> **[ESP8266 Pinout Reference: Which GPIO pins should you use? | Random Nerd...](https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/)**
>
> The ESP8266 comes with 33 GPIOs with multiple functions. This article is a simple and easy to follow reference guide for the ESP8266 NodeMCU GPIOs.

w kwestii przeprojektowania konstrukcji - no masz jeszcze możliwość zastąpić Dallasa 1-wire dowolnym czujnikiem temperatury I2C

---

<div class="post-metadata">

**Autor:** ![Wojteck](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/w/d26b3c/32.png) [@Wojteck](https://forum.arturhome.pl/u/Wojteck)\
**Data wpisu:** [3 Luty 2025 11:48 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/3 "2025-02-03T11:48:38Z")

</div>

Na GPIO00 jest przekaźnik to gotowy chińczyk składający się z dwóch modułów przekaźnik ze stabilizatorem 3v3, przyciskiem reset i led plus sam moduł ale mój błąd nie 02 tylko 01S.  
 ![](https://ae-pic-a1.aliexpress-media.com/kf/Hfe32b285fdb743d0a2f0bd41440bb8bcf.jpg_960x960q75.jpg_.avif)

---

<div class="post-metadata">

**Autor:** ![angler](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/angler/32/31484_2.png) [@angler](https://forum.arturhome.pl/u/angler)\
**Data wpisu:** [3 Luty 2025 12:02 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/4 "2025-02-03T12:02:00Z")

</div>

> [@Wojteck](#):
>
> na ESP02

Wprowadzasz w błąd, to jest ESP-01 a nie ESP02

 ![image](https://forum.arturhome.pl/uploads/default/original/3X/f/9/f9eac6f754084799fbc1e478ab7c37891f12cb26.png)

> [@Wojteck](#):
>
> Nie chce zaprzęgać do tego większej płytki bo to nie ma sensu

Dla mnie nie ma sensu stosowanie ESP-01 w 2025 roku. To strasznie nieudana konstrukcja jest.

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [3 Luty 2025 12:04 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/5 "2025-02-03T12:04:26Z")

</div>

No tak na ESP-01s to nie ma szału…

> [@angler](#):
>
> Dla mnie nie ma sensu stosowanie ESP-01 w 2025 roku. To strasznie nieudana konstrukcja jest.

No to w założeniu konstrukcyjnie jest “modem WiFi” (prosty konwerter UART na WiFi), ale nie uważam, że to już kompletnie bezużyteczna konstrukcja - wciąż się nadaje właśnie w takim charakterze w jakim była projektowana, a oprócz tego do usmartowienia gotowych czujników PM czy CO2 itd..

---

<div class="post-metadata">

**Autor:** ![Wojteck](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/w/d26b3c/32.png) [@Wojteck](https://forum.arturhome.pl/u/Wojteck)\
**Data wpisu:** [3 Luty 2025 12:05 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/6 "2025-02-03T12:05:02Z")

</div>

Już się poprawiłem ale rozwiązaniem pewnie będzie dolutowanie kolejnego pinu bezpośrednio pod esp. Pewnie i nie ma sensu ale mam i chcę wykorzystać narazie działa to obecnie w ramach nauki esp.

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [3 Luty 2025 12:05 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/7 "2025-02-03T12:05:41Z")

</div>

Można i tak, ja bym wymienił czujnik temperatury na inny.

---

<div class="post-metadata">

**Autor:** ![Wojteck](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/w/d26b3c/32.png) [@Wojteck](https://forum.arturhome.pl/u/Wojteck)\
**Data wpisu:** [3 Luty 2025 12:18 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/8 "2025-02-03T12:18:04Z")

</div>

Z samym dallasem z Chin też się namęczyłem. Test na Arduino: działa odczytuje numer i temperaturę w esp już nie wykryty. Niestety chińczyki miały serię dziwnych podróbek chyba a ja się nastudiowalem o problemach z dallasami w esp sprzed roku po aktualizacji. Zatem jaki czujnik ? Bo dla zabawy miałem dodać drugiego dallasa do zamrażalnika tylko do odczytu.

---

<div class="post-metadata">

**Autor:** ![angler](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/angler/32/31484_2.png) [@angler](https://forum.arturhome.pl/u/angler)\
**Data wpisu:** [3 Luty 2025 12:19 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/9 "2025-02-03T12:19:50Z")

</div>

Jak ktoś ma w szufladzie to i może tak, ale jak miałbym kupować coś budżetowego pod przekaźnik, to raczej szukał bym czegoś bardziej wszechstronnego jak np. płytka HW-622

> **[HW-622 ESP8266 Relay Board Configuration for Tasmota](https://templates.blakadder.com/HW-622.html)**
>
> Configure your smart relay board to work with Tasmota open source firmware.

A dla minimalistycznych zastosowań jak podłączenie czujników, to coś z nowych mikrobowych płytek np. ESP32-C3 (podobno możliwe dla Deep Sleep ~5 µA).

> **[Seeed Studio XIAO ESP32C3 Development Board (XIAO-ESP32-C3) Configuration for...](https://templates.blakadder.com/seeedstudio_XIAO_ESP32C3.html)**
>
> Configure your smart development board to work with Tasmota open source firmware.

 ![image](https://forum.arturhome.pl/uploads/default/original/3X/e/0/e0a83690b9d1b6ccdffb9d6af786c146b5cd4363.jpeg)

---

<div class="post-metadata">

**Autor:** ![RobinI30](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/robini30/32/5835_2.png) [@RobinI30](https://forum.arturhome.pl/u/RobinI30)\
**Data wpisu:** [3 Luty 2025 12:22 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/10 "2025-02-03T12:22:52Z")

</div>

Stan pinu można zawsze odczytać za pomocą digitalRead(pin\_nr) bez względu na kierunek.  
Jeśli wyjście będzie ustawione jako pullup to zwarcie przycisku do GND można bezpiecznie wykryć, trzeba tylko pamiętać aby po skończonej operacji transmisji wyjście zostawić w stanie H. Jest to możliwe w niektórych zastosowaniach, tylko trzeba to programowo sprytnie zrobić.  
To jest proste do sprawdzenia.

Kilka sztuczek na GPIO dla ESP01

> **[How to Use ESP-01 ESP-01S Pins and Leds](https://www.instructables.com/How-to-use-the-ESP8266-01-pins/)**
>
> How to Use ESP-01 ESP-01S Pins and Leds: Updated 2nd January 2022 – added notes on programming/leds and WiFi config via webpage and the ESP-01S version
> Updated 24th December 2021 – added note on preventing GOIO0 relay flicker on startup
> Updated...

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [3 Luty 2025 12:40 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/11 "2025-02-03T12:40:33Z")

</div>

> [@angler](#):
>
> dla minimalistycznych zastosowań jak podłączenie czujników, to coś z nowych mikrobowych płytek np. ESP32-C3

Oczywiście się z tym zgadzam, C3 z założenia ma być następcą 8266/8285 które od dawna mają status NRND i chyba nawet zostały wycofane z produkcji, ale w sklepach będą dostępne jeszcze przez lata (w szufladach też u mnie wala się jeszcze chyba więcej niż 5 szt ESP-01s. dla których nie mam sensownego zastosowania).

@Wojteck  
Jeśli chodzi o stosunkowo tanie czujniki na magistralę I2C to jest ich sporo, w zasadzie wszystkie to mutisensory oprócz temperatury zmierzysz coś jeszcze)

> **[AHT10 Temperature+Humidity Sensor](https://esphome.io/components/sensor/aht10/)**
>
> Instructions for setting up AHT10 temperature and humidity sensors

> **[AM2320 Temperature+Humidity Sensor](https://esphome.io/components/sensor/am2320/)**
>
> Instructions for setting up AM2320 temperature and humidity sensors

> **[BMP085 Temperature+Pressure Sensor](https://esphome.io/components/sensor/bmp085/)**
>
> Instructions for setting up BMP085 temperature and temperature sensors

> **[BMP280 Temperature+Pressure Sensor](https://esphome.io/components/sensor/bmp280/)**
>
> Instructions for setting up BMP280 temperature and pressure sensors with ESPHome

> **[DHT12 Temperature+Humidity Sensor](https://esphome.io/components/sensor/dht12/)**
>
> Instructions for setting up DHT12 temperature and humidity sensors

> **[SHT3X-D Temperature+Humidity Sensor](https://esphome.io/components/sensor/sht3xd/)**
>
> Instructions for setting up SHT31-D/SHT3x and SHT85 temperature and humidity sensors

---

<div class="post-metadata">

**Autor:** ![Wojteck](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/w/d26b3c/32.png) [@Wojteck](https://forum.arturhome.pl/u/Wojteck)\
**Data wpisu:** [3 Luty 2025 14:50 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/12 "2025-02-03T14:50:52Z")

</div>

No tak ale wszystkie to moduły z czujnikami nie wejdą mi kapilarę, którą włożę do lodówki. Na pomiar energii kupiłem już ESP32-C3 mini ale ESP01 czy 02 jeszcze są - czekały aż będzie więcej czasu na domową automatykę. ESP02 zastąpiły częściowo moduły z urządzeń Tuya.  
Co do tego termostatu to dolutuję DPIO do buttona tak będzie najprościej bo miejsca w pamięci też za dużo już nie ma a chciałbym dopisać do opcji displaya aby naciśnięcie buttona pokazywało na chwilę ustawioną wartość i wyświetlacz wrócił do wyświetlania aktualnej temp chociaż nie wiem jeszcze jak tego dokonać.  
Kod w chwili obecnej wygląda tak:

```auto
esphome:
  name: lodwifi1
  friendly_name: LodWiFi1
esp8266:
  board: esp01_1m
logger:
api:
  encryption:
    key: "9tSQURTFD0PLcx+aOA+v+aJZsOqdpYRein6rcA9Qp8A="
ota:
  - platform: esphome
    password: "1dbc62cf65ece4e290c6d7651e3c6803"
wifi:
  networks:
    - ssid: KOTLOWNIA
      password: !secret wifi_password_1
    - ssid: SALON
      password: !secret wifi_password_2
    - ssid: PODDASZE
      password: !secret wifi_password_3
    - ssid: PIWnica
      password: !secret wifi_password_4
  manual_ip:
    static_ip: 192.168.1.78
    gateway: 192.168.1.1
    subnet: 255.255.255.0
    dns1: 192.168.1.1
    dns2: 91.234.8.8
  ap:
    ssid: !secret wifi_ap_ssid
    password: !secret wifi_ap_password
captive_portal: null
web_server:
  port: 80
  version: 3
  auth:
    username: !secret web_username
    password: !secret web_password
time:
  - id: time_provider
    platform: homeassistant
one_wire:
  - platform: gpio
    pin: GPIO02      
sensor:
  - platform: dallas_temp
    id: T_lodowka
    name: "T_lodowka"
    update_interval: 30s
    resolution: 12
    accuracy_decimals: 1
text_sensor:
  - platform: wifi_info
    ip_address:
      name: ESP IP Address
    ssid:
      name: ESP Connected SSID
climate:
  - platform: thermostat
    name: "Lodowka"
    sensor: "T_lodowka"
    min_cooling_off_time: 300s
    min_cooling_run_time: 120s
    min_idle_time: 60s
    cool_deadband: 1 °C
    cool_overrun: 1 °C 
    cool_action:
      - switch.turn_on: cool
    idle_action:
      - switch.turn_off: cool
    default_preset: 6°C
    preset:
      - name: 0°C
        default_target_temperature_high: 0 °C
        mode: COOL
      - name: 1°C
        default_target_temperature_high: 1 °C
        mode: COOL        
      - name: 2°C
        default_target_temperature_high: 2 °C
        mode: COOL        
      - name: 3°C
        default_target_temperature_high: 3 °C
        mode: COOL
      - name: 4°C
        default_target_temperature_high: 4 °C
        mode: COOL
      - name: 6°C
        default_target_temperature_high: 6 °C
        mode: COOL
      - name: 8°C
        default_target_temperature_high: 8 °C 
        mode: COOL
    visual:
     min_temperature: -2 °C
     max_temperature: 10 °C
     temperature_step: 1 °C    
switch:
  - platform: gpio
    pin: GPIO00
    name: "Chlodzenie"
    id: cool
    inverted: true
font:
  - file: 'arial.ttf'
    id: font1
    size: 50
i2c:
  sda: GPIO1 # Change this to your SDA pin
  scl: GPIO3 # Change this to your SCL pin
  scan: false
display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    lambda: |-
       it.printf(2, 5, id(font1), "%.1f°C", id(T_lodowka).state);
```

Poprawki i uwagi mile widziane wraz z sugestiami jak ogarnąć zmianę opcji buttonem i jej wyświetlenie.

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [3 Luty 2025 15:07 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/13 "2025-02-03T15:07:19Z")

</div>

W tym YAMLu nie masz żadnej automatyki, więc ja bym sugerował użyć klik i dwuklik (np. 1 klik przejdzie z odczytu temperatury do trybu ustawiania, a np. kolejnymi dwuklikami możesz zmieniać wartości)  
[Binary Sensor Automation](https://esphome.io/components/binary_sensor/#binary-sensor-automation)

a do wyświetlania użyć skrypt np. w tym guście  
[Display pages alternative](https://esphome.io/cookbook/lambda_magic#display-pages-alternative)

W ogóle to warto przestudiować jakieś konstrukcje, które już ktoś inny “zapiął na ostatni guzik” - czy szukałem długo? no może z 5 minut, ale to tylko dlatego, że analizowałem czy wyniki będą użyteczne, ale to trafienia z pierwszej strony wyników w google…

> **[Work in progress! esphome thermostat](https://community.home-assistant.io/t/work-in-progress-esphome-thermostat/694436/25?u=szopen)**
>
> @GreyLinux thank you for taking the time to document your journey - you have helped me tremendously. I’ve been inspired to share my progress as well in case anyone would find it helpful for themselves. I used the following esp32 device and...

> **[GitHub - 3ative/thermostat-project-v3: A Standalone ESPHome Thermostat with OLED Display...](https://github.com/3ative/thermostat-project-v3)**
>
> A Standalone ESPHome Thermostat with OLED Display and Rotary Encoder Control

to że zdecydowałeś się na spartański sprzęt nie znaczy, że twój kod będzie jakoś specjalnie prostszy (w tej chwili masz za sobą jakieś 2% roboty)

a odnośnie stosowania wieloklików tu jest ładny przykład

> **[boneIO Open Source Smart Home](https://boneio.eu/docs/esphome/multi_click)**
>
> boneIO Open Source Smart Home - # How to configure multi-click on Esphome
> 
> Prerequisites:
> 
> \- Esphome addon installed, for installation instruction go to \[Installation instructions\](/docs/esphome/install\_esphome\_addon)

---

<div class="post-metadata">

**Autor:** ![Wojteck](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/w/d26b3c/32.png) [@Wojteck](https://forum.arturhome.pl/u/Wojteck)\
**Data wpisu:** [31 Grudzień 2025 17:25 UTC](https://forum.arturhome.pl/t/dwie-funkcje-na-jednym-gpio/14295/14 "2025-12-31T17:25:35Z")

</div>

Czas pokazał, że ESP-01 to był jednak błąd - ze względu na małą pamięć aktualizacja przez WiFi okazała się niemożliwa. Zimą w piwnicy nie używam lodówki a od majfriendów kupiłem kilka ESP32-C3-supermini i przy pomocy ChatGPT udało się zrobić prosty sterownik do lodówki.  
Jest jeszcze miejsce i być może dodam wygaszacz wyświetlacza, czujnik otwarcia drzwi, który automatycznie włączy wyświetlacz oraz może jakiś buzzer - alarm zbyt długo otwartych drzwi i przekroczenia granicznej temperatury względnie zbyt długiego działania sprężarki. Na chwilę obecną działa i jestem zadowlniony. 😄  
Wklejam może się komuś przyda albo coś poprawi.

```auto
esphome:
  name: lodwifi1
  friendly_name: LodWiFi1
esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: esp-idf
logger:
api:
  encryption:
    key: " *****************"
ota:
  - platform: esphome
    password: " ***********"
wifi:
  networks:
    - ssid: !secret wifi_ssid_1
      password: !secret wifi_password_1
    - ssid: !secret wifi_ssid_2
      password: !secret wifi_password_2
    - ssid: !secret wifi_ssid_3
      password: !secret wifi_password_3
    - ssid: !secret wifi_ssid_4
      password: !secret wifi_password_4
    - ssid: !secret wifi_ssid_5
      password: !secret wifi_password_5
  manual_ip:
    static_ip: 192.168.1.78
    gateway: 192.168.1.1
    subnet: 255.255.255.0
    dns1: 192.168.1.1
    dns2: 91.234.8.8
  ap:
    ssid: LodowkaWiFi
    password: !secret wifi_ap_password
captive_portal: null
web_server:
  port: 80
  version: 3
  auth:
    username: !secret web_username
    password: !secret web_password
time:
  - id: time_provider
    platform: homeassistant

status_led:
    pin:
      number: GPIO8
text_sensor:
  - platform: wifi_info
    ip_address:
      name: IP Address
    ssid:
      name: SSID
    mac_address:
      name: Mac Address
    scan_results:
      name: Scan Results
  - platform: version
    name: "Version"
button:
  - platform: restart
    name: Restart

one_wire:
  - platform: gpio
    pin: GPIO4

sensor:
  - platform: dallas_temp
    id: T_lodowka
    name: Temp. chł.
    address: 0xdbf2019177014428
    update_interval: 30s
    accuracy_decimals: 1
  - platform: dallas_temp
    id: T_zamr
    name: Temp. zamr.
    address: 0xec52c4c735646128
    update_interval: 30s
    accuracy_decimals: 1

switch:
  - platform: gpio
    pin: GPIO5
    id: cool
    name: Chłodzenie
    inverted: false

  - platform: template
    id: eco_mode
    name: Tryb ECO
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF

globals:
  - id: temp_index
    type: int
    restore_value: true
    initial_value: '3'

  - id: show_set_temp
    type: bool
    restore_value: false
    initial_value: 'false'

  - id: show_set_until
    type: uint32_t
    restore_value: false
    initial_value: '0'

climate:
  - platform: thermostat
    id: cooler
    name: Lodówka
    sensor: T_lodowka

    min_cooling_run_time: 180s
    min_cooling_off_time: 300s
    min_idle_time: 60s

    cool_deadband: 1.0
    cool_overrun: 1.0

    cool_action:
      - switch.turn_on: cool
    idle_action:
      - switch.turn_off: cool

    visual:
      min_temperature: 0
      max_temperature: 8
      temperature_step: 1

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO3
      inverted: true
      mode:
        input: true
        pullup: true
    id: mode
    name: Przycisk

    filters:
      - delayed_on: 30ms
      - delayed_off: 30ms

    on_multi_click:
      # DWUKLIK – ECO
      - timing:
          - ON for 40ms to 500ms
          - OFF for 40ms to 500ms
          - ON for 40ms to 500ms
        then:
          - switch.toggle: eco_mode
      # KRÓTKIE – ZMIANA TEMPERATURY
      - timing:
          - ON for 500ms to 2000ms
        then:
          - lambda: |-
              if (id(eco_mode).state) {
                id(temp_index)++;
                if (id(temp_index) > 2) id(temp_index) = 0;
                float eco_temps[3] = {6, 7, 8};
                auto call = id(cooler).make_call();
                call.set_target_temperature(eco_temps[id(temp_index)]);
                call.set_mode(climate::CLIMATE_MODE_COOL);
                call.perform();
                id(show_set_temp) = true;
                id(show_set_until) = millis() + 3000;
              } else {
                id(temp_index)++;
                if (id(temp_index) > 4) id(temp_index) = 0;
                float normal_temps[5] = {0, 2, 4, 6, 8};
                auto call = id(cooler).make_call();
                call.set_target_temperature(normal_temps[id(temp_index)]);
                call.set_mode(climate::CLIMATE_MODE_COOL);
                call.perform();
                id(show_set_temp) = true;
                id(show_set_until) = millis() + 3000;
              }
      # DŁUGIE – przełącz ON/OFF
      - timing:
          - ON for 3s to 5s
        then:
          - lambda: |-
              if (id(cooler).mode == climate::CLIMATE_MODE_OFF) {
                // Włącz termostat z ostatnią temperaturą
                auto call = id(cooler).make_call();
                call.set_mode(climate::CLIMATE_MODE_COOL);
                call.perform();
              } else {
                // Wyłącz termostat
                auto call = id(cooler).make_call();
                call.set_mode(climate::CLIMATE_MODE_OFF);
                call.perform();
              }
i2c:
  sda: GPIO6
  scl: GPIO7

font:
  - file: "arial.ttf"
    id: font_big
    size: 42

  - file: "arial.ttf"
    id: font_small
    size: 18

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    lambda: |-
      uint32_t now = millis();

      // ########## TRYB OFF – nadrzędny
      if (id(cooler).mode == climate::CLIMATE_MODE_OFF) {
        it.printf(20, 20, id(font_big), "OFF");
        return;
      }
      // ########## TRYB SET – po zmianie temperatury
      if (id(show_set_temp) && now < id(show_set_until)) {
        it.printf(2, 16, id(font_small), "SET");
        it.printf(46, 16, id(font_big), "%.0f°C", id(cooler).target_temperature);
        return;
      }
      // ########## TRYB NORMALNY - duża temperatura
      id(show_set_temp) = false;
      it.printf(0, 0, id(font_big), "%.1f°C", id(T_lodowka).state);
      // ECO – lewy dół
      if (id(eco_mode).state) {
        it.printf(0, 46, id(font_small), "ECO");
      }
      // COOL – prawy dół (przekaźnik)
      if (id(cool).state) {
        it.printf(78, 46, id(font_small), "COOL");
      }

```
