„LG Ducked Split“įsilaužimas į namų automatizavimą: 8 žingsniai (su nuotraukomis)
„LG Ducked Split“įsilaužimas į namų automatizavimą: 8 žingsniai (su nuotraukomis)
Anonim
Įsilaužimas į „LG Ducted Split“namų automatizavimui
Įsilaužimas į „LG Ducted Split“namų automatizavimui

Visų pirma - tai nėra dar vienas infraraudonųjų spindulių nuotolinio valdymo pulto emuliacijos įsilaužimas. Mano konkrečiame kintamajame nėra tinkamos sąsajos, skirtos bet kokiam valdymui, išskyrus pridėtus sieninius išmaniuosius valdiklius.

Mano namuose yra „LG Ducted“atvirkštinio padalijimo sistema. Deja, jis buvo sukurtas tuo metu, kai daiktų internetas nebuvo aukštas bet kurio gamintojo sąraše. Aš sužinojau, kad jis turi keletą „pagrindinio“valdymo galimybių, tačiau, nors pirmą kartą bandydamas įrenginį, jam buvo tik 2 metai, išplėtimo plokštės buvo netobulos, o kainos vistiek buvo astronominės. Kaip ir „Wireless RF Remote“priedas, kuris būtų daug palengvinęs, bet neįsigijęs.

Jei tai būtų mano pasirinkimas, tai nebūtų LG, bet kadangi jis buvo įdiegtas namuose, kai jį nusipirkau (o jo pakeitimo kaina greičiausiai viršytų 10 000 USD), tai turėjau susidoroti.

Tikslas - Gebėti valdyti kintamąją srovę per MQTT automatizavimo tikslais per „OpenHAB“ir IFTTT/„Google“padėjėją

1 žingsnis: iššifruokite duomenų formatą

Duomenų formato dekodavimas
Duomenų formato dekodavimas
Duomenų formato dekodavimas
Duomenų formato dekodavimas

Aš pradėjau šį procesą prieš 4 metus, bet labai toli nenuvažiavau ir nenorėjau rizikuoti sugadinti įrenginį - juolab, kad jo dalių rasti beveik neįmanoma.

Nuplėšdamas valdiklį nuo sienos, radau 3 laidus, kuriuos nustatiau kaip įžeminimą, 12v ir „signalą“

Signalinė įtampa duomenų linijoje buvo 12 voltų, tačiau pastebėjau, kad ji, atrodo, svyruoja multimetre (tam tikri impulsai linijoje).

Aš duona įlipau į pagrindinę grandinę, kad galėčiau valdyti optinį izoliatorių per duomenų kaištį, ir prijungiau kitą opto izoliatoriaus pusę kaip įvestį kompiuterio garso plokštėje ir gavau prastą apimties išvesties versiją (1 pav.).

Tai maždaug tiek, kiek aš tuo metu gavau - mačiau, kad ten kažkas yra, bet tikrai nežinojau, kaip jį „iššifruoti“.

Nuo tada, kai įjungiau kavos aparato IoT, šį kartą norėjau dar kartą pabandyti tai padaryti šiek tiek ryžtingiau.

Aš paskelbiau savo išvadas EEVBlog forumuose, norėdamas sužinoti, ar kas nors galėtų nušviesti, ir man į pagalbą atėjo puikus vaikinas Ianas - jis išdėstė tai visiškai suprantama (2 pav.)

Iš esmės duomenų srautas yra 13 baitų „standartinio serijinio“- 8 duomenų bitai, vienas pradžios bitas ir vienas sustojimo bitas (be pariteto), tačiau LABAI žemas 104 bitų perdavimo greitis.

2 žingsnis: atrodykite giliau

Žvelgiant giliau
Žvelgiant giliau

Taigi dabar, kai turėjau idėją, kaip buvo suformatuoti duomenys, man reikėjo būdo, kad galėčiau dinamiškiau skaityti duomenis.

Aš ištraukiau vieną iš savo valdiklių nuo sienos ir per loginį lygio perjungiklį prijungiau jį prie „Arduino“su paprastu eskizu, kad galėčiau nuskaityti 13 baitų duomenų per programinės įrangos nuoseklųjį prievadą, sukonfigūruotą esant 104 bps, ir atsispausdinti:

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, ** Tiesą sakant, čia yra 12 baitų

Turėjome veiksmų!

Tada pakeisdamas įvairius valdiklio nustatymus galėjau išsiaiškinti, kokie baitai keičiasi:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, ventiliatorius LOW168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, ventiliatorius MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, ventiliatorius AUKŠTAS

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

168, 15, 0, 0, 0, 136, 3, 34, 0, 0, 0, 0, 49, temperatūra 18 168, 15, 0, 0, 0, 136, 4, 34, 0, 0, 0, 0, 48, temperatūra 19 168, 15, 0, 0, 0, 136, 5, 34, 0, 0, 0, 0, 51, temperatūra 20 168, 15, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 37, 30 temperatūra

Skaičiai yra daug prasmingesni, kai žiūrite į juos dvejetainiu būdu, bet kas yra su 13 baitu? Visur yra…

3 žingsnis: nustatykite žemėlapį

Kartografavimas
Kartografavimas

Bandymų ir klaidų dėka man pavyko nustatyti atitinkamus bitus 13 baitų duomenų, kuriuos man reikės perduoti.

4 žingsnis: plytų siena į priekį

Plytų siena priešais!
Plytų siena priešais!
Plytų siena priešais!
Plytų siena priešais!
Plytų siena priešais!
Plytų siena priešais!

Čia ir tapo sudėtinga. Turėjau įveikti dvi kliūtis

a) 13 baitas atrodė kaip kontrolinė duomenų, kuriuos man reikėjo kažkaip išsiaiškinti, suma. b) Kaip tada perduoti duomenis? Tai tik vienas laidas.

Klausimas „a“pasirodė tikrai lengvas, tačiau tai atsitiko visiškai atsitiktinai.

Bandydama aš žiūrėjau į tokius duomenis:

Tai yra 13 baitų duomenų, įskaitant kontrolinę sumą (čia HEX, o ne DEC).

Kai aš ieškojau „Google“orakulo „kaip pakeisti kontrolinę sumą“, aš aptikau šį puslapį, susijusį su keitimu, ir kažkas kitas, vardu Nickas, klausė beveik to paties, kaip ir aš, bet ne tik, kad jie kalbėjo apie oro kondicionierių ir jų duomenys buvo beveik identiško formato kaip mano - ar gali būti ??? Per visą mano paiešką (per maždaug ketverius metus) ne vienas asmuo nebuvo paskelbęs jokios informacijos apie tai, kaip nulaužti šių oro kondicionierių protokolą, ir aš tiesiog atsitiktinai užklydau, kai kažkas daro tą patį, ieškodamas beveik visiškai nesusijusių dalykų? Tai buvo palaima - jis netgi paskelbė, kad tai išsiaiškino, ir sprendimas buvo toks: pridėkite visus baitus duomenų ir tada XOR su „U“.

Turėdamas tai rankoje, pridėjau jį prie savo kodo, norėdamas apskaičiuoti, kokia, mano manymu, turėtų būti kontrolinė suma, palyginti su tuo, kas iš tikrųjų buvo, bet viskas buvo neteisinga !!

Kaip paaiškėja, tai buvo kažkaip neteisinga. Kai pradėjau žiūrėti skaičius dvejetainiu būdu, tai buvo visiškai prasminga.

Atsakymas iš „XOR su U“visada grąžino 9 bitus duomenų (9 -asis bitas visada buvo vienas), tačiau kiti bitai buvo teisingi. Aš tiesiog pašalinau 9 bitą, paimdamas 256 iš gauto skaičiaus ir tada jis atitiko !!

Jei ne šis asmuo, aš vis tiek krapščiau galvą. Skrybėlės jam taip pat, bet negaliu su juo susisiekti - tai iš esmės buvo vienintelis jo pranešimas stackexchange forume. Na, ačiū, nepažįstamasis:)

Kitas iššūkis buvo sukurti grandinę, kuri leistų man imituoti esamą valdiklį. Aš suplanavau pavaros grandinės schemą („Pic1“ir „Pic 2“), bet man atrodė pernelyg sudėtinga, kad turėčiau ją atkurti, kad gaučiau tai, ko norėjau. Galų gale aš jau skaičiau signalą. Aš pasirinkau daug paprastesnį metodą - naudojant „arduino“vairuoti opto izoliatorių, kad prireikus būtų sumažinta 12 V signalo linija.

Aš taip pat suprojektavau paprastesnę „Rx“grandinę, tačiau tai nėra išbandyta, todėl paprastumo dėlei prilipau prie lygio keitiklio.

5 žingsnis: kad jis veiktų

Kai man buvo perduota perdavimo grandinė, ir aš, lenktyniaujanti širdimi, sukūriau (statinę) 12 baitų eilutę, apskaičiavau kontrolinę sumą ir paprašiau arduino atsiųsti komandą - nuostabu, ekranas atnaujintas !!! Laimėk!

Paskutinis tikrasis bandymas buvo pridėti mano arduino prie autobuso kartu su kitais 2 valdikliais, kad būtų galima atlikti tiesioginį testą, ir tikrai, jis veikė.

Taigi dabar galėjau skaityti ir rašyti į autobusą, bet man tiesiog trūko sugebėjimo tai padaryti paprasčiausiai.

Kadangi MQTT naudoju beveik vien tik savo namų automatizavimui, buvo natūralu, kad tai bus tas pats. Aš parašiau kodą per kelias dienas, kad galėčiau valdyti 4 pagrindinius kintamosios srovės elementus, taip pat perskaičiau esamą būseną (iš kitų BUS modulių)

Tikslas buvo, kad kodas veiktų ESP8266 modulyje, tačiau atrodo, kad ESP8266 nesugeba sukurti tik 104 bitų spartos. Turėjau grįžti prie bendro „Arduino Uno“su „Wiznet Ethernet“, bet tai nebuvo sunku, nes mano komiksų lentynėlė tiesiogine to žodžio prasme buvo kitoje sienos pusėje nuo vieno iš kintamosios srovės valdiklių.

Kodas yra šiek tiek visur, bet turėtų būti įskaitomas. Turėjau daug problemų neleisdamas valdikliui skaityti savo išvesties, bet ir pakartoti savo paties paskelbtą kodą, gautą iš MQTT atgal į oro kondicionierių. Iš esmės tai sukurtų begalinę kilpą. Galų gale, kai kurie buferio išvalymai ir vėlavimas apdoroti kodą po paskelbimo MQTT jį sutvarkė.

Rx, Tx kištukai prie kintamosios srovės yra koduojami kaip 3, 4, bet pakeiskite, jei norite

Kodas sukonfigūruotas skelbti ir priimti komandas kaip tokias:

ha/mod/5557/P 0/1 - „Powerha/mod“/5557/M 0/1/2/3/4 - režimas „Cool“, sausinimas, ventiliatorius, automatinis, „Heatha“/mod/5557/F 0/1/2 - Ventiliatorius žemas, vidutinis, aukštas/mod/5557/Z, ty 1111 visoms zonoms, esant 1000, tik 1 zonai įjungus.

** Iš valdiklio zonų negalima nustatyti į „0000“, tačiau atrodo, kad jei išrašysite vertę, ji grįš į „1000“.

Naujausią kodo versiją galite rasti mano „GitHub Repo“:

6 žingsnis: kažkas pastovesnio

Kažkas pastovesnio
Kažkas pastovesnio
Kažkas pastovesnio
Kažkas pastovesnio

Aš surinkau „arduino“prototipo lentą ir sumontavau visas dalis, kai turėjau jas apkalti duona.

7 veiksmas: „OpenHAB Config“

Žiūrėkite pridėtą „OpenHAB“elementų, svetainės schemos ir taisyklių failą

Sujunkite tai su IFTTT „OpenHab“įrišimu ir „Google Assistant/Home“ir turėsite labai galingą balsu valdomą ir (arba) „išmanųjį“oro kondicionierių, kuris pranoksta beveik kiekvieną parduodamą produktą!

8 žingsnis: Santrauka

Apibendrinant - jei esate viena iš vargšų sielų, turinti šiek tiek senesnį LG ortakio oro kondicionierių, nesate vienas. Mums dar yra vilties!

Tikiuosi, kad ši pamoka suras žmogų, kuriam to reikia taip pat, kaip man. Iš esmės nėra jokios informacijos, kurią galėčiau rasti (išskyrus „Nick“kontrolinę sumą). Turėjau pradėti nuo nulio, bet esu labai patenkinta rezultatu.

Žinau, kad informacija yra šiek tiek miglota, bet jei esate tokioje pačioje situacijoje kaip aš, aš būsiu labiau pasirengęs padėti.

- Atsargiai / atnaujinti --- Nors galima keisti kintamosios srovės nustatymus, kai įrenginys išjungtas, pastebėjau, kad, kai kalbama apie zonos valdymą, atrodo, kad jis su juo sutrinka. Atlikau daug bandymų, kai įrenginys buvo išjungtas, ir sužinojau, kad zonos bus rodomos kaip neaktyvios, tačiau kai įrenginys veikia, atrodo, kad sklendės nėra visiškai uždarytos (bet ir ne visiškai atidarytos). Iš naujo nustatiau įrenginį prie pagrindinio pertraukiklio ir tai išsprendė problemą. Kadangi zonos keičiamos tik įjungus įrenginį, tai nebuvo problema

Aš taip pat atnaujinau kodą, kad paskelbčiau tik (MQTT) pakeitimus, kurie gaunami iš pagrindinio valdiklio, o ne iš pagrindinio įrenginio. Dar kartą tai gali sukelti problemų, nes pagrindinis įrenginys atsiųs „0000“zonoms (o tai taip pat galėjo būti problema)

Atnaujintas kodas taip pat įveda tam tikrus laiko apribojimus, siekdamas neleisti „arduino“perduoti pagrindinio ir pagrindinio įrenginio tuo pačiu metu. Esu tikras, kad greičiausiai yra metodas, kurį valdiklis naudoja duomenų siuntimui inicijuoti, pvz., Prieš siunčiant Xms žemą liniją, bet dar neatradau, jei yra

Aš sužinojau, kad pagrindinis įrenginys siunčia duomenis kas 60 sekundžių, o pagrindinis valdiklis - kas 20 sekundžių. Kodas bando sustabdyti duomenų siuntimą per 2 sekundes nuo duomenų paketo gavimo. Tačiau kartais pagrindinis ir pagrindinis įrenginys perduoda labai arti vienas kito. Greičiausiai tai bus patikslinta greičiau.----------------------------

** Gali dirbti su naujesniais įrenginiais

*** Kai kuri informacija, rasta mano tyrimų kelionėse, parodė, kad „Panasonic“ortakių padalijimas gali naudoti tą patį protokolą. YMMV.

Rekomenduojamas: