ESPHOME + stycznik impulsowy - nie odczytuje stanu

Dziękuję za pomoc. zozjaśniles mi temat. pozdrawiam

Post został podzielony na nowy temat: Falownik pv StecaGrid 4003 czy ktoś zna pasującą integrację?

Witam
Wczoraj wieczorem poczytałem te poradniki i dużo ciekawych tematów jest. Ale teraz praktyka. Mam esp8266 Wemos D1, pracuje jako czujnik temp. na Dallas DS18B20 i jest dobrze. Utworzyłem kod na styk czujnika ruchu. Kod jest poprawny zainstalowany na esp. Widzę temperaturę i styk w HA.

sensor:

  • platform: dallas_temp
    name: “32_t.gosp.kuchnia”
    address: 0xb80000005b46c028
    update_interval: 30s
    switch:
  • platform: gpio
    pin: GPIO13
    name: “Światło kuchnia”

binary_sensor:

  • platform: gpio
    pin: GPIO2
    name: “cz.r. kuchnia”
    device_class: MOTION
    captive_portal:

Ale to wejście D6 nie odczytuje zmiany stanu przekaźnika czujnika ruchu. Podpinałęm do masy i do 3,3v. Jak dotykam D6 do widzę zdarzenia w HA. Próbowałem dopisać

mode:
input: true
pullup: true
inverted: true

Ale wyrzyca będy.
inwerted : true - bo styka mam odwrotny i pokazuje ciągła aktywność.
Jak to ugryźć ?

Wielkie D1 udające arduino UNO czy powszechnie używane D1 mini (albo jego klona)? To może robić różnicę, może jakieś foto?

ESP8266_BOARD_PINS = {
    "d1": {
        "D0": 3,
        "D1": 1,
        "D2": 16,
        "D3": 5,
        "D4": 4,
        "D5": 14,
        "D6": 12,
        "D7": 13,
        "D8": 0,
        "D9": 2,
        "D10": 15,
        "D11": 13,
        "D12": 14,
        "D13": 14,
        "D14": 4,
        "D15": 5,
        "LED": 2,
    },
    "d1_mini": {
        "D0": 16,
        "D1": 5,
        "D2": 4,
        "D3": 0,
        "D4": 2,
        "D5": 14,
        "D6": 12,
        "D7": 13,
        "D8": 15,
        "LED": 2,
    },

Widzę że się starasz, bo wklejałeś jakieś kawałki wyjęte z htmla by próbować formatować (albo przyklejałeś żywcem z innego forum? niestety nie jestem w stanie tego poprawić musisz zedytować posta wyżej sam), ale zrób to tak
Jak prawidłowo zamieszczać YAML, inny kod lub logi w postach na forum

  1. zdefiniuj sobie płytkę jeśli to D1 mini
esp8266:
  board: d1_mini 

a jeśli “wielkie D1” to podobnie tylko samo d1

esp8266:
  board: d1

to w YAML będziesz mógł używać aliasy takie jak D6 itd. zamiast GPIO12 itd. bo jak na razie gdy piszesz o D6, a w YAML masz numery GPIO, to zmuszasz nas do znalezienie pinoutu lub schematu płytki, tak swoją drogą w YAMLu nie masz nigdzie GPIO12

Przykładowa integracja z typowym gotowym czujnikiem PIR jest nawet w części dokumentacji, gdzie są gotowce kodu

i w takim wypadku nie używasz ani pullupu ani pulldownu, bo taki PIR jak w przykładzie ma wyjście push-pull czyli takie podające ustalony poziom logiczny a nie wyjście bezpotencjałowe (OC lub OD)

UWAGA nie można stosować PIR który ma wyjście w logice TTL/5V łącząc go bezpośrednio z wejściami MCU, bo spalisz wejścia w MCU, w takim wypadku musisz użyć jakiś konwerter poziomów logicznych.

Logika wyjściowa akcesoriów bezpośrednio łączonych z dowolnym ESP musi być LVTTL czyli 3.3V

Więc w ogóle to powinieneś zacząć od użycia multimetru i ustalić co twój PIR wystawia na swoim wyjściu (zamiast próbowac zgadywać w ciemno).

D6 nie jest skonfigurowane w YAML (bo to jest fizycznie GPIO12)

Jeśli masz tam jakiś przekaźnik, czy styki, to muszą być podłączone zarówno do GPIO jak i z drugiej strony do masy lub 3.3V, jeśli wbudowany pullup/pulldown nie daje rady, to musisz zweryfikować czy na jego wyjściach nie przedostaje się jakiś inny potencjał…

Witam
Doprecyzuję temat : mam czujnik temp na esp8266 Wemos D1 mini pro. Dokonywałem zmian wejść dla kontroli - ale obecnie gpio2 to DS18b20 i pracuje poprawnie. Na wejściu gpio12 ( D6 wemos) mam czujnik ruchu.

one_wire:
  - platform: gpio
    pin: GPIO12 

sensor:
  - platform: dallas_temp
    name: "32_t.gosp.kuchnia"
    address: 0xb80000005b46c028
    update_interval: 30s
switch:
  - platform: gpio
    pin: GPIO13
    name: "Światło kuchnia"

binary_sensor:
  - platform: gpio
    pin: GPIO12
    name: "cz.r. kuchnia"
    device_class: MOTION
    
captive_portal:

po pierwsze - wejście czujnika ruchu nie zmienia stanu, albo robi to nieregularnie( jak dotknę palcem)
po drugie pracuje odwrotnie
Dlatego szukam przyczyn niewłaściwej pracy i chciałem zmienić stan na odwrotny.

    "d1_mini_pro": "d1_mini",

czyli możesz stosować definicję

esp8266:
  board: d1_mini

to będziesz mógł stosować pasujące aliasy


skoro reaguje na palec, a na zwarcie przekaźnika nie, to masz problem z ciągłością okablowania, jak daleko jest ten PIR od MCU? może po prostu użyj fizycznego pullupu = rezystora (powiedzmy coś między 10k, a 1k)

Tu nadal jest miejsce na zastosowanie multimetru - napięcie mierzone (względem masy układu) na pinie wejściowym przy włączonym pullupie lub fizycznym rezystorze powinno być w okolicy >3V (ALE UWAGA <3.6V !!) gdy styki PIRa są rozwarte oraz w okolicy 0V gdy zwarte (do masy oczywiście, gdy mówimy o pullupie).


z tym to akurat najmniejszy problem
dla sensora binarnego robisz to tak

dokonałem z pracy zmiany

  - platform: gpio
    pin: 
      number: GPIO2
      inverted: true
    name: "cz.r. kuchnia"
    device_class: MOTION
    
captive_portal:

czujnik ruchu odwrócił pracę
ale nie oddaje informacji. ( a ruch jest na pewno )
wieczorem sprawdzę okablowanie i ewentualnie zapnę rezystancję
Dziekuje z poradę

Nawet mając tylko zdalny dostęp jesteś w stanie zobaczyć logi. (W IDE=Compilerze=Builderze)

tak widzę

po wgraniu nowego YAML - przeładował
a wcześniej w nocy jak próbowałem różne układy …

To akurat historia encji, mówię o logach tu


leci tylko temperatura

No nie ma w tym nic dziwnego skoro PIR w ogóle nie działa (czego dowodzi historia - stan encji się zmienił, bo dokompilowałeś odwrócenie stanu).
Co to w ogóle za PIR, że ma przekaźnik.

tak jest cały czas - nic… a jak dotknę palcem styku - to sieje zmianami .
ogolnie to esp ma byś w obudowie z czujnikiem ruch bosch

Ten koleżka od filmiku ma jakiś blog albo repozytorium? Bo tłumaczenie czegoś na podstawie wideo jest do bani, bo musiałbym tracić czas na oglądanie, a wystarczy schemat.
jak widać masa jest bardzo pokrętnie narysowana jako pogięty niebieski kabelek ale jest tu KLUCZOWA do działania (łączy wszystkie komponenty do wspólnego zerowego potencjału)

To znaczy, że ten przekaźnik nie działa albo nie podłączyłeś nigdzie* jego drugiego końca zestyku.
nigdzie = może masy różnych układów nie są ze sobą połączone

Każdy łącznik ma dwa końce - jeden dajemy do GPIO (wraz z pullupem), a drugi w naszym przykładzie do masy (nie mam takiego PIRa to nie sprawdzę jak działa, jak znasz model to daj link do datasheeta - tam powinny być istotne informacje jak podłączyć).

na co dzień pracuje przy elektryce. pompy ciepła klimatyzacje centrale wentylacyjne… wiec kabelki to mój konik…

Tego nie widać po drugiej stronie internetu, więc zakładam, w takim razie, że wiesz co robisz, a zatem do roboty - sprawdź połączenia i bierz od uwagę że logika niskonapięciowa jest bardzo podatna na zakłócenia.

po pierwszych problemach do tego czujnika podpiąłem przekaźnik 12v … tymczasowo dla pewności ze styk przełącza. miernikiem sprawdzam i działa. następnie robiłem D6 z wemosa do masy i do 3.3v. dzisiaj sprawdzam jeszcze raz. potem złącze to wszystko na NodeMCU

Świetnie - możesz też skorzystać “piętrowo” z tego dodatkowego przekaźnika, bo jak na razie ja nie wiem co ma w środku ten twój PIR - zauważ, że sterowanie z logiką 12V jest znacznie bardziej odporne na rezystancje pasożytnicze w układzie.

Załóżmy, że jest tam wyjście OC które nie jest w stanie ściągnąć nam sygnału dostatecznie blisko potencjału masy - dla ESP poprawne rozpoznawanie zera logicznego jest gwarantowane dla <0.825V pod warunkiem, że zasilasz ten ESP równiutko 3.3V a jakie ma faktycznie napięcie zasilania to ja nie wiem, ale ESP8266 wciąż pracuje stabilnie nawet przy ~2.5V tylko wtedy tolerancja na zero logiczne mu spada do odpowiednio niższego poziomu).
Więc multimetr w ręce i zmierz napięcia.


no i tu jest sytuacja jasna (mając pullup na wejściu, zmiana stanu nastąpi tylko przy zwarciu z masą, w końcu pullup i tak cały czas podciąga to wejście do 3.3V, więc będzie tam stan wysoki niezależnie od tego czy wejście “wisi w powietrzu” czy podepniesz do Vcc, to chyba podstawy elektrotechniki).


Biorąc pod uwagę działanie na dotknięcie palcem trzeba też brać pod uwagę, że

  1. albo właśnie sytuacja jest taka, że stan wejściowy masz akurat właśnie w strefie stanów nieustalonych (nie jest ani rozpoznawalnym zerem, ani jedynką logiczną), lub pullup jest za słaby (źródło prądowe wbudowane w ESP bywa porównywane do rezystora ~50k najprościej byłoby w sumie zmierzyć prąd zwarcia z masą takiego GPIO, tylko typowe multimetry mogą tu wnosić duży błąd z powodu dużej rezystancji wewnętrznej na takich zakresach pomiaru prądu jaki jest tu interesujący)
  2. albo czas na użycie kolejnego ESP, bo w tym już puściłeś z dymem układ źródła prądowego emulujący pullupy albo wewnętrzny układ krosowniczy obsługujący to GPIO (to niestety dość delikatna elektronika)

Generalnie warto też wiedzieć na jakich pinach da się włączyć pullup (no akurat zasadniczo na wszystkich potencjalnie użytkowych, a pulldown tylko na GPIO16) oraz jak się zachowuje ES8266 podczas bootowania

To tak przy okazji, bo GPIO2 (które się przewinęło gdzieś wyżej) to akurat średnio (czytaj wcale) się nadaje na wejście binarne…