Mundarija:

Alexa, mening kalitlarim qayerda ?: 4 qadam
Alexa, mening kalitlarim qayerda ?: 4 qadam

Video: Alexa, mening kalitlarim qayerda ?: 4 qadam

Video: Alexa, mening kalitlarim qayerda ?: 4 qadam
Video: Ева учит и собирается показать поведение детей 2024, Noyabr
Anonim
Image
Image
Bluetooth mayoqlarini buzish
Bluetooth mayoqlarini buzish

Alexa, ayniqsa, simsiz uy tarmoqlari yordamida ma'lumotlarni qidirish va aktivlarni kuzatish vazifalariga juda mos keladi. Qimmatbaho narsalarni tezda qidirish uchun tarmoqqa qo'yishni o'ylash tabiiy. Biz tarmoq diapazoni va batareyaning ishlash muddati uchun arzon bluetooth kam quvvatli mayoqlarni buzamiz va Alexa kalitlarni qaerda qoldirganimizni bilishi uchun aqlli dastur yaratamiz.

Buni qanday qilish kerak…

1 -qadam: Bluetooth mayoqlarini buzish

3 mayoqni 15 dollardan kamroq narxda sotib olish mumkin va ularni Android/iOS ilovalari qo'llab -quvvatlaydi, lekin biz maxfiylikdan voz kechamiz. Qolaversa, kalitlarni topish telefonimizni topishga aylanmasligi kerak.

Bu aqlli chiroqlar teskari muhandisligi bo'yicha qo'llanma bizga mayoqlarni boshqarishga yordam berdi. Qurilmaning manzilini tekshirishni yoqish bilan boshlang:

sudo hcitool lescan

"ITag" nomi bilan ko'rsatilgan manzilni toping va nusxa oling, so'ngra ishga tushiring:

sudo gatttool -Men

Qurilmaga interaktiv tarzda ulang:

AA: BB: CC: DD: EE: FF ulang

Variantlarni ko'rish uchun "yordam" yoki xizmatlarni ko'rish uchun "asosiy" ni ishlatib ko'ring:

"Char-desc" ni ishga tushirgandan so'ng, yuqoridagi kabi xizmat ko'rsatish dastagidan, biz UAT-larni topamiz, ular gatt xarakteristikasi va xizmat ko'rsatish xususiyatlariga havola qilinadi. Wireshark -da trafikni tekshirganda, biz 0100111000000001 signalni ishga tushiradi va mantiqan, 0000111000000001 uni o'chiradi. Endi bizda oddiy python funktsiyasi mavjud:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('ulanish {}'. format (BD_ADDR)) child.expect ('Ulanish muvaffaqiyatli', vaqt tugashi = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Keyinchalik, biz kalitlarni qidirayotganimizda mayoqni ishga tushirish uchun Alexa mahoratini yaratishga e'tibor qaratamiz.

2 -qadam: Alexa ko'nikmalari va ilovalarini yaratish

Alexa ko'nikmalari va ilovalarini yaratish
Alexa ko'nikmalari va ilovalarini yaratish
Alexa ko'nikmalari va ilovalarini yaratish
Alexa ko'nikmalari va ilovalarini yaratish

Biz mahalliy server bilan bog'lanadigan mahoratni yaratamiz. Keyin biz serverimizni xohlagan harakatlarni bajarishga sozlaymiz, bu holda kalitlar qaerda joylashganligi haqida taxminiy ma'lumot beramiz va bluetooth -mayoq signalini beramiz. Flask dasturga xizmat ko'rsatish uchun oddiy va ishlatish uchun qulay bo'lgan python kutubxonasini taqdim etadi. Flask-ask yordamida biz serverni keyinchalik ishlab chiqaradigan Alexa mahoratimiz bilan bog'lanishini sozlashimiz mumkin. Ilovaga Ngrok bilan xizmat qiling, bu bizga Alexa mahoratimiz uchun kerak bo'lgan https havolasini beradi. Birinchidan, biz dasturni eng oddiy funktsiyaga ega qilib yaratdik: ishga tushirilganda BLE mayoq signalini berish.

#!/usr/bin/env pythonfrom dan flask import dan Flask_ask import Ask, bayonot import pexpect app = Flask (_ name_) ask = Ask (ilova, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Sizning bluetooth chirog'ingiz identifikatori bu erda @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Sizning kalitlaringiz bu erda bir joyda". qaytarish bayonoti (nutq_teksti) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('ulanish {}'. format (BD_ADDR)) child.expect ('Ulanish muvaffaqiyatli', vaqt tugashi = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') agar _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Biz ilgari yozgan sound_alarm () funktsiyasidan BLE signalini chiqarish uchun foydalanganmiz. Niyat uchun ishlatiladigan funktsiya uchun biz "qidiruv kalitlari" so'rovi bilan bezatuvchini qo'shamiz. Biz Amazon dasturchilar panelida Alexa mahoratini yaratganimizda, biz bu nomni o'z maqsadimiz uchun ishlatamiz. Bu skriptni app.py nomli faylga yozing va ishga tushiring

python dasturi.py

Bu sizning arizangizga https:// localhost: 5000 da xizmat qiladi. Ngrok serverini ishga tushiring va yaratilgan https havolasini nusxalash. Alexa mahoratini sozlashda sizga kerak bo'ladi. Batafsil ma'lumot uchun ushbu postni tekshiring. Biz oddiy dasturni muvaffaqiyatli o'rnatdik, endi biz Alexa mahoratini yozamiz. Amazon dasturchilar paneliga o'ting va kiring. Alexa -ni bosing va Alexa Skill to'plamini ishga tushiring.

Gui tomonidan berilgan ko'rsatmalarga amal qiling.

"Interation Model" yorlig'i ostida siz "Intent Schema" maydonini to'ldirishingiz kerak bo'ladi:

Namunaviy so'zlar oynasida, siz mahoratga ega bo'lish uchun odam ishlatishi mumkin bo'lgan ba'zi namunali buyruqlarni yozmoqchisiz. Biz bularni yozdik:

topish kalitlari mening kalitlarimni topadi

  • Konfiguratsiya yorlig'ida HTTPS xizmatining oxirgi nuqtasini tanlaganingizga ishonch hosil qiling. Https havolasini nusxa ko'chiring va ostidagi standart maydonga joylashtiring. Hisob qaydnomasini bog'lashni "No" ga qoldirish mumkin.
  • SSL sertifikatida "Mening rivojlanish nuqtam-bu sertifikat idorasining joker belgisiga ega bo'lgan domenning pastki domeni" o'rta variantini tanlang.
  • Test yorlig'i sizga namunaviy buyruqlaringizdan birini kiritish orqali yangi mahoratni sinab ko'rishga imkon beradi.

So'nggi ikkita varaqni to'ldirishni tugatish, barcha tasdiq belgilari yashil bo'lguncha. Keyin Beta Testing yordamida o'z mahoratingizni ishga soling. Bu sizga o'z mahoratingizni nashr etishdan oldin har qanday echo qurilmasida joylashtirish imkonini beradi. Qobiliyatni echo qurilmangizga o'rnatish uchun elektron pochta havolasidagi ko'rsatmalarga amal qiling.

3 -qadam: Bizning mahoratimizni aqlli qilish

Bizning mahoratimizni aqlli qilish
Bizning mahoratimizni aqlli qilish
Bizning mahoratimizni aqlli qilish
Bizning mahoratimizni aqlli qilish
Bizning mahoratimizni aqlli qilish
Bizning mahoratimizni aqlli qilish

Biz RSSI signal kuchini xabar qilish uchun bluetooth -mayoqni so'rash uchun butun uyga tarqalgan bo'sh kompyuterlarni ishga joylashtirdik.

Bir nechta mashinadan o'qishni qabul qilib, biz signal kuchini masofa uchun proksi sifatida ishlatishimiz mumkin. Biz buni mayakni topish uchun uyning eng katta qismini hisoblash uchun qanday ishlatishni aniqlashimiz kerak.

Biz mashinani o'rganishga o'tamiz. Crontab ishi har 2 daqiqada RSSI to'plamlarining ma'lumotlar bazasini yaratadi. Mayoqni turli joylarga joylashtiring: "Yotoq xonasi", "Hammom", "Oshxona", "Yashash maydoni", biz RSSI jurnallarini belgilaymiz. Uyni xaritaga kiritganimizdan so'ng, biz xgboost XGBClassifier kabi daraxtga asoslangan modellardan foydalanishimiz mumkin.

Gradientni kuchaytirishning xgboost ilovasi bir necha soniya ichida o'tkazilgan o'qishlar bo'yicha yo'qolgan ma'lumotlarni qayta ishlaydi. Tayyorlangan modelni saqlab qolish va alexa retriever dasturimizga yuklash uchun python tuzlanganidan foydalaning. Qachonki, mahorat chaqirilsa, ilova bluetooth RSSI o'qilishini qidiradi va bashorat qilingan joyni yaratadi, alexa "hammomga qarab ko'ring" degan javobni berishi mumkin.

4 -qadam: Hammasini bir joyga to'plash

Kalitlarning oxirgi joylashuvini taxmin qiladigan modelga ega bo'lib, biz uni Alexa tomonidan qaytarilgan bayonotni yaxshilash uchun ilovaga qo'shishimiz mumkin. Biz skriptni o'qish uchun o'zgartirdik:

kolbadan import qilish shishasi flask_ask importdan so'rash, bayonot import pexpect import tuzlangan import pandalar pd import numpy sifatida np to'plamlar import defaultdict, reverse_read import reverse_readline app = Flask (_ name_) ask = Ask (ilova, '/') @ ask.intent ('findkeys') def retrievr (): 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 = len (res_lst)! = 20: ln = keyingi (line_gen) agar ln.startswith ('Xost'): _, ip, _, o'qish = ln.split () read_dict [ip] = o'qish res_lst.append (read_dict) agar ip == 'ip.of.one.kompyuter' bo'lsa: read_dict = {} boshqa: pass val = pd. DataFrame (res_lst).qaytar ({'N/ A ': np.nan}). Qadriyatlar mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) tahmin = guess.most_common (1)) [0] [0] reply_str = 'Agar tahmin == 1: reply_str +=' yotoqxona 'elif taxminiga qarang == 2: reply_str += 'hammom' elif taxmin == 3: reply_str += 'oshxona' elif tahmin == 4: reply_str += 'yashash xonasi' agar _name_ == "_main_" bo'lsa, javob rep_str: app.run (xost) = '127.0.0.1', port = '5000')

Biz guess_locate () deb nomlangan yangi funktsiyani yaratdik, u oxirgi yozilgan rssi signal kuchiga ega bo'lgan faylni oladi. Keyin u namunalarni bizning tuzlangan xgboost modeliga qarshi ishga tushiradi va ehtimol joylashuv satrini qaytaradi. Bu joy Alexa so'ralganda qaytariladi. Mayoqqa ulanish bir necha soniya davom etishi mumkinligi sababli, biz bu funktsiyani sound_alarm.py da chaqiradigan alohida jarayonni bajaramiz.

Tavsiya: