Isi kandungan:

Meretas LG Duct Split untuk Automasi Rumah: 8 Langkah (dengan Gambar)
Meretas LG Duct Split untuk Automasi Rumah: 8 Langkah (dengan Gambar)

Video: Meretas LG Duct Split untuk Automasi Rumah: 8 Langkah (dengan Gambar)

Video: Meretas LG Duct Split untuk Automasi Rumah: 8 Langkah (dengan Gambar)
Video: Основные ошибки при возведении перегородок из газобетона #5 2024, November
Anonim
Meretas LG Duct Split untuk Automasi Rumah
Meretas LG Duct Split untuk Automasi Rumah

Pertama sekali - Ini bukan hack emulasi kawalan jauh Inframerah yang lain. AC tertentu saya tidak mempunyai antara muka yang boleh digunakan yang dirancang untuk jenis kawalan selain kawalan pintar yang dipasang di dinding.

Saya mempunyai sistem pemecahan terbalik LG Duct di rumah saya. Malangnya ia dibuat pada masa di mana IoT tidak tinggi dalam senarai pengeluar mana pun. Saya dapati ia mempunyai beberapa pilihan untuk kawalan 'master' tetapi walaupun unit ini baru berusia 2 tahun pada masa saya mula-mula mencuba ini, papan pengembangannya adalah unobtanium dan harganya tetap astronomi. Seperti addon 'Wireless RF Remote' yang akan menjadikan barang menjadi lebih mudah tetapi mustahil untuk dibeli.

Sekiranya ini menjadi pilihan saya, ini bukan LG tetapi kerana ia dipasang di rumah ketika saya membelinya (dan kos penggantiannya mungkin melebihi $ 10k) itulah yang harus saya hadapi.

Matlamat - Untuk dapat mengawal AC melalui MQTT untuk tujuan automasi melalui OpenHAB dan IFTTT / Google Assistant

Langkah 1: Menyahkod Format Data

Menyahkod Format Data
Menyahkod Format Data
Menyahkod Format Data
Menyahkod Format Data

Saya memulakan proses ini 4 tahun yang lalu tetapi tidak sampai terlalu jauh dan tidak mahu mengambil risiko merosakkan unit - Terutama kerana bahagian untuknya kelihatan hampir mustahil untuk dijumpai.

Merobek pengawal dari dinding saya menjumpai 3 wayar yang saya tetapkan sebagai Ground, 12v dan 'signal'

Voltan isyarat pada baris data berada pada 12v, tetapi saya perhatikan bahawa ia kelihatan berubah-ubah pada multimeter (semacam denyutan pada talian).

Saya menggunakan sirkuit asas untuk menggerakkan isolator opto melalui pin data dan menghubungkan bahagian lain dari isolator opto sebagai input pada kad suara PC saya dan mendapat keluaran skop versi yang buruk (Gambar 1).

Ini adalah sejauh yang saya dapat pada masa itu - saya dapat melihat ada sesuatu di sana tetapi tidak benar-benar tahu bagaimana 'menyahkod' itu.

Sejak menghidupkan IoT Mesin Kopi saya, saya berminat untuk mencuba sekali lagi dengan sedikit tekad kali ini.

Saya menyiarkan penemuan saya di forum EEVBlog untuk melihat apakah seseorang mungkin dapat memberi penerangan dan seorang lelaki hebat bernama Ian datang untuk menyelamatkan saya - Dia meletakkannya dengan cara yang benar-benar masuk akal (Gambar 2)

Pada dasarnya, aliran data adalah 13 bait 'standard bersiri' - 8 bit data, satu bit permulaan dan satu bit berhenti (tanpa pariti) tetapi pada kadar baud yang sangat rendah iaitu 104bps.

Langkah 2: Melihat Lebih Dalam

Melihat Lebih Dalam
Melihat Lebih Dalam

Oleh kerana sekarang saya mempunyai idea bagaimana data diformat, saya memerlukan kaedah untuk dapat membaca data dengan cara yang lebih dinamik.

Saya menarik salah satu alat kawalan saya dari dinding dan menyambungkannya melalui pergeseran tahap logik ke Arduino dengan lakaran sederhana untuk membaca 13 bait data melalui port siri perisian yang dikonfigurasi pada 104bps dan mencetaknya:

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, ** Sebenarnya 12 bait di sini

Kami mempunyai tindakan!

Dengan mengubah pelbagai tetapan pada pengawal, saya dapat menyelesaikan byte yang berubah:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, Kipas RENDAH 168, 35, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 248, Kipas MED 168, 67, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 152, Kipas TINGGI

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, Mod 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, Mod HEAT 168, 7, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 61, Mod 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

Angka-angka itu lebih masuk akal apabila anda melihatnya dalam bentuk binari tetapi bagaimana dengan bait ke-13 ?? Di semua tempat …

Langkah 3: Memetakannya

Memetakannya
Memetakannya

Melalui percubaan dan kesilapan, saya dapat menentukan bit yang relevan dalam 13 bait data yang perlu saya hantar.

Langkah 4: Dinding Bata Ke Depan

Dinding Bata Di Hadapan!
Dinding Bata Di Hadapan!
Dinding Bata Di Hadapan!
Dinding Bata Di Hadapan!
Dinding Bata Di Hadapan!
Dinding Bata Di Hadapan!

Di sinilah ia menjadi rumit. Saya mempunyai dua rintangan untuk diatasi

a) Byte ke-13 nampaknya merupakan checksum data yang saya perlukan untuk menyelesaikannya. b) Bagaimana saya menghantar data itu? Ia hanya satu wayar.

Masalah 'a' ternyata sangat mudah, tetapi secara kebetulan saya berjaya melaluinya.

Dalam ujian saya, saya melihat data seperti: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A83200084000000000000000000000000000000000000000000000000000000000

Ini adalah 13 byte data termasuk checksum (di sini dalam HEX dan bukannya DEC).

Semasa saya mencari oracle di google mengenai 'bagaimana untuk membalikkan checksum', saya menjumpai halaman ini di pertukaran pertukaran dengan orang lain dengan nama Nick yang menanyakan perkara yang hampir sama dengan saya tetapi bukan hanya itu, mereka bercakap mengenai penghawa dingin dan data mereka adalah format yang hampir sama dengan saya - Mungkinkah ??? Dalam semua carian saya (dalam 4 atau lebih tahun), tidak ada seorang pun yang menyiarkan maklumat mengenai cara menggodam protokol pada penghawa dingin ini dan saya kebetulan tersandung pada seseorang yang melakukan perkara yang sama dengan mencari sesuatu yang hampir sama sekali tidak berkaitan? Itu adalah berkat - Dia bahkan menyatakan bahawa dia berjaya dan penyelesaiannya adalah: Tambahkan semua Byte data dan kemudian XOR dengan "U".

Dengan itu, saya menambahkannya ke dalam kod saya untuk mengira apa yang saya fikir seharusnya checksum vs yang sebenarnya tetapi semuanya SALAH !!

Ternyata, itu agak salah. Ketika saya mula melihat nombor dalam binari, itu masuk akal.

Sambutan dari 'XOR with U' selalu mengembalikan 9 bit data (bit ke-9 selalu satu) tetapi bit yang lain betul. Saya hanya mengeluarkan bit ke-9 dengan mengambil 256 dari nombor yang dihasilkan dan kemudian ia sepadan !!

Sekiranya bukan untuk individu ini, saya mungkin masih menggaru kepala saya. Topik juga kepadanya tetapi saya tidak dapat menghubunginya - Itu pada dasarnya adalah satu-satunya catatannya di forum stackexchange. Baiklah, terima kasih orang asing:)

Cabaran seterusnya adalah membuat litar yang membolehkan saya mensimulasikan pengawal yang ada. Saya memetakan skema untuk litar pemacu (Pic1 dan Pic 2) tetapi nampaknya terlalu rumit untuk saya perlu menghasilkan semula untuk mendapatkan apa yang saya mahukan. Lagipun saya sudah membaca isyarat. Saya memilih kaedah yang lebih mudah - Menggunakan arduino untuk mendorong isolator opto untuk menarik garis isyarat 12v rendah seperti yang diperlukan.

Saya juga merancang rangkaian yang lebih mudah untuk Rx tetapi ini belum diuji, saya akhirnya berpegang pada penukar tahap untuk kesederhanaan.

Langkah 5: Menjayakannya

Sebaik sahaja saya mempunyai rangkaian transmisi yang dilapisi roti, dan dengan hati yang laju, saya mengatur rentetan (statik) 12 bait, mengira checksum dan meminta arduino menghantar arahan - Hebatnya, paparannya diperbaharui !!! Menang!

Ujian sebenar yang terakhir adalah untuk menambahkan arduino saya ke BUS dengan 2 pengawal lain untuk ujian langsung dan cukup yakin, ia berjaya.

Jadi sekarang saya dapat membaca dan menulis ke bas tetapi tidak mempunyai kemampuan untuk dapat melakukannya dengan mudah.

Oleh kerana saya menggunakan MQTT hampir secara eksklusif untuk semua automasi rumah saya, adalah wajar bahawa ini akan sama. Saya menulis kod selama beberapa hari untuk mengawal 4 elemen utama AC, juga membaca semula status yang ada (dari modul lain di BUS)

Tujuannya adalah agar kod berjalan pada modul ESP8266 namun nampaknya ESP8266 tidak dapat menghasilkan kadar baud serendah 104bps. Saya terpaksa kembali ke Arduino Uno generik dengan Wiznet ethernet tetapi itu tidak sukar kerana rak koms saya benar-benar berada di sisi lain dinding dari salah satu pengawal AC.

Kodnya sedikit di seluruh tempat tetapi harus dibaca. Saya mempunyai banyak masalah dengan menghalang pengawal membaca outputnya sendiri tetapi juga mengulangi kodnya sendiri topik yang diterbitkan yang diterima dari MQTT kembali ke udara. Pada asasnya, ia akan membuat gelung tanpa batas. Pada akhirnya, beberapa penyingkiran penyangga dan kelewatan dalam pemprosesan kod setelah diterbitkan ke MQTT membuatnya disusun.

Rx, pin Tx ke AC dikodkan sebagai 3, 4 tetapi ubah jika anda mahu

Kod ini dikonfigurasi untuk menerbitkan dan menerima perintah seperti itu:

ha / mod / 5557 / P 0/1 - Powerha / mod / 5557 / M 0/1/2/3/4 - Mod Cool, Dehumidify, Fan, Auto, Heatha / mod / 5557 / F 0/1/2 - Kipas rendah, med, highha / mod / 5557 / Z iaitu 1111 untuk semua zon pada 1000 untuk hanya zon 1 pada.

** Dari pengawal, zon tidak dapat ditetapkan ke '0000' namun sepertinya jika anda mengeluarkan nilainya, ia akan kembali ke '1000'.

Versi terbaru kod boleh didapati dari GitHub Repo saya:

Langkah 6: Sesuatu yang Lebih Kekal

Sesuatu yang Lebih Kekal
Sesuatu yang Lebih Kekal
Sesuatu yang Lebih Kekal
Sesuatu yang Lebih Kekal

Saya mengumpulkan papan prototaip arduino dan memasang semua bahagian kerana saya memasangkan roti.

Langkah 7: OpenHAB Config

Lihat fail terlampir untuk Item, peta laman dan peraturan OpenHAB

Gabungkan ini dengan pengikatan IFTTT OpenHab dan Pembantu / Rumah Google dan anda mempunyai pendawaian suara yang sangat kuat dan / atau 'Pintar' udara yang melebihi hampir setiap produk yang tersedia secara komersial!

Langkah 8: Ringkasan

Sebagai Kesimpulan - Sekiranya anda adalah salah satu jiwa yang lemah dengan pendingin hawa berpisah LG yang sedikit lebih tua, anda tidak bersendirian. Masih ada harapan untuk kita!

Saya harap arahan ini dapat menemukan seseorang yang memerlukannya seperti saya. Pada dasarnya TIADA maklumat yang dapat saya temui (selain daripada checksum dari 'Nick'). Saya terpaksa bermula dari awal tetapi saya gembira dengan hasilnya.

Maklumatnya agak kabur yang saya tahu tetapi jika anda berada dalam keadaan yang sama seperti saya, saya akan lebih bersedia untuk membantu.

- Awas / Kemas kini --- Walaupun mungkin untuk mengubah tetapan pada AC dengan unit Mati, saya dapati bahawa ketika datang ke kontrol Zona sepertinya berantakan dengannya. Saya melakukan banyak ujian dengan mematikan unit dan saya mendapati bahawa zon akan kelihatan tidak aktif tetapi ketika unit beroperasi, nampaknya peredam tidak ditutup sepenuhnya (tetapi juga tidak dibuka sepenuhnya). Saya menetapkan semula unit pada pemutus utama dan ini menyelesaikan masalahnya. Oleh kerana hanya menukar zon ketika unit dihidupkan, ini tidak menjadi masalah

Saya juga telah mengemas kini kod untuk hanya menerbitkan perubahan (ke MQTT) yang datang dari pengawal induk dan bukan unit utama. Sekali lagi, ini boleh menyebabkan masalah kerana unit utama akan menghantar '0000' untuk zon (yang mungkin juga menjadi masalah)

Kod yang dikemas kini juga memperkenalkan beberapa kekangan masa untuk cuba mengelakkan arduino daripada dihantar pada masa yang sama dari master dan unit utama. Saya yakin mungkin ada kaedah yang digunakan pengawal untuk memulakan penghantaran data seperti menarik garis rendah untuk Xms sebelum menghantar tetapi saya belum menjumpainya sekiranya ada

Saya dapati bahawa unit utama akan menghantar data setiap 60 saat dan pengawal induk menghantar setiap 20 saat. Kod ini cuba menghentikan penghantaran data dalam masa 2 saat setelah menerima paket data. Walau bagaimanapun, kadangkala unit induk dan unit utama saling berdekatan. Ini mungkin akan diperbaiki lagi tidak lama lagi.----------------------------

** Boleh berfungsi pada unit yang lebih baru

*** Sebilangan maklumat yang terdapat dalam perjalanan penyelidikan saya menunjukkan bahawa Panasonic duct split mungkin menggunakan protokol yang sama. YMMV.

Disyorkan: