فهرست مطالب:

هک کردن شکاف داکت ال جی برای اتوماسیون خانگی: 8 مرحله (همراه با تصاویر)
هک کردن شکاف داکت ال جی برای اتوماسیون خانگی: 8 مرحله (همراه با تصاویر)

تصویری: هک کردن شکاف داکت ال جی برای اتوماسیون خانگی: 8 مرحله (همراه با تصاویر)

تصویری: هک کردن شکاف داکت ال جی برای اتوماسیون خانگی: 8 مرحله (همراه با تصاویر)
تصویری: ویدیوهای جدید از دوربین‌های هک شده اوین با کلیپی از بند زنان 2024, نوامبر
Anonim
هک کردن LG Duct Split برای اتوماسیون خانگی
هک کردن LG Duct Split برای اتوماسیون خانگی

اول از همه - این یک هک شبیه سازی کنترل از راه دور مادون قرمز نیست. AC خاص من رابط کاربری قابل استفاده ای ندارد که برای هر نوع کنترلی غیر از کنترل های هوشمند نصب شده روی دیوار طراحی شده باشد.

من یک سیستم تقسیم معکوس LG Ducted در خانه دارم. متأسفانه در زمانی ساخته شد که اینترنت اشیا در لیست تولید کنندگان بالا نبود. من متوجه شدم که گزینه هایی برای کنترل "اصلی" وجود دارد ، اما اگرچه واحد زمانی که من برای اولین بار این کار را انجام دادم فقط 2 سال داشت ، تخته های انبساط بدون رنگ و قیمت ها به هر حال نجومی بودند. همانطور که افزونه "Wireless RF Remote" بود که خرید را بسیار آسان تر می کرد ، اما غیرممکن بود.

اگر انتخاب من بود ، ال جی نبود ، اما از آنجا که هنگام خرید در خانه نصب شد (و هزینه تعویض آن احتمالاً بیش از 10 هزار دلار خواهد بود) ، چیزی است که من باید با آن کنار بیایم.

هدف - قادر به کنترل AC از طریق MQTT برای اهداف اتوماسیون از طریق OpenHAB و IFTTT/دستیار Google

مرحله 1: رمزگشایی قالب داده

رمزگشایی قالب داده
رمزگشایی قالب داده
رمزگشایی قالب داده
رمزگشایی قالب داده

من این فرآیند را 4 سال پیش شروع کردم اما زیاد پیش نرفتم و نمی خواستم خطر آسیب رساندن به واحد را داشته باشم - به ویژه اینکه پیدا کردن قطعات برای آن تقریباً غیرممکن به نظر می رسد.

با پاره کردن کنترلر از دیوار ، 3 سیم پیدا کردم که به نظرم زمینی ، 12 ولت و "سیگنال" بود

ولتاژ سیگنال دهی در خط داده 12 ولت بود ، اما متوجه شدم که به نظر می رسد در مولتی متر (نوعی پالس روی خط) در نوسان است.

من نان را سوار یک مدار اصلی کردم تا یک جداکننده نوری را از طریق پین داده هدایت کنم و طرف دیگر ایزوله کننده اپتو را به عنوان ورودی روی کارت صدای رایانه شخصی خود متصل کردم و نسخه ضعیفی از خروجی محدوده (تصویر 1) دریافت کردم.

این تقریباً تا آنجا که من در آن زمان به دست آوردم - می دیدم چیزی در آنجا وجود دارد ، اما واقعاً نمی دانم چگونه آن را "رمزگشایی" کنم.

از زمانی که IoT Coffee Machine خود را فعال کردم ، علاقه جدیدی داشتم که این بار با کمی عزم بیشتر این کار را دوباره امتحان کنم.

من یافته های خود را در انجمن های EEVBlog ارسال کردم تا ببینم آیا ممکن است کسی بتواند چیزی را روشن کند و آیا شخص بزرگی به نام Ian به کمک من آمد - او آن را به گونه ای بیان کرد که کاملاً منطقی بود (عکس 2)

اساساً ، جریان داده 13 بایت "سریال استاندارد" است - 8 بیت داده ، یک بیت شروع و یک بیت توقف (بدون برابری) اما با سرعت بسیار پایین 104bps.

مرحله 2: عمیق تر به نظر برسید

عمیق تر به نظر می رسد
عمیق تر به نظر می رسد

بنابراین اکنون که ایده ای درباره نحوه قالب بندی داده ها داشتم ، به راهی نیاز داشتم تا بتوانم داده ها را به شیوه ای پویاتر بخوانم.

من یکی از کنترلرهای خود را از روی دیوار بیرون کشیدم و آن را از طریق یک دکمه تغییر سطح منطقی به یک آردوینو با یک طرح ساده وصل کردم تا 13 بایت داده را از طریق پورت سریال نرم افزاری تنظیم شده در 104bps بخوانم و چاپ کنم:

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, ** در واقع 12 بایت در اینجا

ما اقدام داشتیم!

با تغییر تنظیمات مختلف روی کنترلر ، من توانستم بایت های تغییر یافته را بررسی کنم:

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، فن MED 168، 67، 0، 0، 0، 192، 3، 31، 0، 0، 0، 0، 152، فن بالا

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، Mode FAN 168، 79، 0، 0، 0، 136، 10، 35، 0، 0، 0، 0، 249، حالت 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 ، حالت گرمایش 168 ، 7 ، 0 ، 0 ، 0 ، 136 ، 15 ، 34 ، 0 ، 0 ، 0 ، 0 ، 61 ، حالت 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 ، دمای 30

وقتی به صورت دودویی به آنها نگاه می کنید ، اعداد بسیار منطقی تر می شوند ، اما بایت 13 چگونه است؟ همه جا همه جا هست…

مرحله 3: نقشه برداری از آن

نقشه برداری از آن
نقشه برداری از آن

با آزمایش و خطا ، من توانستم بیت های مربوطه را در 13 بایت داده که برای انتقال آنها نیاز دارم تعیین کنم.

مرحله 4: دیوار آجری در پیش است

دیوار آجری در پیش است!
دیوار آجری در پیش است!
دیوار آجری در پیش است!
دیوار آجری در پیش است!
دیوار آجری در پیش است!
دیوار آجری در پیش است!

اینجاست که قضیه پیچیده شد. دو موانع برای غلبه بر من وجود داشت

الف) به نظر می رسد 13 بایت یک چک داده از داده هایی است که من باید به نحوی آنها را انجام دهم. ب) چگونه می توانم داده ها را در آن زمان منتقل کنم؟ فقط یک سیم است

مسئله "a" واقعاً آسان بود ، اما تصادفی محض بود که من موفق شدم از آن عبور کنم.

در آزمایشاتم ، من داده هایی را بررسی کردم:

این 13 بایت داده از جمله چک چک (اینجا در HEX به جای DEC) است.

وقتی در حال جستجوی اوراکل در Google بودم "چگونه مهندسی معکوس را معکوس کنم" با این صفحه در مورد مبادله پشته با شخص دیگری به نام نیک روبرو شدم که تقریباً همان چیزی را از من می پرسید ، اما نه تنها این ، آنها صحبت کردند در مورد یک کولر گازی و داده های آنها تقریباً مشابه فرمت من بود - آیا می تواند باشد ؟؟؟ در تمام جستجوهای من (در حدود 4 سال) ، هیچ فردی هیچ اطلاعاتی در مورد نحوه هک پروتکل در این کولرها ارسال نکرده است و من تصادفاً با شخصی روبرو می شوم که همین کار را با جستجوی چیزی تقریباً بی ربط انجام می دهد؟ این یک نعمت بود - او حتی ارسال کرد که آن را حل کرده است و راه حل این است: تمام بایت داده ها و سپس XOR را با "U" جمع کنید.

با استفاده از آن ، آن را به کد خود اضافه کردم تا محاسبه کنم که به نظر من جمع چک باید در مقایسه با آنچه در واقع بود ، باشد ، اما همه چیز اشتباه بود !!

همانطور که معلوم شد ، به نوعی اشتباه بود. وقتی شروع به بررسی اعداد به صورت دودویی کردم ، کاملاً منطقی بود.

پاسخ XOR با U همیشه 9 بیت داده (بیت نهم همیشه یک) را باز می گرداند اما بیت های دیگر درست بودند. من به سادگی بیت 9 را با گرفتن 256 از عدد بدست آمده حذف کردم و سپس مطابقت داشت !!

اگر این فرد نبود ، شاید هنوز سرم را می خاراندم. به او هم احترام می گذارم ، اما من نمی توانم با او تماس بگیرم - این اساساً تنها پست او در انجمن stackexchange بود. خوب ، ممنونم غریبه:)

چالش بعدی ایجاد مداری بود که به من اجازه می داد کنترلر موجود را شبیه سازی کنم. من شماتیک مربوط به مدار درایو (Pic1 و Pic 2) را ترسیم کردم ، اما برای من بسیار پیچیده به نظر می رسید که نیاز به بازتولید آن برای به دست آوردن خواسته ام دارم. بالاخره سیگنال را می خواندم. من یک روش بسیار ساده تر را انتخاب کردم - استفاده از arduino برای هدایت یک ایزوله کننده opto برای پایین کشیدن خط سیگنال 12 ولت در صورت نیاز.

من همچنین یک مدار ساده تر برای Rx طراحی کردم اما این آزمایش نشده است ، در نهایت برای سادگی به مبدل سطح پایبند بودم.

مرحله 5: کارکردن آن

هنگامی که مدار انتقال را به صورت نان بریدم ، و با یک قلب تند ، یک رشته (استاتیک) 12 بایت را خراب کردم ، جمع چک را محاسبه کردم و آردوینو فرمان را ارسال کرد - شگفت آور ، صفحه نمایش به روز شد! پیروزی!

آخرین آزمایش واقعی اضافه کردن آردوینو به BUS با 2 کنترلر دیگر برای یک آزمایش زنده واقعی بود و مطمئناً کار کرد.

بنابراین اکنون می توانم برای اتوبوس بخوانم و بنویسم ، اما فقط توانایی انجام این کار را نداشتم.

از آنجا که من تقریباً برای تمام اتوماسیون خانه خود از MQTT استفاده می کنم ، طبیعی بود که این یکسان باشد. من کد را در طول چند روز برای کنترل 4 عنصر اصلی AC نوشتم ، همچنین وضعیت موجود را بازخوانی کردم (از سایر ماژول های BUS)

هدف این بود که کد بر روی یک ماژول ESP8266 اجرا شود ، اما به نظر می رسد که ESP8266 قادر به تولید نرخ باود تا 104bps نیست. من مجبور شدم به یک آردوینو Uno معمولی با اترنت Wiznet بازگردم ، اما این کار سختی نبود زیرا رک comms من به معنای واقعی کلمه در طرف دیگر دیوار از یکی از کنترل کننده های AC قرار داشت.

کد کمی در همه جا وجود دارد اما باید خوانا باشد. من مشکلات زیادی با جلوگیری از خواندن خروجی کنترلر از سوی کنترل کننده داشتم ، اما همچنین تکرار کد مربوط به موضوعات منتشر شده از MQTT به تهویه مطبوع. اساساً ، یک حلقه بی نهایت ایجاد می کند. در نهایت ، برخی از پاکسازی بافر و تأخیر در پردازش کد پس از انتشار در MQTT ، مرتب شد.

پین های Rx ، Tx به AC به صورت 3 ، 4 کدگذاری شده اند ، اما اگر دوست دارید تغییر دهید

کد به گونه ای پیکربندی شده است که دستورات را به شرح زیر منتشر و قبول می کند:

ha/mod/5557/P 0/1 - Powerha/mod/5557/M 0/1/2/3/4 - حالت خنک ، Dehumidify ، Fan ، Auto ، Heatha/mod/5557/F 0/1/2 - فن کم ، med ، highha/mod/5557/Z یعنی 1111 برای همه مناطق در 1000 فقط برای منطقه 1 روشن.

** از کنترلر ، مناطق را نمی توان روی "0000" تنظیم کرد ، اما به نظر می رسد که اگر مقدار را صادر کنید ، به "1000" باز می گردد.

آخرین نسخه کد در GitHub Repo من موجود است:

مرحله 6: چیزی دائمی تر

چیزی دائمی تر
چیزی دائمی تر
چیزی دائمی تر
چیزی دائمی تر

من یک تخته نمونه اولیه آردوینو جمع کردم و تمام قطعات را همانطور که روی آنها نان سوار شده بودم نصب کردم.

مرحله 7: پیکربندی OpenHAB

فایل پیوست را برای موارد OpenHAB ، نقشه سایت و قوانین مشاهده کنید

این را با اتصال IFTTT OpenHab و Google Assistant/Home ترکیب کنید و دارای یک کنترل کننده صوتی بسیار قدرتمند و/یا "هوشمند" هستید که تقریباً از هر محصول تجاری موجود پیشی می گیرد!

مرحله 8: خلاصه

در نتیجه گیری - اگر شما یکی از افراد فقیر با سیستم تهویه مطبوع ال جی کمی قدیمی تر هستید ، تنها نیستید. هنوز امیدی به ما هست!

امیدوارم این کتاب آموزنده کسی را پیدا کند که به اندازه من به آن نیاز دارد. اساساً هیچ اطلاعاتی وجود ندارد که بتوانم پیدا کنم (به غیر از چک چک از "نیک"). من مجبور بودم از صفر شروع کنم ، اما از نتیجه بسیار راضی هستم.

اطلاعات کمی مبهم است اما من می دانم که اگر شما در وضعیت مشابه من باشید ، بیش از حد مایل به کمک هستم.

- احتیاط / به روز رسانی --- اگرچه ممکن است تنظیمات AC را با واحد خاموش تغییر دهید ، اما متوجه شده ام که وقتی به کنترل Zone می رسد ، به نظر می رسد که با آن خراب شده است. من آزمایش های زیادی را با دستگاه خاموش انجام دادم و متوجه شدم که مناطق غیرفعال نشان داده می شوند ، اما هنگامی که واحد کار می کند ، به نظر می رسد که دمپرها به طور کامل بسته نشده اند (اما به طور کامل نیز باز نشده اند). من دستگاه را در قطع کننده اصلی ریست کردم و این مسئله را حل کرد. از آنجا که فقط زمانی که واحد روشن است منطقه را تغییر می دهیم ، این مشکلی ایجاد نکرده است

من همچنین کد را برای انتشار فقط تغییرات (به MQTT) ناشی از کنترلر اصلی و نه واحد اصلی به روز کرده ام. بار دیگر ، این می تواند مشکلاتی ایجاد کند زیرا واحد اصلی '0000' را برای مناطق ارسال می کند (که ممکن است مشکل نیز باشد)

کد به روز شده همچنین برخی محدودیت های زمان بندی را برای جلوگیری از انتقال همزمان آردوینو با واحد اصلی و اصلی معرفی می کند. من مطمئن هستم که احتمالاً روشی وجود دارد که کنترل کننده برای شروع ارسال داده از آن استفاده می کند مانند پایین کشیدن خط برای Xms قبل از ارسال ، اما من هنوز آن را کشف نکرده ام

من دریافتم که واحد اصلی هر 60 ثانیه داده و کنترلر اصلی هر 20 ثانیه ارسال می کند. کد سعی می کند ارسال اطلاعات را در 2 ثانیه پس از دریافت بسته داده متوقف کند. با این حال ، گاهی اوقات واحد اصلی و اصلی بسیار نزدیک به یکدیگر منتقل می شوند. این احتمالاً به زودی اصلاح می شود.----------------------------

** ممکن است روی واحدهای جدیدتر کار کند

*** برخی از اطلاعات موجود در سفرهای تحقیقاتی من نشان می دهد که ممکن است اسپلیت داکت پاناسونیک از پروتکل یکسانی استفاده کند. YMMV

توصیه شده: