Sadržaj:

Hakiranje LG Ducted Split -a za kućnu automatizaciju: 8 koraka (sa slikama)
Hakiranje LG Ducted Split -a za kućnu automatizaciju: 8 koraka (sa slikama)

Video: Hakiranje LG Ducted Split -a za kućnu automatizaciju: 8 koraka (sa slikama)

Video: Hakiranje LG Ducted Split -a za kućnu automatizaciju: 8 koraka (sa slikama)
Video: Kako pronaći Instagram lozinku i korisničko ime | Pogledajte lozinku za Instagram 2024, Novembar
Anonim
Hakiranje LG Ducted Split -a za kućnu automatizaciju
Hakiranje LG Ducted Split -a za kućnu automatizaciju

Prije svega - ovo nije još jedan hack za emulaciju infracrvenog daljinskog upravljača. Moj određeni AC nema upotrebljivo sučelje dizajnirano za bilo koju vrstu kontrole osim uključenih pametnih kontrola montiranih na zid.

U kući imam sistem za obrnuto razdvajanje LG Ducted. Nažalost, napravljen je u vrijeme kada IoT nije bio visoko na listi nijednog proizvođača. Otkrio sam da ima neke opcije za "master" kontrolu, ali iako je jedinica bila stara samo 2 godine u vrijeme kada sam to prvi put pokušao, ploče za proširenje bile su neutabljene, a cijene su ionako bile astronomske. Kao i dodatak 'Wireless RF Remote' koji bi stvari uvelike olakšao, ali ih je nemoguće kupiti.

Da je to bio moj izbor, to ne bi bio LG, ali budući da je instaliran u kući kada sam ga kupio (a cijena zamjene bi vjerojatno bila veća od 10.000 USD), s tim sam se morao nositi.

Cilj - Moći kontrolirati AC putem MQTT -a za potrebe automatizacije putem OpenHAB -a i IFTTT -a/Google pomoćnika

Korak 1: Dekodiranje formata podataka

Dekodiranje formata podataka
Dekodiranje formata podataka
Dekodiranje formata podataka
Dekodiranje formata podataka

Započeo sam ovaj proces prije 4 godine, ali nisam stigao daleko i nisam htio riskirati oštećenje jedinice - pogotovo jer se čini da je gotovo nemoguće pronaći dijelove za nju.

Skidajući kontroler sa zida pronašao sam 3 žice za koje sam utvrdio da su uzemljene, 12v i "signalne"

Signalni napon na podatkovnoj liniji bio je na 12v, ali primijetio sam da se čini da fluktuira na multimetru (neka vrsta impulsa na liniji).

Ukrcao sam osnovno kolo za pogon opto izolatora preko pina za podatke i povezao drugu stranu opto izolatora kao ulaz na zvučnoj kartici svog računara i dobio lošu verziju izlaza opsega (slika 1).

To je otprilike onoliko koliko sam tada dobio - mogao sam vidjeti da tu ima nečega, ali nisam znao kako to 'dekodirati'.

Otkako sam omogućio IoT u aparatu za kavu, osvježio sam se da ovaj put pokušam ovo s malo više odlučnosti.

Objavio sam svoja otkrića na forumima EEVBloga da vidim može li neko rasvijetliti, a u pomoć mi je došao sjajan momak po imenu Ian - postavio je to na način koji je u potpunosti imao smisla (slika 2)

U osnovi, tok podataka ima 13 bajtova 'standardne serije' - 8 bitova podataka, jedan početni bit i jedan zaustavni bit (bez pariteta), ali pri VRLO niskoj brzini prijenosa od 104 bps.

Korak 2: Gledajte dublje

Looking Deeper
Looking Deeper

Dakle, sada kada sam imao ideju o tome kako su podaci formatirani, trebao mi je način da mogu čitati podatke na dinamičniji način.

Izvukao sam jedan od svojih kontrolera sa zida i spojio ga putem mjenjača logičkog nivoa na Arduino sa jednostavnom skicom za čitanje 13 bajtova podataka putem softverskog serijskog porta konfiguriranog na 104 bps i ispisao ga:

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, ** Zapravo 12 bajtova ovdje

Imali smo akciju!

Promjenom različitih postavki na kontroleru uspio sam odrediti bajtove koji se mijenjaju:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, ventilator LOW168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, ventilator MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, ventilator VISOK

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, način rada VENTILATOR 168, 79, 0, 0, 0, 136, 10, 35, 0, 0, 0, 0, 249, način AUTO 168, 67, 0, 0, 0, 136, 3, 35, 0, 0, 0, 0, 204, način hlađenja 168, 83, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 225, način HEAT 168, 7, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 61, način 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

Brojevi imaju mnogo više smisla kada ih pogledate u binarnom obliku, ali šta je s 13. bajtom ?? Svuda je tako…

Korak 3: Mapirajte ga

Mapiranje
Mapiranje

Pokušajem i greškom, uspio sam odrediti bitne bitove u 13 bajtova podataka koje bih trebao prenijeti.

Korak 4: Zid od opeke ispred

Zid od opeke naprijed!
Zid od opeke naprijed!
Zid od opeke naprijed!
Zid od opeke naprijed!
Zid od opeke naprijed!
Zid od opeke naprijed!

Tu se zakomplikovalo. Morao sam da savladam dve prepreke

a) Činilo se da je 13. bajt kontrolni zbir podataka koji su mi trebali da bih nekako razradio.b) Kako da onda prenesem podatke? To je samo jedna žica.

Pokazalo se da je pitanje 'a' Zbilja lako, ali pukom slučajnošću sam uspio to zaobići.

U mojim testovima, gledao sam podatke kao što su: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A83200084000149C0000000087 A85200084000149C00000000A7

Ovo je 13 bajtova podataka uključujući kontrolni zbroj (ovdje u HEX -u umjesto u DEC -u).

Kada sam pretraživao proročište koje je google o 'kako obrnuti inženjering kontrolnog zbira', naišao sam na ovu stranicu na razmjeni steka s nekim drugim koji se zvao Nick i pitao otprilike isto što i ja, ali ne samo to, razgovarali su o klima uređaju i njihovi podaci su bili gotovo identičnog formata s mojim - može li to biti ??? U cijelom mom pretraživanju (za otprilike 4 godine) nijedna osoba nije objavila nikakve informacije o tome kako hakirati protokol na ovim klima uređajima i slučajno naletim na nekoga da radi istu stvar tražeći nešto gotovo potpuno nepovezano? Bio je to blagoslov - čak je objavio da je to riješio i rješenje je bilo: Zbrojiti sve bajtove podataka, a zatim XOR sa "U".

S tim u ruci, dodao sam ga u svoj kôd kako bih izračunao šta sam mislio da bi trebao biti kontrolni zbroj u odnosu na ono što je zapravo bio, ali sve je bilo pogrešno !!

Kako se ispostavilo, to je bilo nekako pogrešno. Kad sam počeo binarno gledati brojeve, to je imalo potpunog smisla.

Odgovor iz 'XOR -a sa U' uvijek je vraćao 9 bita podataka (deveti bit uvijek jedan), ali drugi su bili ispravni. Jednostavno sam uklonio 9. bit uzimajući 256 iz rezultirajućeg broja i onda se poklopilo !!

Da nije bilo ove osobe, možda bih se i dalje češao po glavi. I njemu kapa dolje, ali ne mogu ga kontaktirati - To je u osnovi bio njegov jedini post na forumu stackexchange. Pa hvala stranče:)

Sljedeći izazov bio je stvaranje kruga koji bi mi omogućio simulaciju postojećeg kontrolera. Nacrtao sam shemu pogonskog kruga (Pic1 i Pic 2), ali činilo mi se previše kompliciranim da je moram reproducirati da bih dobio ono što sam želio. Na kraju sam već čitao signal. Odlučio sam se za mnogo jednostavniju metodu - Korištenje arduina za pogon opto izolatora za povlačenje 12V signalne linije prema potrebi.

Dizajnirao sam i jednostavnije kolo za Rx, ali ovo nije provjereno, pa sam se zbog jednostavnosti držao pretvarača nivoa.

Korak 5: Neka funkcionira

Jednom kada sam napravio krug prenosa i sa trkaćim srcem, izradio sam (statički) niz od 12 bajtova, izračunao kontrolni zbroj i naredio arduinu da pošalje komandu - Nevjerovatno, ekran je ažuriran !!! Win!

Konačni stvarni test bio je dodati moj arduino u BUS sa 2 druga kontrolera za pravi test uživo i sigurno je uspio.

Tako da sam sada mogao čitati i pisati u autobus, ali jednostavno mi je nedostajala sposobnost da to učinim jednostavno.

Budući da MQTT koristim gotovo isključivo za svu kućnu automatizaciju, bilo je prirodno da će to biti isto. Ispisao sam kôd nekoliko dana za kontrolu 4 glavna elementa AC -a, također čitajući postojeći status (iz ostalih modula na BUS -u)

Namjera je bila da se kôd izvodi na modulu ESP8266, međutim čini se da ESP8266 nije u stanju proizvesti brzinu prijenosa od samo 104 bps. Morao sam se vratiti na generički Arduino Uno sa Wiznet ethernetom, ali to nije bilo teško jer je moj stalak za komunikacije bio doslovno s druge strane zida s jednog od AC kontrolera.

Kôd je posvuda posvuda, ali bi trebao biti čitljiv. Imao sam mnogo problema sa sprečavanjem kontrolera da čita vlastiti izlaz, ali i s ponavljanjem koda koji je objavio iz vlastitih tema primljenih od MQTT -a natrag u klima uređaj. U osnovi, to bi stvorilo beskonačnu petlju. Na kraju, neko brisanje međuspremnika i kašnjenja u obradi koda nakon objavljivanja u MQTT su to sredili.

Rx, Tx pinovi na AC su kodirani kao 3, 4 ali se mijenjaju ako želite

Kôd je konfiguriran za objavljivanje i prihvaćanje naredbi kao takvih:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - Način hlađenja, odvlaživanje, ventilator, auto, grijanje/mod/5557/F 0/1/2 - Fan low, med, highha/mod/5557/Z tj. 1111 za sve zone na 1000 samo za uključenu zonu 1.

** Iz kontrolera se zone ne mogu postaviti na '0000', međutim čini se da će se, ako izdate vrijednost, vratiti na '1000'.

Najnovija verzija koda dostupna je na mom GitHub Repo:

Korak 6: Nešto trajnije

Nešto trajnije
Nešto trajnije
Nešto trajnije
Nešto trajnije

Skupio sam prototipnu ploču arduina i instalirao sve dijelove dok sam ih davao na kruh.

Korak 7: OpenHAB Config

Pogledajte priložene datoteke za OpenHAB stavke, kartu web lokacije i pravila

Kombinirajte ovo s IFTTT OpenHab povezom i Google pomoćnikom/Home i dobit ćete vrlo moćan glasovno upravljani i/ili 'pametni' klima uređaj koji nadmašuje gotovo svaki komercijalno dostupan proizvod!

Korak 8: Sažetak

Zaključak - Ako ste jedna od siromašnih duša s nešto starijim LG -jevim split -klima uređajem, niste sami. Za nas još ima nade!

Nadam se da će ovo uputstvo pronaći nekoga kome je potrebno isto koliko i meni. U osnovi NEMAM nikakvih informacija koje bih mogao pronaći (osim kontrolnog zbira od 'Nicka'). Morao sam početi od nule, ali sam oduševljen rezultatom.

Znam da je informacija malo maglovita, ali ako ste u istoj situaciji kao i ja, bit ću više nego voljan pomoći.

- Oprez / Ažuriranje --- Iako je moguće promijeniti postavke na izmjeničnom naponu s isključenom jedinicom, otkrio sam da se čini da kada se radi o upravljanju zonom petlja s tim. Puno sam testirao s isključenom jedinicom i otkrio sam da će se zone pokazati kao neaktivne, ali kada jedinica radi, čini se da klapne nisu potpuno zatvorene (ali ni potpuno otvorene). Resetirao sam jedinicu na glavnom prekidaču i to je riješilo problem. Budući da je mijenjanje zona samo kada je uređaj uključen, to nije bio problem

Ažurirao sam i kôd za objavljivanje samo (na MQTT) promjena koje dolaze od glavnog kontrolera, a ne od glavne jedinice. Ovo bi još jednom moglo uzrokovati probleme jer će glavna jedinica poslati '0000' za zone (što je također mogao biti problem)

Ažurirani kôd također uvodi neka vremenska ograničenja za pokušaj sprječavanja arduina da prenosi u isto vrijeme glavne i glavne jedinice. Siguran sam da vjerovatno postoji metoda koju kontroler koristi za pokretanje slanja podataka, poput povlačenja linije za Xms prije slanja, ali još je nisam otkrio ako postoji

Otkrio sam da će glavna jedinica slati podatke svakih 60 sekundi, a glavni kontroler svakih 20 sekundi. Kôd pokušava zaustaviti slanje podataka u roku od 2 sekunde od prijema paketa podataka. Međutim, ponekad se glavna i glavna jedinica prenose vrlo blizu jedna drugoj. Ovo će se vjerovatno uskoro poboljšati. ------------------------------

** Može raditi na novijim jedinicama

*** Neki podaci pronađeni na mojim istraživačkim putovanjima ukazuju na to da bi Panasonicov kanal za razvod mogao koristiti isti protokol. YMMV.

Preporučuje se: