Kazalo:

Vdor v LG Ducted Split za avtomatizacijo doma: 8 korakov (s slikami)
Vdor v LG Ducted Split za avtomatizacijo doma: 8 korakov (s slikami)

Video: Vdor v LG Ducted Split za avtomatizacijo doma: 8 korakov (s slikami)

Video: Vdor v LG Ducted Split za avtomatizacijo doma: 8 korakov (s slikami)
Video: Сколько я зарабатываю в Канаде и кем работаю CUAET 2024, Maj
Anonim
Vdor v LG Ducted Split za domačo avtomatizacijo
Vdor v LG Ducted Split za domačo avtomatizacijo

Prvič - To ni še en kramp za emulacijo infrardečega daljinskega upravljalnika. Moj poseben AC nima uporabnega vmesnika, namenjenega nobenemu drugemu nadzoru, razen priloženih pametnih krmilnikov, nameščenih na steni.

V hiši imam sistem za vzvratno deljenje LG Ducted. Na žalost je bil narejen v času, ko IoT ni bil na nobenem seznamu proizvajalcev. Odkril sem, da ima nekaj možnosti za "glavni" nadzor, a čeprav je bila enota stara le 2 leti, ko sem to prvič poskusil, so bile razširitvene plošče neobtanijske, cene pa vseeno astronomske. Tako kot je bil dodatek "Wireless RF Remote", ki bi stvari precej olajšal, a jih ni bilo mogoče kupiti.

Če bi bila moja izbira, ne bi bil LG, ampak ker je bil nameščen v hiši, ko sem ga kupil (in nadomestni stroški bi verjetno presegali 10.000 USD), sem se moral ukvarjati s tem.

Cilj - biti sposoben upravljati AC prek MQTT za namene avtomatizacije prek OpenHAB in IFTTT/Google Assistant

1. korak: dekodiranje podatkovnega formata

Dešifriranje zapisa podatkov
Dešifriranje zapisa podatkov
Dekodiranje zapisa podatkov
Dekodiranje zapisa podatkov

Ta postopek sem začel pred 4 leti, vendar nisem prišel daleč in nisem hotel tvegati, da bi poškodoval enoto - še posebej, ker se zdi, da je skoraj nemogoče najti dele zanjo.

Ko sem krmilnik odtrgal s stene, sem našel 3 žice, za katere sem ugotovil, da so ozemljene, 12v in "signalne"

Signalna napetost na podatkovni liniji je bila pri 12v, vendar sem opazil, da se zdi, da niha na multimetru (nekakšni impulzi na liniji).

Na kruh sem vkrcal osnovno vezje za pogon opto izolatorja prek podatkovnega zatiča in priključil drugo stran opto izolatorja kot vhod na zvočno kartico računalnika in dobil slabo različico izhoda obsega (slika 1).

To je približno toliko, kolikor sem takrat dosegel - videl sem, da je tam nekaj, vendar nisem vedel, kako bi to "dekodiral".

Odkar sem omogočil IoT v aparatu za kavo, me je tokrat znova malo bolj odločno poskusil znova in z malo več odločnosti.

Svoje ugotovitve sem objavil na forumih EEVBlog, da bi videl, če bi kdo lahko osvetlil in mi je priskočil na pomoč odličen fant po imenu Ian - predstavil ga je tako, da je popolnoma smiselno (slika 2)

V bistvu je podatkovni tok 13 bajtov "standardne serijske" - 8 podatkovnih bitov, en začetni bit in en zaustavitveni bit (brez parnosti), vendar pri ZELO nizki hitrosti prenosa 104 b / s.

2. korak: Poglej globlje

Izgleda globlje
Izgleda globlje

Zdaj, ko sem imel idejo o tem, kako so podatki oblikovani, sem potreboval način, da bi lahko podatke prebral na bolj dinamičen način.

Enega od svojih krmilnikov sem potegnil s stene in ga prek logičnega nivojskega preklopnika priklopil na Arduino s preprosto skico za branje 13 bajtov podatkov prek programskih zaporednih vrat, konfiguriranih pri 104 b / s, in jih natisnil:

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, ** Tu je dejansko 12 bajtov

Imeli smo akcijo!

S tem, ko sem spremenil različne nastavitve na krmilniku, sem lahko določil bajte, ki se spreminjajo:

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, 248, ventilator MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, ventilator VISOKO

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 FAN 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 COOL 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

Številke so veliko bolj smiselne, če jih pogledate v binarnem formatu, kaj pa je s 13. bajtom ?? Je povsod…

3. korak: Izrisite ga

Kartiranje
Kartiranje

S poskusi in napakami sem lahko določil ustrezne bite v 13 bajtih podatkov, ki bi jih moral prenesti.

4. korak: Opečna stena naprej

Opečna stena naprej!
Opečna stena naprej!
Opečna stena naprej!
Opečna stena naprej!
Opečna stena naprej!
Opečna stena naprej!

Tu se je zapletlo. Moral sem premagati dve oviri

a) Zdelo se je, da je 13. bajt kontrolna vsota podatkov, ki sem jih potreboval, da sem jih nekako obdelal. b) Kako naj potem podatke prenesem? To je samo ena žica.

Vprašanje "a" se je izkazalo za resnično enostavno, vendar mi je čisto po naključju uspelo priti mimo njega.

V mojih testih, sem gledal podatke, kot so: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A83200084000149C0000000087 A85200084000149C00000000A7

To je 13 bajtov podatkov, vključno s kontrolno vsoto (tukaj v HEX namesto DEC).

Ko sem iskal oracle, ki je google o tem, kako obrniti inženiring kontrolne vsote, sem naletel na to stran pri izmenjavi skladov z nekom, ki se je po imenu Nick vprašal skoraj enako kot jaz, a ne samo to, so se pogovarjali o klimatski napravi in njihovi podatki so bili skoraj enakega formata kot moji - bi lahko bilo ??? V vseh mojih iskanjih (v približno štirih letih) niti ena oseba ni objavila nobenih informacij o tem, kako vdreti v protokol na teh klimatskih napravah in slučajno naletim na nekoga, ki počne isto stvar, tako da išče nekaj skoraj popolnoma nepovezanega? To je bil blagoslov - celo objavil je, da je to rešil in rešitev je bila: seštejte vse bajte podatkov in nato XOR z "U".

S tem v roki sem ga dodal v svojo kodo, da bi izračunal, kakšna se mi zdi kontrolna vsota v primerjavi s tem, kar je v resnici bilo, vendar je bilo vse narobe !!

Kot se je izkazalo, je bilo nekako narobe. Ko sem začel binarno gledati številke, je bilo to popolnoma smiselno.

Odgovor "XOR z U" je vedno vrnil 9 bitov podatkov (9. bit je vedno en), vendar so bili drugi bitni pravilni. Preprosto sem odstranil 9. bit, tako da sem iz nastale številke vzel 256, nato pa se je ujemalo !!

Če ne bi bilo tega posameznika, bi se morda še vedno praskal po glavi. Klobuk dol tudi njemu, vendar ga ne morem kontaktirati - to je bila v bistvu njegova edina objava na forumu stackexchange. No, hvala tujec:)

Naslednji izziv je bil izdelati vezje, ki bi mi omogočilo simulacijo obstoječega krmilnika. Načrtoval sem shemo pogonskega vezja (Pic1 in Pic 2), vendar se mi je zdelo preveč zapleteno, da bi jo moral reproducirati, da bi dobil tisto, kar sem hotel. Konec koncev sem že bral signal. Odločil sem se za veliko enostavnejšo metodo - z uporabo arduina za pogon opto izolatorja potegnite 12v signalno linijo nizko.

Zasnoval sem tudi enostavnejše vezje za Rx, vendar to ni preverjeno, zato sem se zaradi preprostosti držal pretvornika nivojev.

5. korak: Naj bo delo.

Ko sem dal na vezje oddajnega kroga in s srčnim dirkanjem, sem pokvaril (statični) niz 12 bajtov, izračunal kontrolno vsoto in arduino poslal ukaz - Neverjetno, zaslon se je posodobil !!! Zmaga!

Zadnji dejanski test je bil, da svoj arduino dodam v BUS z dvema ostalimi krmilniki za pravi preizkus v živo in zagotovo je uspelo.

Tako sem zdaj lahko bral in pisal na avtobus, vendar mi je zmanjkalo zmožnosti, da bi to preprosto naredil.

Ker uporabljam MQTT skoraj izključno za vso domačo avtomatizacijo, je bilo naravno, da bo to enako. Kodo sem več dni zapisal za nadzor 4 glavnih elementov AC -ja in prebral nazaj obstoječe stanje (iz drugih modulov na BUS -u)

Namen je bil, da se koda izvaja na modulu ESP8266, vendar se zdi, da ESP8266 ne more proizvesti hitrosti prenosa do 104 b / s. Moral sem se vrniti na generični Arduino Uno z Wiznet ethernetom, vendar to ni bilo težko, saj je bilo moje stojalo za komunikacije dobesedno na drugi strani stene enega od krmilnikov AC.

Koda je povsod, vendar mora biti čitljiva. Imel sem veliko težav s preprečevanjem, da bi krmilnik bral lastne izhode, pa tudi s ponavljanjem kode, ki jo je objavil sam, ki jo je prejel od MQTT nazaj v klimatsko napravo. V bistvu bi ustvarila neskončno zanko. Na koncu so se nekatere razčlenitve vmesnega pomnilnika in zamude pri obdelavi kode po objavi v MQTT uredile.

Zatiči Rx, Tx na AC so kodirani kot 3, 4, vendar se po želji spremenijo

Koda je konfigurirana za objavo in sprejemanje ukazov kot takih:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - način hlajenja, razvlaževanje, ventilator, samodejno, toplota/mod/5557/F 0/1/2 - Ventilator nizki, med, highha/mod/5557/Z ie 1111 za vse cone na 1000 za samo cono 1 vklopljeno.

** Območja iz krmilnika ni mogoče nastaviti na '0000', vendar se zdi, da če vrednost izdate, se bo vrnila na '1000'.

Najnovejša različica kode je na voljo v mojem GitHub Repo:

6. korak: Nekaj bolj trajnega

Nekaj bolj trajnega
Nekaj bolj trajnega
Nekaj bolj trajnega
Nekaj bolj trajnega

Zbral sem prototipno ploščo arduino in namestil vse dele, ko sem jih dal na kruh.

7. korak: OpenHAB Config

Za elemente OpenHAB, zemljevid mesta in pravila glejte priloženo datoteko

Če to združite z IFTTT OpenHab zavezo in Googlovim pomočnikom/Home, imate zelo zmogljivo glasovno nadzorovano in/ali 'pametno' klimatsko napravo, ki presega skoraj vse komercialno dostopne izdelke!

8. korak: Povzetek

Zaključek - Če ste ena izmed ubogih duš z nekoliko starejšo razcepljeno klimatsko napravo LG, niste sami. Za nas je še upanje!

Upam, da bo ta pouk našel nekoga, ki ga potrebuje toliko kot jaz. V bistvu ne najdem nobenih podatkov (razen kontrolne vsote iz "Nicka"). Moral sem začeti iz nič, vendar sem navdušen nad rezultatom.

Vem, da so podatki malce nejasni, če pa ste v enaki situaciji kot jaz, vam bom z veseljem pomagal.

-- Opozorilo / Posodobitev --- Čeprav je mogoče spremeniti nastavitve na AC-ju z izklopljeno enoto, sem ugotovil, da se zdi, da gre za krmiljenje Zone z njim. Veliko sem testiral z izklopljeno enoto in ugotovil sem, da se bodo območja pokazala kot neaktivna, toda ko enota deluje, se zdi, da lopute niso popolnoma zaprte (vendar tudi niso popolnoma odprte). Enoto sem ponastavil pri glavnem odklopniku in to je rešilo težavo. Ker menjava območij poteka le, ko je enota vklopljena, to ni bil problem

Posodobil sem tudi kodo za objavo (v MQTT) sprememb, ki prihajajo iz glavnega krmilnika in ne iz glavne enote. Tudi to bi lahko povzročilo težave, ker bo glavna enota poslala '0000' za cone (kar bi lahko bila tudi težava)

Posodobljena koda uvaja tudi nekatere časovne omejitve, ki poskušajo preprečiti, da bi arduino hkrati prenašal glavni in glavni enoti. Prepričan sem, da verjetno obstaja način, s katerim krmilnik sproži pošiljanje podatkov, na primer potegni nizko vrstico za Xms pred pošiljanjem, vendar ga še nisem odkril, če obstaja

Odkril sem, da bo glavna enota pošiljala podatke vsakih 60 sekund, glavni krmilnik pa vsakih 20 sekund. Koda poskuša ustaviti pošiljanje podatkov v 2 sekundah po prejemu podatkovnega paketa. Vendar se včasih glavna in glavna enota oddajata zelo blizu drug drugemu. To bo verjetno kmalu bolj izpopolnjeno. ------------------------------

** Lahko deluje na novejših enotah

*** Nekateri podatki, najdeni na mojih raziskovalnih potovanjih, kažejo, da bi Panasonicov kanalski razcep lahko uporabljal isti protokol. YMMV.

Priporočena: