جدول المحتويات:

قرصنة LG Ducted Split لأتمتة المنازل: 8 خطوات (بالصور)
قرصنة LG Ducted Split لأتمتة المنازل: 8 خطوات (بالصور)

فيديو: قرصنة LG Ducted Split لأتمتة المنازل: 8 خطوات (بالصور)

فيديو: قرصنة LG Ducted Split لأتمتة المنازل: 8 خطوات (بالصور)
فيديو: LG MINI SPLIT COMPRESSOR TROUBLESHOOTING, PLUS MAIN PCB FUSE HACK. 2024, شهر نوفمبر
Anonim
قرصنة LG Ducted Split لأتمتة المنزل
قرصنة LG Ducted Split لأتمتة المنزل

بادئ ذي بدء - هذا ليس قرصنة أخرى لمحاكاة جهاز التحكم عن بعد بالأشعة تحت الحمراء. لا يحتوي مكيف الهواء الخاص بي على واجهة قابلة للاستخدام مصممة لأي نوع من التحكم بخلاف أدوات التحكم الذكية المثبتة على الحائط.

لدي نظام الانقسام العكسي LG Ducted في منزلي. لسوء الحظ ، تم صنعه في وقت لم يكن فيه إنترنت الأشياء متقدمًا في أي قائمة مصنّعة. اكتشفت أن لديها بعض الخيارات للتحكم "الرئيسي" ولكن على الرغم من أن الوحدة كانت تبلغ من العمر عامين فقط في الوقت الذي حاولت فيه ذلك لأول مرة ، فإن لوحات التوسيع كانت خالية من الأوبتنيوم وكانت الأسعار فلكية على أي حال. كما هو الحال مع الملحق 'Wireless RF Remote' الذي كان سيجعل الأمور أسهل كثيرًا ولكن من المستحيل شراؤها.

لو كان هذا هو خياري ، فلن يكون LG ولكن نظرًا لأنه تم تثبيته في المنزل عند شرائه (ومن المحتمل أن تزيد تكلفة الاستبدال عن 10 آلاف دولار) ، فهذا ما كان علي التعامل معه.

الهدف - أن تكون قادرًا على التحكم في التيار المتردد عبر MQTT لأغراض الأتمتة عبر OpenHAB و IFTTT / مساعد Google

الخطوة 1: فك تشفير تنسيق البيانات

فك تنسيق البيانات
فك تنسيق البيانات
فك تنسيق البيانات
فك تنسيق البيانات

لقد بدأت هذه العملية منذ 4 سنوات ولكني لم أذهب بعيدًا ولم أرغب في المخاطرة بإتلاف الوحدة - خاصة وأن قطع الغيار الخاصة بها تبدو شبه مستحيلة.

تمزيق وحدة التحكم عن الحائط ، وجدت 3 أسلاك حددت أنها أرضية و 12 فولت و "إشارة"

كان جهد الإشارة على خط البيانات عند 12 فولت ، لكنني لاحظت أنه يبدو أنه يتقلب على المتر المتعدد (نوع من النبضات على الخط).

لقد صعدت إلى دائرة أساسية لقيادة المعزل البصري عبر دبوس البيانات وقمت بتوصيل الجانب الآخر من المعزل البصري كمدخل على بطاقة الصوت بجهاز الكمبيوتر وحصلت على نسخة رديئة من إخراج النطاق (صورة 1).

كان هذا بقدر ما وصلت إليه في ذلك الوقت - كان بإمكاني رؤية شيء ما هناك ولكن لم أكن أعرف حقًا كيفية "فك ترميزه".

منذ تمكين IoT لماكينة القهوة ، كان لدي اهتمام متجدد بتجربة ذلك مرة أخرى بعزم أكبر هذه المرة.

لقد قمت بنشر النتائج التي توصلت إليها في منتديات EEVBlog لمعرفة ما إذا كان شخص ما قد يكون قادرًا على إلقاء بعض الضوء وقد جاء رجل عظيم اسمه إيان لإنقاذي - لقد وضعه بطريقة منطقية تمامًا (صورة 2)

أساسًا ، دفق البيانات هو 13 بايت من "التسلسل القياسي" - 8 بتات بيانات ، وبت بدء واحد وبت توقف واحد (بدون تماثل) ولكن بمعدل باود منخفض جدًا يبلغ 104 بت في الثانية.

الخطوة الثانية: النظر بشكل أعمق

نظرة أعمق
نظرة أعمق

والآن بعد أن أصبحت لدي فكرة عن كيفية تنسيق البيانات ، كنت بحاجة إلى طريقة لأتمكن من قراءة البيانات بطريقة أكثر ديناميكية.

لقد سحبت إحدى وحدات التحكم الخاصة بي من الحائط وقمت بتوصيلها عبر مفتاح تبديل مستوى منطقي إلى Arduino برسم بسيط لقراءة 13 بايت من البيانات عبر المنفذ التسلسلي للبرنامج الذي تم تكوينه بسرعة 104 بت في الثانية وطباعته:

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 ، مروحة LOW168 ، 35 ، 0 ، 0 ، 0 ، 192 ، 3 ، 31 ، 0 ، 0 ، 0 ، 0 ، 248 ، مروحة ميد 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 ، مروحة الوضع 168 ، 79 ، 0 ، 0 ، 0 ، 136 ، 10 ، 35 ، 0 ، 0 ، 0 ، 0 ، 249 ، الوضع التلقائي 168 ، 67 ، 0 ، 0 ، 0 ، 136 ، 3 ، 35 ، 0 ، 0 ، 0 ، 0 ، 204 ، الوضع البارد 168 ، 83 ، 0 ، 0 ، 0 ، 136 ، 15 ، 34 ، 0 ، 0 ، 0 ، 0 ، 225 ، الوضع HEAT 168 ، 7 ، 0 ، 0 ، 0 ، 136 ، 15 ، 34 ، 0 ، 0 ، 0 ، 61 ، الوضع DH

168 ، 15 ، 0 ، 0 ، 0 ، 136 ، 3 ، 34 ، 0 ، 0 ، 0 ، 0 ، 49 ، درجة الحرارة 18168 ، 15 ، 0 ، 0 ، 0 ، 136 ، 4 ، 34 ، 0 ، 0 ، 0 ، 0 ، 48 ، درجة الحرارة 19168 ، 15 ، 0 ، 0 ، 0 ، 136 ، 5 ، 34 ، 0 ، 0 ، 0 ، 0 ، 51 ، درجة الحرارة 20168 ، 15 ، 0 ، 0 ، 0 ، 136 ، 15 ، 34 ، 0 ، 0 ، 0 ، 0 ، 37 ، درجة الحرارة 30

تبدو الأرقام أكثر منطقية عندما تنظر إليها بالثنائي ولكن ما هو البايت الثالث عشر ؟؟ كل شيء في كل مكان …

الخطوة 3: رسم الخرائط

رسم الخرائط بها
رسم الخرائط بها

من خلال التجربة والخطأ ، تمكنت من تحديد البتات ذات الصلة في 13 بايت من البيانات التي سأحتاجها لأتمكن من إرسالها.

الخطوة 4: جدار من الطوب للأمام

جدار القرميد أمامك!
جدار القرميد أمامك!
جدار القرميد أمامك!
جدار القرميد أمامك!
جدار القرميد أمامك!
جدار القرميد أمامك!

هذا هو المكان الذي أصبح فيه معقدًا. كان لدي عقبتان يجب التغلب عليهما

أ) يبدو أن البايت الثالث عشر عبارة عن مجموع اختباري للبيانات التي أحتاجها للعمل بطريقة ما. ب) كيف يمكنني نقل البيانات بعد ذلك؟ إنه سلك واحد فقط.

اتضح أن المشكلة "أ" سهلة حقًا ، ولكن من قبيل المصادفة البحتة أنني تمكنت من تجاوزها.

في اختباراتي ، كنت أبحث في بيانات مثل: A802000000040F61000000004B A81200004004169A00000000FB A81200004004159A00000000F8 A81200004004149A00000000E5 A81200084000149C00000000E7 A83200084000149C0000000087 A852000A84000149

هذا هو 13 بايت من البيانات بما في ذلك المجموع الاختباري (هنا في HEX بدلاً من DEC).

عندما كنت أبحث في oracle الذي هو google حول "كيفية إجراء هندسة عكسية لمجموع اختباري" ، صادفت هذه الصفحة في تبادل المكدس مع شخص آخر باسم Nick يسأل عن نفس الشيء تمامًا مثلي ولكن ليس هذا فقط ، لقد تحدثوا حول مكيف هواء وكانت بياناتهم متطابقة تقريبًا مع تنسيق لي - هل يمكن أن يكون ؟؟؟ في كل بحثي (خلال 4 سنوات أو نحو ذلك) ، لم ينشر أي شخص أي معلومات حول كيفية اختراق البروتوكول الخاص بمكيفات الهواء هذه ، وقد صادفت شخصًا يفعل نفس الشيء من خلال البحث عن شيء غير ذي صلة تقريبًا؟ لقد كانت نعمة - حتى أنه نشر أنه نجح في حلها وكان الحل هو: إضافة كل بايت من البيانات ثم XOR بـ "U".

مع ذلك ، أضفته إلى الكود الخاص بي لحساب ما اعتقدت أنه يجب أن يكون المجموع الاختباري مقابل ما كان عليه بالفعل ولكنه كان خطأً كله !!

كما اتضح ، كان نوعًا من الخطأ. عندما بدأت في النظر إلى الأرقام في النظام الثنائي ، كان الأمر منطقيًا تمامًا.

كانت الاستجابة من 'XOR with U' تُرجع دائمًا 9 بتات من البيانات (9 بت دائمًا واحدة) ولكن البتات الأخرى كانت صحيحة. لقد قمت ببساطة بإزالة الجزء التاسع من خلال أخذ 256 من الرقم الناتج ثم مطابقته !!

لولا هذا الشخص ، لربما كنت لا أزال أخدش رأسي. القبعات له أيضًا ولكن لا يمكنني الاتصال به - كان هذا في الأساس مشاركته الوحيدة في منتدى stackexchange. حسنًا ، شكرًا أيها الغريب:)

كان التحدي التالي هو إنشاء دائرة تسمح لي بمحاكاة وحدة التحكم الحالية. لقد رسمت المخطط التخطيطي لدائرة القيادة (Pic1 و Pic 2) ولكن بدا الأمر معقدًا للغاية بالنسبة لي لأحتاج إلى إعادة إنتاجه للحصول على ما أريد. كنت أقرأ الإشارة بالفعل بعد كل شيء. لقد اخترت طريقة أبسط بكثير - باستخدام اردوينو لقيادة معزل بصري لسحب خط إشارة 12 فولت منخفضًا حسب الحاجة.

لقد صممت أيضًا دائرة أبسط لـ Rx ولكن هذا لم يتم اختباره ، وانتهى بي الأمر بالالتزام بمحول المستوى من أجل البساطة.

الخطوة 5: إنجاحها

بمجرد أن أضع دائرة الإرسال على اللوح ، وبنبض متسارع ، قمت بتشويه سلسلة (ثابتة) من 12 بايت ، وحسبت المجموع الاختباري وجعل اردوينو يرسل الأمر - بشكل مثير للدهشة ، تم تحديث الشاشة !!! يفوز!

كان الاختبار الفعلي النهائي هو إضافة اردوينو الخاص بي إلى BUS مع وحدتي تحكم أخريين لإجراء اختبار مباشر حقيقي وبالتأكيد نجح الأمر.

حتى الآن يمكنني القراءة والكتابة إلى الحافلة ولكني كنت أفتقر إلى القدرة على القيام بذلك ببساطة.

نظرًا لأنني أستخدم MQTT بشكل حصري تقريبًا لجميع أتمتة المنزل ، كان من الطبيعي أن يكون هذا هو نفسه. لقد كتبت الكود على مدار عدة أيام للتحكم في العناصر الأربعة الرئيسية للتيار المتردد ، وكذلك قراءة الحالة الحالية (من الوحدات الأخرى الموجودة في BUS)

كان القصد من تشغيل الكود على وحدة ESP8266 ، ولكن يبدو أن ESP8266 غير قادر على إنتاج معدل باود منخفض يصل إلى 104 بت في الثانية. اضطررت إلى العودة إلى Arduino Uno عام مع Wiznet ethernet ولكن ذلك لم يكن صعبًا لأن رف الاتصالات الخاص بي كان حرفياً على الجانب الآخر من الجدار من إحدى وحدات التحكم في التيار المتردد.

الرمز موجود في كل مكان ولكن يجب أن يكون مقروءًا. لقد واجهت الكثير من المشاكل مع منع وحدة التحكم من قراءة إخراجها الخاص ولكن أيضًا تكرار الكود الذي تم استلامه من الموضوعات المنشورة الخاصة به من MQTT إلى aircon. في الأساس ، ستنشئ حلقة لا نهائية. في النهاية ، تم فرز بعض عمليات مسح المخزن المؤقت والتأخير في معالجة الكود بعد النشر على MQTT.

يتم ترميز دبابيس Rx و Tx في التيار المتردد على أنها 3 ، 4 ولكن يتم تغييرها إذا أردت

تم تكوين الكود لنشر الأوامر وقبولها على هذا النحو:

ha / mod / 5557 / P 0/1 - Powerha / mod / 5557 / M 0/1/2/3/4 - وضع Cool ، إزالة الرطوبة ، مروحة ، تلقائي ، Heatha / mod / 5557 / F 0/1/2 - مروحة منخفضة ، متوسطة ، عالية / mod / 5557 / Z أي 1111 لجميع المناطق على 1000 فقط للمنطقة 1 وما فوق.

** من وحدة التحكم ، لا يمكن ضبط المناطق على "0000" ولكن يبدو أنك إذا قمت بإصدار القيمة ، فسوف تعود إلى "1000".

يتوفر أحدث إصدار من الكود من GitHub Repo الخاص بي:

الخطوة 6: شيء أكثر ديمومة

شيء أكثر ديمومة
شيء أكثر ديمومة
شيء أكثر ديمومة
شيء أكثر ديمومة

جمعت نموذجًا أوليًا للوحة اردوينو وقمت بتثبيت جميع الأجزاء حيث قمت بتجهيزها بالخبز.

الخطوة 7: OpenHAB Config

انظر الملف المرفق لعناصر OpenHAB وخريطة الموقع والقواعد

قم بدمج هذا مع رابط IFTTT OpenHab و Google Assistant / Home وستحصل على جهاز تحكم صوتي قوي للغاية و / أو مكيف هواء "ذكي" يتفوق تقريبًا على كل منتج متوفر تجاريًا!

الخطوة 8: الملخص

في الختام - إذا كنت من الفقراء الذين يمتلكون مكيف هواء سبليت من إل جي أقدم قليلاً ، فأنت لست وحدك. لا يزال هناك أمل بالنسبة لنا!

آمل أن تجد هذه التعليمات شخصًا يحتاجها بقدر ما فعلت. لا توجد معلومات يمكنني العثور عليها (بخلاف المجموع الاختباري من "Nick"). كان علي أن أبدأ من الصفر لكني سعيد بالنتيجة.

المعلومات غامضة إلى حد ما أعرفه ، لكن إذا كنت في نفس الموقف الذي كنت عليه ، فسأكون أكثر من راغب في المساعدة.

تنبيه / تحديث - على الرغم من أنه من الممكن تغيير الإعدادات على مكيف الهواء مع إيقاف تشغيل الوحدة ، فقد وجدت أنه عندما يتعلق الأمر بالتحكم في المنطقة ، يبدو أنه يعبث بها. لقد أجريت الكثير من الاختبارات مع إيقاف تشغيل الوحدة ووجدت أن المناطق ستظهر على أنها غير نشطة ولكن عندما تعمل الوحدة ، يبدو أن المخمدات ليست مغلقة تمامًا (ولكن ليست مفتوحة بالكامل أيضًا). أعدت ضبط الوحدة عند القاطع الرئيسي وهذا حل المشكلة. نظرًا لتغيير المناطق فقط عند تشغيل الوحدة ، لم تكن هذه مشكلة

لقد قمت أيضًا بتحديث الكود لنشر التغييرات (إلى MQTT) التي تأتي من وحدة التحكم الرئيسية وليس من الوحدة الرئيسية. مرة أخرى ، قد يتسبب هذا في حدوث مشكلات لأن الوحدة الرئيسية سترسل "0000" للمناطق (والتي قد تكون المشكلة أيضًا)

يقدم الكود المحدث أيضًا بعض قيود التوقيت لمحاولة منع اردوينو من الإرسال في نفس الوقت للوحدة الرئيسية والوحدة الرئيسية. أنا متأكد من أن هناك على الأرجح طريقة تستخدمها وحدة التحكم لبدء إرسال البيانات مثل سحب الخط المنخفض لـ Xms قبل الإرسال ولكني لم أكتشفه بعد إذا كان هناك

اكتشفت أن الوحدة الرئيسية سترسل البيانات كل 60 ثانية وأن وحدة التحكم الرئيسية ترسل كل 20 ثانية. يحاول الرمز إيقاف إرسال البيانات خلال ثانيتين من استلام حزمة البيانات. ومع ذلك ، في بعض الأحيان ، ترسل الوحدة الرئيسية والوحدة الرئيسية قريبًا جدًا من بعضهما البعض. من المحتمل أن يتم تنقيح هذا أكثر قريبًا. ----------------------------

** قد تعمل على وحدات أحدث

*** بعض المعلومات التي تم العثور عليها في رحلاتي البحثية تشير إلى أن نظام تقسيم القنوات من باناسونيك قد يستخدم نفس البروتوكول. YMMV.

موصى به: