Բովանդակություն:

Ալեքսա, Որտե՞ղ են իմ բանալիները: 4 քայլ
Ալեքսա, Որտե՞ղ են իմ բանալիները: 4 քայլ

Video: Ալեքսա, Որտե՞ղ են իմ բանալիները: 4 քայլ

Video: Ալեքսա, Որտե՞ղ են իմ բանալիները: 4 քայլ
Video: Alabalanica / Ալաբալանիցա 1 (Hayko Mko) 2024, Նոյեմբեր
Anonim
Image
Image
Կոտրել Bluetooth փարոսները
Կոտրել Bluetooth փարոսները

Alexa- ն հատկապես լավ է համապատասխանում տեղեկատվության որոնման խնդիրներին և անլար տնային ցանցերի միջոցով ակտիվների մոնիտորինգին: Բնական է հաշվի առնել թանկարժեք իրերը ցանցի վրա արագ որոնման համար: Մենք կոտրում ենք էժան bluetooth ցածր էներգիայի լուսարձակներ ցանցի տիրույթի և մարտկոցի երկարակեցության համար և ստեղծում ենք խելացի ծրագիր, որպեսզի Alexa- ն իմանա, թե որտեղ ենք թողել բանալիները:

Ինչպես դա անել…

Քայլ 1. Կոտրել Bluetooth փարոսները

3 փարոսների հավաքածու կարելի է ձեռք բերել 15 դոլարից ցածր գնով և աջակցվում են Android/iOS ծրագրերին, սակայն մենք հրաժարվելու ենք գաղտնիությունից: Բացի այդ, մեր բանալիները գտնելը չպետք է վերածվի մեր հեռախոսը գտնելու:

Հակադարձ ինժեներական խելացի լուսարձակների այս adafruit ձեռնարկը մեզ օգնեց վերահսկել փարոսերը: Սկսեք ՝ միացնելով փարոսի սկան սարքի հասցեն ՝ գործարկելով.

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 հաջող', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Հաջորդը, մենք կենտրոնանում ենք այն բանի վրա, երբ փնտրում ենք փարոսը, Alexa հմտություն ստեղծելու համար:

Քայլ 2: Ստեղծեք Alexa հմտություն և ծրագիր

Ստեղծելով Alexa հմտություն և ծրագիր
Ստեղծելով Alexa հմտություն և ծրագիր
Ստեղծելով Alexa հմտություն և ծրագիր
Ստեղծելով Alexa հմտություն և ծրագիր

Մենք ստեղծում ենք հմտություն, որը կապված կլինի տեղական սերվերի հետ: Այնուհետև մենք կարգավորում ենք մեր սերվերը ՝ ցանկացած գործողություն կատարելու համար, որը մենք կցանկանայինք, այս դեպքում ՝ մոտավորություն այն բանի համար, թե որտեղ կարող են գտնվել բանալիները և Bluetooth ազդանշանի ազդանշանը հնչեցնել: Flask- ն ապահովում է պարզ և դյուրին օգտագործման համար նախատեսված Python գրադարան ՝ հավելվածը սպասարկելու համար: Օգտագործելով flask-ask, մենք կարող ենք կարգավորել սերվերը `մեր Alexa հմտությունների հետ հաղորդակցվելու համար, որոնք մենք հետագայում կկառուցենք: Դե, սպասարկեք ծրագիրը Ngrok- ի հետ, որը մեզ կտա https հղում, որը մեզ անհրաժեշտ կլինի մեր Alexa հմտության համար: Սկզբում մենք ստեղծեցինք հավելվածը ամենապարզ ֆունկցիոնալությամբ ՝ միացնելիս BLE փարոսի ազդանշանը հնչեցնելիս:

#!/usr/bin/env python շշալցված ներմուծումից Ֆլասկ flask_ask ներմուծում Հարցրեք, հայտարարություն ներմուծեք pexpect app = Ֆլասկ (_ անուն_) հարցրեք = Հարցրեք (ծրագիր, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #Ձեր bluetooth փարոսի id այստեղ @ask.intent (' findkeys ') def retrievr (): sound_alarm () 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_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Մենք օգտագործել ենք sound_alarm () գործառույթը, որը գրել էինք ավելի վաղ ՝ BLE ազդանշանը հնչեցնելու համար: Ֆունկցիայի համար, որը կօգտագործվի մտադրության համար, մենք ավելացնում ենք հարցազարդիչին մեր մտադրությամբ «որոնման որոնումներ»: Երբ մենք պատրաստում ենք Alexa հմտությունը Amazon ծրագրավորողի վահանակում, մենք կօգտագործենք այս անունը մեր մտադրության համար: Գրեք այս սցենարը app.py անունով ֆայլում և գործարկեք

python app.py

Սա կծառայի ձեր հայտին https:// localhost: 5000 հասցեով: Գործարկեք ngrok սերվեր և պատճենեք ստեղծված https հղումը: Դա ձեզ հարկավոր կլինի, երբ կարգաբերեք Alexa հմտությունը: Լրացուցիչ մանրամասների համար ստուգեք այս գրառումը: Մենք հաջողությամբ ստեղծել ենք մի պարզ ծրագիր, այժմ մենք կգրենք Alexa հմտությունը: Գնացեք Amazon ծրագրավորողի վահանակ և մուտք գործեք: Կտտացրեք Alexa- ին և սկսեք Alexa Skill հավաքածուով

Հետևեք gui- ի կողմից տրված հրահանգներին:

Ինտեգրման մոդել ներդիրում կցանկանաք լրացնել Intent Schema տուփը հետևյալով

Sample Utterances տուփում դուք ցանկանում եք գրել որոշ օրինակելի հրամաններ, որոնք անձը կարող է օգտագործել հմտության համար: Մենք գրել ենք դրանք.

findkeys find my keysfindkeys որտեղ իմ բանալիները findkeys ես կորցրել եմ իմ բանալիները

  • Կազմաձևման ներդիրում համոզվեք, որ ընտրեք ծառայության վերջնական կետը HTTPS- ին: Պատճենեք ձեր https հղումը և տեղադրեք ներքևի Default դաշտում: Հաշվի կապը կարելի է թողնել No.
  • SSL վկայագրում ընտրեք միջին տարբերակը.
  • «Թեստ» ներդիրը թույլ կտա փորձարկել նոր հմտությունը `մուտքագրելով ձեր ընտրանքային հրամաններից մեկը:

Ավարտեք վերջին երկու ներդիրների լրացումը, մինչև բոլոր ստուգման նշանները կանաչ լինեն: Այնուհետեւ գործարկեք ձեր հմտությունները Beta Testing գործառույթի միջոցով: Սա թույլ է տալիս տեղադրել ձեր հմտությունը ցանկացած echo սարքի վրա, նախքան այն հրապարակելը: Հետևեք էլփոստի հղման հրահանգներին `ձեր էխո սարքում հմտությունը տեղադրելու համար:

Քայլ 3. Մեր հմտությունները դարձնել ավելի խելացի

Մեր հմտությունները դարձնելով ավելի խելացի
Մեր հմտությունները դարձնելով ավելի խելացի
Մեր հմտությունները դարձնելով ավելի խելացի
Մեր հմտությունները դարձնելով ավելի խելացի
Մեր հմտությունները դարձնելով ավելի խելացի
Մեր հմտությունները դարձնելով ավելի խելացի

Մենք դնում ենք ամբողջ տանը սփռված անգործուն համակարգիչները, որոնք աշխատում են հարցնել bluetooth փարոսը `RSSI ազդանշանի հզորությունը հաղորդելու համար:

Բազմաթիվ մեքենաներից ընթերցումներ կատարելով ՝ մենք կարող ենք ազդանշանի ուժը օգտագործել որպես հեռավորության վստահված անձ: Մենք պետք է պարզենք, թե ինչպես օգտագործել սա ՝ փարոսը գտնելու համար տան ամենահավանական մասը հաշվարկելու համար:

Մենք դիմում ենք մեքենայական ուսուցման: Քրոնտաբի աշխատանքը յուրաքանչյուր 2 րոպեն մեկ կառուցում է RSSI բազմապատկերի հավաքածու: Փարոսը տեղադրելով տարբեր վայրերում ՝ «Ննջասենյակ», «Լոգարան», «Խոհանոց», «Բնակելի տարածք», մենք մակնշում ենք RSSI տեղեկամատյանները: Տունը քարտեզագրելուց հետո մենք կարող ենք օգտագործել ծառի վրա հիմնված մոդելներ, ինչպիսիք են xgboost- ի XGBClassifier- ը:

Գրադիենտի խթանման xgboost իրականացումը կկարգավորի ժամանակավրեպ ընթերցումների բացակայող տվյալները, ուսուցումը մի քանի վայրկյանում: Օգտագործեք python թթու ՝ վարժեցված մոդելը պահպանելու և մեր alexa retrievr ծրագրում բեռնելու համար: Երբ հմտությունը կոչվում է, ծրագիրը փնտրում է bluetooth RSSI ընթերցումը և առաջացնում կանխատեսված վայր:

Քայլ 4: Ամեն ինչ միասին դնել

Ունենալով բանալիների վերջին տեղադրության մոտավոր մոդել, մենք կարող ենք այն ավելացնել հավելվածում `Alexa- ի վերադարձած հայտարարությունը բարելավելու համար: Մենք փոփոխել ենք սցենարը ՝ կարդալու համար.

ներմուծում տափաշիշից ներմուծում Ֆլասկա flask_ask import Հարցրեք, հայտարարություն ներմուծեք pexpect ներմուծեք թթու ներմուծեք պանդաներ որպես 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 ('Host'): _, ip, _, reading = 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 (բաց (' 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 += 'ննջասենյակի' էլիֆ ենթադրությունը == 2: պատասխան_ստր = '127.0.0.1', նավահանգիստ = '5000')

Մենք ստեղծեցինք նոր գործառույթ, որը կոչվում է guess_locate (), որը վերցնում է rssi ազդանշանի վերջին գրանցված ուժերով ֆայլ: Այնուհետև այն կանցնի նմուշները մեր թթու xgboost մոդելի դեմ և կվերադարձնի ամենահավանական տեղանքի տողը: Այս վայրը կվերադառնա, երբ Alexa- ն հուշվի: Քանի որ փարոսի հետ կապ հաստատելը կարող է տևել մի քանի վայրկյան, մենք կատարում ենք առանձին գործընթաց, որը կանչում է այդ գործառույթը sound_alarm.py- ում:

Խորհուրդ ենք տալիս: