Cuprins:

Spargerea unei divizări LG Ducted pentru automatizarea casei: 8 pași (cu imagini)
Spargerea unei divizări LG Ducted pentru automatizarea casei: 8 pași (cu imagini)

Video: Spargerea unei divizări LG Ducted pentru automatizarea casei: 8 pași (cu imagini)

Video: Spargerea unei divizări LG Ducted pentru automatizarea casei: 8 pași (cu imagini)
Video: Lol Esports Top 25 Power Rankings (8/18/22) 2024, Decembrie
Anonim
Spargerea unei divizări LG Ducted pentru automatizare la domiciliu
Spargerea unei divizări LG Ducted pentru automatizare la domiciliu

În primul rând - Acesta nu este un alt hack de emulare a telecomenzii cu infraroșu. AC-ul meu particular nu are o interfață utilizabilă concepută pentru niciun fel de control, în afară de comenzile inteligente montate pe perete.

Am un sistem de divizare inversă LG Ducted în casa mea. Din păcate, a fost realizat într-un moment în care IoT nu era pe o listă de producători. Am descoperit că avea unele opțiuni pentru controlul „master”, dar, deși unitatea avea doar 2 ani în momentul în care am încercat prima dată, plăcile de expansiune erau unobtanium, iar prețurile erau oricum astronomice. La fel ca și complementul „Wireless RF Remote”, care ar fi făcut lucrurile mult mai ușoare, dar imposibil de cumpărat.

Dacă ar fi fost alegerea mea, nu ar fi un LG, dar din moment ce a fost instalat în casă când l-am achiziționat (și costul de înlocuire a acestuia ar fi probabil mai mare de 10.000 de dolari), a trebuit să mă ocup.

Scop - Pentru a putea controla AC prin MQTT în scopul automatizării prin OpenHAB și IFTTT / Asistent Google

Pasul 1: Decodarea formatului de date

Decodarea formatului de date
Decodarea formatului de date
Decodarea formatului de date
Decodarea formatului de date

Am început acest proces acum 4 ani, dar nu am ajuns prea departe și nu am vrut să risc să deteriorez unitatea - Mai ales că părțile pentru acesta par aproape imposibil de găsit.

Scoaterea controlerului de pe perete am găsit 3 fire pe care le-am determinat ca fiind la sol, 12v și „semnal”

Tensiunea de semnalizare pe linia de date era la 12v, dar am observat că părea să fluctueze pe multimetru (un fel de impulsuri pe linie).

M-am îmbarcat într-un circuit de bază pentru a conduce un izolator opto prin pinul de date și am conectat cealaltă parte a izolatorului opto ca intrare pe placa de sunet a computerului meu și am primit o versiune slabă a unei ieșiri de scop (Pic 1).

Este cam atât cât am ajuns în acel moment - am putut vedea că era ceva acolo, dar nu știam cu adevărat cum să-l „decodez”.

De când mi-am activat mașina de cafea IoT, am avut un interes revigorat în a încerca din nou, cu puțin mai multă determinare de data aceasta.

Am postat descoperirile mele pe forumurile EEVBlog pentru a vedea dacă cineva ar putea să arunce ceva lumină și un tip grozav pe nume Ian a venit în salvarea mea - El a prezentat-o într-un mod în care avea complet sens (imaginea 2)

Practic, fluxul de date este de 13 octeți de „serie standard” - 8 biți de date, un bit de start și un bit de oprire (fără paritate), dar la o rată de transmisie FOARTE scăzută de 104bps.

Pasul 2: Privind mai adânc

Privind mai adânc
Privind mai adânc

Deci, acum, când aveam o idee despre modul în care datele erau formatate, aveam nevoie de o modalitate de a putea citi datele într-un mod mai dinamic.

Am scos unul dintre controlere de pe perete și l-am conectat printr-un schimbător de nivel logic la un Arduino cu o schiță simplă pentru a citi 13 octeți de date prin portul serial al software-ului configurat la 104bps și a-l imprima:

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, ** De fapt, 12 octeți aici

Am avut acțiune!

Schimbând apoi diferitele setări ale controlerului, am reușit să calculez octeții care se schimbă:

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 HIGH

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

Numerele au mult mai mult sens atunci când le privești în binar, dar ce-i cu al 13-lea octet ?? E peste tot …

Pasul 3: Cartografierea acestuia

Cartografierea ei
Cartografierea ei

Prin încercări și erori, am putut determina biții relevanți din cei 13 octeți de date pe care ar trebui să le pot transmite.

Pasul 4: Zid de cărămidă înainte

Zid de cărămidă înainte!
Zid de cărămidă înainte!
Zid de cărămidă înainte!
Zid de cărămidă înainte!
Zid de cărămidă înainte!
Zid de cărămidă înainte!

Aici s-a complicat. Am avut două obstacole de depășit

a) Al 13-lea octet părea a fi o sumă de control a datelor de care aveam nevoie pentru a rezolva cumva.b) Cum transmit datele atunci? Este doar un fir.

Numărul „a” sa dovedit a fi cu adevărat ușor, dar prin pură coincidență am reușit să trec peste el.

În testele mele, mă uitam la date precum: A802000000040F61000000004B A81200004004169A0000000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A832000840000

Acesta este cel de 13 biți de date, inclusiv suma de control (aici în HEX în loc de DEC).

Când căutam oracolul care este Google despre „cum să inginerim invers o sumă de control”, am dat de această pagină pe schimbul de stive cu altcineva care se chema pe numele lui Nick, întrebând cam același lucru ca mine, dar nu numai asta, au vorbit despre un aparat de aer condiționat și datele lor au format aproape identic cu ale mele - Ar putea fi ??? În toate căutările mele (în aproximativ 4 ani), nicio persoană nu a postat nicio informație cu privire la modul de piratare a protocolului pe aceste aparate de aer condiționat și se întâmplă doar să dau peste cineva care face același lucru căutând ceva aproape complet fără legătură? A fost o binecuvântare - El a postat chiar că a rezolvat-o și soluția a fost: Adăugați toți octeții de date și apoi XOR cu „U”.

Cu asta în mână, l-am adăugat la codul meu pentru a calcula ceea ce credeam că ar trebui să fie suma de control față de ceea ce era de fapt, dar totul a fost GRAV !!

După cum se dovedește, a fost cam greșit. Când am început să mă uit la cifre în binar, a avut sens.

Răspunsul din „XOR cu U” a întors întotdeauna 9 biți de date (cel de-al 9-lea bit întotdeauna unul), dar ceilalți biți au avut dreptate. Am eliminat pur și simplu cel de-al 9-lea bit luând 256 din numărul rezultat și apoi s-a potrivit !!

Dacă nu ar fi fost pentru acest individ, s-ar putea să mă scarpinez în cap. Și pentru el, dar nu-l pot contacta - Aceasta a fost, în principiu, singura sa postare pe forumul stackexchange. Ei bine, mulțumesc străin:)

Următoarea provocare a fost crearea unui circuit care să-mi permită să simulez controlerul existent. Am trasat schema pentru circuitul de acționare (Pic1 și Pic 2), dar mi s-a părut mult prea complicat să am nevoie să îl reproduc pentru a obține ceea ce doream. Până la urmă citeam deja semnalul. Am optat pentru o metodă mult mai simplă - Folosind arduino pentru a conduce un izolator opto pentru a trage linia de semnal de 12v la scară mică, după cum este necesar.

De asemenea, am proiectat un circuit mai simplu pentru Rx, dar acest lucru este netestat, am ajuns să rămân cu convertorul de nivel pentru simplitate.

Pasul 5: Fă-l să funcționeze

Odată ce am primit circuitul de transmisie și, cu o inimă de curse, am manipulat un șir (static) de 12 octeți, am calculat suma de control și am primit arduino comanda - Uimitor, afișajul a fost actualizat !!! Victorie!

Ultimul test real a fost să-mi adaug arduino-ul la BUS cu celelalte 2 controlere pentru un test live real și destul de sigur, a funcționat.

Așa că acum puteam citi și scrie în autobuz, dar doar nu aveam capacitatea de a o putea face simplu.

Deoarece folosesc MQTT aproape exclusiv pentru toate sistemele de automatizare a casei, era firesc ca acest lucru să fie același. Am scris codul în câteva zile pentru a controla cele 4 elemente principale ale AC, citind și starea existentă (din celelalte module de pe BUS)

Intenția a fost ca codul să ruleze pe un modul ESP8266, totuși s-ar părea că ESP8266 nu este capabil să producă o rată baud de până la 104bps. A trebuit să revin la un Arduino Uno generic cu Ethernet Wiznet, dar asta nu a fost greu, deoarece rack-ul meu de comunicații era literalmente de cealaltă parte a peretelui de la unul dintre controlerele de curent alternativ.

Codul este puțin peste tot, dar ar trebui să fie lizibil. Am avut o mulțime de probleme cu împiedicarea controlerului să citească propria ieșire, dar, de asemenea, repetarea codului, subiectele publicate primite de la MQTT înapoi la aer condiționat. Practic, ar crea o buclă infinită. În cele din urmă, unele ștergeri tampon și întârzieri în procesarea codului după publicarea în MQTT au fost sortate.

Pinii Rx, Tx la AC sunt codificați ca 3, 4, dar modificați dacă doriți

Codul este configurat pentru a publica și accepta comenzi ca atare:

ha / mod / 5557 / P 0/1 - Powerha / mod / 5557 / M 0/1/2/3/4 - Mod Cool, Dehumidify, Fan, Auto, Heatha / mod / 5557 / F 0/1/2 - Ventilator scăzut, med, highha / mod / 5557 / Z adică 1111 pentru toate zonele de pe 1000 pentru doar zona 1 de pe.

** Din controler, zonele nu pot fi setate la „0000”, cu toate acestea s-ar părea că, dacă emiteți valoarea, aceasta va reveni la „1000”.

Cea mai recentă versiune a codului este disponibilă din GitHub Repo:

Pasul 6: Ceva mai permanent

Ceva mai permanent
Ceva mai permanent
Ceva mai permanent
Ceva mai permanent

Am strâns o placă prototip arduino și am instalat toate piesele așa cum le-am pus la bord.

Pasul 7: OpenHAB Config

A se vedea fișierul atașat pentru elementele OpenHAB, sitemap și reguli

Combinați acest lucru cu legătura IFTTT OpenHab și Asistentul Google / Acasă și aveți un control puternic vocal și / sau un aer condiționat „Smart” care depășește aproape toate produsele disponibile în comerț!

Pasul 8: Rezumat

În concluzie - Dacă sunteți unul dintre sufletele sărace cu un aparat de aer condiționat cu canal dublu ușor mai vechi LG, nu sunteți singur. Există încă speranță pentru noi!

Sper că acest instructibil găsește pe cineva care are nevoie de el la fel de mult ca mine. Practic nu există informații pe care să le pot găsi (altele decât suma de control de la „Nick”). A trebuit să încep de la zero, dar sunt extaziat de rezultat.

Informațiile sunt cam vag, știu, dar dacă vă aflați în aceeași situație ca și mine, voi fi mai mult decât dispus să vă ajut.

- Atenție / Actualizare --- Deși este posibil să schimbați setările de pe AC cu unitatea oprită, am constatat că, atunci când vine vorba de controlul zonei, pare să se încurce cu el. Am făcut o mulțime de testări cu unitatea oprită și am constatat că zonele ar arăta ca inactive, dar când unitatea funcționează, se pare că amortizoarele nu sunt complet închise (dar nici complet deschise). Am resetat unitatea la întrerupătorul principal și acest lucru a rezolvat problema. Deoarece numai schimbarea zonelor când unitatea este pornită, aceasta nu a fost o problemă

De asemenea, am actualizat codul pentru a publica doar (în MQTT) modificările care provin de la controlerul principal și nu de la unitatea principală. Încă o dată, acest lucru ar putea cauza probleme, deoarece unitatea principală va trimite „0000” pentru zone (ceea ce ar fi putut fi și problema)

Codul actualizat introduce, de asemenea, câteva constrângeri de sincronizare pentru a încerca să împiedice arduino-ul să transmită în același timp al unității principale și principale. Sunt sigur că există probabil o metodă pe care controlorul o folosește pentru a iniția o trimitere de date, cum ar fi să tragi linia jos pentru Xms înainte de a trimite, dar nu am descoperit-o încă dacă există

Am descoperit că unitatea principală va trimite date la fiecare 60 de secunde, iar controlerul principal trimite la fiecare 20 de secunde. Codul încearcă să oprească trimiterea datelor în decurs de 2 secunde de la primirea pachetului de date. Cu toate acestea, uneori, maestrul și unitatea principală transmit foarte aproape unul de celălalt. Acest lucru va fi, probabil, rafinat mai curând. ------------------------------

** Poate funcționa pe unități mai noi

*** Unele informații găsite în călătoriile mele de cercetare au indicat că panasonic ducted split ar putea utiliza același protocol. YMMV.

Recomandat: