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

أليكسا ، أين مفاتيحي ؟: 4 خطوات
أليكسا ، أين مفاتيحي ؟: 4 خطوات

فيديو: أليكسا ، أين مفاتيحي ؟: 4 خطوات

فيديو: أليكسا ، أين مفاتيحي ؟: 4 خطوات
فيديو: اليكسا - إزاي تحول بيتك لـ(سمارت هوم) | Alexa 2024, يوليو
Anonim
Image
Image
اختراق منارات البلوتوث
اختراق منارات البلوتوث

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

كيف افعلها…

الخطوة 1: اختراق منارات البلوتوث

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

ساعدنا هذا البرنامج التعليمي adafruit حول الأضواء الذكية للهندسة العكسية في التحكم في المنارات. ابدأ بتشغيل فحص المرشد لعنوان الجهاز عن طريق تشغيل:

sudo hcitool lescan

ابحث عن العنوان المسمى باسم "iTag" وانسخه ، ثم قم بتشغيل:

sudo gatttool -I

قم بالاتصال بالجهاز بشكل تفاعلي عن طريق تشغيل:

توصيل AA: BB: CC: DD: EE: FF

جرب تشغيل "تعليمات" لعرض الخيارات أو "أساسي" لعرض الخدمات:

عند تشغيل "char-desc" متبوعًا بمقبض الخدمة على النحو الوارد أعلاه ، نجد UUIDs التي نبحث عنها من خلال الرجوع إلى مواصفات خدمة gatt المميزة ومواصفات الخدمة. لمزيد من المعلومات حول هذه الخدمات ، تحقق من هذا. فحص حركة المرور باستخدام Wireshark ، نجد أن 0100111000000001 يطلق الإنذار ومنطقياً ، يقوم 0000111000000001 بإيقاف تشغيله. الآن لدينا وظيفة بيثون البسيطة:

استيراد pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection Success Success'، timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

بعد ذلك ، نركز على إنشاء مهارة Alexa لتشغيل المنارة عندما نبحث عن المفاتيح.

الخطوة 2: إنشاء تطبيق ومهارة Alexa

إنشاء تطبيق ومهارة أليكسا
إنشاء تطبيق ومهارة أليكسا
إنشاء تطبيق ومهارة أليكسا
إنشاء تطبيق ومهارة أليكسا

نقوم بإنشاء مهارة سيتم ربطها بخادم محلي. ثم نقوم بتهيئة خادمنا لاتخاذ أي إجراء نرغب فيه ، في هذه الحالة ، تقديم تقدير تقريبي للمكان الذي قد توجد فيه المفاتيح وإصدار إشارة Bluetooth التنبيهية. يوفر Flask مكتبة بيثون بسيطة وسهلة الاستخدام لخدمة أحد التطبيقات. باستخدام flask-ask ، يمكننا تكوين الخادم للتواصل مع مهارة Alexa التي سنقوم ببنائها لاحقًا. قم بخدمة التطبيق بشكل جيد مع Ngrok ، والذي سيعطينا رابط https الذي نحتاجه لمهارة Alexa الخاصة بنا. أولاً قمنا ببناء التطبيق بأبسط وظائف: لجعل منارة BLE الخاصة بنا تنبيهاً عند تشغيلها.

#! / usr / bin / env pythonfrom استيراد flask من flask_ask import Ask ، بيان استيراد pexpect app = Flask (_ name_) ask = Ask (app، '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '# معرف منارة البلوتوث الخاص بك هنا @ ask.intent (' findkeys ') def ريتريفر (): sound_alarm () speech_text = "مفاتيحك موجودة هنا في مكان ما." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection Success Success'، timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') إذا _name_ == "_main_": app.run (المضيف = '127.0.0.1' ، المنفذ = '5000')

استخدمنا الوظيفة sound_alarm () التي كتبناها سابقًا لإصدار صوت تنبيه BLE. بالنسبة للوظيفة التي سيتم استخدامها للهدف ، نضيف مصمم الديكور مع "findkeys" المقصود. عندما نجعل مهارة Alexa على لوحة معلومات مطور Amazon ، سنستخدم هذا الاسم لهدفنا. اكتب هذا البرنامج النصي في ملف يسمى app.py وقم بتشغيله

بيثون app.py

سيخدم هذا التطبيق الخاص بك على https:// localhost: 5000. قم بتشغيل خادم ngrok وانسخ رابط https الذي تم إنشاؤه. ستحتاج إليها عند تكوين مهارة Alexa. لمزيد من التفاصيل ، تحقق من هذا المنشور. لقد نجحنا في إعداد تطبيق بسيط ، والآن سنكتب مهارة Alexa. انتقل إلى لوحة تحكم مطوري Amazon وقم بتسجيل الدخول. انقر فوق Alexa وابدأ في استخدام Alexa Skill kit

اتبع التعليمات التي قدمتها واجهة المستخدم الرسومية.

ضمن علامة التبويب Interation Model ، سترغب في ملء مربع Intent Schema بما يلي:

في مربع نماذج الألفاظ ، تريد كتابة بعض نماذج الأوامر التي قد يستخدمها الشخص لاستدعاء المهارة. لقد كتبنا ما يلي:

findkeys تعثر على المفاتيح الخاصة بي

  • في علامة التبويب "التكوين" ، تأكد من اختيار نقطة نهاية الخدمة لـ HTTPS. انسخ رابط https والصقه في المربع الافتراضي أسفله. يمكن ترك ربط الحساب بـ No.
  • في شهادة SSL ، اختر الخيار الأوسط ، "نقطة نهاية التطوير الخاصة بي هي مجال فرعي لمجال يحتوي على شهادة بدل من مرجع مصدق".
  • ستسمح لك علامة التبويب Test باختبار المهارة الجديدة عن طريق كتابة أحد أوامر العينة.

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

الخطوة الثالثة: جعل مهارتنا أكثر ذكاءً

جعل مهارتنا أكثر ذكاءً
جعل مهارتنا أكثر ذكاءً
جعل مهارتنا أكثر ذكاءً
جعل مهارتنا أكثر ذكاءً
جعل مهارتنا أكثر ذكاءً
جعل مهارتنا أكثر ذكاءً

وضعنا أجهزة الكمبيوتر الخاملة المنتشرة في جميع أنحاء المنزل للعمل في الاستعلام عن منارة البلوتوث للإبلاغ عن قوة إشارة RSSI.

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

ننتقل إلى التعلم الآلي. تُنشئ وظيفة crontab كل دقيقتين مجموعة بيانات من مجموعات RSSI. عند وضع المرشد في أماكن مختلفة مثل: "غرفة النوم" ، "الحمام" ، "المطبخ" ، "منطقة المعيشة" نقوم بتسمية سجلات RSSI. بمجرد تعيين المنزل ، يمكننا استخدام النماذج القائمة على الأشجار مثل XGBClassifier من xgboost.

سيعالج تنفيذ xgboost لتعزيز التدرج البيانات المفقودة من القراءات المنتهية ، والتدريب في بضع ثوانٍ. استخدم مخلل python للاستمرار في النموذج المدرب وتحميله في تطبيق alexa. عندما يتم استدعاء المهارة ، يبحث التطبيق عن قراءة RSSI الخاصة بالبلوتوث وينشئ موقعًا متوقعًا ، ويمكن لـ Alexa الرد مقترحًا "محاولة البحث في الحمام".

الخطوة 4: وضع كل ذلك معًا

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

استيراد osfrom flask import Flask من flask_ask import Ask ، بيان استيراد pexpect استيراد مخلل استيراد pandas كـ pd استيراد numpy كما np من مجموعات استيراد defaultdict ، عداد من reverse_read import reverse_readline app = Flask (_ name_) ask = Ask (app، '/') @ ask.intent ('findkeys') def استرداد (): os.system ("/ path / to / repo / sound_alarm.py &") speech_text = guess_locate () return statement (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = while len (res_lst)! = 20: ln = next (line_gen) إذا كان ln.startswith ('Host'): _ ، ip ، _ ، القراءة = ln.split () read_dict [ip] = قراءة res_lst.append (read_dict) إذا كان ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N / A ': np.nan}). القيم mdl_ = pickle.load (open (' location_model_file.dat '،' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] reply_str = 'حاول البحث في "if guess == 1: reply_str + =" bedroom "elif guess == 2: reply_str + = 'bathroom' elif guess == 3: reply_str + = 'kitchen' elif guess == 4: reply_str + = 'غرفة المعيشة' return reply_str if _name_ == "_main_": app.run (host = '127.0.0.1' ، المنفذ = '5000')

أنشأنا وظيفة جديدة تسمى guess_locate () تأخذ ملفًا بأحدث نقاط قوة إشارة rssi المسجلة. سيقوم بعد ذلك بتشغيل العينات مقابل نموذج xgboost المخلل الخاص بنا وإرجاع سلسلة الموقع الأكثر احتمالاً. سيتم إرجاع هذا الموقع عندما يُطلب من Alexa. نظرًا لأن إنشاء اتصال بمنارة يمكن أن يستغرق بضع ثوانٍ ، فإننا نقوم بتشغيل عملية منفصلة تستدعي هذه الوظيفة في sound_alarm.py.

موصى به: