LG: n kanavaisen jaon hakkerointi kotiautomaatiota varten: 8 vaihetta (kuvilla)
LG: n kanavaisen jaon hakkerointi kotiautomaatiota varten: 8 vaihetta (kuvilla)
Anonim
Hakkerointi LG Ducted Split kotiautomaatiota varten
Hakkerointi LG Ducted Split kotiautomaatiota varten

Ensinnäkin - Tämä ei ole toinen infrapunakaukosäätimen emulointi hakata. AC -laitteessani ei ole käyttöliittymää, joka on suunniteltu muulle ohjaukselle kuin mukana toimitetuille seinälle asennetuille älykkäille ohjaimille.

Minulla on kotona LG Ducted reverse split -järjestelmä. Valitettavasti se tehtiin aikaan, jolloin IoT ei ollut korkealla minkään valmistajan luettelossa. Huomasin, että sillä oli joitain vaihtoehtoja "pääohjaukseen", mutta vaikka yksikkö oli vain 2 vuotta vanha, kun yritin tätä ensimmäistä kertaa, laajennuslevyt olivat epätavallisia ja hinnat olivat joka tapauksessa tähtitieteellisiä. Kuten langaton RF -kauko -lisäosa, joka olisi tehnyt asioista paljon helpompaa, mutta mahdotonta ostaa.

Jos se olisi ollut minun valintani, se ei olisi LG, mutta koska se asennettiin taloon, kun ostin sen (ja sen korvauskustannukset olisivat todennäköisesti yli 10 000 dollaria), minun oli käsiteltävä.

Tavoite - Pystyä hallitsemaan AC: tä MQTT: n kautta automatisointia varten OpenHAB: n ja IFTTT: n/Google Assistantin kautta

Vaihe 1: Datamuodon dekoodaus

Tietojen muodon purkaminen
Tietojen muodon purkaminen
Tietojen muodon purkaminen
Tietojen muodon purkaminen

Aloitin tämän prosessin 4 vuotta sitten, mutta en päässyt kovin pitkälle enkä halunnut vaurioittaa laitetta - varsinkin kun sen osat näyttävät lähes mahdottomilta löytää.

Kun repäisin ohjaimen irti seinästä, löysin 3 johtoa, joiden määritin olevan maadoitus, 12v ja "signaali"

Datalinjan signalointijännite oli 12 V, mutta huomasin, että se näytti vaihtelevan yleismittarilla (jonkinlainen pulssi linjalla).

Leipasin peruspiiriin optoerottimen ajamiseksi datanapin kautta ja kytkin optoeristimen toisen puolen PC: n äänikortin tuloksi ja sain huonon version laajuuden ulostulosta (kuva 1).

Tämä on suunnilleen niin paljon kuin sain tuolloin - huomasin, että siellä oli jotain, mutta en todellakaan tiennyt kuinka "purkaa" se.

Koska sain kahvinkeittimen IoT: n käyttöön, minulla oli uusi kiinnostus kokeilla tätä uudelleen hieman päättäväisemmin tällä kertaa.

Laitoin havaintoni EEVBlog -foorumeille nähdäkseni, voisiko joku valaista asiaa, ja suuri kaveri nimeltä Ian tuli pelastamaan - Hän esitteli sen tavalla, jolla se oli täysin järkevää (kuva 2)

Periaatteessa datavirta on 13 tavua "vakio -sarjaa" - 8 databittiä, yksi aloitusbitti ja yksi pysäytysbitti (ei pariteettia), mutta erittäin alhaisella siirtonopeudella 104 bps.

Vaihe 2: Katse syvemmälle

Katse syvemmälle
Katse syvemmälle

Joten nyt kun minulla oli käsitys siitä, miten tiedot muotoiltiin, tarvitsin tapaa lukea tiedot dynaamisemmalla tavalla.

Vedin yhden ohjaimistani irti seinästä ja koukutin sen loogisen tasonsiirtimen kautta Arduinoon yksinkertaisella luonnoksella lukemaan 13 tavua dataa 104 bps: n konfiguroidun ohjelmiston sarjaportin kautta ja tulostamaan sen:

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, ** Oikeastaan 12 tavua täällä

Meillä oli toimintaa!

Kun sitten muutin ohjaimen eri asetuksia, pystyin selvittämään muuttuvat tavut:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, TUULETIN LOW168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, tuuletin MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, tuuletin KORKEA

168, 67, 0, 0, 0, 248, 3, 33, 0, 0, 0, 0, 82, Z1234168, 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, TUULETIN 168, 79, 0, 0, 0, 136, 10, 35, 0, 0, 0, 0, 249, tila AUTO 168, 67, 0, 0, 0, 136, 3, 35, 0, 0, 0, 0, 204, tila COOL 168, 83, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 225, tila HEAT 168, 7, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 61, tila DH

168, 15, 0, 0, 0, 136, 3, 34, 0, 0, 0, 0, 49, lämpötila 18168, 15, 0, 0, 0, 136, 4, 34, 0, 0, 0, 0, 48, lämpötila 19168, 15, 0, 0, 0, 136, 5, 34, 0, 0, 0, 0, 51, lämpötila 20168, 15, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 37, lämpötila 30

Numerot ovat paljon järkevämpiä, kun katsot niitä binäärinä, mutta mikä on 13. tavu? Se on kaikkialla…

Vaihe 3: Kartoittaa se

Kartoitus
Kartoitus

Kokeilun ja erehdyksen kautta pystyin määrittämään tarvittavat bitit 13 tavun datasta, jotka minun pitäisi voida lähettää.

Vaihe 4: Tiiliseinä edessä

Tiiliseinä edessä!
Tiiliseinä edessä!
Tiiliseinä edessä!
Tiiliseinä edessä!
Tiiliseinä edessä!
Tiiliseinä edessä!

Tässä meni monimutkaiseksi. Minulla oli kaksi estettä ylitettävä

a) 13. tavu näytti olevan tarkistussumma tiedoista, jotka minun piti jotenkin selvittää. b) Miten voin sitten lähettää tiedot? Se on vain yksi lanka.

Ongelma "a" osoittautui TODELLA helpoksi, mutta onnistuin selviytymään siitä sattumalta.

Testissäni katsoin tietoja, kuten: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A8320000000000

Tämä on 13 tavua dataa, mukaan lukien tarkistussumma (tässä HEX: ssä DEC: n sijaan).

Kun etsin Googlen oraakkelista "kuinka muuttaa tarkistussumma", löysin tämän sivun pino -vaihdossa jonkun muun kanssa, joka käytti Nick -nimeä ja kysyi melkein samaa kuin minä, mutta ei vain, he puhuivat noin ilmastointilaite ja heidän tiedot olivat melkein identtisiä minun omieni kanssa - voiko se olla ??? Koko etsinnän aikana (noin neljässä vuodessa) yksikään henkilö ei ollut julkaissut tietoja siitä, kuinka hakkeroida näiden ilmastointilaitteiden protokolla, ja satun vain törmäämään johonkin, joka tekee saman etsimällä jotain lähes täysin liittymätöntä? Se oli siunaus - Hän jopa julkaisi, että hän työskenteli ja ratkaisu oli: Lisää kaikki tavut dataa ja sitten XOR ja "U".

Tällä kädellä lisäsin sen koodiini laskeakseni, mitä ajattelin tarkistussumman olevan vs mitä se todellisuudessa oli, mutta kaikki oli väärin !!

Kuten kävi ilmi, se oli tavallaan väärin. Kun aloin katsoa numeroita binäärinä, se oli täysin järkevää.

'XOR ja U' vastaus palautti aina 9 bittiä dataa (yhdeksäs bitti aina yhden), mutta muut bitit olivat oikein. Poistin yksinkertaisesti yhdeksännen bitin ottamalla tuloksena olevasta numerosta 256 ja sitten se sopi !!

Jos ei olisi ollut tätä henkilöä, saatan silti raapia päätäni. Hattu pois myös hänelle, mutta en voi ottaa häneen yhteyttä - se oli pohjimmiltaan hänen ainoa postauksensa stackexchange -foorumilla. No kiitos vieras:)

Seuraava haaste oli tehdä piiri, jonka avulla voisin simuloida olemassa olevaa ohjainta. Kartoitin käyttöpiirin kaavion (kuva 1 ja kuva 2), mutta se tuntui liian monimutkaiselta, koska minun täytyi toistaa se saadakseni haluamani. Olin jo lukenut signaalin. Valitsin paljon yksinkertaisemman menetelmän - käyttämällä arduinoa optoerottimen ajamiseen vetääksesi 12 voltin signaalilinjan matalalle tarpeen mukaan.

Suunnittelin myös yksinkertaisemman piirin Rx: lle, mutta tätä ei ole testattu, joten päädyin kiinni tasomuuntimeen yksinkertaisuuden vuoksi.

Vaihe 5: Saada se toimimaan

Kun minulla oli lähetyspiiri leipälevyllä, ja kilpailevalla sydämellä, sekoitin (staattinen) 12 tavun merkkijonon, laskin tarkistussumman ja pyysin arduinoa lähettämään komennon - Hämmästyttävää, näyttö päivitettiin !!! Voittaa!

Viimeinen todellinen testi oli lisätä arduinoni väylään kahden muun ohjaimen kanssa todellisen live -testin suorittamiseksi ja varmasti se toimi.

Joten nyt pystyin lukemaan ja kirjoittamaan bussiin, mutta minulla ei vain ollut kykyä tehdä sitä yksinkertaisesti.

Koska käytän MQTT: tä lähes yksinomaan kaikkeen kodin automaatioon, oli luonnollista, että tämä olisi sama. Kirjoitin koodin ulos useiden päivien aikana ohjatakseni AC: n 4 pääelementtiä ja luken myös olemassa olevan tilan (muista BUS -moduuleista)

Tarkoituksena oli saada koodi toimimaan ESP8266 -moduulissa, mutta vaikuttaisi siltä, että ESP8266 ei pysty tuottamaan jopa 104 bps: n siirtonopeutta. Minun piti palata yleiseen Arduino Unoon Wiznet -ethernetin kanssa, mutta se ei ollut vaikeaa, koska viestiketju oli kirjaimellisesti seinän toisella puolella yhdestä AC -ohjaimesta.

Koodi on vähän kaikkialla, mutta sen pitäisi olla luettavissa. Minulla oli paljon ongelmia estääkseni ohjainta lukemasta omaa tuotostaan, mutta myös toistamasta koodia, jonka se julkaisi MQTT: ltä takaisin ilmastointilaitteeseen. Pohjimmiltaan se loisi äärettömän silmukan. Lopulta puskurin tyhjentäminen ja koodin käsittelyn viivästyminen MQTT: lle julkaisemisen jälkeen saivat sen selvitettyä.

Rx, Tx nastat AC: lle koodataan 3, 4, mutta vaihda, jos haluat

Koodi on määritetty julkaisemaan ja hyväksymään komennot sellaisenaan:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - Mode Cool, Dehumidify, Fan, Auto, Heatha/mod/5557/F 0/1/2 - Tuuletin alhainen, keskitaso, korkea/mod/5557/Z eli 1111 kaikilla alueilla 1000, vain vyöhyke 1 päällä.

** Ohjaimen silmukoita ei voi asettaa arvoon '0000', mutta näyttää siltä, että jos annat arvon, se palaa arvoon '1000'.

Koodin uusin versio on saatavana GitHub Repostani:

Vaihe 6: Jotain pysyvämpää

Jotain pysyvämpää
Jotain pysyvämpää
Jotain pysyvämpää
Jotain pysyvämpää

Keräsin arduino -prototyyppikortin ja asensin kaikki osat leivän laudalla.

Vaihe 7: OpenHAB Config

Katso liitteenä olevasta tiedostosta OpenHAB -kohteet, sivustokartta ja säännöt

Yhdistä tämä IFTTT OpenHab -sitomiseen ja Google Assistant/Homeen, ja sinulla on erittäin tehokas ääniohjattu ja/tai "älykäs" ilmastointi, joka ylittää melkein kaikki kaupallisesti saatavilla olevat tuotteet!

Vaihe 8: Yhteenveto

Yhteenvetona - Jos olet yksi köyhistä sieluista, joilla on hieman vanhempi LG -kanavainen ilmastointilaite, et ole yksin. Meillä on vielä toivoa!

Toivottavasti tämä opettavainen löytää jonkun, joka tarvitsee sitä yhtä paljon kuin minä. Pohjimmiltaan EI löytynyt mitään tietoa (muuta kuin "Nickin" tarkistussumma). Minun piti aloittaa alusta, mutta olen innoissani tuloksesta.

Tiedän, että tiedän hieman epämääräisesti, mutta jos olet samassa tilanteessa kuin minä, olen enemmän kuin valmis auttamaan.

- Varoitus / päivitys --- Vaikka on mahdollista muuttaa AC: n asetuksia, kun laite on pois päältä, olen huomannut, että vyöhykeohjaimen osalta se näyttää olevan sekaisin. Tein paljon testejä yksikön ollessa pois päältä ja huomasin, että vyöhykkeet näyttäisivät passiivisilta, mutta kun laite toimii, näyttää siltä, että pellit eivät ole täysin kiinni (mutta eivät myöskään täysin auki). Palautin laitteen pääkatkaisijasta ja tämä ratkaisi ongelman. Koska alueita vaihdetaan vain laitteen ollessa päällä, tämä ei ole ollut ongelma

Olen myös päivittänyt koodin julkaisemaan vain (MQTT: hen) muutokset, jotka tulevat pääohjaimesta eivätkä pääyksiköstä. Tämä voi jälleen aiheuttaa ongelmia, koska päälaite lähettää '0000' vyöhykkeille (mikä olisi voinut myös olla ongelma)

Päivitetty koodi sisältää myös joitain ajoitusrajoituksia, joilla yritetään estää arduino lähettämästä samaan aikaan pää- ja pääyksikköä. Olen varma, että on luultavasti menetelmä, jolla ohjain aloittaa datalähetyksen, kuten vetämällä rivin alhaiseksi Xms: lle ennen lähettämistä, mutta en ole vielä löytänyt sitä, jos se on

Huomasin, että päälaite lähettää tietoja 60 sekunnin välein ja pääohjain 20 sekunnin välein. Koodi yrittää estää tietojen lähettämisen kahden sekunnin kuluessa datapaketin vastaanottamisesta. Joskus isäntä ja pääyksikkö lähettävät kuitenkin hyvin lähellä toisiaan. Tätä tarkennetaan todennäköisesti pian.----------------------------

** Voi toimia uudemmissa yksiköissä

*** Jotkut tutkimusmatkoiltani löydetyt tiedot osoittivat, että Panasonicin kanavajako voi käyttää samaa protokollaa. YMMV.