Ostatnio pracuję nad dość ambitnym projektem, którego celem jest uzyskanie lokalnej kontroli nad komercyjnym napędem do bram garażowych firmy Chamberlain LiftMaster. Ich płytka sterująca zawiera układ Wi-Fi Realtek RTL8720CM, wykorzystywany do integracji z usługą chmurową MyQ. Rozwiązanie to było wcześniej obsługiwane w Home Assistant w obecnej postaci, dopóki firma Chamberlain nie zdecydowała, że nie podoba jej się otwarty interfejs API i skutecznie zablokowała integracje stron trzecich: https://www.home-assistant.io/blog/2023/11/06/removal-of-myq-integration/
Większość użytkowników może skorzystać z kontrolera Ratgdo jako opcji zapasowej, która steruje napędami bram domowych za pośrednictwem protokołu Security2+. Niestety nie jest to opcja dla osób posiadających komercyjne napędy do bram z serii Maxum, chyba że zrobisz to za pomocą prostych wejść przekaźnikowych wykorzystujących zewnętrzne wejścia przyciskowe, co wydawało mi się rozwiązaniem zbyt prostym (brak informacji zwrotnej o stanie bramy itp.).
Na szczęście dla mnie (i Claude’a) istnieje złącze SWD, dzięki któremu udało nam się uzyskać zrzut oprogramowania głównego mikrokontrolera, co pozwoliło nam przeprowadzić inżynierię odwrotną protokołu komunikacyjnego między układem LPC a fabrycznym oprogramowaniem układu RTL. Oba układy wykorzystują zewnętrzne pamięci EEPROM do przechowywania oprogramowania. Nie udało mi się połączyć z układem RTL przez UART, mimo moich najlepszych starań przy lutowaniu bardzo cienkich przewodów. Oznaczało to zamówienie programatora SPI (CH341) oraz bardzo małego uchwytu z pinami pogo o wymiarach 6 × 5 mm, aby bezpośrednio zrzucić zawartość pamięci EEPROM. Większość tej pracy była prosta i, szczerze mówiąc, Claude wykonał 95% prac programistycznych przy użyciu Ghidry.
Dobre wieści:
- Wpisanie oprogramowania OpenBeken do układu RTL było proste dzięki interfejsowi SPI i uchwytowi z stykami pogo. OpenBeken działa bez zarzutu.
- Claude'owi udało się napisać sterownik dla OBK, który komunikuje się z mikrokontrolerem LPC, odczytuje stan drzwi i wydaje polecenia ruchu drzwi (otwarcie/zamknięcie). Nie testowałem tego jeszcze z podłączonym rzeczywistym silnikiem drzwi, a jedynie odczytywałem bity stanu.
Zła wiadomość, której nie potrafię wyjaśnić:
Po podłączeniu zasilania do płytki sterującej mechanizmu otwierającego drzwi układ RTL uruchamia OBK tylko wtedy, gdy dotknę przewodem pinu 37 (UART TX) tego układu. To bardzo dziwne, ponieważ przewód nie jest podłączony do niczego innego, a jedynie przyciśnięty do przelotki połączonej z tym pinem. Naprawdę nie potrafię zdiagnozować, dlaczego się nie uruchamia, ponieważ podłączenie programatora UART w praktyce oznacza podłączenie przewodu do tego pinu, a OBK wtedy się uruchamia. Zaczynam wysyłać pingi na adres IP OBK i włączam zasilanie płytki. Odpowiedzi na ping zaczynam otrzymywać dopiero wtedy, gdy przytrzymuję przewód przy styku. Jest to poważny problem, ale jakoś oryginalne oprogramowanie układowe działało, więc musi istnieć jakieś rozwiązanie.
Układ Realtek (U5) z umieszczoną nad nim pamięcią EEPROM (U24). J40 to złącze SWD dla mikrokontrolera LPC.
Główny mikrokontroler NXP.
Przylutowywanie drobnych przewodów do układu RTL w celu uzyskania dostępu do interfejsu UART. Górny przewód to pin 36 dla UART2 RX, a dolny to pin 37 dla UART2 TX. Pin 37 to ten „magiczny” przewód, który powoduje uruchomienie układu RTL, gdy coś zostanie do niego podłączone.
Sterownik LiftMaster w rozwidleniu projektu OBK znajduje się tutaj: https://github.com/iff7378/OpenBK7231T_App/tree/feat/liftmaster-driver
Pozostałe zadania:
Zapewnić niezawodne uruchamianie OBK na układzie RTL bez stosowania sztuczek z przewodami.
Zaimplementować funkcję zatrzymania drzwi (obecnie można je tylko całkowicie otworzyć lub zamknąć, nie da się zatrzymać w połowie ruchu).
Przeprowadzić testy z podłączonym silnikiem drzwi.
Podłączyć do Home Assistant.
Większość użytkowników może skorzystać z kontrolera Ratgdo jako opcji zapasowej, która steruje napędami bram domowych za pośrednictwem protokołu Security2+. Niestety nie jest to opcja dla osób posiadających komercyjne napędy do bram z serii Maxum, chyba że zrobisz to za pomocą prostych wejść przekaźnikowych wykorzystujących zewnętrzne wejścia przyciskowe, co wydawało mi się rozwiązaniem zbyt prostym (brak informacji zwrotnej o stanie bramy itp.).
Na szczęście dla mnie (i Claude’a) istnieje złącze SWD, dzięki któremu udało nam się uzyskać zrzut oprogramowania głównego mikrokontrolera, co pozwoliło nam przeprowadzić inżynierię odwrotną protokołu komunikacyjnego między układem LPC a fabrycznym oprogramowaniem układu RTL. Oba układy wykorzystują zewnętrzne pamięci EEPROM do przechowywania oprogramowania. Nie udało mi się połączyć z układem RTL przez UART, mimo moich najlepszych starań przy lutowaniu bardzo cienkich przewodów. Oznaczało to zamówienie programatora SPI (CH341) oraz bardzo małego uchwytu z pinami pogo o wymiarach 6 × 5 mm, aby bezpośrednio zrzucić zawartość pamięci EEPROM. Większość tej pracy była prosta i, szczerze mówiąc, Claude wykonał 95% prac programistycznych przy użyciu Ghidry.
Dobre wieści:
- Wpisanie oprogramowania OpenBeken do układu RTL było proste dzięki interfejsowi SPI i uchwytowi z stykami pogo. OpenBeken działa bez zarzutu.
- Claude'owi udało się napisać sterownik dla OBK, który komunikuje się z mikrokontrolerem LPC, odczytuje stan drzwi i wydaje polecenia ruchu drzwi (otwarcie/zamknięcie). Nie testowałem tego jeszcze z podłączonym rzeczywistym silnikiem drzwi, a jedynie odczytywałem bity stanu.
Zła wiadomość, której nie potrafię wyjaśnić:
Po podłączeniu zasilania do płytki sterującej mechanizmu otwierającego drzwi układ RTL uruchamia OBK tylko wtedy, gdy dotknę przewodem pinu 37 (UART TX) tego układu. To bardzo dziwne, ponieważ przewód nie jest podłączony do niczego innego, a jedynie przyciśnięty do przelotki połączonej z tym pinem. Naprawdę nie potrafię zdiagnozować, dlaczego się nie uruchamia, ponieważ podłączenie programatora UART w praktyce oznacza podłączenie przewodu do tego pinu, a OBK wtedy się uruchamia. Zaczynam wysyłać pingi na adres IP OBK i włączam zasilanie płytki. Odpowiedzi na ping zaczynam otrzymywać dopiero wtedy, gdy przytrzymuję przewód przy styku. Jest to poważny problem, ale jakoś oryginalne oprogramowanie układowe działało, więc musi istnieć jakieś rozwiązanie.
Układ Realtek (U5) z umieszczoną nad nim pamięcią EEPROM (U24). J40 to złącze SWD dla mikrokontrolera LPC.
Główny mikrokontroler NXP.
Przylutowywanie drobnych przewodów do układu RTL w celu uzyskania dostępu do interfejsu UART. Górny przewód to pin 36 dla UART2 RX, a dolny to pin 37 dla UART2 TX. Pin 37 to ten „magiczny” przewód, który powoduje uruchomienie układu RTL, gdy coś zostanie do niego podłączone.
Sterownik LiftMaster w rozwidleniu projektu OBK znajduje się tutaj: https://github.com/iff7378/OpenBK7231T_App/tree/feat/liftmaster-driver
Pozostałe zadania:
Zapewnić niezawodne uruchamianie OBK na układzie RTL bez stosowania sztuczek z przewodami.
Zaimplementować funkcję zatrzymania drzwi (obecnie można je tylko całkowicie otworzyć lub zamknąć, nie da się zatrzymać w połowie ruchu).
Przeprowadzić testy z podłączonym silnikiem drzwi.
Podłączyć do Home Assistant.