Mündəricat:

Alexa, açarlarım haradadır ?: 4 addım
Alexa, açarlarım haradadır ?: 4 addım

Video: Alexa, açarlarım haradadır ?: 4 addım

Video: Alexa, açarlarım haradadır ?: 4 addım
Video: Babalar çocukları okula bırakırken 2024, Iyul
Anonim
Image
Image
Bluetooth mayaklarını sındırmaq
Bluetooth mayaklarını sındırmaq

Alexa, simsiz ev şəbəkələrindən istifadə edərək məlumat axtarış vəzifələri və aktivlərin monitorinqi üçün xüsusilə uyğundur. Qiymətli əşyaları sürətli bir şəkildə əldə etmək üçün onları şəbəkəyə qoymağı düşünmək təbiidir. Şəbəkə aralığı və batareyanın uzunömürlülüyü üçün ucuz bluetooth aşağı enerji mayaklarını sındırırıq və ağıllı bir tətbiq qururuq ki, Alexa düymələri harada qoyduğumuzu bilsin.

Necə etmək olar…

Addım 1: Bluetooth mayaklarını sındırın

3 mayak dəsti 15 dollardan aşağı qiymətə alına bilər və Android/iOS tətbiqləri ilə dəstəklənir, lakin məxfiliyi seçəcəyik. Üstəlik, açarlarımızı tapmaq telefonumuzu axtarmağa çevrilməməlidir.

Tərs mühəndislik ağıllı işıqlar haqqında bu adafruit dərsliyi, mayaklara nəzarət etməyimizə kömək etdi. İşlətməklə cihaz ünvanı üçün mayak taramasını işə salın:

sudo hcitool lescan

'İTag' etiketli ünvanı tapın və kopyalayın, sonra işləyin:

sudo gatttool -Mən

Çalışaraq cihaza interaktiv olaraq qoşulun:

birləşdirin AA: BB: CC: DD: EE: FF

Seçimlərə baxmaq üçün 'yardım' və ya xidmətləri görmək üçün 'əsas' işləməyə çalışın:

Yuxarıda göstərilən xidmət dəstəyinin ardınca 'char-desc' işləyərkən, gatt xarakteristik xüsusiyyətlərinə və xidmət xüsusiyyətlərinə istinad edərək axtardığımız UUID-ləri tapırıq. Wireshark ilə əlaqəli trafikə baxanda 0100111000000001 siqnalizasiyanı işə salır və məntiqi olaraq 0000111000000001 söndürür. İndi sadə bir python funksiyasına sahibik:

idxal pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Bağlantı uğurlu', zaman aşımı = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Sonra, düymələri axtararkən mayak tetiklemek üçün Alexa bacarığını yaratmağa diqqət edirik.

Addım 2: Alexa Bacarıq və Tətbiqinin Yaradılması

Bir Alexa Bacarıq və Tətbiqinin yaradılması
Bir Alexa Bacarıq və Tətbiqinin yaradılması
Bir Alexa Bacarıq və Tətbiqinin yaradılması
Bir Alexa Bacarıq və Tətbiqinin yaradılması

Yerli bir serverlə əlaqəli bir bacarıq yaradırıq. Sonra serverimizi istədiyimiz hər hansı bir hərəkəti etmək üçün konfiqurasiya edirik, bu halda düymələrin harada yerləşə biləcəyini və Bluetooth mayakının səs siqnalı verməsini təmin edirik. Flask, bir tətbiqə xidmət etmək üçün sadə və istifadəsi asan bir python kitabxanası təqdim edir. Flask-ask istifadə edərək, serveri daha sonra quracağımız Alexa bacarıqlarımızla ünsiyyət qura bilərik. Ngrok ilə tətbiqə xidmət edin, bu da bizə Alexa bacarıqlarımız üçün lazım olan bir https bağlantısı verəcəkdir. Əvvəlcə tətbiqi ən sadə funksionallıqla qurduq: tetiklendiğinde BLE beacon bipimizi etmək.

#!/usr/bin/env pythonfrom qabdan idxal Flask_ask importundan Şüşə, bəyanat idxalı pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Bluetooth mayak idiniz burada @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Açarlarınız burada bir yerdədir." return ifadəsi (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}' formatı (BD_ADDR)) child.expect ('Bağlantı uğurlu', zaman aşımı = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') əgər _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Daha əvvəl yazdığımız sound_alarm () funksiyasından BLE bip səsi çıxarmaq üçün istifadə etdik. Niyyət üçün istifadə ediləcək funksiya üçün "findkeys" niyyətimizlə sorğu dekorativini əlavə edirik. Amazon geliştirici tablosunda Alexa bacarığı qazandıqda bu addan məqsədimiz üçün istifadə edəcəyik. Bu skripti app.py adlı bir fayla yazın və işə salın

python app.py

Bu tətbiqinizə https:// localhost: 5000 ünvanında xidmət edəcək. Bir ngrok serverini işə salın və yaradılan https bağlantısını kopyalayın. Alexa bacarığını konfiqurasiya edərkən buna ehtiyacınız olacaq. Daha ətraflı məlumat üçün bu yazını yoxlayın. Sadə bir tətbiq qurduq, indi Alexa bacarıqlarını yazacağıq. Amazon geliştirici tablosuna gedin və daxil olun. Alexa düyməsini basın və Alexa Bacarıq dəsti ilə işə başlayın.

Gui tərəfindən verilən təlimatlara əməl edin.

Interation Model sekmesinin altında Intent Schema qutusunu aşağıdakılarla doldurmaq istəyəcəksiniz:

Nümunə ifadələr qutusunda, bir şəxsin bacarıq əldə etmək üçün istifadə edə biləcəyi bəzi nümunə əmrləri yazmaq istəyirsiniz. Bunları yazdıq:

tapma düymələri açarlarımı tapır açarlarımı tapdığım yerlərdə açarlarımı tapıram açarlarımı itirmişəm

  • Konfiqurasiya sekmesinde, HTTPS üçün xidmət son nöqtəsini seçdiyinizə əmin olun. Https bağlantınızı kopyalayın və altındakı Varsayılan qutusuna yapışdırın. Hesab əlaqələndirmə nömrəsinə buraxıla bilər.
  • SSL Sertifikatında "İnkişaf son nöqtəm bir sertifikat orqanından bir joker sertifikatı olan bir domenin alt sahəsidir" orta variantını seçin.
  • Test nişanı, nümunə əmrlərinizdən birini yazaraq yeni bacarığı sınamağa imkan verəcək.

Bütün onay işarələri yaşıl olana qədər son iki nişanı doldurmağı bitirin. Sonra Beta Testi xüsusiyyəti ilə bacarıqlarınızı işə salın. Bu, dərc etməzdən əvvəl bacarıqlarınızı hər hansı bir eko cihazda yerləşdirməyə imkan verir. Bacarığı əks -səda cihazınıza quraşdırmaq üçün e -poçt bağlantısındakı təlimatları izləyin.

Addım 3: Bacarıqlarımızı daha ağıllı etmək

Bacarıqlarımızı daha ağıllı etmək
Bacarıqlarımızı daha ağıllı etmək
Bacarıqlarımızı daha ağıllı etmək
Bacarıqlarımızı daha ağıllı etmək
Bacarıqlarımızı daha ağıllı etmək
Bacarıqlarımızı daha ağıllı etmək

Evin hər tərəfinə yayılan boş kompüterləri RSSI siqnal gücünü bildirmək üçün bluetooth mayakını sorğulamaq üçün işə qoyduq.

Birdən çox maşından oxu alaraq siqnal gücünü məsafə üçün bir proxy olaraq istifadə edə bilərik. Evin mayak tapmaq üçün ən çox ehtimal olunan hissəsini hesablamaq üçün bundan necə istifadə edəcəyimizi anlamalıyıq.

Maşın öyrənməsinə müraciət edirik. Hər 2 dəqiqədə bir crontab işi, RSSI tuples məlumat bazası qurur. Fənəri fərqli yerlərdə yerləşdiririk: 'Yataq otağı', 'Hamam', 'Mətbəx', 'Yaşayış sahəsi' kimi RSSI qeydlərini etiketləyirik. Evin xəritəsini hazırladıqdan sonra, xgboost-un XGBClassifier kimi ağac əsaslı modellərindən istifadə edə bilərik.

Gradient artırmanın xgboost tətbiqi, bir neçə saniyə ərzində təhsildən çıxan itkin məlumatları idarə edəcək. Təlim edilmiş modeli davam etdirmək və alexa retrievr tətbiqimizə yükləmək üçün python turşusundan istifadə edin. Bacarıq çağırıldıqda, proqram bluetooth RSSI oxunuşuna baxır və proqnozlaşdırılan bir yer yaradır, alexa 'banyoda baxmağa çalış' deyə cavab verə bilər.

Addım 4: Hamısını bir yerə yığın

Açarların son yerini təxmini bir modelə sahib olaraq, Alexa tərəfindən qaytarılmış ifadəni yaxşılaşdırmaq üçün onu tətbiqə əlavə edə bilərik. Ssenarini oxumaq üçün dəyişdirdik:

flask_ask idxalından Şüşə idxal et, sorğu idxalı pexpect idxal turşusu idxal pandalar pd olaraq np kimi koleksiyonlardan idxal defaultdict, reverse_read idxalından sayıcı reverse_readline app = Flask (_ name_) ask = Ask (tətbiq, '/') @ 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.startswith ('Host') ilə: ln = next (line_gen): _, ip, _, reading = ln.split () read_dict [ip] = oxu res_lst.append (read_dict) əgər ip == 'ip.of.one.computer': read_dict = {} başqa: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Dəyərlər 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 = 'Tahmin varsa == 1' ə baxmağa çalışın: reply_str += 'yataq otağı' elif guess == 2: reply_str += 'vanna otağı' elif tahmin == 3: reply_str += 'mətbəx' elif tahmin == 4: reply_str += 'qonaq otağı' _name_ == "_main_" olarsa reply_str: app.run (ev sahibi = '127.0.0.1', liman = '5000')

En son qeydə alınan rssi siqnal gücünə malik bir fayl götürən guess_locate () adlı yeni bir funksiya yaratdıq. Daha sonra nümunələri turşu xgboost modelimizə qarşı işlədəcək və ən çox ehtimal olunan yer simini qaytaracaq. Alexa istənildikdə bu yer geri qaytarılacaq. Bir mayakla əlaqə qurmaq bir neçə saniyə çəkə biləcəyi üçün sound_alarm.py -də bu funksiyanı çağıran ayrı bir proses həyata keçiririk.

Tövsiyə: