Spisu treści:

Hakowanie LG Ducted Split dla automatyki domowej: 8 kroków (ze zdjęciami)
Hakowanie LG Ducted Split dla automatyki domowej: 8 kroków (ze zdjęciami)

Wideo: Hakowanie LG Ducted Split dla automatyki domowej: 8 kroków (ze zdjęciami)

Wideo: Hakowanie LG Ducted Split dla automatyki domowej: 8 kroków (ze zdjęciami)
Wideo: Magnet attack on mechanical water meter 2024, Listopad
Anonim
Hakowanie LG Ducted Split dla automatyki domowej
Hakowanie LG Ducted Split dla automatyki domowej

Po pierwsze - to nie jest kolejny hack do emulacji pilota na podczerwień. Mój konkretny AC nie ma użytecznego interfejsu zaprojektowanego do jakiegokolwiek rodzaju sterowania poza dołączonymi inteligentnymi elementami sterującymi naściennymi.

Mam w domu system LG Ducted reverse split. Niestety powstał w czasie, gdy IoT nie znajdował się wysoko na żadnej liście producentów. Odkryłem, że ma kilka opcji sterowania „głównego”, ale chociaż urządzenie miało zaledwie 2 lata w momencie, gdy próbowałem tego po raz pierwszy, karty rozszerzeń były unobtanium, a ceny i tak astronomiczne. Podobnie jak dodatek „Wireless RF Remote”, który znacznie ułatwiłby sprawę, ale nie dałby się kupić.

Gdyby to był mój wybór, nie byłby to LG, ale ponieważ został zainstalowany w domu, kiedy go kupiłem (a jego koszt wymiany prawdopodobnie przekroczyłby 10 000 USD), z tym musiałem sobie poradzić.

Cel - Możliwość sterowania klimatyzacją za pośrednictwem MQTT w celu automatyzacji za pomocą OpenHAB i IFTTT/Google Assistant

Krok 1: Dekodowanie formatu danych

Dekodowanie formatu danych
Dekodowanie formatu danych
Dekodowanie formatu danych
Dekodowanie formatu danych

Zacząłem ten proces 4 lata temu, ale nie zaszedłem zbyt daleko i nie chciałem ryzykować uszkodzenia urządzenia - zwłaszcza, że części do niego wydają się prawie niemożliwe do znalezienia.

Zrywając kontroler ze ściany znalazłem 3 przewody, które określiłem jako uziemienie, 12v i „sygnał”

Napięcie sygnalizacyjne na linii danych było na poziomie 12 V, ale zauważyłem, że wydaje się, że waha się na multimetrze (jakiś rodzaj impulsów na linii).

Włożyłem podstawowy obwód do sterowania optoizolatorem przez pin danych i podłączyłem drugą stronę optoizolatora jako wejście na karcie dźwiękowej mojego komputera i otrzymałem słabą wersję wyjścia oscyloskopu (rys. 1).

To mniej więcej tak daleko, jak w tamtym czasie - widziałem, że coś tam jest, ale tak naprawdę nie wiedziałem, jak to "odszyfrować".

Odkąd włączyłem IoT w moim ekspresie do kawy, odświeżyłem chęć spróbowania tego ponownie, tym razem z nieco większą determinacją.

Opublikowałem moje odkrycia na forach EEVBlog, aby sprawdzić, czy ktoś może rzucić trochę światła, a na ratunek przyszedł mi świetny facet o imieniu Ian - przedstawił to w sposób, który ma sens (zdjęcie 2)

Zasadniczo strumień danych to 13 bajtów "standardowego portu szeregowego" - 8 bitów danych, jeden bit startu i jeden bit stopu (bez parzystości), ale z BARDZO niską szybkością transmisji 104bps.

Krok 2: Patrzenie głębiej

Patrząc głębiej
Patrząc głębiej

Więc teraz, gdy miałem pomysł na formatowanie danych, potrzebowałem sposobu, aby móc odczytywać dane w bardziej dynamiczny sposób.

Wyciągnąłem jeden z moich kontrolerów ze ściany i podłączyłem go za pomocą przesuwnika poziomu logicznego do Arduino za pomocą prostego szkicu, aby odczytać 13 bajtów danych przez port szeregowy oprogramowania skonfigurowany na 104 bps i wydrukować:

168, 18, 0, 8, 0, 192, 6, 22, 0, 0, 0, 0, 168, 18, 0, 8, 0, 192, 6, 22, 0, 0, 0, 0, 40, 19, 0, 8, 0, 200, 6, 31, 0, 0, 0, 0, 40, 19, 0, 8, 0, 200, 6, 31, 0, 0, 0, 0, 200, 18, 0, 8, 64, 0, 6, 25, 0, 0, 0, 0, 200, 18, 0, 8, 64, 0, 6, 25, 0, 0, 0, 0, 168, 18, 0, 8, 0, 200, 6, 22, 0, 0, 0, 0, 168, 18, 0, 8, 0, 200, 6, 22, 0, 0, 0, 0, 168, 18, 0, 8, 0, 200, 6, 22, 0, 0, 0, 0, **Właściwie 12 bajtów tutaj

Mieliśmy akcję!

Zmieniając następnie różne ustawienia na kontrolerze, udało mi się wypracować zmieniające się bajty:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, Wentylator LOW168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, Wentylator ŚREDNI 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, Wentylator WYSOKI

168, 67, 0, 0, 0, 248, 3, 33, 0, 0, 0, 0, 82, Z1234 168, 67, 0, 0, 0, 192, 3, 34, 0, 0, 0, 0, 133, Z1 168, 67, 0, 0, 0, 160, 3, 34, 0, 0, 0, 0, 229, Z2 168, 67, 0, 0, 0, 144, 3, 34, 0, 0, 0, 0, 245, Z3 168, 67, 0, 0, 0, 136, 3, 35, 0, 0, 0, 0, 204, Z4

168, 75, 0, 0, 0, 136, 3, 35, 0, 0, 0, 0, 244, Tryb WENTYLATOR 168, 79, 0, 0, 0, 136, 10, 35, 0, 0, 0, 0, 249, Tryb AUTO 168, 67, 0, 0, 0, 136, 3, 35, 0, 0, 0, 0, 204, Tryb CHŁODZENIE 168, 83, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 225, Tryb OGRZEWANIE 168, 7, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 61, Tryb DH

168, 15, 0, 0, 0, 136, 3, 34, 0, 0, 0, 0, 49, Temp 18 168, 15, 0, 0, 0, 136, 4, 34, 0, 0, 0, 0, 48, Temp 19 168, 15, 0, 0, 0, 136, 5, 34, 0, 0, 0, 0, 51, Temp 20 168, 15, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 37, Temp 30

Liczby mają o wiele więcej sensu, gdy patrzysz na nie w systemie binarnym, ale co jest z 13-tym bajtem? To jest wszędzie…

Krok 3: Mapowanie tego

Mapowanie tego
Mapowanie tego

Metodą prób i błędów udało mi się określić odpowiednie bity w 13 bajtach danych, które musiałbym być w stanie przesłać.

Krok 4: Mur z cegły przed nami

Mur z cegły przed nami!
Mur z cegły przed nami!
Mur z cegły przed nami!
Mur z cegły przed nami!
Mur z cegły przed nami!
Mur z cegły przed nami!

Tutaj to się skomplikowało. Miałem do pokonania dwie przeszkody

a) 13. bajt wydawał się być sumą kontrolną danych, które musiałem jakoś rozpracować.b) Jak w takim razie przesłać dane? To tylko jeden przewód.

Kwestia 'a' okazała się NAPRAWDĘ łatwa, ale to czysty przypadek, że udało mi się ją ominąć.

W moich testach przeglądałem dane takie jak: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A83200084000149C0000000087 A85200084000149C00000000A7

Jest to 13 bajtów danych, w tym suma kontrolna (tutaj w postaci HEX zamiast DEC).

Kiedy szukałem wyroczni, którą jest google na temat „jak odtworzyć sumę kontrolną”, natknąłem się na tę stronę o wymianie stosów z kimś innym o imieniu Nick, pytającym prawie o to samo co ja, ale nie tylko o tym, rozmawiali o klimatyzatorze i ich dane były prawie identyczne jak moje - Czy to możliwe??? Podczas wszystkich moich poszukiwań (w ciągu mniej więcej 4 lat) żadna osoba nie opublikowała żadnych informacji o tym, jak zhakować protokół w tych klimatyzatorach i po prostu natknąłem się na kogoś, kto robi to samo, szukając czegoś prawie zupełnie niezwiązanego? To było błogosławieństwo - napisał nawet, że to rozpracował i rozwiązaniem było: Dodaj wszystkie bajty danych, a następnie XOR z "U".

Mając to w ręku, dodałem go do mojego kodu, aby obliczyć, jaka powinna być suma kontrolna, a co w rzeczywistości, ale wszystko było NIEPOPRAWNE!

Jak się okazuje, było trochę nie tak. Kiedy zacząłem patrzeć na liczby w systemie binarnym, nabrało to sensu.

Odpowiedź z „XOR z U” zawsze zwracała 9 bitów danych (dziewiąty bit zawsze jeden), ale pozostałe bity były prawidłowe. Po prostu usunąłem dziewiąty bit, biorąc 256 z otrzymanej liczby, a następnie pasował!

Gdyby nie ta osoba, mogłabym nadal drapać się po głowie. Czapki z głów dla niego też, ale nie mogę się z nim skontaktować - to był w zasadzie jego jedyny post na forum stackexchange. Cóż, dziękuję nieznajomy:)

Kolejnym wyzwaniem było wykonanie obwodu, który pozwoli mi zasymulować istniejący kontroler. Zmapowałem schemat obwodu napędu (Pic1 i Pic 2), ale wydawało mi się to zbyt skomplikowane, abym musiał go odtworzyć, aby uzyskać to, czego chciałem. Przecież już odczytywałem sygnał. Zdecydowałem się na znacznie prostszą metodę - użycie arduino do sterowania izolatorem optycznym, aby obniżyć linię sygnału 12 V zgodnie z wymaganiami.

Zaprojektowałem również prostszy obwód dla Rx, ale to nie zostało przetestowane, skończyło się na konwerterze poziomów dla uproszczenia.

Krok 5: Spraw, aby to zadziałało…

Kiedy już miałem obwód nadawczy na płytce iz szalonym sercem, zniekształciłem (statyczny) ciąg 12 bajtów, obliczyłem sumę kontrolną i kazałem arduino wysłać polecenie - O dziwo, wyświetlacz się zaktualizował! Wygrać!

Ostatecznym rzeczywistym testem było dodanie mojego arduino do magistrali z 2 innymi kontrolerami, aby przeprowadzić prawdziwy test na żywo i na pewno zadziałało.

Więc teraz mogłem czytać i pisać do autobusu, ale po prostu brakowało mi umiejętności, aby móc to zrobić po prostu.

Ponieważ używam MQTT prawie wyłącznie do całej mojej automatyki domowej, naturalne było, że będzie tak samo. Rozpisałem kod w ciągu kilku dni do sterowania 4 głównymi elementami AC, również odczytując stan istniejący (z innych modułów na BUS)

Intencją było, aby kod działał na module ESP8266, jednak wydaje się, że ESP8266 nie jest w stanie wytworzyć prędkości tak niskiej jak 104bps. Musiałem wrócić do ogólnego Arduino Uno z siecią Ethernet Wiznet, ale nie było to trudne, ponieważ mój stojak komunikacyjny znajdował się dosłownie po drugiej stronie ściany od jednego z kontrolerów AC.

Kod jest trochę wszędzie, ale powinien być czytelny. Miałem wiele problemów z uniemożliwieniem sterownikowi odczytania własnych wyników, ale także powtórzeniem kodu z własnych opublikowanych tematów otrzymanych od MQTT z powrotem do klimatyzacji. Zasadniczo stworzyłoby to nieskończoną pętlę. W końcu udało się uporządkować pewne czyszczenie bufora i opóźnienia w przetwarzaniu kodu po opublikowaniu w MQTT.

Piny Rx, Tx do AC są kodowane jako 3, 4, ale zmień, jeśli chcesz

Kod jest skonfigurowany do publikowania i akceptowania poleceń jako takich:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - Tryb Chłodzenie, Osuszanie, Wentylator, Auto, Heatha/mod/5557/F 0/1/2 - Niski wentylator, średni, wysokiha/mod/5557/Z tj. 1111 dla wszystkich stref włączony 1000 dla tylko strefy 1 włączony.

**Z poziomu sterownika strefy nie mogą być ustawione na '0000' jednak mogłoby się wydawać, że jeśli wydasz wartość, powróci ona do '1000'.

Najnowsza wersja kodu jest dostępna w moim repozytorium GitHub:

Krok 6: Coś bardziej trwałego

Coś bardziej trwałego
Coś bardziej trwałego
Coś bardziej trwałego
Coś bardziej trwałego

Zebrałem płytkę prototypową arduino i zainstalowałem wszystkie części, tak jak je założyłem na chleb.

Krok 7: Konfiguracja OpenHAB

Zobacz załączony plik z elementami OpenHAB, mapą witryny i zasadami

Połącz to z wiązaniem IFTTT OpenHab i Google Assistant/Home, a otrzymasz bardzo wydajną sterowaną głosem i/lub „inteligentną” klimatyzację, która przewyższa prawie każdy dostępny na rynku produkt!

Krok 8: Podsumowanie

Podsumowując - jeśli jesteś jedną z biednych dusz z nieco starszym dzielonym klimatyzatorem kanałowym LG, nie jesteś sam. Wciąż jest dla nas nadzieja!

Mam nadzieję, że ten instruktaż znajdzie kogoś, kto potrzebuje tego tak samo jak ja. W zasadzie NIE ma informacji, które mógłbym znaleźć (poza sumą kontrolną od „Nick”). Musiałem zacząć od zera, ale jestem zachwycony rezultatem.

Wiem, że informacje są odrobinę niejasne, ale jeśli jesteś w takiej samej sytuacji jak ja, chętnie Ci pomogę.

- Uwaga / Aktualizacja --- Chociaż można zmienić ustawienia na AC przy wyłączonym urządzeniu, odkryłem, że jeśli chodzi o sterowanie Strefą, wydaje się, że się z tym miesza. Zrobiłem wiele testów przy wyłączonym urządzeniu i stwierdziłem, że strefy pokazywałyby się jako nieaktywne, ale kiedy urządzenie pracuje, wydaje się, że przepustnice nie są całkowicie zamknięte (ale też nie całkowicie otwarte). Zresetowałem urządzenie przy głównym wyłączniku i to rozwiązało problem. Ponieważ zmiana stref tylko wtedy, gdy urządzenie jest włączone, nie stanowiło to problemu

Zaktualizowałem również kod, aby publikować tylko (do MQTT) zmiany, które pochodzą z głównego kontrolera, a nie z jednostki głównej. Po raz kolejny może to spowodować problemy, ponieważ jednostka główna wyśle '0000' dla stref (co również mogło być problemem)

Zaktualizowany kod wprowadza również pewne ograniczenia czasowe, aby uniemożliwić arduino transmisję w tym samym czasie do jednostki głównej i jednostki głównej. Jestem pewien, że prawdopodobnie istnieje metoda, której kontroler używa do zainicjowania wysyłania danych, na przykład ciągnięcie linii w dół dla Xms przed wysłaniem, ale jeszcze jej nie odkryłem, jeśli tak jest

Odkryłem, że jednostka główna wysyła dane co 60 sekund, a kontroler nadrzędny co 20 sekund. Kod próbuje zatrzymać wysyłanie danych w ciągu 2 sekund od otrzymania pakietu danych. Jednak czasami jednostka główna i jednostka główna transmitują bardzo blisko siebie. Prawdopodobnie zostanie to wkrótce dopracowane.--------------------------------

**Może działać na nowszych jednostkach

*** Niektóre informacje z moich podróży badawczych wskazywały, że split kanałowy Panasonic może używać tego samego protokołu. YMMV.

Zalecana: