Სარჩევი:

ალექსია, სად არის ჩემი გასაღებები?: 4 ნაბიჯი
ალექსია, სად არის ჩემი გასაღებები?: 4 ნაბიჯი

ვიდეო: ალექსია, სად არის ჩემი გასაღებები?: 4 ნაბიჯი

ვიდეო: ალექსია, სად არის ჩემი გასაღებები?: 4 ნაბიჯი
ვიდეო: IV დასი (C.J) - ისევ ვებრძვი ზამთარს 2024, ნოემბერი
Anonim
Image
Image
გატეხილი Bluetooth შუქურები
გატეხილი Bluetooth შუქურები

Alexa განსაკუთრებით კარგად ერგება ინფორმაციის მოპოვების ამოცანებს და უკაბელო სახლის ქსელების გამოყენებით აქტივების მონიტორინგს. ბუნებრივია განიხილოს ძვირფასი ნივთების ბადეზე სწრაფი მოძიების მიზნით. ჩვენ ვტეხავთ დაბალ bluetooth დაბალი ენერგიის შუქურებს ქსელის დიაპაზონისა და ბატარეის ხანგრძლივობისთვის და ვქმნით ჭკვიან პროგრამას ისე, რომ ალექსამ იცოდეს სად დავტოვეთ გასაღებები.

Როგორ გავაკეთო ეს…

ნაბიჯი 1: Bluetooth შუქურების გატეხვა

3 შუქურის ნაკრები შეგიძლიათ შეიძინოთ 15 დოლარზე ნაკლებ ფასად და მხარდაჭერილია Android/iOS პროგრამებით, მაგრამ ჩვენ კონფიდენციალურობაზე უარს ვიტყვით. გარდა ამისა, ჩვენი გასაღებების პოვნა არ უნდა იქცეს ჩვენი ტელეფონის პოვნაში.

ეს ადაფრუტის გაკვეთილი საპირისპირო ინჟინერიის ჭკვიანი შუქების შესახებ დაგვეხმარა შუქურების კონტროლში. დაიწყეთ მოწყობილობის მისამართის შუქის სკანირების ჩართვით გაშვებით:

sudo hcitool lescan

იპოვეთ და დააკოპირეთ მისამართი სახელწოდებით "iTag", შემდეგ გაუშვით:

sudo gatttool -I

დაუკავშირდით მოწყობილობას ინტერაქტიული გაშვებით:

დააკავშირეთ AA: BB: CC: DD: EE: FF

სცადეთ გაუშვათ "დახმარება" პარამეტრების სანახავად ან "ძირითადი" სერვისების სანახავად:

გაშვებული 'char-desc', რასაც მოჰყვება სერვისის სახელური, როგორც ზემოთ, ჩვენ ვპოულობთ UUID- ებს, რომლებსაც ჩვენ ვიკვლევთ gatt– ის დამახასიათებელი მახასიათებლებისა და მომსახურების სპეციფიკაციების მითითებით. ამ სერვისების შესახებ მეტი შეამოწმეთ. Wireshark– ით მოძრაობის შემოწმებისას ჩვენ ვხვდებით, რომ 0100111000000001 იწვევს სიგნალიზაციას და ლოგიკურად, 0000111000000001 გამორთავს მას. ახლა ჩვენ გვაქვს პითონის მარტივი ფუნქცია:

შემოტანა pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('Connect {}'. format (BD_ADDR)) child.expect ('Connection suksess', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

შემდეგი, ჩვენ ყურადღებას ვაქცევთ Alexa უნარის შექმნას შუქურის გაშვებისას, როდესაც ჩვენ ვეძებთ გასაღებებს.

ნაბიჯი 2: შექმენით Alexa უნარი და აპლიკაცია

Alexa უნარისა და აპლიკაციის შექმნა
Alexa უნარისა და აპლიკაციის შექმნა
Alexa უნარისა და აპლიკაციის შექმნა
Alexa უნარისა და აპლიკაციის შექმნა

ჩვენ ვქმნით უნარს, რომელიც იქნება დაკავშირებული ადგილობრივ სერვერთან. შემდეგ ჩვენ ვაკონფიგურირებთ ჩვენს სერვერს, რომ განახორციელოს ნებისმიერი ქმედება, რაც ჩვენ გვსურს, ამ შემთხვევაში, მივაწოდოთ მიახლოება, თუ სად შეიძლება განთავსდეს გასაღებები და გამოვაჩინოთ Bluetooth შუქურის სიგნალი. Flask გთავაზობთ მარტივ და ადვილად გამოსაყენებელ პითონის ბიბლიოთეკას, რომელიც ემსახურება პროგრამას. Flask-ask– ის გამოყენებით, ჩვენ შეგვიძლია კონფიგურაცია გავუწიოთ სერვერს, რომ დაუკავშირდეს ჩვენს Alexa უნარს, რომელსაც ჩვენ მოგვიანებით ავაშენებთ. კარგად ემსახურეთ პროგრამას Ngrok– ით, რომელიც მოგვცემს https ბმულს, რომელიც დაგვჭირდება Alexa უნარისთვის. პირველ რიგში ჩვენ შევქმენით პროგრამა უმარტივესი ფუნქციონირებით: რომ ჩვენი BLE შუქურის სიგნალი იყოს ჩართვისას.

#!/usr/bin/env პითონი ფლაკონის იმპორტიდან კოლბა flask_ask იმპორტი ითხოვეთ, განაცხადი იმპორტი pexpect app = Flask (_ name_) ask = ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #შენი bluetooth შუქურის id აქ @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "შენი გასაღებები აქ არის სადმე." დაბრუნების განცხადება (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('დაკავშირება {}'. ფორმატი (BD_ADDR)) child.expect ('კავშირი წარმატებულია', დროის გასვლა = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') თუ _name_ == "_ ძირითადი_": app.run (მასპინძელი = '127.0.0.1', პორტი = '5000')

ჩვენ გამოვიყენეთ ფუნქცია sound_alarm (), რომელიც ადრე დავწერეთ BLE სიგნალის გასაკეთებლად. იმ ფუნქციისთვის, რომელიც გამოყენებული იქნება განზრახვისთვის, ჩვენ ვამატებთ შეკითხვის დეკორატორს ჩვენი განზრახვით "findkeys". როდესაც ჩვენ ვაკეთებთ Alexa უნარს ამაზონის დეველოპერების დაფაზე, ჩვენ ვიყენებთ ამ სახელს ჩვენი განზრახვისთვის. ჩაწერეთ ეს სკრიპტი ფაილში სახელწოდებით app.py და გაუშვით

პითონის აპლიკაცია. py

ეს მოემსახურება თქვენს აპლიკაციას https:// localhost: 5000. გაუშვით გათბობის სერვერი და დააკოპირეთ გენერირებული https ბმული. თქვენ დაგჭირდებათ, როდესაც დააკონფიგურირებთ Alexa უნარს. დამატებითი დეტალებისთვის, გადახედეთ ამ პოსტს. ჩვენ წარმატებით შევქმენით მარტივი პროგრამა, ახლა ჩვენ დავწერთ Alexa უნარს. გადადით ამაზონის დეველოპერების საინფორმაციო დაფაზე და შედით სისტემაში. დააწკაპუნეთ Alexa– ზე და დაიწყეთ Alexa Skill ნაკრებით

მიჰყევით გიის მითითებებს.

ჩანართის ინტეგრაციის მოდელის ქვეშ თქვენ გსურთ შეავსოთ ინტენსიური სქემის ყუთი შემდეგით:

Sample Utterances ყუთში, თქვენ გინდათ დაწეროთ რამოდენიმე ბრძანება, რომელიც ადამიანმა შეიძლება გამოიყენოს უნარის გამოსაძახებლად. ჩვენ დავწერეთ ეს:

findkeys იპოვეთ ჩემი გასაღებები findkeys სადაც ჩემი გასაღებები findkeys მე დავკარგე ჩემი გასაღებები

  • კონფიგურაციის ჩანართში, დარწმუნდით, რომ აირჩიეთ სერვისის ბოლო წერტილი HTTPS– ზე. დააკოპირეთ თქვენი https ბმული და ჩასვით ნაგულისხმევი ყუთში ქვემოთ. ანგარიშის ბმული შეიძლება დარჩეს ნომერზე.
  • SSL სერთიფიკატში შეარჩიეთ საშუალო ვარიანტი: "ჩემი განვითარების საბოლოო წერტილი არის დომენის ქვე-დომენი, რომელსაც აქვს wildcard სერთიფიკატი სერტიფიკატის ორგანოსგან".
  • ტესტის ჩანართი საშუალებას მოგცემთ შეამოწმოთ ახალი უნარი თქვენი ერთ -ერთი ნიმუშის ბრძანების აკრეფით.

დაასრულეთ ბოლო ორი ჩანართის შევსება, სანამ ყველა გამშვები ნიშანი არ გახდება მწვანე. შემდეგ გაუშვით თქვენი უნარი ბეტა ტესტირების ფუნქციით. ეს საშუალებას მოგცემთ უმასპინძლოთ თქვენს უნარებს ექოს მოწყობილობაზე გამოქვეყნებამდე. მიჰყევით მითითებებს ელ.ფოსტის ბმულზე, რათა დააინსტალიროთ უნარი თქვენს ექოს მოწყობილობაზე.

ნაბიჯი 3: გახადეთ ჩვენი უნარი უფრო ჭკვიანი

გავზარდოთ ჩვენი უნარი
გავზარდოთ ჩვენი უნარი
გავზარდოთ ჩვენი უნარი
გავზარდოთ ჩვენი უნარი
გავზარდოთ ჩვენი უნარი
გავზარდოთ ჩვენი უნარი

ჩვენ დავუშვით უსაქმური კომპიუტერები, რომლებიც მთელს სახლშია გავრცელებული, რათა ვიმუშაოთ bluetooth შუქურის გამოძიებაზე RSSI სიგნალის სიძლიერის შესახებ.

რამოდენიმე აპარატის კითხვისას, ჩვენ შეგვიძლია გამოვიყენოთ სიგნალის სიძლიერე, როგორც პროქსი დისტანციისთვის. ჩვენ უნდა გავარკვიოთ როგორ გამოვიყენოთ ეს სახლის ყველაზე სავარაუდო ნაწილის გამოსათვლელად შუქურის მოსაძებნად.

ჩვენ მივმართავთ მანქანათმცოდნეობას. Crontab სამუშაო ყოველ 2 წუთში, ქმნის RSSI tuples მონაცემთა ნაკრებს. შუქურის განთავსება სხვადასხვა ადგილას, როგორიცაა: "საძინებელი", "აბაზანა", "სამზარეულო", "საცხოვრებელი ფართი" ჩვენ ვნიშნავთ RSSI ჟურნალებს. მას შემდეგ, რაც ჩვენ დავსახეთ სახლი, ჩვენ შეგვიძლია გამოვიყენოთ ხეზე დაფუძნებული მოდელები, როგორიცაა xgboost's XGBClassifier.

გრადიენტის გაზრდის xgboost განხორციელება გაუმკლავდება დაკარგული მონაცემების დროულ კითხვას, ვარჯიშს რამდენიმე წამში. გამოიყენეთ პითონის მწნილი, რომ გააგრძელოთ გაწვრთნილი მოდელი და ჩატვირთოთ ჩვენს Alexa retrievr პროგრამაში. როდესაც უნარი იძახის, აპლიკაცია ეძებს bluetooth RSSI კითხვას და ქმნის წინასწარ განსაზღვრულ ადგილს, ალექსას შეუძლია უპასუხოს "აბაზანაში ძიების მცდელობას".

ნაბიჯი 4: ყველაფერი ერთად ააწყვეთ

ჩვენ გვაქვს მოდელი გასაღებების ბოლო მდებარეობის დასადგენად, ჩვენ შეგვიძლია დავამატოთ ის განაცხადს Alexa– ს მიერ დაბრუნებული განცხადების გასაუმჯობესებლად. ჩვენ შევცვალეთ სკრიპტი წასაკითხად:

იმპორტი osfrom flask იმპორტი კოლბა flask_ask იმპორტი ითხოვეთ, განაცხადი იმპორტი pexpect იმპორტი მწნილი იმპორტი pandas როგორც pd იმპორტი numpy როგორც np კოლექციებიდან import defaultdict, Counter from reverse_read import reverse_readline app = Flask (_ name_) ask = Ask (app, '/') @ 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 = შემდეგი (line_gen) თუ ln.startswith ('მასპინძელი'): _, ip, _, კითხვა = ln.split () read_dict [ip] = res_lst.append (read_dict) if ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst). ჩანაცვლება ({'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] answer_str = 'სცადეთ ნახოთ' if guess == 1: answer_str += 'საძინებელი' elif გამოცნობა == 2: reply_str += 'აბაზანა' elif გამოცნობა == 3: reply_str += 'სამზარეულო' elif გამოცნობა == 4: reply_str += 'მისაღები ოთახი' reply_str თუ _name_ == "_ მთავარი_": app.run (მასპინძელი = '127.0.0.1', პორტი = '5000')

ჩვენ შევქმენით ახალი ფუნქცია სახელწოდებით guess_locate () რომელიც იღებს ფაილს უახლესი ჩაწერილი rssi სიგნალის სიძლიერით. შემდეგ ის გაუშვებს ნიმუშებს ჩვენი დამწნილებული xgboost მოდელის წინააღმდეგ და დააბრუნებს მდებარეობის ყველაზე სავარაუდო სტრიქონს. ეს ადგილმდებარეობა დაბრუნდება, როდესაც Alexa მოთხოვნილი იქნება. ვინაიდან შუქურასთან კავშირის დამყარებას შეიძლება რამდენიმე წამი დასჭირდეს, ჩვენ ვაწარმოებთ ცალკე პროცესს, რომელიც ამ ფუნქციას ეძახის sound_alarm.py.

გირჩევთ: