Съдържание:

Хакване на LG Ducted Split за домашна автоматизация: 8 стъпки (със снимки)
Хакване на LG Ducted Split за домашна автоматизация: 8 стъпки (със снимки)

Видео: Хакване на LG Ducted Split за домашна автоматизация: 8 стъпки (със снимки)

Видео: Хакване на LG Ducted Split за домашна автоматизация: 8 стъпки (със снимки)
Видео: How to connect wifi without wifi password via WPS button 2024, Декември
Anonim
Хакване на LG Ducted Split за домашна автоматизация
Хакване на LG Ducted Split за домашна автоматизация

На първо място - Това не е поредният хак за емулация на инфрачервено дистанционно управление. Моят конкретен променлив ток няма използваем интерфейс, предназначен за всякакъв вид управление, освен включените в стената интелигентни контроли.

В къщата си имам система за обратно разделяне LG Ducted. За съжаление, той беше направен по време, когато IoT не беше високо в списъка на производителите. Открих, че има някои опции за „главен“контрол, но въпреки че устройството беше само на 2 години по времето, когато за първи път опитах това, разширителните платки бяха неутанови и цените бяха астрономически така или иначе. Както и добавката „Wireless RF Remote“, която би направила нещата много по -лесни, но невъзможни за закупуване.

Ако беше мой избор, нямаше да е LG, но тъй като беше инсталиран в къщата, когато го закупих (и цената му за подмяна вероятно ще надхвърли 10 000 долара), с това трябваше да се справя.

Цел - Да може да контролира AC чрез MQTT за целите на автоматизация чрез OpenHAB и IFTTT/Google Assistant

Стъпка 1: Декодиране на формата на данните

Декодиране на формата на данните
Декодиране на формата на данните
Декодиране на формата на данните
Декодиране на формата на данните

Започнах този процес преди 4 години, но не стигнах много далеч и не исках да рискувам да повредя устройството - особено след като части за него изглеждат почти невъзможни за намиране.

Откъсвайки контролера от стената, открих 3 проводника, които определих за заземяване, 12v и „сигнал“

Сигналното напрежение на линията за данни беше на 12v, но забелязах, че сякаш се колебае на мултицета (някакъв вид импулси по линията).

Нахлупих основна схема за захранване на опто изолатор чрез извода за данни и свързах другата страна на опто изолатора като вход на звуковата карта на моя компютър и получих лоша версия на изход за обхват (снимка 1).

Това е доколкото стигнах по онова време - видях, че има нещо там, но всъщност не знаех как да го „декодирам“.

След като активирах IoT на кафемашината, имах освежен интерес да опитам това отново с малко повече решителност този път.

Публикувах констатациите си във форумите на EEVBlog, за да видя дали някой може да хвърли малко светлина и страхотен човек на име Иан ми дойде на помощ - Той го изложи по начин, който напълно има смисъл (Снимка 2)

По принцип потокът от данни е 13 байта от „стандартен сериен“- 8 бита данни, един стартов бит и един стоп бит (без паритет), но при МНОГО ниска скорост на предаване от 104bps.

Стъпка 2: Гледайте по -дълбоко

Търсите по -дълбоко
Търсите по -дълбоко

Така че сега, когато имах представа как са форматирани данните, имах нужда от начин да мога да чета данните по по -динамичен начин.

Извадих един от моите контролери от стената и го свързах чрез превключвател на логическо ниво към Arduino с проста скица, за да прочета 13 байта данни чрез софтуерен сериен порт, конфигуриран на 104bps, и да го разпечатам:

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, ** Всъщност 12 байта тук

Имахме действие!

След като промених различните настройки на контролера, успях да изчисля байтовете, които се променят:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, вентилатор LOW168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 248, вентилатор MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, вентилатор ВИСОК

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, режим FAN 168, 79, 0, 0, 0, 136, 10, 35, 0, 0, 0, 0, 249, режим AUTO 168, 67, 0, 0, 0, 136, 3, 35, 0, 0, 0, 0, 204, режим COOL 168, 83, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 225, режим HEAT 168, 7, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 61, режим DH

168, 15, 0, 0, 0, 136, 3, 34, 0, 0, 0, 0, 49, Температура 18 168, 15, 0, 0, 0, 136, 4, 34, 0, 0, 0, 0, 48, Температура 19 168, 15, 0, 0, 0, 136, 5, 34, 0, 0, 0, 0, 51, Температура 20 168, 15, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 37, Температура 30

Числата имат много по -голям смисъл, когато ги погледнете в двоичен формат, но какво става с 13 -ия байт ?? Навсякъде е…

Стъпка 3: Очертайте го

Очертаване
Очертаване

Чрез опити и грешки успях да определя съответните битове в 13 -те байта данни, които ще трябва да мога да предам.

Стъпка 4: Тухлена стена напред

Тухлена стена напред!
Тухлена стена напред!
Тухлена стена напред!
Тухлена стена напред!
Тухлена стена напред!
Тухлена стена напред!

Тук се усложни. Трябваше да преодолея две препятствия

а) 13 -тият байт изглежда беше контролна сума на данните, които ми бяха необходими, за да се справя по някакъв начин. б) Как тогава да предам данните? Това е само един проводник.

Проблемът „а“се оказа НАИСТИНА лесен, но по чиста случайност успях да го преодолея.

В моите тестове гледах данни като: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A83200084001400000000000

Това са 13 байта данни, включително контролната сума (тук в HEX вместо DEC).

Когато търсих в оракула, който е google за „как да обърна контролна сума“, попаднах на тази страница при размяна на стека с някой друг, който се казваше на име Ник и питаше почти същото като мен, но не само това, те говореха за климатик и техните данни бяха почти идентичен формат с моя - Възможно ли е ??? При цялото ми търсене (за около 4 години) нито един човек не беше публикувал никаква информация за това как да хакна протокола на тези климатици и просто случайно се натъкнах на някой, който прави същото, като търси нещо почти напълно несвързано? Това беше благословия - Той дори публикува, че е работил и решението е: Добавете всички байтове от данни и след това XOR с „U“.

С това в ръка го добавих към кода си, за да изчисля какво според мен трябва да бъде контролната сума спрямо това, което всъщност беше, но всичко беше НЕПРАВИЛНО !!

Както се оказа, беше нещо погрешно. Когато започнах да разглеждам числата в двоичен формат, това имаше пълен смисъл.

Отговорът от „XOR с U“винаги връщаше 9 бита данни (деветият бит винаги един), но другите битове бяха правилни. Просто премахнах деветия бит, като взех 256 от полученото число и след това съвпадна !!

Ако не беше този човек, може би все още се почесвах по главата. Шапка и на него, но не мога да се свържа с него - това беше основно единствената му публикация във форума на stackexchange. Е, благодаря ти непознат:)

Следващото предизвикателство беше създаването на схема, която да ми позволи да симулирам съществуващия контролер. Начертах схемата за задвижващата верига (Pic1 и Pic 2), но ми се струваше твърде сложна, за да се наложи да я възпроизвеждам, за да получа това, което исках. Все пак вече четох сигнала. Избрах много по -прост метод - Използване на arduino за задвижване на опто изолатор, за да издърпа 12v сигналната линия ниско, колкото е необходимо.

Също така проектирах по -проста схема за Rx, но това е непроверено, в крайна сметка се придържах към преобразувателя на нивата за простота.

Стъпка 5: Накарайте го да работи

След като пренесох схемата на предаване и със състезателно сърце, аз ограбих (статичен) низ от 12 байта, изчислих контролната сума и накарах arduino да изпрати командата - Удивително, дисплеят се актуализира !!! Печеля!

Последният реален тест беше да добавя моя arduino към BUS с другите 2 контролера за истински тест на живо и със сигурност работи.

Така че сега можех да чета и пиша в автобуса, но просто нямах способността да го правя просто.

Тъй като използвам MQTT почти изключително за цялата си домашна автоматизация, беше естествено това да е същото. Изписах кода в продължение на няколко дни, за да контролирам 4 -те основни елемента на AC, като също прочетох съществуващото състояние (от другите модули на BUS)

Намерението беше кодът да работи на модул ESP8266, но изглежда, че ESP8266 не е в състояние да генерира скорост на предаване до 104bps. Трябваше да се върна към общ Arduino Uno с Wiznet ethernet, но това не беше трудно, тъй като моят багажник за комуникации беше буквално от другата страна на стената от един от AC контролерите.

Кодът е малко навсякъде, но трябва да бъде четлив. Имах много проблеми с предотвратяването на контролера да чете собствения му изход, но и с повтарянето на кода, който е негов собствен, публикувани теми, получени от MQTT обратно към климатика. По принцип това би създало безкраен цикъл. В крайна сметка известно изчистване на буфера и забавяне в обработката на кода след публикуването му в MQTT го подредиха.

Rx, Tx щифтовете към AC се кодират като 3, 4, но се променят, ако желаете

Кодът е конфигуриран да публикува и приема команди като такива:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - Режим Охлаждане, Изсушаване, Вентилатор, Авто, Heatha/mod/5557/F 0/1/2 - Вентилатор нисък, среден, highha/mod/5557/Z т.е. 1111 за всички зони на 1000 само за включена зона 1.

** От контролера зоните не могат да бъдат зададени на '0000', но изглежда, че ако издадете стойността, тя ще се върне на '1000'.

Последната версия на кода е достъпна от моето GitHub Repo:

Стъпка 6: Нещо по -трайно

Нещо по -трайно
Нещо по -трайно
Нещо по -трайно
Нещо по -трайно

Събрах прототипна дъска на arduino и инсталирах всички части, докато ги давах на хляб.

Стъпка 7: OpenHAB Config

Вижте прикачения файл за OpenHAB елементи, карта на сайта и правила

Комбинирайте това с IFTTT OpenHab обвързването и Google Assistant/Home и ще имате много мощен гласово контролиран и/или „интелигентен“климатик, който надминава почти всеки търговски продукт!

Стъпка 8: Обобщение

В заключение - Ако сте една от бедните души с малко по -възрастен сплит климатик LG, не сте сами. Все още има надежда за нас!

Надявам се, че тази инструкция ще намери някой, който се нуждае от нея толкова, колкото и аз. По принцип НЯМА информация, която бих могъл да намеря (освен контролната сума от „Ник“). Трябваше да започна от нулата, но съм в екстаз от резултата.

Информацията е малко неясна, но знам, че ако сте в същото положение като мен, ще бъда повече от готов да помогна.

- Внимание / Актуализиране --- Въпреки че е възможно да се променят настройките на AC с изключено устройство, установих, че когато става въпрос за контрол на зоната, изглежда, че се забърква с него. Направих много тестове с изключено устройство и установих, че зоните ще се показват като неактивни, но когато устройството работи, изглежда, че амортисьорите не са напълно затворени (но не са и напълно отворени). Рестартирах устройството на главния прекъсвач и това реши проблема. Тъй като сменяте зони само когато устройството е включено, това не е проблем

Също така актуализирах кода, за да публикувам само (на MQTT) промени, които идват от главния контролер, а не от основното устройство. За пореден път това може да причини проблеми, защото основното устройство ще изпрати „0000“за зоните (което също може да е проблем)

Актуализираният код също въвежда някои ограничения за времето, за да се опита да предотврати предаването на arduino по едно и също време на главното и основното устройство. Сигурен съм, че вероятно има метод, който контролерът използва за иницииране на изпращане на данни, като например изтегляне на ниската линия за Xms преди изпращане, но все още не съм го открил, ако има такъв

Открих, че основното устройство ще изпраща данни на всеки 60 секунди, а главният контролер изпраща на всеки 20 секунди. Кодът се опитва да спре изпращането на данни в рамките на 2 секунди след получаване на пакета данни. Понякога обаче главното и основното устройство се предават много близо един до друг. Това вероятно скоро ще бъде усъвършенствано. ------------------------------

** Може да работи на по -нови блокове

*** Някои данни, открити в моите изследователски пътувания, показват, че канализираният сплит на Panasonic може да използва същия протокол. YMMV.

Препоръчано: