Odczyt stanu binary_sensor on boot w ESPHOME

Panowie za namową postanowiłęm zrobić pompę w oparciu o ESPHome a nie o Tasmote - faktycznie wygląda na to że możliwości automatyzacji są bardzo duże.

Siedzę już 6 godzine nad trywialnym problemem. Widać albo jestem ślepy albo żona ma wiecznie rację, że nie mogę nic znaleźć.

Potrzebuję w samym ESPHOME z poziomu jego autonomicznej automatyki odczytać stan przełącznika typu binary sensor po zaniku prądu.
Przełącznik jest mechaniczny i oczywiście działają mi stany on_press i on_release ale jak bez przełączania sprawdzić stan - przecież to nie może być aż tak skomplikowane ?

Próbowałem już chyba wszystkiego - łącznie z kombinacją użycia on_boot które też mi nie działa. Poza tym logika składni YAML jest dla mnie czarna magią - jak można stworzyć język, w którym ilość spacji określa czy działa czy nie - nie kumam tych bloków, definicji a dobrego opisu z przykładami do ESPHOME jeszcze nie znalazłem - weryfikator YAML pisze że spacje dobrze, ESPHOME drze ryje że źle - oszaleć można.

Muszę mieć stan przełącznika mechanicznego bo od tego uzależniam wykonanie programu pompy ciepła - zima czy lato.

Musisz dorzucić bardziej szczegółowe informacje bo bez tego ani rusz. Zdjęcia przełącznika, yaml i jeszcze opisz co chcesz uzyskać bo pogubiłem się w połowie czytania :smile:

HMM to proste jak budowa cepa. Zwykły przełącznik typu rocker podłączony do PIN18 i zwierany do masy. Problemem jest odczyt stanu po restercie ESP - nie wiem jak mógłbym to lepiej wytłumaczyć.

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO32
      mode: INPUT_PULLUP
      inverted: true
    name: PIEC
    id: SWITCH_piec
    on_press:
      - while:
          condition:
            binary_sensor.is_on: SWITCH_piec
          then:
            - logger.log: PIEC ON
            - delay: 5s
    on_release:
      - while:
          condition:
            binary_sensor.is_off: SWITCH_piec
          then:
            - logger.log: PIEC OFF
            - delay: 5s
  - platform: gpio
    pin:
      number: GPIO18
      mode: INPUT_PULLUP
      inverted: true
    name: LATO/ZIMA
    id: SWITCH_latozima
    on_press:
      - while:
          condition:
            binary_sensor.is_on: SWITCH_latozima
          then:
            - logger.log: LATO ON
            - delay: 5s
    on_release:
      - while:
          condition:
            binary_sensor.is_off: SWITCH_latozima
          then:
            - logger.log: ZIMA ON
            - delay: 5s

Kolega @zebaczpl ponownie optymistycznie zakłada, że dla kogoś kto nie jest zupełnie w jego temacie prostym jest odgadywanie kontekstu z paru zdań o końcowych efektach jakiś prób w ESPHome.
Może zamiast ciągnąć ponownie za język podlinkuję opis układu sprzętowego i założeń jego działania w innym temacie, gdzie walczyliśmy z zawiłościami Tasmota.

@zebaczpl - zacznij wstawiać kod jak się należy…

No dobra bo są rozbieżne informacje. To chcesz się opierać ze sterowaniem o HA czy chcesz zrobić niezależny sterownik oparty na ESP?

Jakie ma znaczenie do czego chce tego użyć - napisałem że interesuje mnie odczyt stanu binary_ sensor po restarcie. Wygląd przełącznika, cel jego użycia nie ma żadnego znaczenia - to mogą być 2 skręcone razem druty i informować mnie że szafa jest otwarta - jakie to ma znaczenie. Zadałem proste pytanie po kilkugodzinnych poszukiwaniach rozwiązania a pomysłu na rozwiązanie nadal nie widzę. Zapewniam, że jakby to było proste to bym gitary na forum nie zawracał.

Moim zdaniem wykorzystujesz niewłaściwe funkcje (automatyzacje)

[…]
   on_press:
[…]
   on_release:
[…]

zamiast po prostu sprawdzić stan
binary_sensor.is_on / binary_sensor.is_off
bo to przecież nie jest przycisk (gdzie trzeba wykryć zdarzenie), tylko jakiś fizyczny przełącznik bistabilny, więc potrzebujesz sprawdzać stan.

I dlatego to o czym pisano wyżej BYŁO TAKIE ISTOTNE, więc nie cwaniakuj.

PS Ten YAML nie jest w istocie językiem programowania, jest wprawdzie językiem, ale formalnym i służącym bardziej do opisywania konfiguracji lub danych, a w ogóle ESPHome taki format konfiguracji przejęło właśnie z HA - to miało być podobne do tego jak się konfigurowało HA przez większość lat jego istnienia (teraz tego typu konfiguracja jest w zaniku na korzyść rozwiązań GUI, ale wciąż cokolwiek bardziej zaawansowanego skonfigurujesz w HA głównie za pomocą YAMLa).

1 polubienie

Czegoś tu nie rozumiem, po restarcie stan przełącznika powinien być dostępny “od razu” bo to fizyczne zwarcie/rozwarcie obwodu elektrycznego. U siebie mam kontaktrony podłączone do ESPHome (sterownik Kincony KC868-A8) i po restarcie ESPHome (zrobiłem to przed chwilą kilka razy dla różnych stanów kontaktronu) i zawsze nastepuje odczyt aktualnego stanu.

Dzięki za odpowiedź.
Nie było moją intencją urażenie kogokolwiek i nie cwaniakuję. Po prostu w pewnym momencie szlag mnie trafia że muszę wyważać otwarte drzwi nie z braku własnych chęci i wygody a z powodu beznadziejnej dokumentacji. Dokumentacji stworzonej jak podejrzewam przez programistów dla programistów - tak jak kiedyś pisałem im się wydaje że startuje się ze sporym zasobem wiedzy w programowani (najlepiej z doskonałą znajomością C++) i podstaw nie trzeba tłumaczyć. Stąd też żałosny poziom opisu na stronie ESPHOME - i co ja z tego mam sobie wymyśleć jako człowiek na początku podróży:

binary_sensor.is_on / binary_sensor.is_off Condition

In some trigger:

on_…: if: <----------------- a w te kropki to co sobie mam wstawić
condition: # Same syntax for is_off
binary_sensor.is_on: my_binary_sensor

i sie zaczyna poszukiwanie działających przykładów, składni która działa i żmudna analiza co ktoś wstawił za te durne kropki - po dłuższej chwili i przeszukaniu 50 stron okazuje się że można tam wstawić on_press, on_release itp
Tylko programista nie wpadł na to że można napisać 3 przykłady i mnóstwo osób będzie miało z górki.
Dlatego staram się pisać na forum jako ostateczność ale w głębi serca nie godze się na takie podejście do sprawy - dla mnie jest to po prostu partacka dokumentacja.
Potem się okazuje że ten YAML to taki YAML ale nie do końcaa YAML bo to taki YAML do HA.
A teraz zastanówcie się ile sami swojego życia zmarnowaliście na takie “wyważanie otwartych drzwi”

P.S. Po przerzuceniu kolejnych 50 stron okazuje się że wyrażenie on_boot: MUSI BYĆ umieszczone na samej górze zaraz po esphome: a nie może być już po definicji rodzaju płytki esp32 bo sypie błędami - niech mi ktoś znajdzie gdzie na stronie ESPHOME jest to wyraźnie napisane.

P.S.2 A na koniec dodam że znalazłem po kolejnych 50 stronach i jest opcja która pokazuje stan binary_sensor po restarcie, dodam więcej - jest opisana w dokumentacj, dodam więcej - pomimo tego nie trafiłem w żadnym przykładzie na jej użycie, a nazywa się “publish_initial_state: true”

image

I tak ostatecznie na zadane pytania odpowiedziałem sobie sam - mam nadzieję że komuś jeszcze moja odpowiedź się przyda

1 polubienie

Tak dokumentacja nie jest mocną stroną ESPHome, ale musisz zrozumieć, że przez pierwsze kilka lat istnienia tego projektu w zasadzie wszystkim zajmowała się jedna osoba (a przez załogę HA projekt został przejęty bodajże rok temu (no może 2 lata temu?).

Nie od razu Kraków zbudowano.

To projekt open-source, jeśli widzisz gdzie są bolączki, to z nimi walcz - możesz przecież sam uzupełniać dokumentację tego projektu (tak - zbudowana jest rekurencyjnie i ze zdecydowanie za małą ilością dobrych przykładów).

Spalasz się wewnętrznie, bo masz złe podejście.
Jeśli zmienisz proporcje między “brać”, a “dawać”, by więcej dawać, to zrozumiesz jakiego nakładu pracy wymaga przygotowanie nawet tak kiepskiej dokumentacji jaką mamy dziś… (a musi być ona aktualizowana wraz ze zmianami w ESPHome, więc rekurencyjna forma wymaga mniejszych nakładów pracy…)

@zebaczpl małe pytanie: przełączenie lato/zima ma być możliwe tylko za pomocą fizycznego przełącznika?

Oczywiście przełączanie mogę zrobić za pomocą przekaźnika - tylko po co ? Najpierw miałem taki plan, w połączeni ze sterowaniem zaworu 3-drożnego ale plan zdechł z prostego powodu. Nagrzanie przez moją pompę 130l wody to od 2 do 5 godzin, piec gazowy 12 kW robi to od 20 do 40 minut a koszt podobny tylko ludzie bardziej zadowoleni. Ogólnie tak jak napisałem układ będzie przełączany 2 razy w roku i tyle - zasadniczo ma być na tyle prosty żeby obsłużyła go moja żona w oparciu o instrukcję 2 zdaniową - te 2 przełączniki w dół i ten przytrzymasz 15 sekund aż usłyszysz kliknięcie - tyle instrukcji, magia jest po mojej stronie.

PS. A na uzupełnianie dokumentacji ESPHome to jestem za cienki, za stary i zbyt niegramatycznie znam angielski. Dlatego też proszę użytkowników forum o empatię i cierpliwość bo po to jest to forum aby wymieniać doświadczenia i się uczyć - przynajmniej mnie się tak wydaje.

Ja ze swojej strony po skończeniu projektu pompy postaram się zamieścić dokładny opis i całą konfigurację dla potomnych.

1 polubienie

“Jeśli zmienisz proporcje między “brać”, a “dawać”, by więcej dawać, to zrozumiesz jakiego nakładu pracy wymaga przygotowanie nawet tak kiepskiej dokumentacji jaką mamy dziś…”

Sorry ale po 10 godzinach spędzonych przed kompem w celu rozwiązania problemu na który nikt nie potrafił odpowiedzieć i ostatecznym znalezieniu rozwiązania oraz opisaniu go nie wiem w jaki sposób mógłbym zmienić swoją postawę bardziej na “dawać”. Tak jak napisałem to forum to dla mnie ostatnia deska ratunku.

Fajnie, miło z Twojej strony, to właśnie sposób wyrażenia “dawać” na miarę swoich możliwości.

Tamten wpis pokazuje jak się posługiwać forum, by się skutecznie dzielić kodem YAML (i nie tylko)

Nikt z nas nie ma nieograniczonej ilości wolnego czasu by robić coś za kogoś, chyba nie bierzesz w ogóle pod uwagę tego drobnego szczegółu.

Zapewne gdyby ktoś używał u siebie rozwiązania identycznego z tym, które sobie wymyśliłeś, to by wrzucił jakiś gotowy kawałek YAMLa, ale to jest forum (i są wątki gdzie odpowiedź pojawia się dopiero po tygodniach czy miesiącach), a nie komórka intensywnej pomocy technicznej opłacana przez wielkie korpo gdzie specjaliści zasuwają na etacie - swoją drogą nie wiem czy jeszcze istnieją takie instytucje, bo chyba niemal wszędzie zastąpiono coś takiego tańszymi rozwiązaniami.

Nie wiem po co ta ciągła informacja stanu przełacznika w logach przecież stan przełącznika widzisz w przeglądarce po zalogowaniu się do ESPHome, przykład mojego kontraktonu w ESPHome:
image
W mojej opinii najprostsza konfiguracja w ESPHome jest wystarczająca:

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO32
      mode: INPUT_PULLUP
      inverted: true
    name: PIEC
    id: SWITCH_piec

Stan przełącznika typu rocker będzie prawidłowo odczytywany po każdym restarcie ESPHome.

Ty też musisz być cierpliwy w oczekiwaniu na odpowiedź, dopiero teraz znalazłem czas żeby odpisać w temacie ESPHome, którego używam na prawie wszystkich urządzeniach w domu. Czasami swoje odpowiedzi weryfikuję po testach na tych urządzeniach żeby mieć pewność, że to działa a na to też potrzeba czasu.

Spieszę z wyjaśnieniami - ten kawałek z logowaniem jest tylko informacją dla mnie że ta część kodu działa - docelowo miała tam być inna zawartość.
Niestety po 3 dniach eksperymentów dochodzę do wniosku że założenia projektowe są do kitu - wszystko rozbija się o definicję sensora temperatury.
W prostych słowach - oparłem projekt o zmianę stanu 2 przełączników wykorzystując do tego definicję binary_sensor i reakcję na on_state (ta część działa bezbłędnie).
(kawałek kodu - są 4 definicje dla każdego stau przełącznika)

    pin:
      number: GPIO32
      mode: INPUT_PULLUP
      inverted: true
    publish_initial_state: true
    name: PIEC
    id: SWITCH_piec  
    on_state:
      - while:
          condition:
            and:
            - binary_sensor.is_on: SWITCH_piec
            - binary_sensor.is_on: SWITCH_latozima
          then:
              - logger.log: PIEC ON / LATO ON
              - switch.turn_on: RELAY_OBG
              - switch.turn_on: RELAY_RC
              - delay: 1s

Niestety definicja:

  - platform: dallas
    address: 0x8b3ce10457111e28  
    name: PC_T_CWU
    id: PC_T_CWU
    on_value_range:
      - above: 31.0
        then:
          - switch.turn_off: test1
      - below: 29.0
        then:
          - switch.turn_on: test1

nie daje spodziewanych rezultatów.
Przekażnik test1 jest wirtualny, miałem w planie dopisanie jego sprawdzania do reguł przełącznika jako kolejny przełącznik ale odczyt jego stanu jest wykonywany tylko w momencie zmiany stanu przełączników głównych SWITCH_piec lub SWITCH_latozima.

Prawdopodobnie cały projekt trzeba oprzeć o programowanie C++ (lambdas) a powiedzieć, że dokumentacja do tego jest skromna to jakby powiedział Kobuszewski - “to takie niedomówienie” - raczej żałosna to najprostsze określenie jakie przychodzi mi do głowy.

Rozwiń myśl, co nie działa?