W Twoim przypadku, najpierw definiujesz output: GPIO Output — ESPHome a potem to wykorzystujesz do Binary Light — ESPHome .
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.
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ł.
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.
To chyba się nie rozumiemy , 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 .
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.