تعتمد Xiaomi Kettle على QN9020 MCU والتي تستخدم GATT على الطاقة المنخفضة Bluetooth للتواصل مع تطبيق الهاتف المحمول.
يسمح البروتوكول بالتحكم في بعض الإعدادات والحصول على تحديثات الحالة. إنه مغلق ، لذا استخدمت عقلي وبعض الأدوات لإلغاء توحيد تطبيق MI Home وتحليله والمكتبة الأصلية التي تتولى التشفير.
لا أعطي أي ضمانات بأن هذا سوف ينجح لك.
ربما يجب أن أبدأ بالأخبار السيئة.
في البداية ، تحتاج فقط إلى الاتصال بطعم الخاص بك عبر Ble.
يمكنك استخدام أي لغة برمجة وأي مكتبة BLE تدعم خصائص الكتابة/القراءة واشتراكها.
لقد استخدمت Go و Currantlabs/Ble لكنني لن أنشر رمزتي الآن لأنها ليست مثالية.
متصل بنجاح؟ دعونا نصل إلى ذلك.
ستحتاج إلى بعض المتغيرات والوظائف للبدء:
reversedMac هو عنوان الغلاية الخاص بك ولكنه عكس ، 6 بايت. على سبيل المثال ، REVERSEDMAC لـ AA: BB: CC: DD: EE: FF IS 0xff ، 0xee ، 0xdd ، 0xcc ، 0xbb ، 0xaa.productID هو دائما 131 أعتقد.token هو ... الرمز المميز المستخدم لمصادقة غلاية ، 12 بايت! يمكنك إنشاء رمز عشوائي كل مصادقة ، بغض النظر. إذا كنت ترغب في استخدام Mi Home أيضًا ، فاقترّم Mi Home مع غلاية واستخدم الرمز المميز منه.cipher ، mixA ، mixB هي وظائف من مكتبة Xiaomi الأصلية. وهي شائعة بالنسبة للعديد من الأجهزة وتستخدم في حزم المصادقة المشفرة. لدي تطبيق GO.لنبدأ.
0x90, 0xCA, 0x85, 0xDE بايت إلى authInitCharacteristic .authCharacteristic .cipher(mixA(reversedMac, productID), token) إلى authCharacteristic .authCharacteristic . يجب أن تنتظر هذا الإشعار قبل المتابعة إلى الخطوة التالية. يمكن تجاهل بيانات الإخطار أو استخدامها للتحقق من النزاهة ، وهذا اختياري . إذا كنت ترغب في إجراء شيك ، قارن cipher(mixB(reversedMac, productID), cipher(mixA(reversedMac, productID), res)) حيث يتم استلام res مع token الخاص بك ، يجب أن تساوي.0x92, 0xAB, 0x54, 0xFA إلى authCharacteristic .verCharacteristics . يمكنك تجاهل بيانات الاستجابة ، عليك فقط إجراء قراءة لإكمال عملية المصادقة.لقد تمت مصادقةك الآن ، حتى تتمكن من الاشتراك في تحديثات الحالة و/أو إرسال أوامر.
إذا كنت ترغب في تلقي تحديثات الحالة ، فأنت بحاجة إلى الاشتراك في statusCharacteristic . بعد الاشتراك فيه ، ستبدأ في تلقي الإخطارات مع الحمولات.
هنا مخطط الحمولة:
| فهرس بايت | وصف | قيم |
|---|---|---|
| 0 | فعل | 0 - الخمول 1 - التدفئة 2 - التبريد 3 - الحفاظ على الدفء |
| 1 | الوضع (المقابل لمصابيح LED) | 255 - لا شيء 1 - غليان 2 - تبقي دافئا |
| 2-3 | مجهول | |
| 4 | حافظ على درجة حرارة المحددة الدافئة | 40-95 في درجة مئوية |
| 5 | درجة الحرارة الحالية | 0-100 في درجة مئوية |
| 6 | الحفاظ على النوع الدافئ | 0 - تغلي وتبرد لتحديد درجة الحرارة 1 - مجرد تسخين لضبط درجة الحرارة |
| 7-8 | حافظ على الوقت الدافئ | مرت الوقت في دقائق منذ أن تم تمكين الحفاظ على الدفء |
| وصف | خاصية | حمولة | قابلة للقراءة | قابل للكتابة |
|---|---|---|---|---|
| حافظ على حد دافئ الوقت | timeCharacteristic | من 0 إلى 12 ساعة مضروبة في 2. 7.5 ساعة هو 15 ، على سبيل المثال | + | + |
| الحفاظ على النوع الدافئ ودرجة الحرارة | setupCharacteristic | البايت الأول: اكتب ، 0 أو 1 البايت الثاني: درجة الحرارة ، 40-95 | - | + |
| أطفئ بعد الغليان | boilModeCharacteristic | 0 - لا 1 - نعم | + | + |
| إصدار البرامج الثابتة | mcuVersionCharacteristic | خيط | + | - |
| اسم | uuid |
|---|---|
authInitCharacteristic | 0010 |
authCharacteristic | 0001 |
verCharacteristics | 0004 |
setupCharacteristic | AA01 |
statusCharacteristic | AA02 |
timeCharacteristic | AA04 |
boilModeCharacteristic | AA05 |
mcuVersionCharacteristic | 2A28 |
لقد استخدمت بروتوكول Xiaomi Kettle لتطوير Kettle <-> MQTT Bridge In Go الذي يسمح لي بدمج غلاية مع مساعد المنزل.
الأيقونة في أقصى اليسار تظهر درجة الحرارة الحالية.
يمكنني "تمكين" أو "تعطيل" غلاية بلدي عن طريق تبديل أيقونة أقصى اليمين. في الواقع ، أحافظ على تمكين الوضع الدافئ دائمًا على غلايتي ، لذا فإن هذا يعني فقط "ضبط درجة الحرارة على 85 درجة مئوية عبر setupCharacteristic " ، يعني إيقاف تشغيل "ضبط درجة الحرارة إلى 40 درجة مئوية" لأن 40 درجة مئوية هو الحد الأدنى.
إن نوع الحفاظ على دافئتي دائمًا 1 (حرارة لضبط درجة الحرارة دون الغليان).
عندما أغادر منزلي أو أذهب إلى النوم ، يقوم مساعد المنزل "بإيقاف تشغيل" غلاية تلقائيًا حتى تقع عند 40 درجة مئوية. عندما أعود للمنزل أو أستيقظ ، يعد مساعد المنزل ماء 85 درجة مئوية بالنسبة لي!
يمكنني أيضًا الاستفادة من أيقونة في أقصى اليسار والاحتفاظ بها وسيجعل غلايتي تغلي الماء (بغض النظر عما إذا كان وضع 85 درجة مئوية "ON" أو "Off"). هذه هي الطريقة التي أجعلها تغلي:
setupCharacteristic .عندما يكون المساعد جاهزًا للمنزل ، يرسل لي أيضًا رسالة Telegram "The Kettle is تغلي" حتى أتمكن من استلامها. لا أستخدم ميزة الغليان بشكل متكرر لأن إعداد 85 درجة مئوية عادة ما يكون كافياً لصنع الشاي. أحتاج إلى ماء 100 درجة مئوية فقط عندما أريد بعض الأعشاب المريحة.
يحتوي Home Assistant على مكون HomeKit ، لذا فإن غلتي متوفر أيضًا مع Apple Home App و Siri. أستطيع أن أصرخ "يا سيري ، غليان" ، "يا سيري ، قم بتشغيل/إيقاف تشغيل الغلاية" أو "يا سيري ، درجة حرارة الغلاية الحالية" في HomePod: D.
بالطبع ، كما هو موضح في المحاذير ، أحتاج دائمًا إلى تشغيل وضع الحفاظ على الدفء عن طريق الضغط على زر مادي عند مرور 12 ساعة أو عندما أعيد ملء الغلاية بالماء البارد ، لجعل كل هذه الأشياء السحرية تعمل.
يتم العمل من قبل آنا Prosvetova.
بفضل JADX-GUI على حل APK ، فإن IDA Pro لتفكيك المكتبة الأصلية وصديقي العزيز scorpi للحصول على الدعم الأخلاقي والكثير من المساعدة.
هل انت روسي يمكنك الاشتراك في قناة Telegram <3.