Dzisiaj nieco mniej typowe urządzenie, a mianowicie dodatek WiFi do kontroli bramy garażu. Urządzenie to wpina się w istniejący już włącznik od bramy garażowej i pozwala ono zamykać/otwierać garaż zdalnie poprzez zwieranie na chwilę odpowiednich styków (symulując naciśnięcie przycisku). Dodatkowo oferuje prosty czujnik magnetyczny nakładany na bramę, by móc sprawdzać, czy jest ona otwarta. Tylko tyle - ale to starcza. Pora zobaczyć co jest w środku i zmienić firmware tak by uwolnić produkt od chmury i od serwerów producenta.
Zakup sterownika bramy
Produkt kupowawłem za około 80 zł. Moim zdaniem jest on dość drogi i bardziej płacimy za samą jego funkcję, niż za elektronikę. DIY by wyszło o wiele taniej. Gdy go kupowałem, to były wysyłka z Czech i nieco inna cena:
Zestaw zawiera:
1 x Smart WiFi Garage Door Opener Controller
1 x Adapter Ładowania USB
1 x USB kabel
1 x Instrukcja
1 x Akcesoria mocowania
Zdjęcie zestawu (wg. sprzedawcy):
Schemat montażowy:
Grafiki promocyjne:
Rzeczywista zawartość zestawu:
Krótki test z aplikacją Tuya
Na próbę sparowałem urządzenie z aplikacją producenta. Reset wykonałem wciskając przycisk z obudowy na dłużej niż 5 sekund.
Filmik pokazuje jak to działa:
Zasadniczo wciśnięcie przycisku na obudowie (bądź sterowanie z apki) po prostu zwiera na krótką chwilę przekaźnik, symulując naciśnięcie przycisku właściwego kontrolera bramy. Dodatkowo załącza się w aplikacji animacja, że niby brama się otwiera, itd. Czujnik zamknięcia/otwarcia też jest wspierany i używany jest by pokazać biężący stan bramy.
Wnętrze sterownika bramy
Plastikowa obudowa trzyma się na zaczepy. Trzymają one dość solidnie, trzeba uzyć nieco siły przy podważaniu:
W środku jest moduł CB3S, czyli BK7231N oraz wyprowadzone sygnały programowania.
Można zatem wgrać OpenBeken.
Cytat z ogólnodostępnej dokumentacji Tuya:
Cytat:
Pin number Symbol I/O type Function 1 RST I Low-level reset, high level active (the pin has been pulled high internally), correspond to CEN of the IC 2 ADC3 AI ADC pin, which corresponds to P23 of the IC 3 CEN I Enabling pin, which is pulled high internally to be compatible with other modules 4 P14 I/O A common GPIO interface, which corresponds to P14 of the IC 5 P26 I/O GPIOP_26, which corresponds to P26 of the IC, PWM 5 6 P24 I/O GPIOP_24, which corresponds to P24 of the IC, PWM 4 7 P6 I/O GPIOP_6, which corresponds to P6 of the IC, PWM 0 8 VCC P Power supply pin (3.3V) 9 GND P Power supply reference ground 10 P9 I/O GPIOP_9, which corresponds to P9 of the IC, PWM 3 11 TXD2 I/O UART2_TXD (used to display the module internal information), which corresponds to P0 of the IC 12 CSN I/O Production test control pin. If it is used as a common I/O pin, it must be connected to the VCC externally. Do not connect it to the ground before the module is powered on. 13 P8 I/O GPIOP_8, which corresponds to P8 of the IC, PWM 2 14 P7 I/O GPIOP_7, which corresponds to P7 of the IC, PWM 1 15 RXD1 I/O UART1_RXD (user serial interface), which corresponds to P10 of the IC. Do not connect it to the VCC. By default, the MCU serial port should be in low-level or high-impedance state. 16 TXD1 I/O UART1_TXD (user serial interface), which corresponds to P11 of the IC. Do not connect it to the VCC. By default, the MCU serial port should be in low-level or high-impedance state. 17 ADC3 AI (Not recommended. If needed, please use Pin 2) ADC port, which corresponds to P23 of the IC. Programmed SPI 18 P22 I/O (Not recommended ) GPIOP_22, which corresponds to P22 of the IC. Programmed SPI 19 CSN I/O The pull-up resistor is needed during usage of customers. Do not connect it to the ground before the module is powered on. Correspond to P21 of the IC. 20 P20 I/O (Not recommended. ) GPIOP_20, which corresponds to P20 of the IC. Programmed SPI 21 NC - - 22 NC - -
Do programowania używam tylko TXD1 i RXD1. Ale najpierw zobaczymy resztę PCB:
Zasadniczo na PCB mamy:
- LDO AMS1117 (daje nam 3.3V dla modułu WiFi z 5V)
- mały przycisk i diodę LED
- złącze do przycisku od garażu (z przekaźnikiem, ten przekaźnik je zwiera i symuluje wciśnięcie)
- złącze do czujnika otwarcia/zamknięcia bramy
Rolę pinów BK7231:
- P7 - przekaźnik (ten załączający właściwą bramę)
- P8 - wejście czujnika otwarcia/zamknięcia bramy
- P24 - LED z płytki
- P26 - przycisk z płytki
Procedura programowania
Programowanie tego konkretnego BK7231 będzie bardzo proste.
Wystarczy konwerter USB na UART o poziomach napięć 3.3V. Lutujemy trzy kabelki - masę, RX i TX.
Nastepnie uruchamiamy na komputerze program (bkWriter 1.60, albo lepiej, hid_download_py) i gdy trzeba wykonać RESET układu, po prostu odłączamy kabelek USB od złącza z płytki. Po prostu wykonujemy reboot.
Dzięki temu nie trzeba lutować tego sygnału "BOOT" czy tam dodatkowego LDO 3.3V, bo taki już na pokładzie jest.
https://github.com/OpenBekenIOT/hid_download_py
Jest to BK7231N, więc wgrywamy binarkę QIO na offset 0. Gdyby to był BK7231T, to wgrywalibyśmy UA na domyślny offset. Tak jak w Readme OpenBK.
Konfiguracja OpenBeken
Najpierw należy ustawić piny, te co podałem wyżej w tabelce.
Przyjmiemy, że kanał 0 kontroluje przekaźnik a kanał 1 to odczyt stanu drzwi.
Użyty dla czujnika drzwi typ wejścia dInput to po prostu digital input - ustawia dany kanał na wartość pobraną z pinu cyfrowego.
Następnie robimy kosmetykę - należy ustawić typ kanału 1 jako "OpenClosed" by wyświetlał tekstowo stan drzwi (a nie jako liczba):
setChannelType 1 OpenClosed
Potem należy jeszcze dodać coś, co jak oryginalne firmware będzie "odłączało" spowrotem przekaźnik - tak, by generować krótki impuls. Wystarczy napisać prostą obsługę zdarzenia w OpenBeken, wszystko w pełni skryptowalne:
addChangeHandler Channel0 != 0 addRepeatingEvent 2 1 setChannel 0 0
Gdy kanał 0 zmieni wartość na nieujemną (wtedy też automatycznie zamknie się przekaźnik), to uruchamiamy timer 2 sekundowy z 1 powtórzeniem, po którego wykonaniu kanał 0 ustawiamy na 0 (to otworzy przekaźnik).
Powyższe skrypty należy wpisać w LittleFS w autoexec.bat lub w "Short startup command" razem z backlog:
backlog setChannelType 1 OpenClosed; addChangeHandler Channel0 != 0 addRepeatingEvent 2 1 setChannel 0 0
czyli tutaj:
Warto też zmienić nazwę na coś sensowniejszego:
Konfiguracja Home Assistant - etap 1
Pierwszy etap konfiguracji wymaga dodania osobno sterowania przekaźnikiem (jako switch) oraz odczytu sensora (jako binary_sensor) do Home Assistant. Posłużymy się w tym celu kodem YAML. Musimy pamiętać, jakie kanały przypisaliśmy do danych ról - tutaj je odbieramy przez temat MQTT z get i ustawiamy przez temat MQTT z set. Tak jak poniżej:
Kod: YAML
Powyższy Yaml definiuje sensor otwarcia garażu. Mamy tu tylko "state_topic" z get, czyli odbieramy to, co publikuje OBK.
Teraz obsługa przekaźnika:
Kod: YAML
Podobnie jak wyżej, tylko dodany jest jeszcze "command_topic", czyli temat który pozwala nam wysłać do OpenBeken nowy stan przekaźnika.
Powyższe Yaml powinny nam dać:
Powyższy sensor na interfejsie HA powinien reagować na zmianę stanu sensora na urządzeniu, tak jak powinno dać się sterować przekaźnikiem z poziomu HA!
Konfiguracja Home Assistant - etap 2
Teraz skorzystamy z mechanizmu cover w celu połączenia naszego czujnika otwarcia i przekaźnika (oskryptowanego w OBK tak by wracał do otwartego stanu po chwili) w całość.
Dokumentacja cover:
https://www.home-assistant.io/integrations/cover/
Oto gotowy kod:
Kod: YAML
Co trzeba tu wiedzieć?
- binary_sensor.garage_door_sensor_2 wskazuje na nasz sensor garażu
- switch.garage_relay wskazuje na nasz przekaźnik
To samo można by zrobić, mając zwykły przekaźnik (osobno) i czujnik otwarcia/zamknięcia drzwi (osobno).
Powyższy kod wywołuje tylko switch.turn_on, gdyż przekaźnik sam się odłącza potem (skrypt Obk).
Bloki z if pozwalają wybrać ikonę oraz wartość bramy.
Przycisk stopu na ten moment nie robi nic.
Podsumowanie
To urządzenie jest naprawdę banalnie proste - aż dziwne, że tak dużo kosztuje. Można by znacznie taniej samemu wykonać podobnym mechanizm, chociażby na tanim ESP8266.
Zmiana firmware CB3S też poszła bez problemów - jak i konfiguracja w Home Assistant.
Niestety w praktyce (na prawdziwej bramie) urządzenia nie przetestowałem, gdyż nie miałem dostępu do takiego luksusu, ale testy "na sucho" pokazały, że po zmianie firmware i z HA wszystko działa. A jakby co, to zawsze można zmienić zachowanie oprogramowania - chociażby je inaczej oskryptować bądź inaczej zorganizować działanie w Home Assistant.
Czy ktoś z forumowiczów ma może bramę do garażu sterowaną na WiFi, do tego sparowaną z HA?
Zapraszam do komentowania.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
