Talaan ng mga Nilalaman:

Pag-hack ng isang LG Ducted Split para sa Home Automation: 8 Hakbang (na may Mga Larawan)
Pag-hack ng isang LG Ducted Split para sa Home Automation: 8 Hakbang (na may Mga Larawan)

Video: Pag-hack ng isang LG Ducted Split para sa Home Automation: 8 Hakbang (na may Mga Larawan)

Video: Pag-hack ng isang LG Ducted Split para sa Home Automation: 8 Hakbang (na may Mga Larawan)
Video: Argon arc welding machine. Welder's aid. Fixer accessories 2024, Nobyembre
Anonim
Pag-hack ng isang LG Ducted Split para sa Home Automation
Pag-hack ng isang LG Ducted Split para sa Home Automation

Una sa lahat - Hindi ito ibang Infrared remote control na pagtulad sa hack. Ang aking partikular na AC ay walang magagamit na interface na dinisenyo para sa anumang uri ng kontrol maliban sa kasama na naka-mount na mga kontrol sa smart.

Mayroon akong isang LG Ducted reverse split system sa aking bahay. Sa kasamaang palad ito ay ginawa sa isang oras kung saan ang IoT ay hindi mataas sa anumang listahan ng mga tagagawa. Natuklasan kong mayroon itong ilang mga pagpipilian para sa kontrol ng 'master' ngunit kahit na ang yunit ay 2 taong gulang lamang sa aking unang pagtangka nito, ang mga board ng pagpapalawak ay unobtanium at ang mga presyo ay astronomiko pa rin. Tulad ng addon na 'Wireless RF Remote' na maaaring gawing mas madali ang mga bagay ngunit imposibleng bumili.

Kung naging mapagpipilian ko ito, hindi ito magiging isang LG ngunit dahil na-install ito sa bahay nang binili ko ito (at ang gastos sa kapalit ay malamang na higit sa $ 10k) ito ang dapat kong harapin.

Layunin - Upang makontrol ang AC sa pamamagitan ng MQTT para sa mga layunin ng awtomatiko sa pamamagitan ng OpenHAB at IFTTT / Google Assistant

Hakbang 1: Pag-decode ng Format ng Data

Pag-decode ng Format ng Data
Pag-decode ng Format ng Data
Pag-decode ng Format ng Data
Pag-decode ng Format ng Data

Sinimulan ko ang prosesong ito 4 taon na ang nakakaraan ngunit hindi napakalayo at ayaw ipagsapalaran na mapinsala ang yunit - Lalo na't ang mga bahagi para sa halos imposibleng makahanap.

Nakuha ang Controller sa pader Nakakita ako ng 3 mga wire na tinukoy kong maging Ground, 12v at 'signal'

Ang boltahe ng pagbibigay ng senyas sa linya ng data ay nasa 12v, ngunit napansin ko na tila nagbabagu-bago sa multimeter (ilang uri ng pulso sa linya).

Sumakay ako sa tinapay ng isang pangunahing circuit upang magmaneho ng isang opto isolator sa pamamagitan ng pin ng data at ikinonekta ang kabilang panig ng opto isolator bilang isang input sa sound card ng aking PC at nakakuha ng isang hindi magandang bersyon ng isang output output (Pic 1).

Ito ay tungkol sa hanggang sa nakuha ko sa oras na iyon - nakikita kong mayroong isang bagay doon ngunit hindi ko talaga alam kung paano ito 'decode'.

Mula nang mapagana ang aking Coffee Machine IoT, nagkaroon ako ng isang nai-refresh na interes na subukan itong muli na may kaunting pagpapasiya sa oras na ito.

Nai-post ko ang aking mga natuklasan sa mga forum ng EEVBlog upang makita kung ang isang tao ay maaaring makapagbigay ng ilang ilaw at isang mahusay na tao na nagngangalang Ian ang sumagip sa akin - Inilatag niya ito sa isang paraang ganap na magkaroon ng kahulugan (Larawan 2)

Talaga, ang stream ng data ay 13 bytes ng 'standard serial' - 8 data bits, isang start bit at one stop bit (walang pagkakapareho) ngunit sa isang napaka-mababang rate ng baud na 104bps.

Hakbang 2: Naghahanap ng Mas Malalim

Naghahanap ng Mas Malalim
Naghahanap ng Mas Malalim

Kaya't ngayon na mayroon akong ideya kung paano nai-format ang data, kailangan ko ng isang paraan upang mabasa ang data sa isang mas masiglang paraan.

Hinila ko ang isa sa aking mga tagakontrol sa dingding at isinabit ito sa pamamagitan ng shifter sa antas ng lohika sa isang Arduino na may isang simpleng sketch upang mabasa ang 13 bytes ng data sa pamamagitan ng software serial port na naka-configure sa 104bps at i-print ito:

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, ** Sa totoo lang 12 bytes dito

Nagkaroon kami ng aksyon!

Sa pamamagitan ng pagbabago ng iba't ibang mga setting sa controller, nagawa kong ehersisyo ang mga byte na nagbabago:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 08, 248, Fan LOW168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, Fan MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, Fan TAAS

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

Ang mga numero ay mas may katuturan kung titingnan mo ang mga ito sa binary ngunit ano ang nasa ika-13 byte ?? Nasa buong lugar ito …

Hakbang 3: Pagma-map Ito

Pagma-Mapa Ito
Pagma-Mapa Ito

Sa pamamagitan ng pagsubok at error, natukoy ko ang mga nauugnay na piraso sa 13 byte ng data na kakailanganin kong maipadala.

Hakbang 4: Bata na Wall sa Unahan

Ang brick wall sa unahan!
Ang brick wall sa unahan!
Ang brick wall sa unahan!
Ang brick wall sa unahan!
Ang brick wall sa unahan!
Ang brick wall sa unahan!

Dito naging komplikado. Mayroon akong dalawang hadlang upang mapagtagumpayan

a) Ang ika-13 byte ay lilitaw na maging isang checkum ng data na kailangan ko upang kahit papaano magtrabaho. b) Paano ko maipapadala ang data pagkatapos? Isa lang itong wire.

Ang isyu na 'a' ay naging TUNAY na madali, ngunit sa dalisay na pagkakataon ay nagawa kong malampasan ito.

Sa aking mga pagsubok, tumitingin ako sa data tulad ng: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A000000000000 A81200084000149C00000000E7 A83200084000149C0000000087 A85200084000149C00000000

Ito ang 13bytes ng data kabilang ang Checkum (dito sa HEX sa halip na DEC).

Kapag naghahanap ako ng orakulo na google sa 'kung paano i-reverse ang engineer ng isang tseke' Natagpuan ko ang pahinang ito sa stack exchange sa ibang tao sa pamamagitan ng pangalan ni Nick na humihiling ng halos katulad na bagay sa akin ngunit hindi lamang iyon, pinag-usapan nila tungkol sa isang air conditioner at ang kanilang data ay halos magkapareho ng format sa minahan - Maaaring ito ??? Sa lahat ng aking paghahanap (sa 4 o higit pang mga taon), hindi isang tao ang nag-post ng anumang impormasyon tungkol sa kung paano i-hack ang protocol sa mga aircon na ito at nagkataong madapa ako sa isang tao na gumagawa ng parehong bagay sa pamamagitan ng paghahanap para sa isang bagay na halos ganap na walang kaugnayan? Ito ay isang pagpapala - Nag-post pa nga siya na nagtrabaho niya at ang solusyon ay: Idagdag ang lahat ng mga Byte ng data at pagkatapos ay XOR sa "U".

Sa pamamagitan ng kamay na iyon ay idinagdag ko ito sa aking code upang makalkula kung ano ang naisip kong ang checkum ay dapat na kumpara sa kung ano talaga ito ngunit ang lahat ay MALI !!

Bilang ito ay naging, ito ay uri ng mali. Nang magsimula akong tumingin sa mga numero sa binary, ito ay may kumpletong kahulugan.

Ang tugon mula sa 'XOR kasama ang U' ay laging nagbalik ng 9 na piraso ng data (ang ika-9 na bit palaging isa) ngunit ang iba pang mga piraso ay tama. Inalis ko lamang ang ika-9 na bit sa pamamagitan ng pagkuha ng 256 mula sa nagresultang numero at pagkatapos ay tumugma ito !!

Kung hindi pa para sa indibidwal na ito, baka napakamot pa ako ng ulo. Hat din sa kanya ngunit hindi ko siya makontak - Iyon talaga ang kanyang nag-iisang post sa stackexchange forum. Well, salamat sa hindi kilalang tao:)

Ang susunod na hamon ay ang paggawa ng isang circuit na magpapahintulot sa akin na gayahin ang umiiral na controller. Na-map ko ang eskematiko para sa circuit ng drive (Pic1 at Pic 2) ngunit tila masyadong kumplikado para sa akin na kailangan itong kopyahin upang makuha ang nais ko. Binabasa ko na ang signal kung tutuusin. Nag-opt ako para sa isang mas simpleng pamamaraan - Paggamit ng arduino upang maghimok ng isang opto isolator upang hilahin ang linya ng signal ng 12v na mababa tulad ng kinakailangan.

Dinisenyo ko rin ang isang mas simpleng circuit para sa Rx ngunit hindi ito nasubukan, natapos ko ang pagdikit sa antas ng converter para sa pagiging simple.

Hakbang 5: Ginagawa Ito.

Sa sandaling nagkaroon ako ng transmisyon ng circuitboard ng board, at may isang puso ng karera, nag-ayos ako ng isang (static) na string na 12 bytes, kinalkula ang tsekum at ipadala sa arduino ang utos - Kahanga-hanga, na-update ang display !!! Manalo ka!

Ang pangwakas na aktwal na pagsubok ay upang idagdag ang aking arduino sa BUS kasama ang 2 iba pang mga tagakontrol para sa isang tunay na live na pagsubok at sigurado na, gumana ito.

Kaya't ngayon ay makakabasa ako at Sumulat sa bus ngunit wala lang akong kakayahang magawa ito nang simple.

Dahil ginagamit ko ang MQTT halos eksklusibo para sa lahat ng aking pag-aautomat sa bahay, natural na magiging pareho ito. Isinulat ko ang code sa loob ng maraming araw upang makontrol ang 4 pangunahing mga elemento ng AC, na binabasa din ang dati nang katayuan (mula sa iba pang mga module sa BUS)

Ang balak ay magkaroon ng code na tumatakbo sa isang module na ESP8266 subalit tila na ang ESP8266 ay hindi makagawa ng isang baud rate na mas mababa sa 104bps. Kailangan kong bumalik sa isang pangkaraniwang Arduino Uno kasama ang Wiznet ethernet ngunit hindi iyon mahirap dahil ang aking comms rack ay literal na nasa kabilang panig ng dingding mula sa isa sa mga AC controlers.

Ang code ay medyo sa buong lugar ngunit dapat mabasa. Nagkaroon ako ng maraming mga problema sa pagpigil sa controller mula sa pagbabasa ng sarili nitong output ngunit paulit-ulit din ang code na ito ay sariling nai-publish na mga paksa na natanggap mula sa MQTT pabalik sa aircon. Talaga, lilikha ito ng isang walang katapusang loop. Sa huli, ang ilang pag-clear ng buffer at pagkaantala sa pagproseso ng code pagkatapos na mai-publish sa MQTT ay naayos ito.

Ang Rx, Tx pin sa AC ay naka-code bilang 3, 4 ngunit baguhin kung nais mo

Ang code ay naka-configure upang mai-publish at tanggapin ang mga utos tulad ng:

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 - Fan mababa, med, highha / mod / 5557 / Z ibig sabihin 1111 para sa lahat ng mga zone sa 1000 para sa zone 1 lamang.

** Mula sa controller, ang mga zone ay hindi maitatakda sa '0000' subalit tila na kung maglabas ka ng halaga, babalik ito sa '1000'.

Ang pinakabagong bersyon ng code ay magagamit mula sa aking GitHub Repo:

Hakbang 6: Isang bagay na Mas Permanenteng

Bagay na Mas Permanent
Bagay na Mas Permanent
Bagay na Mas Permanent
Bagay na Mas Permanent

Natipon ko ang isang arduino prototype board at na-install ang lahat ng mga bahagi habang pinapasakay ako sa kanila ng tinapay.

Hakbang 7: OpenHAB Config

Tingnan ang nakalakip na file para sa OpenHAB Item, sitemap at mga patakaran

Pagsamahin ito sa IFTTT OpenHab binding at Google Assistant / Home at mayroon kang isang napakalakas na kontroladong boses at / o 'Smart' aircon na lumalagpas sa halos lahat ng magagamit na komersyal na produkto!

Hakbang 8: Buod

Sa Konklusyon - Kung ikaw ay isa sa mga mahihirap na kaluluwa na may isang medyo mas matandang LG ducted split air conditioner, hindi ka nag-iisa. May pag-asa pa para sa amin!

Inaasahan kong ang napagtuturoang ito ay makahanap ng isang tao na nangangailangan nito tulad ng ginawa ko. Karaniwan WALANG impormasyon na maaari kong makita (maliban sa checkum mula sa 'Nick'). Kailangan kong magsimula mula sa simula ngunit natutuwa ako sa resulta.

Ang impormasyon ay isang malabo na alam ko ngunit kung ikaw ay nasa parehong sitwasyon tulad ng sa akin, mas handa akong tumulong.

-- Pag-iingat / Pag-update --- Bagaman posible na baguhin ang mga setting sa AC gamit ang unit na Off, nalaman ko na pagdating sa control ng Zone ay tila gumugulo dito. Nagawa ko ang maraming pagsubok sa unit off at nalaman ko na ang mga zone ay ipapakita bilang hindi aktibo ngunit kapag ang unit ay tumatakbo, tila na ang mga dampers ay hindi ganap na sarado (ngunit hindi rin ganap na buksan). I-reset ang yunit sa pangunahing breaker at nalutas nito ang isyu. Dahil ang pagpapalit lamang ng mga zone kapag ang yunit ay nakabukas, hindi ito naging problema

Na-update ko rin ang code upang mai-publish lamang (sa MQTT) ang mga pagbabago na nagmula sa master controller at hindi sa pangunahing yunit. Sa sandaling muli, maaari itong maging sanhi ng mga problema dahil ang pangunahing yunit ay magpapadala ng '0000' para sa mga zone (na maaaring maging problema)

Ipinakikilala din ng na-update na code ang ilang mga hadlang sa oras upang subukang pigilan ang arduino mula sa paglipat sa parehong oras ng master at pangunahing yunit. Sigurado ako na marahil ay may isang pamamaraan na ginagamit ng controller upang simulan ang isang ipadala ang data tulad ng paghila ng linya na mababa para sa Xms bago ipadala ngunit hindi ko pa ito natuklasan kung mayroon

Natuklasan ko na ang pangunahing yunit ay magpapadala ng data tuwing 60 segundo at ang master controller ay nagpapadala bawat 20 segundo. Sinusubukan ng code na itigil ang pagpapadala ng data sa loob ng 2 segundo ng pagtanggap ng packet ng data. Gayunpaman, kung minsan ang master at pangunahing yunit ay nagpapadala ng napakalapit sa bawat isa. Ito ay marahil ay mapapino nang mas lalong madaling panahon

** Maaaring gumana sa mas bagong mga yunit

*** Ang ilang impormasyon na natagpuan sa aking paglalakbay sa pagsasaliksik ay ipinahiwatig na ang Panasonic ducted split ay maaaring gumamit ng parehong protocol. YMMV.

Inirerekumendang: