Automatyzacja kotłowni na bazie ESPHome

Zmieniłem tylko GPIO15 na GPIO18.

  name: sterownik-kotla
  friendly_name: sterownik-kotla

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XTCMCg455/h8JU2K6x9YwiAzIpnQUr8aGXS3z9IwWYc="

ota:
  - platform: esphome
    password: "a6da52861469afb9d584d124254d4723"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Sterownik-Kotla Fallback Hotspot"
    password: "488Awp9vjt8Y"

# przekaźnik pompy CO
switch:
  - platform: gpio
    pin: GPIO14
    restore_mode : ALWAYS_OFF
    inverted: true
    id: relay1
    name: "pompa_CO"

# przekaźnik pompy CWU  
  - platform: gpio  
    pin: GPIO27
    restore_mode : ALWAYS_OFF
    inverted: true
    id: relay2
    name: "pompa_CWU"
# przekaźnik pompy podłogowej w kuchni
  - platform: gpio
    pin: GPIO26
    restore_mode : ALWAYS_OFF
    inverted: true
    id: relay3
    name: "pompa_podloga_kuchnia"

# styk bistabilny termostatu pokojowego
binary_sensor:
  - platform: gpio
    pin: GPIO18
    name: "styk_termostatu"
    on_press:
      then:
       - switch.turn_on: relay1
    on_release:
      then: 
       - switch.turn_off: relay1

      
# czujnik temperatury w kotle CO     
one_wire:
  - platform: gpio
    pin: GPIO13
    id: temperatura_kotla
sensor:
  - platform: dallas_temp
    address: 0xab00000084f90128
    name: "temperatura_kotla"
    update_interval: 3s

# czujnik temperatury w kuchni
    id: temperatura_podloga
  - platform: dallas_temp
    address: 0
    name: "temperatura_podloga"
    update_interval: 120s

# czujnik temperatury zasobnika CWU
    id: temperatura_zasobnik_CWU
  - platform: dallas_temp
    address: 0
    name: "temperatura_zasobnik_CWU"
    update_interval: 30s    
     

captive_portal:

Przejrzałem kod i wydaje mi się być poprawny w sekcji załączania przekaźnika. Może wykonaj parę ostrych zdjęć z płytką przekaźnika, bo problem może być w elektronice nim sterującej. Jest tam jakiś tranzystor czy transoptor? Najlepiej jak byś pokazał całą płytkę z ESP i przekaźnikiem/przekaźnikami.

Jeśli w opcjach przekaźnika zmienię z
inverted: true na false, to działa poprawnie sterowanie z pinów. Ale z kolei w Dashboardzie HA głupio wygląda. Włącznik (ikona) pokazuje odwrotne stany przekaźnika.
linki do części:

Jeżeli tu odwracasz logikę dla relay1 - czyli robisz zapis dla niego inverted: false i przekaźnik działa prawidłowo, to domyślam się, że za prezentację jego stanu w HA odpowiada binary_sensor o nazwie “styk_termostatu” - czy to ta encja w HA ma odwrotną prezentację stanu na suwaku? Dobrze Cię zrozumiałem?

Twój moduł przekaźników jest sterowany stanem niskim. Dlatego przy ustawieniu inverted: true stanem “on” jest stan niski na GPIO który steruje przekaźnikiem. Jeśli ustawisz inverted na false to stan wyskoki jest traktowany jako stan “on” i tak jest przedstawiany w HA a fizycznie w takim stanie przekaźnik jest wyłączony.
Opcja inverted nie zmienia fizycznie stanu wyjścia GPIO ale odwraca interpretację stanu “on” i “off” w dashbordzie HA.

Święta racja kolego zaktom. Przecież tym ustawieniem nie mogłem “przerobić” sterowania włączeniem przekaźników. Dziękuję za podpowiedź.

Dobrze zrozumiałeś. Pokombinowałem z kodem i działa poprawnie chociaż styk termostatu pokazuje odwrotne stany. Nie mam go na dashboardzie, więc nie będzie mnie denerwował.
Styk fizycznie rozwarty, przekaźnik nie działa:
obraz
Styk fizycznie zwarty, przekaźnik działa:
obraz

I kod poprawiony [ zmiana pracy “styku_termostatu”] :

esphome:
  name: sterownik-kotla
  friendly_name: sterownik-kotla

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XTCMCg455/h8JU2K6x9YwiAzIpnQUr8aGXS3z9IwWYc="

ota:
  - platform: esphome
    password: "a6da52861469afb9d584d124254d4723"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Sterownik-Kotla Fallback Hotspot"
    password: "488Awp9vjt8Y"

# przekaźnik pompy CO
switch:
  - platform: gpio
    pin: GPIO14
    restore_mode : ALWAYS_OFF
    inverted: true
    id: relay1
    name: "pompa_CO"

# przekaźnik pompy CWU  
  - platform: gpio  
    pin: GPIO27
    restore_mode : ALWAYS_OFF
    inverted: true
    id: relay2
    name: "pompa_CWU"
# przekaźnik pompy podłogowej w kuchni
  - platform: gpio
    pin: GPIO26
    restore_mode : ALWAYS_OFF
    inverted: true
    id: relay3
    name: "pompa_podloga_kuchnia"

# styk bistabilny termostatu pokojowego
binary_sensor:
  - platform: gpio
    pin: GPIO18
    name: "styk_termostatu"
    on_press:
      then:
       - switch.turn_off: relay1
    on_release:
      then: 
       - switch.turn_on: relay1

      
# czujnik temperatury w kotle CO     
one_wire:
  - platform: gpio
    pin: GPIO13
    id: temperatura_kotla
sensor:
  - platform: dallas_temp
    address: 0xab00000084f90128
    name: "temperatura_kotla"
    update_interval: 3s

# czujnik temperatury w kuchni
    id: temperatura_podloga
  - platform: dallas_temp
    address: 0
    name: "temperatura_podloga"
    update_interval: 120s

# czujnik temperatury zasobnika CWU
    id: temperatura_zasobnik_CWU
  - platform: dallas_temp
    address: 0
    name: "temperatura_zasobnik_CWU"
    update_interval: 30s    
     

captive_portal:

A teraz, przede mną wiele godzin studiowania włączenia tego przekaźnika w zależności o temperatury.

Tutaj już musisz użyć automatyzacji ESPHOME.
Czynnikiem który ma decydować o włączeniu przekaźnika ma być temperatura z czujnika , więc wartość tego czujnika będzie niejako trigerem całej automatyzacji.
Dlatego akcja tej automatyzacji powinna być umieszczona w sekcji sensora temperatury.
Zobacz sobie jedną z prostszych automatyzacji z mojego kodu
Trochę Ci ją objaśnię

Miłej zabawy :slight_smile:

2 polubienia

Za stan ten odpowiada zapis:

# styk bistabilny termostatu pokojowego
binary_sensor:
  - platform: gpio
    pin: GPIO18
    name: "styk_termostatu"
    on_press:
      then:
       - switch.turn_off: relay1
    on_release:
      then: 
       - switch.turn_on: relay1


Czytam dokumentację i wnioskuję, że może wystarczy odwrócić logikę właśnie w tym zapisie aby odzwierciedlać właściwy stan dla przekaźnika:

# styk bistabilny termostatu pokojowego
binary_sensor:
  - platform: gpio
    pin: GPIO18
    name: "styk_termostatu"
    on_press:
      then:
       - switch.turn_on: relay1
    on_release:
      then: 
       - switch.turn_off: relay1

Dziękuję Ci za udostępnienie “zabawek”. Jak mi się coś uda lub nie, to na pewno się odezwę. :blush:

Dokładnie tak miałem za pierwszym razem. Ale przekaźnik po zwarciu GPIO18 z masą, załączył się i w takim stanie zostawał mimo rozwarcia GPIO18 od masy.

Wszystko jest opisane w dokumentacji Sensor Automation wraz z przykładami. Oczywiście można rozbudować kod jak opisał @zaktom.

Ja masz fizycznie to podłączone? Czy ten styk termostatu to jakiś styk bezpotencjałowy przekaźnika termostatu? Co jest podane na GPIO18 w momencie zwarcia tego styku - stan wysoki czy niski(masa)?

OK, więc myślę, że w tym binary sensor można również użyć (idąc za logiką twórców ESPHome) inverted: true:


# styk bistabilny termostatu pokojowego
binary_sensor:
  - platform: gpio
    pin: GPIO18
    name: "styk_termostatu"
    inverted: true
    on_press:
      then:
       - switch.turn_off: relay1
    on_release:
      then: 
       - switch.turn_on: relay1

EDIT:
Jednak nie… :face_with_spiral_eyes:

Ah ta dokumentacja ESPHome, ciągłe niedopowiedzenia:

EDIT2:
Chyba to mamy:

# styk bistabilny termostatu pokojowego
binary_sensor:
  - platform: gpio
    pin: GPIO18
    name: "styk_termostatu"
    on_press:
      then:
       - switch.turn_on: relay1
    on_release:
      then: 
       - switch.turn_off: relay1
    filters:
      - invert:
1 polubienie

Fizycznie będzie podłączone do styku bezpotencjałowego [stary Auraton]. GPIO18 wedle wskazówek kolegów powinno być sterowane masą [GND]. Na początku GPIO18 sterowałem stanem wysokim z 3,3V bez rezystora pomiędzy 3,3V i GPIO18 i działało wszystko poprawnie oprócz tego, że dotknięcie palcem GPIO18 powodowało naprzemienne włączanie i wyłączanie przekaźnika kilka razy na sekundę. Aktualnie rezystor 10k [ GPIO18 - 3,3V ] i włączenie przekaźnika [ GPIO18 - GND]. Działa poprawnie, tylko ten odwrócony stan styku w dashboardzie.

Też próbowałem z tym inverted, ale nie wchodziło. Zaraz dopiszę i dam znać.

Byłeś szybszy :slight_smile:

1 polubienie

Zauważ że nie jest to inverted tak jak w platformie switch a zastosowane jako filtr czujnika binarnego

 filters:
      - invert:

Spróbuj taki zapis - ja mam tak zdefiniowane przyciski i pokazuje poprawnie stan

#przycisk manual auto co      
  - platform: gpio
    pin:
      number: GPIO39
      mode:
        input: true
      inverted: true
    name: "przycisk co"
    id: przycisk_co

Invert pomógł. Rewelacja. Wszystko działa. Dziękuję serdecznie Kolegom za pomoc.
Na dziś wystarczy mi nauki. Dobrej nocy życzę.

A jednak tak, GPIO Binary Sensor — ESPHome :

# Example configuration entry
binary_sensor:
  - platform: gpio
    pin:
      number: D2
      inverted: true
    name: ...

Mam i używam od zawsze.

1 polubienie