Satura rādītājs:

Alexa, kur ir manas atslēgas?: 4 soļi
Alexa, kur ir manas atslēgas?: 4 soļi

Video: Alexa, kur ir manas atslēgas?: 4 soļi

Video: Alexa, kur ir manas atslēgas?: 4 soļi
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Jūlijs
Anonim
Image
Image
Datorurķēšanas Bluetooth bākas
Datorurķēšanas Bluetooth bākas

Alexa ir īpaši piemērots informācijas izguves uzdevumiem un līdzekļu uzraudzībai, izmantojot bezvadu mājas tīklus. Ir dabiski apsvērt vērtslietu ievietošanu tīklā, lai to varētu ātri izgūt. Mēs uzlaužam lētas Bluetooth zema enerģijas patēriņa bākas tīkla diapazonam un akumulatora ilgmūžībai un izveidojam viedu lietojumprogrammu, lai Alexa zinātu, kur mēs atstājām atslēgas.

Kā to izdarīt…

1. darbība. Bluetooth bāku uzlaušana

3 bāku komplektu var iegādāties par mazāk nekā 15 ASV dolāriem, un to atbalsta Android/iOS lietojumprogrammas, taču mēs atsakāmies no privātuma. Turklāt mūsu atslēgu atrašanai nevajadzētu pārvērsties par mūsu tālruņa atrašanu.

Šī adafruit apmācība par viedo gaismu reverso inženieriju palīdzēja mums kontrolēt bākas. Sāciet, ieslēdzot ierīces adreses signālugunis, palaižot:

sudo hcitool lescan

Atrodiet un nokopējiet adresi ar nosaukumu “iTag”, pēc tam palaidiet:

sudo gatttool -I

Interaktīvi izveidojiet savienojumu ar ierīci, palaižot:

savienot AA: BB: CC: DD: EE: FF

Mēģiniet palaist “palīdzību”, lai skatītu opcijas, vai “primāro”, lai skatītu pakalpojumus:

Palaižot “char-desc”, kam seko servisa rokturis, kā norādīts iepriekš, mēs atrodam UUID, kurus meklējam, atsaucoties uz gatt raksturīgajām specifikācijām un pakalpojumu specifikācijām. Lai uzzinātu vairāk par šiem pakalpojumiem, skatiet šo. Pārbaudot trafiku, izmantojot Wireshark, konstatējam, ka 0100111000000001 aktivizē trauksmi, un loģiski, ka 0000111000000001 to izslēdz. Tagad mums ir vienkārša python funkcija:

importēt pexpectdef sound_alarm (BD_ADDR): bērns = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Savienojums veiksmīgs', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Tālāk mēs koncentrējamies uz Alexa prasmes izveidi, lai iedarbinātu bāku, kad meklējam atslēgas.

2. darbība: izveidojiet Alexa prasmi un lietotni

Alexa prasmju un lietotņu izveide
Alexa prasmju un lietotņu izveide
Alexa prasmju un lietotņu izveide
Alexa prasmju un lietotņu izveide

Mēs izveidojam prasmi, kas tiks saistīta ar vietējo serveri. Pēc tam mēs konfigurējam savu serveri, lai tas veiktu visas vēlamās darbības, šajā gadījumā sniedzam aptuvenu informāciju par to, kur var atrasties atslēgas, un nospiežam Bluetooth signālu. Kolba nodrošina vienkāršu un ērti lietojamu pitona bibliotēku, lai kalpotu lietojumprogrammai. Izmantojot kolbu-ask, mēs varam konfigurēt serveri, lai sazinātos ar mūsu Alexa prasmi, kuru mēs vēlāk izveidosim. Labi kalpojiet lietojumprogrammai kopā ar Ngrok, kas dos mums https saiti, kas mums būs nepieciešama mūsu Alexa prasmei. Vispirms mēs izveidojām lietojumprogrammu ar visvienkāršāko funkcionalitāti: lai BLE signālugunis ieslēgtu signālu.

#!/usr/bin/env pythonfrom kolbas importēšana Kolba no flakona '#Jūsu bluetooth bākas ID šeit @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Jūsu atslēgas ir šeit kaut kur." atgriešanās paziņojums (runas_teksts) def sound_alarm (): bērns = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Savienojums veiksmīgs', taimauts = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001'), ja _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Mēs izmantojām funkciju sound_alarm (), ko rakstījām iepriekš, lai BLE pīkstētu. Funkcijai, kas tiks izmantota nolūkā, mēs pievienojam ask decorator ar mūsu nodomu "findkeys". Kad mēs izstrādāsim Alexa prasmes Amazon izstrādātāju informācijas panelī, mēs izmantosim šo nosaukumu mūsu nolūkā. Ierakstiet šo skriptu failā ar nosaukumu app.py un palaidiet

python app.py

Tas kalpos jūsu lietojumprogrammai vietnē https:// localhost: 5000. Palaidiet ngrok serveri un nokopējiet izveidoto https saiti. Tas jums būs nepieciešams, konfigurējot Alexa prasmi. Lai iegūtu sīkāku informāciju, skatiet šo ziņu. Mēs esam veiksmīgi izveidojuši vienkāršu lietojumprogrammu, tagad mēs uzrakstīsim Alexa prasmi. Dodieties uz Amazon izstrādātāju informācijas paneli un piesakieties. Noklikšķiniet uz Alexa un sāciet darbu ar Alexa Skill komplektu

Izpildiet gui sniegtos norādījumus.

Cilnē Mijiedarbības modelis vēlaties aizpildīt lodziņu Nodomu shēma ar:

Lodziņā Izlases paraugi vēlaties ierakstīt dažas izlases komandas, kuras persona varētu izmantot, lai izsauktu prasmi. Mēs rakstījām šos:

Findkeys atrod manas atslēgas

  • Cilnē Konfigurācija noteikti izvēlieties pakalpojuma beigu punktu HTTPS. Kopējiet savu https saiti un ielīmējiet to zemāk esošajā lodziņā Noklusējums. Kontu saistīšanu var atstāt uz Nē.
  • SSL sertifikātā izvēlieties vidējo opciju "Mans izstrādes galapunkts ir domēna apakšdomēns, kuram ir aizstājējzīmes sertifikāts no sertifikācijas iestādes".
  • Cilne Pārbaude ļaus jums pārbaudīt jaunās prasmes, ierakstot kādu no izlases komandām.

Pabeidziet pēdējo divu cilņu aizpildīšanu, līdz visas atzīmes ir zaļas. Pēc tam sāciet savas prasmes, izmantojot beta testēšanas funkciju. Tas ļauj jums izvietot savas prasmes jebkurā atbalss ierīcē pirms tās publicēšanas. Izpildiet e -pasta saitē sniegtos norādījumus, lai instalētu prasmi savā atbalss ierīcē.

3. darbība: padariet mūsu prasmes gudrākas

Padariet mūsu prasmes gudrākas
Padariet mūsu prasmes gudrākas
Padariet mūsu prasmes gudrākas
Padariet mūsu prasmes gudrākas
Padariet mūsu prasmes gudrākas
Padariet mūsu prasmes gudrākas

Mēs ievietojām dīkstāves datorus, kas izplatīti visā mājā, lai veiktu vaicājumus par Bluetooth bāku, lai ziņotu par RSSI signāla stiprumu.

Ņemot rādījumus no vairākām mašīnām, mēs varam izmantot signāla stiprumu kā attāluma starpniekserveri. Mums ir jāizdomā, kā to izmantot, lai aprēķinātu visticamāko mājas daļu, lai atrastu bāku.

Mēs pievēršamies mašīnmācībai. Crontab darbs ik pēc 2 minūtēm izveido RSSI kartīšu datu kopu. Novietojot bāku dažādās vietās, piemēram: "Guļamistaba", "Vannas istaba", "Virtuve", "Dzīvojamā zona", mēs apzīmējam RSSI žurnālus. Kad esam kartējuši māju, mēs varam izmantot koku modeļus, piemēram, xgboost XGBClassifier.

Gradienta palielināšanas xgboost ieviešana apstrādās trūkstošos datus, kas iegūti noildzes laikā, un apmācīs pāris sekundes. Izmantojiet python marinējumu, lai saglabātu apmācīto modeli un ielādētu mūsu alexa retrievr lietojumprogrammā. Kad prasme tiek izsaukta, lietojumprogramma uzmeklē Bluetooth RSSI nolasījumu un ģenerē paredzamo atrašanās vietu, alexa var atbildēt, ierosinot “mēģināt ieskatīties vannas istabā”.

4. solis: salieciet to visu kopā

Ņemot modeli, lai tuvinātu atslēgu pēdējo atrašanās vietu, mēs varam to pievienot lietojumprogrammai, lai uzlabotu Alexa atgriezto paziņojumu. Mēs esam mainījuši skriptu, lai tas būtu šāds:

importēt osfrom kolbas importēšana Kolba no kolbas_ask importēšana Jautāt, paziņojums importēt pexpect importēt marinētu gurķi importēt pandas kā pd importēt numpy kā np no kolekcijām importēt noklusējuma vērtību, skaitītājs no reverse_read importa reverse_readline app = Kolba (_ name_) ask = Ask (lietotne, '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/path/to/repo/sound_alarm.py &") runas_teksts = guess_locate () atgriešanās paziņojums (runas_teksts) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = , kamēr len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = ln.split () read_dict [ip] = lasīšana res_lst.append (read_dict), ja ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Vērtības mdl_ = marinēta gulta (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] answer_str = 'Mēģiniet meklēt elfu, ja uzminat == 1: answer_str +=' guļamistaba ' == 2: answer_str += 'vannas istaba' elif guess == 3: answer_str += 'kitchen' elif guess == 4: answer_str += 'dzīvojamā istaba' return answer_str if _name_ == "_main_": app.run (host = '127.0.0.1', ports = '5000')

Mēs izveidojām jaunu funkciju ar nosaukumu guess_locate (), kas uzņem failu ar jaunākajiem reģistrētajiem rssi signāla stiprumiem. Pēc tam paraugi tiks salīdzināti ar mūsu marinēto xgboost modeli un atgriezīs visticamāko atrašanās vietas virkni. Šī vieta tiks atgriezta, kad tiks prasīts Alexa. Tā kā savienojuma izveide ar bāku var aizņemt dažas sekundes, mēs veicam atsevišķu procesu, izsaucot šo funkciju mapē sound_alarm.py.

Ieteicams: