תוכן עניינים:

אלקסה, איפה המפתחות שלי ?: 4 שלבים
אלקסה, איפה המפתחות שלי ?: 4 שלבים

וִידֵאוֹ: אלקסה, איפה המפתחות שלי ?: 4 שלבים

וִידֵאוֹ: אלקסה, איפה המפתחות שלי ?: 4 שלבים
וִידֵאוֹ: ככה זה כשיש לך חברה רוסיה 2024, יולי
Anonim
Image
Image
פריצת משואות בלוטות '
פריצת משואות בלוטות '

אלקסה מתאימה במיוחד למשימות אחזור מידע וניטור נכסים באמצעות רשתות ביתיות אלחוטיות. זה טבעי לשקול לשים חפצי ערך על הרשת לאחזור מהיר. אנו פורצים משואות אנרגטיות נמוכות של Bluetooth לטווח הרשת ואורך חיי הסוללה ובונות אפליקציה חכמה כך שאלכסה תדע היכן השארנו את המפתחות.

איך לעשות את זה…

שלב 1: פריצת משואות Bluetooth

ניתן לרכוש קבוצה של 3 משואות בפחות מ -15 $ ונתמכות ביישומי אנדרואיד/iOS אך נבטל את הפרטיות. חוץ מזה, מציאת המפתחות שלנו לא אמורה להפוך למציאת הטלפון שלנו.

הדרכה זו של adafruit בנושא אורות חכמים להנדסה לאחור עזרה לנו לשלוט במשואות. התחל בהפעלת סריקת המשואות עבור כתובת המכשיר על ידי הפעלה:

sudo hcitool lescan

מצא והעתק את הכתובת המסומנת בשם 'iTag' ולאחר מכן הפעל:

sudo gatttool -I

התחבר למכשיר באופן אינטראקטיבי על ידי הפעלה:

חבר AA: BB: CC: DD: EE: FF

נסה להפעיל 'עזרה' לצפייה באפשרויות או 'ראשי' לצפייה בשירותים:

בהפעלת 'char-desc' ואחריו ידית השירות כמפורט לעיל, אנו מוצאים UUID שאותם אנו מחפשים על ידי התייחסות למפרטי המאפיינים של גאט ומפרטי השירות. למידע נוסף על שירותים אלה, בדוק זאת. בחיפוש של תנועה עם Wireshark, אנו מוצאים כי 0100111000000001 מעורר את האזעקה ולגיוני, 0000111000000001 מכבה אותה. עכשיו יש לנו את הפונקציה הפייתון הפשוטה:

ייבא pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. פורמט (BD_ADDR)) child.expect ('חיבור מוצלח', פסק זמן = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

לאחר מכן, אנו מתמקדים ביצירת המיומנות של Alexa להפעלת המשואה כאשר אנו מחפשים את המפתחות.

שלב 2: יצירת מיומנות ואפליקציה של Alexa

יצירת מיומנות ואפליקציה של Alexa
יצירת מיומנות ואפליקציה של Alexa
יצירת מיומנות ואפליקציה של Alexa
יצירת מיומנות ואפליקציה של Alexa

אנו יוצרים מיומנות שתקושר לשרת מקומי. לאחר מכן אנו מגדירים את השרת שלנו לבצע כל פעולה שברצוננו, במקרה זה, לספק קירוב לאן המפתחות עשויים להיות ממוקמים ולהפוך את משואת ה- Bluetooth לצפצף. Flask מספק ספריית פייתון פשוטה וקלה לשימוש לשרת יישום. באמצעות בקבוק-שאל, אנו יכולים להגדיר את השרת לתקשר עם מיומנות האלקסה שלנו שנבנה מאוחר יותר. תשרת את האפליקציה עם Ngrok, שייתן לנו קישור https שנזדקק לו למיומנות האלקסה שלנו. ראשית בנינו את היישום עם הפונקציונליות הפשוטה ביותר: כדי לגרום למשואת BLE שלנו לצפצף כאשר הוא מופעל.

#!/usr/bin/env python מתוך בקבוק ייבוא בקבוק מיבוא_בקבוק_אסק שאל, ייבוא הצהרה pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #מזהה המשואה של Bluetooth שלך כאן @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "המפתחות שלך נמצאים כאן איפשהו." הצהרת החזרה (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. פורמט (BD_ADDR)) child.expect ('חיבור מוצלח', פסק זמן = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') אם _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

השתמשנו בפונקציה sound_alarm () שכתבנו קודם לכן כדי להפוך את BLE לצפצוף. עבור הפונקציה שתשמש את הכוונה, אנו מוסיפים את מעצב הבקשות עם הכוונה "מפתחות". כשנעשה את המיומנות של Alexa בלוח המחוונים של מפתחי אמזון נשתמש בשם זה בכוונתנו. כתוב סקריפט זה לקובץ בשם app.py והפעל

python app.py

זה ישרת את הבקשה שלך בכתובת https:// localhost: 5000. הפעל שרת ngrok והעתק את הקישור https שנוצר. תזדקק לו בעת הגדרת מיומנות Alexa. לפרטים נוספים, עיין בפוסט זה. הקמנו בהצלחה יישום פשוט, כעת נכתוב את מיומנות Alexa. נווט ללוח המחוונים של מפתחי אמזון והיכנס. לחץ על Alexa והתחל עם ערכת Alexa Skill

בצע את ההוראות שניתנו על ידי הגוי.

בכרטיסיה מודל אינטראקציה תרצה למלא את תיבת סכמת הכוונה עם הדברים הבאים:

בתיבה דוגמאות אמירות, אתה רוצה לכתוב כמה פקודות לדוגמה שאדם יכול להשתמש בהן כדי להפעיל את המיומנות. כתבנו את אלה:

Findkeys למצוא את המפתחות שלי מקשי החיפוש שבהם המפתחות שלי מוצאים את המפתחות איבדתי את המפתחות שלי

  • בכרטיסיה תצורה, הקפד לבחור את נקודת הסיום של השירות ל- HTTPS. העתק את קישור https שלך והדבק אותו בתיבת ברירת המחדל שמתחת. ניתן להשאיר את קישור החשבון למס '.
  • בתעודת SSL בחר באפשרות האמצעית, "נקודת סיום הפיתוח שלי היא תחום משנה של דומיין בעל תעודת תווים כלליים מרשות אישורים".
  • הכרטיסייה בדיקה תאפשר לך לבדוק את המיומנות החדשה על ידי הקלדת אחת מהפקודות לדוגמה שלך.

סיים למלא את שתי הכרטיסיות האחרונות עד שכל סימני הסימון ירוקים. לאחר מכן הפעל את המיומנות שלך עם תכונת בדיקת הביטא. זה מאפשר לך לארח את המיומנות שלך בכל מכשיר הד לפני פרסום אותה. בצע את ההוראות שבקישור הדוא ל כדי להתקין את המיומנות במכשיר ההד שלך.

שלב 3: הפיכת היכולת שלנו לחכמה יותר

להפוך את המיומנות שלנו לחכמה יותר
להפוך את המיומנות שלנו לחכמה יותר
להפוך את המיומנות שלנו לחכמה יותר
להפוך את המיומנות שלנו לחכמה יותר
להפוך את המיומנות שלנו לחכמה יותר
להפוך את המיומנות שלנו לחכמה יותר

שמנו את מחשבי הסרק הפרוסים ברחבי הבית לעבודה בשאילתות המשואות של Bluetooth כדי לדווח על עוצמת האות של RSSI.

בעזרת קריאות ממכונות מרובות, אנו יכולים לנצל את עוצמת האות כפרוקסי למרחקים. עלינו להבין כיצד להשתמש בזה לחישוב החלק הסביר ביותר של הבית כדי למצוא את המשואה.

אנו פונים ללמידת מכונה. עבודת crontab כל 2 דקות, בונה מערך נתונים של זוגות RSSI. הצבת המשואה במקומות שונים כמו: 'חדר שינה', 'חדר אמבטיה', 'מטבח', 'אזור מגורים' אנו מסמנים את יומני RSSI. לאחר שמיפוי הבית, נוכל להשתמש בדגמים מבוססי עץ כמו XGBClassifier של xgboost.

יישום xgboost של שיפור שיפוע יטפל בנתונים החסרים מקריאות שהוזמנו בזמן, תוך אימון תוך מספר שניות. השתמש בחמוץ פייתון כדי להתמיד את הדגם המאומן ולהעלות אותו ליישום alexa retrievr שלנו. כאשר המיומנות נקראת, האפליקציה מחפשת את קריאת ה- RSSI של ה- Bluetooth ויוצרת מיקום צפוי, אלקסה יכולה להשיב להציע 'לנסות לחפש בשירותים'.

שלב 4: הרכבת הכל ביחד

לאחר מודל לקירוב המיקום האחרון של המפתחות, נוכל להוסיף אותו לאפליקציה כדי לשפר את ההצהרה שהחזירה Alexa. שינינו את התסריט לקריאה:

יבוא osfrom בקבוק יבוא בקבוק מיבוא_סקבוק שאל, הצהרת יבוא צפה לייבא פנדה לייבא פנדה כמו יבוא pd numpy כ- np מאוספים ייבוא ברירת מחדל, דלפק מהיבוא_קריאה יבוא reverse_readline app = בקבוק (_ שם_) שאל = שאל (אפליקציה, '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/path/to/repo/sound_alarm.py &") speech_text = guess_locate () statement return (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = בעוד len (res_lst)! = 20: ln = הבא (line_gen) אם ln.startswith ('מארח'): _, 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.most_common (1) [0] [0] reply_str = 'נסה לחפש ב-' if guess == 1: reply_str += 'bedroom' elif guess == 2: reply_str += 'אמבטיה' elif guess == 3: answer_str += 'מטבח' elif guess == 4: reply_str += 'סלון' החזר reply_str אם _name_ == "_main_": app.run (מארח = '127.0.0.1', יציאה = '5000')

יצרנו פונקציה חדשה בשם guess_locate () שלוקחת קובץ עם עוצמות האות rssi שהוקלטו לאחרונה. לאחר מכן הוא יריץ את הדגימות נגד מודל ה- xgboost הכבוש שלנו ויחזיר את מחרוזת המיקום הסבירה ביותר. מיקום זה יוחזר כאשר תתבקש Alexa. מאחר ויצירת חיבור למשואה יכולה להימשך מספר שניות, אנו מריצים תהליך נפרד המכנה את הפונקציה הזו ב- sound_alarm.py.

מוּמלָץ: