Sisukord:

Koduautomaatika häkkimine LG kanaliga Split: 8 sammu (koos piltidega)
Koduautomaatika häkkimine LG kanaliga Split: 8 sammu (koos piltidega)

Video: Koduautomaatika häkkimine LG kanaliga Split: 8 sammu (koos piltidega)

Video: Koduautomaatika häkkimine LG kanaliga Split: 8 sammu (koos piltidega)
Video: Toom-Kuninga15 Koduautomaatika 2024, November
Anonim
LG Ducted Spliti häkkimine koduautomaatika jaoks
LG Ducted Spliti häkkimine koduautomaatika jaoks

Esiteks - see pole järjekordne infrapuna kaugjuhtimispuldi jäljendamise häkkimine. Minu konkreetsel vahelduvvoolul pole kasutatavat liidest, mis oleks ette nähtud mis tahes muu juhtimise jaoks, välja arvatud komplektis olevad nutikad juhtimisseadmed.

Mul on majas LG Ducted reverse split süsteem. Kahjuks tehti see ajal, mil asjade internet ei olnud ühegi tootja nimekirjas kõrgel kohal. Avastasin, et sellel on mõned põhijuhtimise võimalused, kuid kuigi seade oli minu proovimise ajal vaid 2 -aastane, olid laienemisplaadid mittesobivad ja hinnad olid astronoomilised. Nagu ka juhtmevaba RF -kaugjuhtimispuldi lisand, mis oleks asju palju lihtsamaks muutnud, kuid võimatu osta.

Kui see oleks olnud minu valik, poleks see LG, kuid kuna see paigaldati majja, kui ma selle ostsin (ja selle asendamiskulu oleks tõenäoliselt üle 10 000 dollari), pidin sellega tegelema.

Eesmärk - Võimalik juhtida vahelduvvoolu MQTT kaudu automatiseerimiseks OpenHABi ja IFTTT/Google'i assistendi kaudu

Samm: andmevormingu dekodeerimine

Andmevormingu dekodeerimine
Andmevormingu dekodeerimine
Andmevormingu dekodeerimine
Andmevormingu dekodeerimine

Alustasin seda protsessi 4 aastat tagasi, kuid ei jõudnud väga kaugele ega tahtnud riskida seadme kahjustamisega - eriti kuna selle osi on peaaegu võimatu leida.

Kontrolleri seinalt maha rebides leidsin 3 juhtmest, mille määrasin maanduseks, 12v ja signaaliks

Andmeliini signaalipinge oli 12v, kuid märkasin, et see tundus multimeetril kõikuvat (mingid impulssid liinil).

Leib läksin põhiahelasse, et juhtida optoisolaatorit andmeside kaudu, ja ühendasin optoisolaatori teise külje oma arvuti helikaardi sisendiks ja sain ulatuse väljundi halva versiooni (joonis 1).

See on umbes nii kaugele, kui ma tol ajal jõudsin - nägin, et seal on midagi, kuid ei teadnud, kuidas seda dekodeerida.

Pärast kohvimasina IoT lubamist tekkis mul huvi uuendada seda seekord veidi kindlameelsemalt.

Postitasin oma leiud EEVBlogi foorumitesse, et näha, kas keegi suudab valgust heita ja mulle tuli appi suurepärane tüüp nimega Ian - ta pani selle välja nii, et see oli täiesti mõistlik (pilt 2)

Põhimõtteliselt on andmevoog 13 baiti „standardseeria” - 8 andmebitti, üks stardibitt ja üks stopp -bitt (ilma pariteedita), kuid VÄGA madala edastuskiirusega - 104 bps.

2. samm: vaadake sügavamale

Vaadates sügavamale
Vaadates sügavamale

Nüüd, kui mul oli ettekujutus andmete vormindamisest, vajasin ma võimalust, et saaksin andmeid dünaamilisemalt lugeda.

Tõmbasin ühe oma kontrolleri seinalt maha ja ühendasin selle loogilise taseme nihutaja abil lihtsa visandiga Arduino külge, et lugeda 13 baiti andmeid 104bps konfigureeritud tarkvara jadapordi kaudu ja printida see välja:

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, ** Tegelikult 12 baiti siin

Meil oli tegevust!

Kontrolleri erinevaid seadeid muutes suutsin välja selgitada muutuvad baidid:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, ventilaator LOW168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, ventilaator MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, ventilaator kõrge

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

Numbrid on palju mõttekamad, kui neid binaarselt vaadata, aga mis on 13. baidiga ?? See on igal pool…

3. samm: selle kaardistamine

Selle kaardistamine
Selle kaardistamine

Katse -eksituse meetodil suutsin kindlaks määrata 13 baiti andmeid, mida oleks vaja edastada.

4. samm: telliskivisein ees

Telliskivisein ees!
Telliskivisein ees!
Telliskivisein ees!
Telliskivisein ees!
Telliskivisein ees!
Telliskivisein ees!

Siin läks asi keeruliseks. Mul oli kaks takistust ületada

a) 13. bait tundus olevat andmete kontrollsumma, mida ma pidin kuidagi välja töötama. b) Kuidas ma siis andmeid edastan? See on ainult üks traat.

Probleem „a” osutus TÕELISELT lihtsaks, kuid mul õnnestus sellest puhtalt juhuslikult mööda saada.

Oma testides vaatasin selliseid andmeid nagu: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A8320000000000

See on 13 baiti andmeid, sealhulgas kontrollsumma (siin DEC asemel HEX).

Kui ma otsisin oraaklist, mis on google'is teemal "kuidas kontrollida kontrollsummat", siis leidsin selle lehe stäkkivahetuses kellegi teise nimega Nick, kes küsis peaaegu sama asja nagu mina, aga mitte ainult, nad rääkisid kliimaseadme kohta ja nende andmed olid peaaegu samas vormingus kui minu omad - kas see võib olla ??? Kogu minu otsingute ajal (umbes 4 aasta jooksul) polnud ükski inimene postitanud teavet selle kohta, kuidas nende kliimaseadmete protokolli häkkida, ja ma lihtsalt satun kellegi sama asja otsa, otsides midagi peaaegu täiesti mitteseotud? See oli õnnistus - ta isegi postitas, et töötas selle välja ja lahendus oli järgmine: lisage kõik baidid andmeid ja seejärel XOR tähega „U”.

Kui see käes, lisasin selle oma koodi, et arvutada, mis minu arvates peaks kontrollsumma olema ja mis see tegelikult oli, kuid see kõik oli vale!

Nagu selgub, oli see kuidagi vale. Kui hakkasin numbreid binaarselt vaatama, oli see täiesti loogiline.

Vastus 'XOR koos U'ga andis alati tagasi 9 bitti andmeid (9. bitti alati üks), kuid teised bitid olid õiged. Ma lihtsalt eemaldasin 9. bitti, võttes saadud numbrist 256 ja siis see sobis !!

Kui see poleks olnud selle isiku jaoks, võin ma ikkagi pead kriimustada. Müts maha ka tema ees, aga ma ei saa temaga ühendust - See oli põhimõtteliselt tema ainus postitus stackexchange foorumis. No aitäh võõras:)

Järgmine väljakutse oli vooluringi tegemine, mis võimaldaks mul olemasolevat kontrollerit simuleerida. Kaardistasin ajami vooluahela skemaatika (Pic1 ja Pic 2), kuid see tundus mulle liiga keeruline, et oleksin vaja seda reprodutseerida, et saada seda, mida soovisin. Lõppude lõpuks lugesin juba signaali. Valisin palju lihtsama meetodi - arduino kasutamine optilise isolaatori juhtimiseks, et tõmmata 12v signaaliliin vastavalt vajadusele madalale.

Ma kavandasin ka Rx jaoks lihtsama vooluringi, kuid seda pole testitud, jäin lihtsuse huvides taseme muunduri juurde.

Samm: pange see tööle

Kui lasin edastusahela leivaplaadile paigaldada ja võidusõidu südamega panin kokku 12 -baidise (staatilise) stringi, arvutasin kontrollsumma ja lasin arduinol käsu saata - Hämmastavalt, kuvarit värskendati !!! Võida!

Viimane tegelik test oli lisada minu arduino BUS -i koos kahe teise kontrolleriga tõelise reaalajas testi jaoks ja kindlasti see töötas.

Nii et nüüd oskasin bussi lugeda ja kirjutada, kuid lihtsalt puudus oskus seda lihtsalt teha.

Kuna kasutan MQTT -d peaaegu eranditult kogu oma koduautomaatika jaoks, oli loomulik, et see on sama. Kirjutasin koodi välja mitme päeva jooksul, et juhtida vahelduvvoolu nelja põhielementi, lugedes ka olemasolevat olekut (teistest bussi moodulitest)

Eesmärk oli lasta kood töötada ESP8266 moodulil, kuid tundub, et ESP8266 ei suuda toota nii madalat andmeedastuskiirust kui 104 bps. Ma pidin pöörduma tagasi üldise Arduino Uno juurde koos Wiznet Ethernetiga, kuid see ei olnud raske, kuna mu kommide riiul asus sõna otseses mõttes ühe vahelduvvoolukontrolleri teisel pool seina.

Kood on natuke kõikjal, kuid peaks olema loetav. Mul oli palju probleeme sellega, et takistada kontrolleril oma väljundi lugemist, aga ka selle enda koodi kordamist, mis on tema enda avaldatud teemad, mis on MQTT -lt kliimaseadmesse tagasi saadetud. Põhimõtteliselt tekitaks see lõpmatu ahela. Lõpuks said mõned puhvri kustutamised ja viivitused koodi töötlemisel pärast MQTT -s avaldamist lahendatud.

Rx, Tx tihvtid vahelduvvoolule on kodeeritud 3, 4, kuid muutke, kui soovite

Kood on konfigureeritud avaldama ja aktsepteerima käske sellisena:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - režiim Cool, Dehumidify, Fan, Auto, Heatha/mod/5557/F 0/1/2 - Ventilaator madal, keskmine, kõrge/mod/5557/Z, st 1111 kõigi tsoonide puhul 1000 -l, kui tsoon 1 on sisse lülitatud.

** Kontrollerilt ei saa tsoone seada väärtusele '0000', kuid tundub, et kui väärtuse väljastate, naaseb see väärtusele '1000'.

Koodi uusim versioon on saadaval minu GitHubi repost:

6. samm: midagi püsivamat

Midagi püsivamat
Midagi püsivamat
Midagi püsivamat
Midagi püsivamat

Kogusin kokku arduino prototüüpplaadi ja paigaldasin kõik osad nii, nagu lasin need leivale panna.

Samm 7: OpenHAB Config

Vaadake lisatud faili OpenHABi üksuste, saidiplaani ja reeglite kohta

Kombineerige see IFTTT OpenHabi sidumise ja Google'i assistendi/koduga ning teil on väga võimas hääljuhtimisega ja/või nutikas õhukonditsioneer, mis ületab peaaegu kõiki kaubanduslikult saadavaid tooteid!

8. samm: kokkuvõte

Kokkuvõtteks - kui olete üks vaestest hingedest, kellel on pisut vanem LG kanaliga split -konditsioneer, pole te üksi. Meil on veel lootust!

Loodan, et see õpetatav leiab kellegi, kes vajab seda sama palju kui mina. Põhimõtteliselt ei leia ma mingit teavet (välja arvatud "Nick" kontrollsumma). Pidin alustama nullist, kuid olen tulemusest vaimustuses.

Teave on natuke ebamäärane, kuid ma olen valmis teid aitama, kui olete samas olukorras nagu mina.

- Ettevaatust / Värskendus --- Kuigi vahelduvvoolu seadeid on võimalik muuta, kui seade on välja lülitatud, olen avastanud, et tsooni juhtimise osas tundub see sellega segi minevat. Tegin palju katseid väljalülitatud seadmega ja leidsin, et tsoonid kuvatakse mitteaktiivsena, kuid seadme töötamise ajal tundub, et siibrid pole täielikult suletud (kuid mitte täielikult avatud). Lähtestasin seadme pealülitil ja see lahendas probleemi. Kuna tsoone vahetatakse ainult siis, kui seade on sisse lülitatud, pole see probleem olnud

Olen ka koodi uuendanud, et avaldada ainult (MQTT -sse) muudatused, mis tulevad peakontrollerilt, mitte põhiseadmelt. See võib taas probleeme tekitada, sest põhiseade saadab tsoonide jaoks '0000' (mis võis ka probleem olla)

Värskendatud kood kehtestab ka ajapiirangud, et vältida arduino edastamist samaaegselt põhi- ja põhiseadmest. Olen kindel, et on tõenäoliselt olemas meetod, mida kontroller kasutab andmete saatmiseks, näiteks Xms -i joone madalaks tõmbamine enne saatmist, kuid ma pole seda veel avastanud

Avastasin, et põhiseade saadab andmeid iga 60 sekundi järel ja peakontroller iga 20 sekundi järel. Kood üritab andmete saatmist peatada 2 sekundi jooksul pärast andmepaketi vastuvõtmist. Kuid mõnikord edastavad kapten ja põhiseade üksteisele väga lähedal. Tõenäoliselt täpsustatakse seda varsti veelgi.----------------------------

** Võib töötada uuemate seadmetega

*** Mõni minu uurimisreisidel leitud teave näitas, et Panasonicu kanalitoru võib kasutada sama protokolli. YMMV.

Soovitan: