Co zamiast Shelly 2.5 do rozdzielni

W Twoim przypadku, najpierw definiujesz output: GPIO Output — ESPHome a potem to wykorzystujesz do Binary Light — ESPHome .

1 polubienie

Ogarnąłem to wczoraj. Ale pojawił się inny problem: kombinowałem z długim przytrzymaniem przycisku aby zgasło światło w całym domu i ESP przestał współpracować. Jest na gotowo zainstalowany w rozdzielni. Nie ma jakoś super gorąco. Obecnie przy próbie OTA wyrzuca komunikaty:

INFO ESPHome 2024.7.3
INFO Reading configuration /config/esphome/esphome-web-83abac.yaml...
WARNING GPIO12 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Compiling app...
Processing esphome-web-83abac (board: esp32doit-devkit-v1; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.3
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.2.2
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- Wire @ 2.0.0
|-- ArduinoJson @ 6.18.5
|-- Improv @ 1.2.3
RAM:   [==        ]  16.4% (used 53688 bytes from 327680 bytes)
Flash: [========= ]  90.0% (used 1651245 bytes from 1835008 bytes)
========================= [SUCCESS] Took 5.72 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.68.127
INFO Uploading /data/build/esphome-web-83abac/.pioenvs/esphome-web-83abac/firmware.bin (1657024 bytes)
ERROR Error binary size: Unknown error from ESP

Obecnie odpiąłem wejścia oraz I2C. Nic się nie zmienia. Trzeba flashować po kabelku? Dlaczego tak się stało?

Skróciłem testowo YAML i tera tak to wygląda:

INFO ESPHome 2024.7.3
INFO Reading configuration /config/esphome/esphome-web-83abac.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing esphome-web-83abac (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.3
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.2.2
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
RAM:   [=         ]  12.4% (used 40560 bytes from 327680 bytes)
Flash: [=====     ]  45.5% (used 834281 bytes from 1835008 bytes)
========================= [SUCCESS] Took 4.30 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.68.127
INFO Uploading /data/build/esphome-web-83abac/.pioenvs/esphome-web-83abac/firmware.bin (840048 bytes)
ERROR Error binary size: Unknown error from ESP

Spróbuj zrestartować urządzenie i ponownie wgrać firmware.

1 polubienie

Po kabelku od zera się wgrało i urządzenie odpowiada. Ale boję się teraz cokolwiek robić, żeby znowu nie weszło w taki dziwny stan a polegał on na tym, że łączyło się do HA, ale nie można było wejść na ESPHome po IP. A po chwili się rozłączało z HA i resetowało, albo resetowało, co skutkowało rozłączeniem.

Fragment kodu, który dokładałem to w sekcji binary_sensor, przy włączniku od łazienki (drugi) chciałem aby po długim przytrzymaniu przycisku gasiło mi światło w całym domu, np. po 60sek. Testowo wpisane jest jedna sekunda i tylko światła w salonie:

substitutions:
  name: esphome-web-83abac
  friendly_name: Ast

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  min_version: 2024.6.0
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: dev

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

# Allow provisioning Wi-Fi via serial
improv_serial:

wifi:
  # Set up a wifi access point
  ap: {}

# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
  import_full_config: true

# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
esp32_improv:
  authorizer: none

# To have a "next url" for improv serial
web_server:

status_led:
  pin:
    number: GPIO4
    inverted: true

i2c:
  sda: GPIO21
  scl: GPIO22
#  scan: true
#  id: bus_a
#  frequency: 10kHz

pcf8574:
  - id: 'pcf8574_hub'
    address: 0x39
    pcf8575: false


output:
  - platform: ledc
    pin: GPIO12
    id: rtttl_out
  - platform: gpio
    pin: GPIO26
    id: relay_R2
  - platform: gpio
    pin: GPIO33
    id: relay_R3
  - platform: gpio
    pin: GPIO32
    id: relay_R4
# Individual outputs for expander
  - platform: gpio
    pin:
      pcf8574: pcf8574_hub
      # Use pin number 0
      number: 0
      # One of INPUT or OUTPUT
      mode:
        output: true
      inverted: false
    id: relay_ER1
  - platform: gpio
    pin:
      pcf8574: pcf8574_hub
      number: 1
      mode:
        output: true
      inverted: false
    id: relay_ER2
  - platform: gpio
    pin:
      pcf8574: pcf8574_hub
      number: 2
      mode:
        output: true
      inverted: false
    id: relay_ER3
  - platform: gpio
    pin:
      pcf8574: pcf8574_hub
      number: 3
      mode:
        output: true
      inverted: false
    id: relay_ER4

#rtttl:
#  output: rtttl_out

light:
  - platform: binary
    name: "Światlo R2 Łazienka"
    output: relay_R2
    id: relay_light_R2
  - platform: binary
    name: "Światlo R3 pralka"
    output: relay_R3
    id: relay_light_R3
  - platform: binary
    name: "Światlo R4 garderoba"
    output: relay_R4
    id: relay_light_R4
  - platform: binary
    name: "Światlo ER1 salon wypoczynek"
    output: relay_ER1
    id: relay_light_ER1
  - platform: binary
    name: "Światlo ER2 salon wejście"
    output: relay_ER2
    id: relay_light_ER2
  - platform: binary
    name: "Światlo ER3 salon stół"
    output: relay_ER3
    id: relay_light_ER3
  - platform: binary
    name: "Światlo ER4 salon wyspa"
    output: relay_ER4
    id: relay_light_ER4

switch:
  - platform: gpio
    name: "$friendly_name Relay R1 Dzwonek"
    pin: GPIO25
    id: relay_R1
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: relay_R1

binary_sensor:
  - platform: gpio
    pin: 
      number: GPIO34
    name: "$friendly_name wł. R1 Dzwonek"
    on_press:
      then:
        - switch.turn_on: relay_R1
  - platform: gpio
    pin: 
      number: GPIO35
    name: "$friendly_name wł. R2 łazienka"
    on_press:
      then:
        - light.toggle: relay_light_R2  
    on_click:
      min_length: 500ms
      max_length: 3000ms
      then: 
        - delay: 1s
        - light.turn_off:  relay_light_ER1
        - light.turn_off:  relay_light_ER2
        - light.turn_off:  relay_light_ER3
        - light.turn_off:  relay_light_ER4
  - platform: gpio
    pin: 
      number: GPIO36
    name: "$friendly_name wł. R3 pralka"
    on_press:
      then:
        - light.toggle: relay_light_R3
  - platform: gpio
    pin: 
      number: GPIO39
    name: "$friendly_name wł. R4 garderoba"
    on_press:
      then:
        - light.toggle: relay_light_R4
  - platform: gpio
    name: "$friendly_name wł. ER1 salon wypoczynek"
    pin:
      pcf8574: pcf8574_hub
      number: 4
      mode:
        input: true
      inverted: false
    on_press:
      then:
        - light.toggle: relay_light_ER1
  - platform: gpio
    name: "$friendly_name wł. ER2 salon wejście"
    pin:
      pcf8574: pcf8574_hub
      number: 5
      mode:
        input: true
      inverted: false
    on_press:
      then:
        - light.toggle: relay_light_ER2
  - platform: gpio
    name: "$friendly_name wł. ER3 salon stół"
    pin:
      pcf8574: pcf8574_hub
      number: 6
      mode:
        input: true
      inverted: false
    on_press:
      then:
        - light.toggle: relay_light_ER3
  - platform: gpio
    name: "$friendly_name wł. ER4 salon wyspa"
    pin:
      pcf8574: pcf8574_hub
      number: 7
      mode:
        input: true
      inverted: false
    on_press:
      then:
        - light.toggle: relay_light_ER4

Nie działa, to tak jak rozumiem opis. Opis mówi, że przytrzymanie przez jakiś czas (min…max) powoduje wyzwolenie szeregu działań. Mam przyciski dzwonkowe i muszę dwa razy nacisnąć we wskazanym czasie.

Jak zrobić, aby taki efekt uzyskać aby jednokrotne dłuższe naciśnięcie wyzwoliło zadane akcje?

@marcingebus tak powinna wyglądać obsługa multi klika, usuwasz on_press i on_click, dodajesz jak poniżej:

    on_multi_click
      #Double Click
      - timing:
          - ON for 40ms to 350ms
          - OFF for 40ms to 350ms
          - ON for 40ms to 350ms
          - OFF for at least 330ms
        then:
          - light.toggle: ${outputname}5
          - logger.log: "${inputname}5: multi - double click"
           
      #Single Click
      - timing:
          - ON for 50ms to 350ms
          - OFF for at least 330ms
        then:
          - light.toggle: ${outputname}4
          - logger.log: "${inputname}5: multi - single click"
          
      #Hold
      - timing:
          - ON for at least 1.2s
        then:
          - light.turn_off: ${outputname}4
          - light.turn_off: ${outputname}5      
          - logger.log: "${inputname}7: multi - hold"
          

Napewno te 60 sekund jest niepraktyczne, czekanie minutę z wciśniętym przyciskiem nie należy do przyjemności. W przykładzie powyższym akcja dla hold nastepuje po 1,2 sekundzie - wyłączenia świateł.

1 polubienie

Ja chciałem looong-clicka. Długie naciśnięcie zgasi wszystkie światła. Poddałem się. Konfig bez on_click działa, przynajmniej na tyle na ile zdążyłem sprawdzić. Jak wprowadałem on_Clik, to raz, że działa inaczaj a dwa, że ESP się wiesza. Może ESP32 jest OK, a w ESPHOME w tej części jest coś zepsute i objawia się zwiechą urządzenia, że nie da się nic wgrać OTG, jedynie kabelek.

Dziękuję wszystkim za pomoc.

Trzymam przycisk sekundę, dwie idę do łóżka i po 60s gaśnie wszystko, co było zapalone. Choć realizacja tego z pomocą ESPHome i tak byłaby dziurawa, bo część świateł mam na Shelly_Dimmer. Choć może by się wykonało jakieś Api, albo jakaś encja by się zmieniła dla tego urządzenia, do użycia już w innej automatyzacj ina poziomie HA, aby zgasił wszystko.

Nie wiemy co faktycznie zrobiłeś, bo nie wkleiłeś nam YAMLa z którym był problem.

Jakkolwiek miałeś takie ostrzeżenie - czyli używałeś GPIO12 w konfiguracji potencjalnie mogącej wywołać konflikt (bez wiedzy co tam było nie ma szans by ktokolwiek zgadywał)

tu masz bryk z dokumentacji

Zazwyczaj problem z OTA (OTG to coś zupełnie innego) wynika z faktu, że masz coś skopane w konfiguracji (lub fizycznej konfiguracji sprzętu - jeśli używasz jakieś “zakazane GPIO” niezgodnie z przeznaczeniem), ale nie wiemy co.

1 polubienie

To chyba się nie rozumiemy :frowning:, proszę zdefiniuj pojęcie “looong-clicka”. W podanym przeze mnie przykładzie naciskam przycisk, trzymam go minimum 1,2s (albo dłużej) i wtedy po 1,2s następuje wyłączenie światła. Każdy przycisk w mieszkaniu ma u mnie taką definicje: pojedyncy klik włącza/wyłącza światło nr1 w pomieszczeniu, dwu klik światło nr2, przytrzymanie przycisk wyłącza światło nr1 i nr2.

ESPHome może wywołać akcję w Shelly, żaden problem, chyba brakuje Ci wiedzy jakie są możliwości ESPHome, akurat ja do Shelly wgrywam ESPHome.

Nic nie jest zepsute, źle używasz kodu i tyle, on press zadziała zawsze bo to akcja na naciśnięcie przycisku, zmiana stanu z 0 na 1, z dokumentacji:
on_press
automatyka ta zostanie uruchomiona w momencie pierwszego naciśnięcia przycisku, czyli innymi słowy na zboczu narastającym sygnału.
Dodanie jednocześnie akcji:
on_click
ta automatyzacja zostanie uruchomiona, gdy przycisk będzie wciśnięty przez okres czasu od min_length do max_length. Każde dłuższe lub krótsze kliknięcie nie uruchomi automatyzacji. Automatyka jest zatem wyzwalana również przy opadającym zboczu sygnału.
spowoduje stany nieokreślone automatyki, za które odpowiada osoba programującą czyli Ty, proszę nie zwalać winy na ESPHome :wink:.

1 polubienie

Byłem na wyjeździe i dopiero teraz wracam do tematu.

Do GPIO12 dolutował jeden styk producent (Buzzer). Użyłem, go na przykładzie YAML od producenta.

Spróbuję twojego przykładu. Szkoda, że przy opisie on_press/on_click nic nie pisało, że nie można obu używać naraz. Dałem sekwencje i 1s opóźnienia. Ale nie będę się z tobą spierał, że mój przykład był dobry, skoro nie działa. Popłynę z rzeką, spróbuję twojego przykładu. Dzięki za pomoc.

Na razie działa On/Off i przez miniony okres bez problemów.

Ja też nie mam takiego zamiaru, robisz jak uważasz, nie musisz opierać na moich przykładach.