قم بتحويل بوابة المنزل الذكي Xiaomi إلى عمود

مرحبا ، هابرا جكتيمز-القارئ! اليوم سأعلمك كيفية الاستفادة من الوظائف غير المفيدة. سنستلم بمثال المنزل الذكي من شركة Xiaomi سيئة السمعة ومنتجاتها في شكل بوابة ZigBee.

يعرف مالكو مكونات المنزل الذكي Xiaomi أن معظمها مقسم إلى أولئك الذين يمكنهم التواصل عبر زيجبي أو البلوتوث. سنكون مهتمين بالبوابة الخاصة بأجهزة Zigbee الإصدار 2 ، لأن ظهرت هناك وظيفة الراديو ، والتي يمكنها افتراضيًا تشغيل محطات راديو الإنترنت الصينية فقط.


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

ماذا تحتاج؟


من أجل التنفيذ الناجح للعملية تحتاج:

  • في الواقع ، إصدار بوابة ZigBee هو 2 على الأقل (ظهر راديو فيه)
  • أي خادم ويب
  • هاتف ذكي يوجد به برنامج الجذر والمثبت MiHome مع البلد المحدد الصين القارية

ماذا سنفعل؟


من أجل جعل مكبر صوت لاسلكي خارج بوابتنا ، تحتاج إلى التظاهر بأنك دفق راديو عبر الإنترنت وتدريب البوابة التي تحتاج إلى طرقها على قائمة المحطات لنا ، وليس على واجهة برمجة التطبيقات الصينية.

لفهم كيفية تواصل التطبيق على الهاتف مع الخوادم الصينية ، يمكنك التعرف على حركة المرور ، لكني سأنقذك من هذه البواسير :) إذا كنت ترغب في توسيع آفاقك ، يمكنك القيام بذلك بشكل اختياري.

لذا ، سنكون مهتمين بثلاثة طلبات ، وبالتالي الإجابة على واجهة برمجة التطبيقات الصينية ، التي تعيش على api.ximalaya.com:

  • / openapi-gateway-app / live / radios
  • / openapi-gateway-app / live / get_radios_by_ids
  • / openapi-gateway-app / search / radios

تشير كلمة openapi في الطريقة إلى شيء مفتوح ، لكنني لم أجد مواصفات عامة. يأتي الطلب مع معلمات غير مطلوبة لأغراضنا ، لذا فإننا نتجاهلها.

لقد استخدمت nginx كخادم ويب ، إليك التكوين:

server { listen *:80; server_name api.io.mi.com ximalaya.com www.ximalaya.com api.ximalaya.com mobile.ximalaya.com open.ximalaya.com ximiraga.ru www.ximiraga.ru; root /opt/xiaomiradio/www; index index.php index.html index.htm; access_log /var/log/nginx/radio_access.log; error_log /var/log/nginx/radio_error.log; location @ximalaya { proxy_pass http://api.ximalaya.com; } } 

قم بإنشاء نفس التسلسل الهرمي في جذر خادم الويب الخاص بك. بالإضافة إلى ذلك ، قم بإنشاء مجلدات الراديو والمجلدات في جذر خادم الويب. يجب أن تصدر جميع المكالمات على هذه المسارات نفس JSON ، لذا فمن المنطقي جعلها روابط إلى ملف ، والذي سنطلق عليه محطات.

هنا محتوياته:

 { "total_page":1, "total_count":1, "current_page":0, "radios":[ { "id":527782023, "kind":"radio", "program_name":"AirSound1", "radio_name":"AirSound1", "radio_desc":"", "schedule_id":0, "support_bitrates":[ 64 ], "rate24_aac_url":"", "rate64_aac_url":"http://<    >/hls/live1.m3u8", "rate24_ts_url":"", "rate64_ts_url":"", "radio_play_count":1, "cover_url_small":"http://<    >/radio/527782023/cover_small.png", "cover_url_large":"http://<    >/radio/527782023/cover_big.png", "updated_at":0, "created_at":0 } ] } 

كما ترى ، كل شيء بسيط هنا - نقدم مجموعة من الراديو تشير إلى مكان البحث عن الدفق. إذا كان لديك عدة بوابات - يمكنك إنشاء عدة قنوات. ملاحظة مهمة - يجب الوصول إلى العنوان المشار إليه هنا من البوابة!

لكي يرى التطبيق التغييرات الخاصة بك ، تحتاج إلى تحرير المضيفين على هاتفك الذكي وتسجيل api.ximalaya.com لمطابقة عنوان خادم الويب الخاص بك.

الآن حول كيفية الحصول على الدفق. قررت إخراج كل شيء من بطاقة الصوت الخاصة بي من جهاز الكمبيوتر الذي يتم نشر خادم الويب عليه. لهذا سوف نستخدم ffmpeg:

 #!/bin/bash ffmpeg -f alsa -i hw:Loopback,1,0 -c:a libfdk_aac -b:a 64k -f ssegment -segment_list /opt/xiaomiradio/hls/live1.m3u8 -segment_list_flags +live -segment_time 1 -segment_list_size 1 -segment_wrap 5 -segment_list_entry_prefix http://<    >/hls/ /opt/xiaomiradio/hls/64%03d.aac 

انتبه لمسارات وعنوان خادم الويب - استبدل مساراتك.

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

Source: https://habr.com/ru/post/ar411003/


All Articles