Mündəricat:

Ev avtomatlaşdırılması üçün LG kanallı bölünməsini sındırmaq: 8 addım (şəkillərlə)
Ev avtomatlaşdırılması üçün LG kanallı bölünməsini sındırmaq: 8 addım (şəkillərlə)

Video: Ev avtomatlaşdırılması üçün LG kanallı bölünməsini sındırmaq: 8 addım (şəkillərlə)

Video: Ev avtomatlaşdırılması üçün LG kanallı bölünməsini sındırmaq: 8 addım (şəkillərlə)
Video: LG Smart televizorda Azerbaycan ve Türk kanallarının yıgılması#azerspace #turksat42e #turksat #kanal 2024, Noyabr
Anonim
Ev avtomatlaşdırılması üçün LG kanallı bölünməsini sındırmaq
Ev avtomatlaşdırılması üçün LG kanallı bölünməsini sındırmaq

Əvvəla - Bu başqa bir infraqırmızı uzaqdan idarə emulyasiyası deyil. Xüsusi AC -nin, divara quraşdırılmış ağıllı idarəetmələrdən başqa hər hansı bir nəzarət üçün nəzərdə tutulmuş heç bir istifadəçi interfeysi yoxdur.

Evimdə LG Ducted tərs split sistemi var. Təəssüf ki, IoT -nin heç bir istehsalçı siyahısında yüksək olmadığı bir vaxtda edildi. "Usta" nəzarəti üçün bəzi variantların olduğunu kəşf etdim, amma ilk dəfə cəhd etdiyim zaman cihazın cəmi 2 yaşı olsa da, genişləndirmə lövhələri unobtanium idi və qiymətlər hər halda astronomik idi. Alınması çox asan, lakin mümkün olmayan 'Kabelsiz RF Uzaqdan' addonu olduğu kimi.

Mənim seçimim olsaydı, LG olmazdı, amma satın aldığım zaman evdə quraşdırıldığından (və əvəzinin qiyməti 10 min dolları keçə bilər) mənimlə məşğul olmalı idim.

Məqsəd - OpenHAB və IFTTT/Google Assistant vasitəsilə avtomatlaşdırma məqsədi ilə AC -ni MQTT vasitəsi ilə idarə edə bilmək.

Addım 1: Məlumat Formatının Kodunun Açılması

Məlumat formatının deşifr edilməsi
Məlumat formatının deşifr edilməsi
Məlumat formatının deşifr edilməsi
Məlumat formatının deşifr edilməsi

Bu prosesi 4 il əvvəl başladım, amma çox da uzağa getmədim və qurğunun zədələnməsi riskini almaq istəmədim - Xüsusilə hissələri tapmaq demək olar ki, qeyri -mümkün görünür.

Nəzarətçini divardan yıxaraq, Toprak, 12v və 'siqnal' olaraq təyin etdiyim 3 tel tapdım

Məlumat xəttindəki siqnal gərginliyi 12v idi, amma multimetrdə (xətdə bir növ nəbzlərin) dalğalandığını hiss etdim.

Çörək, məlumat pinindən bir opto izolyatoru idarə etmək üçün əsas bir dövrə oturdum və opto izolyatorun digər tərəfini kompüterimin səs kartına giriş olaraq bağladım və əhatə dairəsinin zəif bir versiyasına sahib oldum (Şəkil 1).

Bu, o vaxt əldə etdiyim qədərdir - orada bir şey olduğunu görə bilərdim, amma həqiqətən "deşifr etməyi" bilmirdim.

Qəhvə maşını IoT -ni işə saldıqdan sonra, bu dəfə bir az daha qətiyyətlə yenidən sınamaq marağım təzələndi.

EEVBlog forumlarında kiminsə işıq tuta biləcəyini və Ian adlı böyük bir oğlanın xilas olmağa gəldiyini görmək üçün tapıntılarımı yerləşdirdim - Tamamilə məntiqli bir şəkildə izah etdi (Şəkil 2)

Əsasən, məlumat axını 13 bayt 'standart serial' təşkil edir - 8 məlumat biti, bir başlanğıc biti və bir dayanma biti (paritet yoxdur), lakin çox aşağı sürət sürətində 104bps.

Addım 2: Daha Dərin Görünür

Daha Dərin Görünür
Daha Dərin Görünür

İndi məlumatların necə formatlandığı barədə bir fikrim olduğu üçün məlumatları daha dinamik bir şəkildə oxuya biləcəyim bir yola ehtiyacım var idi.

Nəzarətçilərimdən birini divardan çəkdim və 104 bit sürətində konfiqurasiya edilmiş proqram portu vasitəsilə 13 bayt məlumatı oxumaq və çap etmək üçün sadə bir eskizlə bir məntiq səviyyəsi dəyişdiricisi ilə Arduinoya bağladım:

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, ** Əslində burada 12 bayt

Əlimizdə idi!

Sonra nəzarətçinin müxtəlif parametrlərini dəyişdirərək dəyişən baytları işlədə bildim:

168, 3, 0, 0, 0, 192, 3, 31, 0, 0, 0, 0, 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, Yüksək Fan

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, 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, COOL 168, 83, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 225, ISITMA rejimi 168, 7, 0, 0, 0, 136, 15, 34, 0, 0, 0, 0, 61, DH rejimi

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

Nömrələr ikili olaraq baxdığınızda daha çox məna kəsb edir, amma 13 -cü baytla nə əlaqəsi var? Hər yer var…

Addım 3: Xəritəçəkmə

Xəritəçəkmə
Xəritəçəkmə

Sınaq və səhv yolu ilə, ötürə bilməyim lazım olan 13 bayt məlumatdakı müvafiq bitləri təyin edə bildim.

Addım 4: Qarşıda Kərpic Divarı

Qarşıda Kərpic Divarı!
Qarşıda Kərpic Divarı!
Qarşıda Kərpic Divarı!
Qarşıda Kərpic Divarı!
Qarşıda Kərpic Divarı!
Qarşıda Kərpic Divarı!

İşin mürəkkəbləşdiyi yer budur. Öhdəsindən gəlmək üçün iki maneəm var idi

a) 13 -cü bayt, birtəhər işlətməyim üçün lazım olan məlumatların bir cəmidir. b) Veriləri necə ötürürəm? Yalnız bir teldən ibarətdir.

'A' məsələsi həqiqətən də asan oldu, amma sırf təsadüf nəticəsində keçmişəm.

Testlərimdə belə məlumatlara baxdım: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C000000000070080080080070080070080070080000000070080000000070000000000700000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000

Bu, checksum daxil olmaqla 13 bitlik məlumatdır (burada DEC yerinə HEX -də).

Google -da "bir checksum -u necə tərsinə mühəndis etmək olar" mövzusunda oracle axtararkən, bu səhifəni Nick adıyla gedən başqa birisi ilə mənimlə eyni şeyi soruşan yığıncaq mübadiləsində gördüm, təkcə bu deyil bir kondisioner və onların məlumatları mənimki ilə demək olar ki, eyni formatda idi - Ola bilərmi ??? Bütün axtarışlarımda (təxminən 4 il ərzində) heç kim bu kondisionerlərdə protokolu necə sındırmaqla bağlı heç bir məlumat yerləşdirməmişdi və demək olar ki, tamamilə əlaqəsi olmayan bir şey axtarıb eyni şeyi edən biri ilə rastlaşdım? Bu bir xeyir idi - Hətta işlətdiyini də yazdı və həlli belə oldu: Məlumatların bütün baytlarını və sonra XOR -u "U" ilə əlavə edin.

Əlimdə, checksumun əslində nə olduğunu düşündüyümü hesablamaq üçün koduma əlavə etdim, amma hamısı səhv idi!

Göründüyü kimi, bir növ səhv idi. Nömrələrə ikili olaraq baxmağa başladığımda, bu, tamamilə məntiqli idi.

'XOR with U' cavabı həmişə 9 bit məlumat (9 -cu bit həmişə bir) qaytardı, amma digər bitlər doğru idi. Nəticədə əldə edilən rəqəmdən 256 alaraq 9 -cu biti sildim və sonra uyğun gəldi!

Bu fərd olmasaydı, hələ də başımı cızırdım. Şapka da ona aiddir, amma onunla əlaqə saxlaya bilmirəm - Bu, əsasən onun stackexchange forumundakı yeganə yazısı idi. Yaxşı, qəribə təşəkkür edirəm:)

Növbəti çətinlik, mövcud nəzarətçini simulyasiya etməyimə imkan verən bir dövrə düzəltmək idi. Sürücü dövrəsinin sxemini (Pic1 və Pic 2) xəritələdim, amma istədiklərimi əldə etmək üçün onu yenidən yaratmağım çox mürəkkəb görünürdü. Artıq siqnal oxuyurdum. Daha sadə bir üsul seçdim - 12v siqnal xəttini lazım olduğu qədər aşağı çəkmək üçün arduino istifadə edərək opto izolyatoru idarə edin.

Rx üçün daha sadə bir dövrə də hazırladım, amma bu sınaqdan keçirilmədi, sadəlik üçün səviyyə çeviricisinə yapışdım.

Addım 5: Çalışdırın

Bir dəfə ötürücü sxemini taxtaya taxdım və bir yarış ürəyi ilə 12 baytdan ibarət (statik) bir simli bağladım, cəmi hesabladım və arduinoya əmr göndərdim - Təəccüblüdür ki, ekran yeniləndi !!! Qazan!

Son faktiki test, arduino -nu real bir canlı test üçün digər 2 nəzarətçi ilə BUS -a əlavə etmək idi və kifayət qədər əminliklə işlədi.

İndi avtobusda oxuya və yaza bilərdim, amma bunu sadəcə bacarmaq qabiliyyətim yox idi.

MQTT -ni demək olar ki, bütün ev avtomatlaşdırma sistemim üçün istifadə etdiyim üçün bunun eyni olacağı təbii idi. AC -nin 4 əsas elementini idarə etmək üçün kodu bir neçə gün ərzində yazdım, eyni zamanda mövcud vəziyyəti oxudum (BUS -dakı digər modullardan)

Niyyət, ESP8266 modulunda işləyən koda sahib olmaq idi, lakin ESP8266 -nın 104 bit / s qədər aşağı bir sürət əldə edə bilmədiyi görünür. Wiznet ethernet ilə ümumi bir Arduino Uno -ya qayıtmaq məcburiyyətində qaldım, amma kompressor rəfim AC nəzarətçilərindən birindən divarın digər tərəfində olduğu üçün çətin deyildi.

Kod hər yerdə bir qədərdir, ancaq oxunaqlı olmalıdır. Nəzarətçinin öz çıxışını oxumasını maneə törətməklə yanaşı, MQTT -dən kondisionerə göndərdiyi öz nəşr etdiyi mövzuları təkrarlamaqla da bir çox problemim oldu. Əsasən, sonsuz bir döngə yaradardı. Sonda, MQTT -də yayımlandıqdan sonra bəzi tampon təmizlənməsi və kodun işlənməsindəki gecikmələr onu sıraladı.

AC -yə Rx, Tx pinləri 3, 4 olaraq kodlanır, ancaq isterseniz dəyişdirin

Kod, əmrləri dərc etmək və qəbul etmək üçün qurulmuşdur:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - Sərin Mod, Nəm Alma, Fan, Avtomatik, Heatha/mod/5557/F 0/1/2 - Fan aşağı, med, highha/mod/5557/Z yəni 1.1111 bütün zonalar üçün yalnız 1. zona üçün.

** Nəzarətçidən zonalar '0000' olaraq təyin edilə bilməz, ancaq dəyər verərsəniz '1000' ə dönər.

Kodun son versiyasını GitHub Repo -dan əldə edə bilərsiniz:

Addım 6: Daha daimi bir şey

Daha daimi bir şey
Daha daimi bir şey
Daha daimi bir şey
Daha daimi bir şey

Arduino prototip lövhəsini topladım və çörək taxtası taxdığım üçün bütün hissələri quraşdırdım.

Addım 7: OpenHAB Konfiqurasiyası

OpenHAB maddələri, sayt xəritəsi və qaydalar üçün əlavə edilmiş fayla baxın

Bunu IFTTT OpenHab bağlayıcı və Google Assistant/Home ilə birləşdirin və demək olar ki, satışda olan hər bir məhsulu aşan çox güclü səsli və/və ya 'Ağıllı' kondisioneriniz var!

Addım 8: Xülasə

Nəticə - Bir az köhnə LG kanallı split kondisioneri olan kasıb ruhlardan birisənsə, tək deyilsən. Bizə hələ də ümid var!

Ümid edirəm ki, bu öyrədici mənim kimi ehtiyac duyduğu birini tapacaq. Tapa biləcəyim heç bir məlumat yoxdur ("Nick" dən alınan məbləğdən başqa). Sıfırdan başlamalı idim, amma nəticəyə heyranam.

Məlumat bir qədər qeyri -müəyyəndir, amma mənimlə eyni vəziyyətdə olsanız, kömək etməkdən daha çox istəyərəm.

- Diqqət / Yeniləmə --- AC qurğusunu söndürmə vahidi ilə dəyişdirmək mümkün olsa da, Zona idarəçiliyinə gəldikdə onunla qarışıq göründüyünü gördüm. Cihazı söndürməklə bir çox sınaq keçirdim və gördüm ki, zonalar hərəkətsiz kimi görünəcək, amma qurğu işləyərkən damperlərin tam bağlanmadığı görünür (lakin tam açılmamışdır). Cihazı əsas açarda sıfırladım və bu problemi həll etdi. Cihaz işləyərkən yalnız zonalar dəyişdirildiyindən bu problem olmadı

Mən də kodu əsas vahiddən deyil, əsas nəzarətçidən gələn dəyişiklikləri dərc etmək üçün (MQTT -ə) yenilədim. Bir daha, bu problem yarada bilər, çünki əsas bölmə zonalar üçün '0000' göndərəcək (bu da problem ola bilərdi)

Yenilənmiş kod, arduino -nun ana və əsas qurğunun eyni vaxtda ötürülməsinin qarşısını almaq üçün bəzi vaxt məhdudiyyətləri təqdim edir. Əminəm ki, nəzarətçinin göndərmədən əvvəl Xms üçün xətti aşağı çəkmək kimi bir məlumat göndərməyi başlatmaq üçün istifadə etdiyi bir üsul var, amma varsa hələ tapmamışam

Əsas bölmənin hər 60 saniyədə bir məlumat göndərəcəyini və hər 20 saniyədə bir ana nəzarətçinin göndərdiyini kəşf etdim. Kod, məlumat paketini aldıqdan sonra 2 saniyə ərzində məlumatların göndərilməsini dayandırmağa çalışır. Ancaq bəzən ana və əsas qurğu bir -birinə çox yaxın ötürülür. Çox güman ki, bu, daha tez işlənəcək.----------------------------

** Yeni qurğular üzərində işləyə bilər

*** Araşdırma səyahətlərimdə tapılan bəzi məlumatlar Panasonic kanallı bölünmənin eyni protokoldan istifadə edə biləcəyini göstərdi. YMMV.

Tövsiyə: