Zabranie 24V z zacisków 40/41 przy stanie “Zamknięta” to nawet zaleta, bo można to wykorzystać do statusu bramy. Zasilanie shelly z 230V prawie niczego nie zmienia, robocze styki przekaźnika I ,0, są odseparowane od 230V , więc spokojnie można je podłączyć pod zaciski IMPULS. Status bramy jak już wspomniałem, cewka przekaźnika 24V do 40/41 , styki robocze muszą podawać / zabierać fazę 230V, na zacisk SW. Cała konfiguracja jak odseparowanie SW od przekaźnika , timer itd, identycznie jak przy zasilaniu niskim napięciem
To byłoby super, mógłbym w końcu “wyrzucić” Aqara door & window contact sensor. Zrozumiałem, że mogłoby to być coś w ten deseń?
Schemat obrazkowy jest jak najbardziej OK . Pamiętaj tylko odseparować SW od przekaźnika. Albo wgraj ESPhome i skonfigurujesz jak chcesz Powodzenia
Jutro przyjdą paczki więc pewnie już wkrótce się za to zabiorę. Mam pytanie czy stan SW jest domyślnie włączony w shelly czy też trzeba go włączyć i czy to jest ten parametr ?
Domyślnie SW ustawiony jest na przełączanie (Toggle switch) , więc trzeba go ustawić jak w tym linku Shelly1 configured as detached edge switch - #3 by jackeroo_marc - Configuration - Home Assistant Community
Tak wiem, czytałem co napisałeś, powinien być “Detached” + timer. Źle zadałem pytanie. Chciałem zapytać jak odczytać stan bramy. Po podłączeniu jak na moim “obrazku” działa otwórz/stop/zamknij (encja → switch.shelly1_123456789aaa, natomiast nie widzę nic oprócz domyślnie wyłączonej encji w HA (binary_sensor.shelly1_123456789aaa_input), która się nie zmienia gdy brama się otwiera, stąd moje pytanie. Jeśli ta encja powinna podawać stan bramy to sprawdzę za widoku czy w momencie otwierania napięcie sterowania jest podawane na cewkę i czy faza pojawia się na SW.
Ok teraz wiem co miałeś na myśli, encja input ( domyślnie wyłączona), wykryta jako Sensory. Po włączeniu w HA i zmianie klasy urządzenia, powinna reagować na podanie fazy na SW.
W aplikacji shelly , powinna też reagować ikona przełącznika , a konkretnie zaznaczona część na pomarańczowo , zmienia kolor na niebieski po podaniu fazy na SW.
O Panowie, widzę tu dobre rozkminy.
Chcę również swoja bramę wjazdową zrobić smart (Came BXV), a ze mam w szufladzie moduł HW-622 (Introducing: The Relay Module HW-622 - ayatec.eu)
tu schemat:
to dopiąłem do niego drugi PC817 , wywaliłem diodę D5 z płytki przed oryginalnym modułem PC817, dolutowałem się do GPIO12, 13 i 14 i teraz czytam stany kiedy brama jest otwarta, zamknięta, kiedy się otwiera(ruch) i kiedy zamyka(ruch).
Jako, że mam przełącznik schodowy podpięty do automatu w garażu, aby bramę ręcznie otworzyć, brama działa w trybie open-stop-close i nie chciałbym zmieniać na 3-przyskowe fizyczne sterowanie bo i pilot dwuprzysiskowy ogarnia mi i bramę garażową i wjazdową.
Kto pomoże z kodem EPShome aby zrobić total smart?
chodzi o to, że czasem wracając do domu, brama jest w pół otwarta, klikam skrót na fonie i brama się zamyka zamiast otworzyć.
Chciałbym aby to działało na tyle inteligentnie, aby mieć przycisk otwórz i zamknij, by działały w zależności jaki jest stan bramy, czyli jeżeli była otwierana i zatrzymana w połowie, to jak kliknę otwórz, to aby faktycznie HW622 zwarł styki 3 razy - pierwszy zamyka, drugi stopuje a trzeci otwiera zgodnie z wybranym przyciskiem.
niestety mimo pomocy AI nie jestem w stanie tego dobrze ogarnąć.
Drugi problem, to taki, że stany na binary-sensor “migotają”, podpiąłem sie przez rezystory 560ohm do końcówek kontraktona i dałem
filters:
- delayed_on: 150ms
- delayed_off: 150ms
Nawet pomogło, ale przy czytaniu is_gate_opening/is_gate_closing (podpięte przez 10kohm, oryginalnie na płytce HW622) binary-sensor robi dyskotekę gdy brama dojeżdża do krańców.
@isom1266 może Ty pomożesz, bo przy sterowniku nawadniania od razy rozkminiłeś problem
Mój aktualny kod:
globals:
- id: last_gate_direction
type: std::string
restore_value: no
initial_value: '"stopped"'
binary_sensor:
- platform: gpio
id: is_gate_opening
name: is_gate_opening
pin:
number: GPIO5
mode:
input: true
pullup: true
inverted: true
on_press:
then:
- lambda: 'id(last_gate_direction) = "opening";'
- platform: gpio
id: is_gate_closing
name: is_gate_closing
pin:
number: GPIO14
mode:
input: true
pullup: true
inverted: true
filters:
- delayed_on: 150ms
- delayed_off: 150ms
on_press:
then:
- lambda: 'id(last_gate_direction) = "closing";'
- platform: gpio
id: is_gate_open
name: is_gate_open
pin:
number: GPIO13
mode:
input: true
pullup: true
inverted: true
filters:
- delayed_on: 150ms
- delayed_off: 150ms
- platform: gpio
id: is_gate_closed
name: is_gate_closed
pin:
number: GPIO12
mode:
input: true
pullup: true
inverted: true
filters:
- delayed_on: 150ms
- delayed_off: 150ms
cover:
- platform: template
device_class: gate
name: "ParkingGate"
id: parking_gate
lambda: |-
if (id(is_gate_open).state) {
return COVER_OPEN;
} else if (id(is_gate_closed).state) {
return COVER_CLOSED;
} else {
return COVER_OPEN; // lub CLOSED - wg preferencji
}
open_action:
then:
- if:
condition:
binary_sensor.is_on: is_gate_closed
then:
- logger.log: "Brama zamknięta – otwieram"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- if:
condition:
binary_sensor.is_on: is_gate_closing
then:
- logger.log: "Brama się zamyka – zatrzymuję i otwieram"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- if:
condition:
and:
- binary_sensor.is_off: is_gate_opening
- binary_sensor.is_off: is_gate_closing
- lambda: 'return id(last_gate_direction) == "closing";'
then:
- logger.log: "Brama zatrzymana podczas zamykania – otwieram"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
close_action:
then:
- if:
condition:
binary_sensor.is_on: is_gate_open
then:
- logger.log: "Brama otwarta – zamykam"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- if:
condition:
binary_sensor.is_on: is_gate_opening
then:
- logger.log: "Brama się otwiera – zatrzymuję i zamykam"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- if:
condition:
and:
- binary_sensor.is_off: is_gate_opening
- binary_sensor.is_off: is_gate_closing
- lambda: 'return id(last_gate_direction) == "opening";'
then:
- logger.log: "Brama zatrzymana podczas otwierania – zamykam"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
stop_action:
then:
- if:
condition:
or:
- binary_sensor.is_on: is_gate_opening
- binary_sensor.is_on: is_gate_closing
then:
- logger.log: "Zatrzymuję bramę"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- lambda: 'id(last_gate_direction) = "stopped";'
else:
- logger.log: "Brama nie jest w ruchu – pomijam STOP"
button:
- platform: template
name: "Brama Otwórz"
icon: mdi:gate-open
on_press:
then:
- cover.open: parking_gate
- platform: template
name: "Brama Zamknij"
icon: mdi:gate
on_press:
then:
- cover.close: parking_gate
- platform: template
name: "Brama Zatrzymaj"
icon: mdi:stop
on_press:
then:
- cover.stop: parking_gate
Aktualnie brama działa tak, że działa otwórz i zamknij gdy jest w skrajnych pozycjach. Gdy się otwiera, działa również przycisk zamknij oraz zatrzymaj. Gdy otwiera się i kliknę zatrzymaj to już brak reakcji na otwórz/zamknij/zatrzymaj. Dopiero “Gate control toggle” czyli “surowe” zwarcie styków zamyka/otwiera gdy była wcześniej w ruchu zatrzymana.
OFF TOPIC (bo dołożyłeś własne PC817 to chyba nie ma sensu zostawiania zabezpieczenia na jednym)
D5 to transil mający zapobiec spaleniu PC817, jeśli masz problemy z niezgodnością poziomów logiki (za wysokim napięciem na kontaktronie czy tam przycisku) należało dobrać rezystor i ewentualnie użyć diodę impulsową szeregowo z wejściem
na te kontaktrony idzie jakieś napięcie z fabrycznego sterownika bramy? czy to tylko dokładka dla samego ESP (warto wiedzieć dlaczego akurat 560R)
bazowałem na tym schemacie:
z tego projektu: Introducing CHAI - a CAME gate controller to Home Assistant Interface - Vince's thoughts
PC817 są tak samo połączone jak na powyższym schemacie, dałem jeszcze rezystro przed drugim PC817 wiec są dwa, jeden oryginalny (10k- pomierzone, mimo ze na schemacie jest 4,7k) na HW622, a drugi dołożony. GND_EXT używam właśnie jako N_Pole.
Dałem większe filtry w kodzie (400ms) i już nie ma dyskoteki. teraz tylko kod do poprawy związany z odczytaniem stanów i poprawnym sterowaniem.
Ok! rozkminilismy z Gemini kod, trochę musiałem mu pomóc bo miał problem z krokowym sterowaniem, ale działa, poniżej wrzucam kod.
Teraz pytanie- jak ogarnąć aby ikonka:
otwierania byla aktywna podczas ruchu? aktualnie staje sie nieaktywna jak otwieram bramę i po “stop” pozostaje nieaktywna. moge tylko zamknąć a nie mogę otworzyć do końca.
cover:
- platform: template
device_class: gate
name: "ParkingGate"
id: parking_gate
lambda: |-
if (id(is_gate_open).state) {
return COVER_OPEN;
} else if (id(is_gate_closed).state) {
return COVER_CLOSED;
} else {
return COVER_OPEN;
}
open_action:
then:
# 1. Otwieranie, gdy brama jest całkowicie ZAMKNIĘTA
- if:
condition:
binary_sensor.is_on: is_gate_closed
then:
- logger.log: "Brama zamknięta – otwieram"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
# 2. Odwrócenie kierunku, gdy brama się ZAMYKA
- if:
condition:
binary_sensor.is_on: is_gate_closing
then:
- logger.log: "Brama się zamyka – zatrzymuję i otwieram"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
# 3. Obsługa ZATRZYMANEJ bramy w położeniu pośrednim
- if:
condition:
and:
- binary_sensor.is_off: is_gate_opening
- binary_sensor.is_off: is_gate_closing
- binary_sensor.is_off: is_gate_open
- binary_sensor.is_off: is_gate_closed
then:
# Brama stoi. Sprawdzamy, co robiła ostatnio.
- if:
condition:
lambda: 'return id(last_gate_direction) == "opening";'
then:
# Ostatnio się otwierała, więc WZNAWIAMY otwieranie
- logger.log: "Brama zatrzymana podczas otwierania – wznawiam otwieranie"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- if:
condition:
lambda: 'return id(last_gate_direction) == "closing";'
then:
# Ostatnio się zamykała, więc ODWRACAMY kierunek i otwieramy
- logger.log: "Brama zatrzymana podczas zamykania – otwieram"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
close_action:
then:
# 1. Zamykanie, gdy brama jest całkowicie OTWARTA
- if:
condition:
binary_sensor.is_on: is_gate_open
then:
- logger.log: "Brama otwarta – zamykam"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
# 2. Odwrócenie kierunku, gdy brama się OTWIERA
- if:
condition:
binary_sensor.is_on: is_gate_opening
then:
- logger.log: "Brama się otwiera – zatrzymuję i zamykam"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
# 3. Obsługa ZATRZYMANEJ bramy w położeniu pośrednim
- if:
condition:
and:
- binary_sensor.is_off: is_gate_opening
- binary_sensor.is_off: is_gate_closing
- binary_sensor.is_off: is_gate_open
- binary_sensor.is_off: is_gate_closed
then:
# Brama stoi. Sprawdzamy, co robiła ostatnio.
- if:
condition:
lambda: 'return id(last_gate_direction) == "closing";'
then:
# Ostatnio się zamykała, więc WZNAWIAMY zamykanie
- logger.log: "Brama zatrzymana podczas zamykania – wznawiam zamykanie"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- delay: 400ms
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
- if:
condition:
lambda: 'return id(last_gate_direction) == "opening";'
then:
# Ostatnio się otwierała, więc ODWRACAMY kierunek i zamykamy
- logger.log: "Brama zatrzymana podczas otwierania – zamykam"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
stop_action:
then:
# Ta sekcja jest już poprawna - zatrzymuje bramę tylko gdy jest w ruchu
# i co najważniejsze, nie kasuje `last_gate_direction`
- if:
condition:
or:
- binary_sensor.is_on: is_gate_opening
- binary_sensor.is_on: is_gate_closing
then:
- logger.log: "Zatrzymuję bramę"
- output.turn_on: gate_control_toggle
- delay: 100ms
- output.turn_off: gate_control_toggle
else:
- logger.log: "Brama nie jest w ruchu – pomijam STOP"
Edit:
Ok, mam
cover:
- platform: feedback
kolejny OT
Ta wartość nie jest krytyczna - dobiera się ją do napięcia, dla zachowania 2 warunków
- by nie przekroczyć dopuszczalnego prądu przewodzenia diody IR (ten wcześniej wspomniany transil ma zabezpieczać właśnie przed ewentualnymi przepięciami - wartość rezystora jest dobrana dla napięć rzędu 3V-5V, jeśli masz tam inne przyjmij spadek na diodzie rzędu 1.5V i przelicz)
- tak by prąd LED IR był w zakresie wysterowania fototranzystora (dlatego wartość rezystancji nie może być dowolnie duża)
generalnie transoptory mają dość duże rozrzuty parametrów, więc wykonania pojedyncze i podwójne są selekcjonowane do kilku grup w/g wzmocnienia (więc projektując “bardziej po papiesku” ten rezystor dobiera się oprócz napięcia jeszcze do grupy wzmocnienia by uzyskać najbardziej pożądane parametry przejściowe - mimo zasadniczo zastosowania binarnego transoptor działa analogowo i nawet w pewnym zakresie można go używać do przesyłania sygnału analogowego).
Rezystory R5 i R6 służą tutaj do tłumienia zakłóceń na liniach sygnałowych (oprócz tego są bez funkcji, bo wykorzystany jest słaby pullup wbudowany w MCU), zbyt duża wartość rezystancji będzie przeszkadzała w poprawnym wykrywaniu zwarcia. Odporność na zakłócenia można też zwiększyć stosując mocniejszy fizyczny pullup zamiast wbudowanego w MCU.
Jeśli przyciski/kontaktrony są podłączone do jeszcze jakiegoś innego układu należy sprawdzić rzeczywiste napięcia na nich występujące.
Autor artykułu pomierzył istotne miejsca, i u niego
na przyciskach sterujących jest
A few measurements indicate that the controller has pull-ups of 4.7KOhm to 5V on each contact,
a na złączu silnika (z którego są zasilane LEDy w transoptorach!)
The measured DC voltage across terminals M/N is:
30V when opening at full speed
15V when opening at half-speed (approaching fully open)
0V when the gate is not moving
-15V when closing at half-speed (approaching fully closed)
-30V when closing at full speed
więc tu musisz zmierzyć u siebie i dobrać takie wartości by nie puścić z dymem diod w transoptorach (no chyba, że masz identyczny sterownik to załóżmy, że są to takie same napięcia i gość przeliczył rezystory)
Tu jest też taka kwestia, że przeciwsobne połączenie transoptorów zabezpiecza im nawzajem diody LED IR przed przebiciem wstecznym (jeśli nie łączysz ich identycznie, to wejście każdego musi być zabezpieczone minimum diodą impulsową wstawioną w kierunku przeciwsobnym do diody IR, czyli tutaj w kierunku zaporowym; uwaga - diody impulsowe są zbędne i niepożądane jeśli transoptory mają wejścia połączone równolegle przeciwsobnie).
Tak w kwestii rezystora 1.5k to dla 30V można przyjąć, że prąd przewodzenia LED w transoptorach będzie koło 20mA (Everlight EL817 czyli takie mniej więcej bliźniaki twoich wytrzymują do 60mA, więc 20mA jest dla nich OK)
Ja swego czasu zrobiłem sterownik do bramy garażowej wykorzystujący ESP32-C3 Super Mini. Można go zintegrować z zewnętrznym przyciskiem oraz odbiornikiem pilotów (np. takim: https://allegro.pl/oferta/radiowy-sterownik-do-bram-inel-ors-x1t-10559594952). Projekt wykorzystuje miernik prądu do wykrycia pełnego otwarcia/zamknięcia bramy.
Schemat, projekt PCB i kod ESPHome można znaleźć tu: GitHub - macdems/Garage
Jeśli ktoś jest zainteresowany, chętnie podam więcej szczegółów (np. kompletny BOM).
Straszne dzięki za garść, a może i dwie, pełnych informacji. Całe szczęście mam ten sam automat Came, stad bazowałem właśnie na tym schemacie. możliwe ze dyskotekę na odczytach binary_sensor miałem przez to, że przewód między esp a automatem ma jakies 10m długości w dodatku jest to przewód ziemny 10 żyłowy. Dyskotekę ogarnąłem filtrem w kodzie, czy poprawnie prądowo - nie wiem, za cienki jestem. Ale działa
Możliwe, mógłbyś ewentualnie dołożyć rezystory pullup.
Jeśli ten przewód to skrętka, to można każdy przewód sygnałowy puścić jako parą z masą (jeśli masz tam dość żył), ale skoro filtr załatwił sprawę, to nie wiem czy jest o co walczyć (szczególnie, że przyczyna może być inna).