Tasmota PCF8574

Dzięki za link.
Mam jeszcze jedno pytanie. Planuję użyć tasmoty lub waszej modyfikacji.
Jeden expander potrzebny do odczytywania stanów włączników czy roleta 1 ma być otwierana czy zamykana. 2 expander do załaczania przekaźników rolet oraz załącznia przekaźników 8 lamp ledowych.
Jakich przycisków byście użyli normalne przełączniki togle czy jakieś inne. (Najlepiej przełącznik 3 stanowy góra stop dół)
Pozdrawiam.

Czy można kompilować ten plik na komputerze nie przez internet. 2 razy skompilowałem i się udało a teraz za każdym razem błąd 127 :confused:

Ok wgrałem plik na nowo do wemos.
Po wpisaniu w konsoli
i2cscan
wyswietliło dwa adresy układów
0x20 0x24
I2cDriver2 1
Najgorsze jest to ,że w menu pokazuje się tylko jeden układ i nie ma reakcji na wejścia :confused: pewnie trzeba jeszcze coś poustawiać eh.
Czekam na jekieś podpowiedzi.
Pozdrawiam.

Doczytaj opis z dokumentacji.
Teraz widzę, że odkomentowanie powinno być dokładnie jak na stronie dokumentacji:

https://tasmota.github.io/docs/PCF8574/

Skompiluj na nowo i powinno byc OK, zobacz opisy przy wierszach.

#define USE_I2C                                // Add support for I2C
#define USE_PCF8574                            // [I2cDriver2] Enable PCF8574 I/O Expander (I2C addresses 0x20 - 0x26 and 0x39 - 0x3F) (+1k9 code)
// #define USE_PCF8574_SENSOR                   // enable PCF8574 inputs and outputs in SENSOR message
// #define USE_PCF8574_DISPLAYINPUT             // enable PCF8574 inputs display in Web page
// #define USE_PCF8574_MQTTINPUT                // enable MQTT message & rule process on input change detection : stat/%topic%/PCF8574_INP = {"Time":"2021-03-07T16:19:23+01:00","PCF8574-1_INP":{"D1":1}}

TAK - oczywiście.
https://tasmota.github.io/docs/Compile-your-build/

Odkomentowalem 3 ostatnie. I pokazuje mi tylko jeden.
Spróbuję wieczorem.
Pozdrawiam.

1 polubienie

Do wejść sterownika Kincony 8 Channel Relay Board (KC868-A8) Configuration for Tasmota (technicznie do wejść PCF8574) został podłączony przycisk dzwonkowy. Jak skonfigurować Tasmota aby wejścia z PCF8574 byly traktowane jako Buttons and Switches - Tasmota tak aby można było wykorzystać funkcjonalność multi press (Buttons and Switches - Tasmota)?
Tak wygląda naciśnięcie i zwolnienie przycisku dzwonkowego w konsoli Tasmota:

17:47:31.432 MQT: home/stat/tasmota_DC2E18/RESULT = {"Time":"2022-03-22T17:47:31","PCF8574-1_INP":{"D0":0}}
17:47:31.885 MQT: home/stat/tasmota_DC2E18/RESULT = {"Time":"2022-03-22T17:47:31","PCF8574-1_INP":{"D0":1}}

Bez problemu działa sterowanie wyjściem (toggle) za pomocą wejścia przy pomocy reguł Tasmota:

Rule1
   ON PCF8574-1_INP#D0=0 DO Power1 toggle ENDON
Rule1 1

ale dla mnie to za mało, oczekuję obsługi dwukliku i przytrzymania przycisku dzwonkowego aby za pomocą tych akcji sterować scenami w HA, np. dłuższe przytrzymanie przycisku gasi wszystkie światła w pokoju.
Kombinowałem na wiele sposobów ale poległem :frowning: .

@macek - Może to pomoże jeśli jeszcze nie czytałeś…
Przykłady z książki kucharskiej użycia reguł:
#long-press-on-a-switch
#send-mqtt-message-on-button-press
#button-single-press-double-press-and-hold
#disable-switch-single-press-and-use-long-press
#toggle-relay-when-holding-button-for-2-seconds
#perform-any-action-on-singledouble-press-for-switches-and-buttons

Myślę, że jest potrzebna dana reguła pod dane założone zachowanie.

Czy dobrze rozumię?
D0 - to wejście (Input) 0 przyjmujące stan 0 dla zwartego styku i stan 1 dla styku otwartego?

Jeśli poczytasz przykłady myślę, że szybko załapiesz jak tworzyć reguły. Chętnie pomogę jeśli będzie potrzeba i podasz oczekiwane zachowanie we/wy.

Dokladnie tak.

Wszystko juz czytałem ale w przykladach jest ON button2#state=3 a tego nie jestem wstanie uzyskać na wejściach PCF8574.

Więc trzeba będzie stworzyć własne reguły pod PCF8574.
Nie wiem tylko jak stworzyć logikę, która pozwoli na zmierzenie czasu trwania stanu 0.

Trochę to bezsensowne, chyba zgłoszę issue i zobaczymy :wink:.

Przeglądam dokumentację Tasmota i rzeczywiście nie widzę informacji o funkcjonalności Buttons and Switches pod PCF`a. Lakoniczne wzmianki o obsłudze przez reguły.
Kombinując, może w tej konfiguracji pod Kincony z PCF dodać wirtualnie stany dla button. Ustawić wolne GPIO jako przyciski (wirtualne) i regułami ustalać ich stan tożsamo z Input D0-D7 pod PCF’em. Tak aby uzyskać obsługę multi i long press.

Kurcze niby tasmota taka przyjazna dla ludzi, a ja jednak wolę esphome. Tam zdaje się że masz od początku support dla click i double_click. Hold chyba trzeba określić ile ma trwać.
Nie mam PCF8574 więc się nie pobawię, ale mogę pomóc w napisaniu yamla dla niego.

Nie chcę wypowiadać się za @macek ale w tym projekcie chodzi o działanie sprzętu fizycznie bez udziału HA. Dlatego reguly Tasmota są do tego lepsze.

W Tasmocie jest podobnie, pełne wsparcie dla multi-press, “problem” pojawił sie w obsłudze PCF8574. ESPHome też używam :slight_smile: .

A dlaczego uważasz że działanie EspHome jest uzależnione od HA?

Nie chodzi mi o same działanie ESPHome ale automatyzacje zależne od HA czy NR (poza samym ESP). Podobno można pisać automatyzacje w ESPHome ale raczej do prostych (moim zdaniem) to nie należy.
Czy w ESPHome jest podobna funkcjonalność do reguł Tasmota?

JEST:

Widzę że już sam sobie odpowiedziałeś :slight_smile:
Dorzucę ten link żeby był komplet dla Single, Double, Hold click:

Dla mnie to jest czytelne rozwiązanie.

Teraz pytanie jak wpisać funkcjonalność Single, Double, Hold click pod konfigurację KC868-A8 z użyciem PCF8574?

esphome:
name: kc868-a8
platform: ESP32
board: esp32dev

# Example configuration entry for ESP32
i2c:
sda: 4
scl: 5
scan: true
id: bus_a

# Example configuration entry
ethernet:
type: LAN8720
mdc_pin: GPIO23
mdio_pin: GPIO18
clk_mode: GPIO17_OUT
phy_addr: 0

# Optional manual IP
manual_ip:
static_ip: 192.168.1.199
gateway: 192.168.1.1
subnet: 255.255.255.0

# Example configuration entry
pcf8574:
– id: ‘pcf8574_hub_out_1’ # for output channel 1-8
address: 0x24

– id: ‘pcf8574_hub_in_1’ # for input channel 9-16
address: 0x22

# Individual outputs
switch:
– platform: gpio
name: “light1”
pin:
pcf8574: pcf8574_hub_out_1
number: 0
mode: OUTPUT
inverted: true

– platform: gpio
name: “light2”
pin:
pcf8574: pcf8574_hub_out_1
number: 1
mode: OUTPUT
inverted: true

– platform: gpio
name: “light3”
pin:
pcf8574: pcf8574_hub_out_1
number: 2
mode: OUTPUT
inverted: true

– platform: gpio
name: “light4”
pin:
pcf8574: pcf8574_hub_out_1
number: 3
mode: OUTPUT
inverted: true

– platform: gpio
name: “light5”
pin:
pcf8574: pcf8574_hub_out_1
number: 4
mode: OUTPUT
inverted: true

– platform: gpio
name: “light6”
pin:
pcf8574: pcf8574_hub_out_1
number: 5
mode: OUTPUT
inverted: true

– platform: gpio
name: “light7”
pin:
pcf8574: pcf8574_hub_out_1
number: 6
mode: OUTPUT
inverted: true

– platform: gpio
name: “light8”
pin:
pcf8574: pcf8574_hub_out_1
number: 7
mode: OUTPUT
inverted: true

binary_sensor:
– platform: gpio
name: “input1”
pin:
pcf8574: pcf8574_hub_in_1
number: 0
mode: INPUT
inverted: true

– platform: gpio
name: “input2”
pin:
pcf8574: pcf8574_hub_in_1
number: 1
mode: INPUT
inverted: true

– platform: gpio
name: “input3”
pin:
pcf8574: pcf8574_hub_in_1
number: 2
mode: INPUT
inverted: true

– platform: gpio
name: “input4”
pin:
pcf8574: pcf8574_hub_in_1
number: 3
mode: INPUT
inverted: true

– platform: gpio
name: “input5”
pin:
pcf8574: pcf8574_hub_in_1
number: 4
mode: INPUT
inverted: true

– platform: gpio
name: “input6”
pin:
pcf8574: pcf8574_hub_in_1
number: 5
mode: INPUT
inverted: true

– platform: gpio
name: “input7”
pin:
pcf8574: pcf8574_hub_in_1
number: 6
mode: INPUT
inverted: true

– platform: gpio
name: “input8”
pin:
pcf8574: pcf8574_hub_in_1
number: 7
mode: INPUT
inverted: true

# Enable logging
logger:

# Enable Home Assistant API
api:

switch zmieniasz na binary_sensor

i dodajesz sekcję np. taką:

on_multi_click:
- timing:
    - ON for at most 1s
    - OFF for at most 1s
    - ON for at most 1s
    - OFF for at least 0.2s
  then:
    - logger.log: "Double Clicked"
- timing:
    - ON for 1s to 2s
    - OFF for at least 0.5s
  then:
    - logger.log: "Single Long Clicked"
- timing:
    - ON for at most 1s
    - OFF for at least 0.5s
  then:
    - logger.log: "Single Short Clicked"

Niestety nie da się:
From the perspective of Tasmota, PCF8574 pins are not buttons, merely inputs which can change state. Since your device is ESP32-based, with Berry you have a good programming environment for coding additional handling, like detecting multiple actions within a short time.
A “real” button is what’s configured on gpio 0.
Pozostaje sprawdzić ESPHome ale raczej będzie pod górkę :frowning:, każda zmiana w kodzie to ponowna kompilacja kodu, wgrywanie, analiza, poprawianie i tak w kółko dlatego ESPHome nie przypadło mi do gustu ale trudno, trzeba się przeprosić i spróbować aby w pełni wykorzystać posiadany sprzęt.

2 polubienia

Poszlo z tym single, double, hold czy jest może jakiś problem?