Sadržaj:

Alexa, gdje su mi ključevi?: 4 koraka
Alexa, gdje su mi ključevi?: 4 koraka

Video: Alexa, gdje su mi ključevi?: 4 koraka

Video: Alexa, gdje su mi ključevi?: 4 koraka
Video: Кто-нибудь из вас слышал о полуночной игре? Страшные истории. Мистика. Ужасы 2024, Studeni
Anonim
Image
Image
Hakiranje Bluetooth Beacons -a
Hakiranje Bluetooth Beacons -a

Alexa je posebno pogodna za zadatke pronalaženja informacija i nadgledanje imovine pomoću bežičnih kućnih mreža. Prirodno je razmisliti o stavljanju dragocjenosti na mrežu radi brzog pronalaska. Hakiramo jeftine bluetooth niskoenergetske svjetionike za raspon mreže i trajanje baterije te izrađujemo pametnu aplikaciju tako da Alexa zna gdje smo ostavili ključeve.

Kako to učiniti…

Korak 1: Hakiranje Bluetooth Beacons -a

Skup od 3 svjetionika može se kupiti za manje od 15 USD i podržani su Android/iOS aplikacijama, ali ćemo se isključiti zbog privatnosti. Osim toga, pronalaženje ključeva ne bi se trebalo pretvoriti u pronalaženje našeg telefona.

Ovaj adafruit vodič o pametnim svjetlima za obrnuti inženjering pomogao nam je u kontroli svjetionika. Počnite tako da uključite beacon scan za adresu uređaja pokretanjem:

sudo hcitool lescan

Pronađite i kopirajte adresu označenu imenom "iTag", a zatim pokrenite:

sudo gatttool -Ja

Interaktivno se povežite s uređajem tako što ćete pokrenuti:

spojite AA: BB: CC: DD: EE: FF

Pokušajte pokrenuti "pomoć" za pregled opcija ili "primarnu" za pregled usluga:

Pokretanjem 'char-desc' nakon kojeg slijedi uslužni rukohvat kao gore, pronalazimo UUID-ove koje tražimo pozivanjem na specifikacije karakterističnih za gatt i specifikacije usluge. Za više informacija o ovim uslugama provjerite ovo. Istražujući promet putem Wiresharka, otkrivamo da 0100111000000001 aktivira alarm i logično ga isključuje 0000111000000001. Sada imamo jednostavnu funkciju python:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Veza je uspješna', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Zatim se usredotočujemo na stvaranje Alexa vještine za aktiviranje svjetionika kada tražimo ključeve.

Korak 2: Stvaranje Alexa vještine i aplikacije

Stvaranje Alexa vještine i aplikacije
Stvaranje Alexa vještine i aplikacije
Stvaranje Alexa vještine i aplikacije
Stvaranje Alexa vještine i aplikacije

Stvaramo vještinu koja će biti povezana s lokalnim poslužiteljem. Zatim konfiguriramo naš poslužitelj da poduzme bilo koju radnju koju želimo, u ovom slučaju dajemo približnu informaciju o tome gdje bi se ključevi mogli nalaziti i oglašava zvučni signal Bluetooth signala. Flask pruža jednostavnu i laku za korištenje python knjižnicu za posluživanje aplikacije. Pomoću flask-ask možemo konfigurirati poslužitelj za komunikaciju s našom Alexa vještinom koju ćemo izgraditi kasnije. Dobro poslužite aplikaciju s Ngrokom, koji će nam dati https vezu koja će nam trebati za našu Alexa vještinu. Najprije smo izgradili aplikaciju s najjednostavnijom funkcionalnošću: kako bi naš BLE beacon pustio zvuk kada se aktivira.

#!/usr/bin/env pythoniz importa tikvice Boca iz flask_ask uvoz Pitaj, uvoz izvoda pexpect app = Flask (_ name_) ask = Pitaj (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Vaš bluetooth beacon id ovdje @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Vaši ključevi su tu negdje." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Veza je uspješna', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Upotrijebili smo funkciju sound_alarm () koju smo ranije napisali kako bismo pojačali BLE zvučni signal. Za funkciju koja će se koristiti za namjeru, dodajemo dekorater upita s našom namjerom "findkeys". Kad steknemo Alexa vještinu na nadzornoj ploči za programere Amazona, koristit ćemo ovo ime za svoju namjeru. Napišite ovu skriptu u datoteku pod nazivom app.py i pokrenite je

python app.py

Ovo će poslužiti vašu prijavu na https:// localhost: 5000. Pokrenite ngrok poslužitelj i kopirajte generiranu https vezu. Trebat će vam kada konfigurirate Alexa vještinu. Za više detalja pogledajte ovaj post. Uspješno smo postavili jednostavnu aplikaciju, sada ćemo napisati Alexa vještinu. Idite na nadzornu ploču za programere Amazona i prijavite se. Kliknite na Alexa i počnite s korištenjem Alexa Skill kompleta

Slijedite upute koje je dao gui.

Na kartici Model interakcije želite ispuniti okvir Shema namjere sa sljedećim:

U okvir Sample Utterances želite napisati neke uzorke naredbi koje bi osoba mogla upotrijebiti za dozivanje vještine. Napisali smo ovo:

findkeys find my keysfindkeys where my keys findkeys izgubio sam ključeve

  • Na kartici Konfiguracija svakako odaberite krajnju točku usluge na HTTPS. Kopirajte svoju https vezu i zalijepite je u okvir Zadano ispod. Povezivanje računa možete ostaviti na No.
  • U SSL certifikatu odaberite srednju opciju, "Moja razvojna krajnja točka je poddomena domene koja ima zamjenski certifikat od tijela za izdavanje certifikata".
  • Kartica Test omogućit će vam da isprobate novu vještinu upisivanjem jedne od vaših oglednih naredbi.

Popunite posljednje dvije kartice dok sve kvačice ne postanu zelene. Zatim pokrenite svoju vještinu pomoću značajke Beta testiranja. To vam omogućuje da svoju vještinu ugostite na bilo kojem eho uređaju prije objavljivanja. Slijedite upute na vezi s e -poštom da biste instalirali vještinu na svoj echo uređaj.

Korak 3: Učinimo našu vještinu pametnijom

Učinimo našu vještinu pametnijom
Učinimo našu vještinu pametnijom
Učinimo našu vještinu pametnijom
Učinimo našu vještinu pametnijom
Učinimo našu vještinu pametnijom
Učinimo našu vještinu pametnijom

Računala u stanju mirovanja raširila smo se po cijeloj kući da rade na upitima za bluetooth beacon kako bi izvijestili o jačini RSSI signala.

Uzimajući očitanja s više strojeva, možemo upotrijebiti jačinu signala kao zamjenu za udaljenost. Moramo smisliti kako to iskoristiti za izračunavanje najvjerojatnijeg dijela kuće za pronalaženje svjetionika.

Okrećemo se strojnom učenju. Posao crontab svake 2 minute stvara skup podataka RSSI tuplea. Postavljanjem svjetionika na različita mjesta, poput: 'Spavaća soba', 'Kupaonica', 'Kuhinja', 'Dnevni prostor' označavamo RSSI zapise. Nakon što smo kartirali dom, možemo koristiti modele zasnovane na drvetu poput xgboostovog XGBClassifier-a.

Implementacija povećanja gradijenta xgboost obradit će podatke koji nedostaju iz vremenski ograničenih očitanja, trening za nekoliko sekundi. Upotrijebite python pickle da biste ustrajali u obučenom modelu i učitali ga u našu aplikaciju alexa retrievr. Kada se pozove vještina, aplikacija traži bluetooth RSSI čitanje i generira predviđeno mjesto, alexa može odgovoriti sugerirajući mu da "pokuša pogledati u kupaonici."

Korak 4: Sve spojite

Imajući model za približnu zadnju lokaciju ključeva, možemo ga dodati u aplikaciju kako bismo poboljšali izjavu koju je vratila Alexa. Skriptu smo izmijenili tako da glasi:

import osfrom flask import Flask from flask_ask import Ask, izjava import pexpect import pickle import pande kao pd import numpy kao np iz zbirki import defaultdict, Brojač iz reverse_read import reverse_readline app = Flask (_ name_) ask = Pitaj (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 = dok je len (res_lst)! = 20: ln = next (line_gen) ako je ln.startswith ('Host'): _, ip, _, očitanje = ln.split () read_dict [ip] = čitanje res_lst.append (read_dict) ako je ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Vrijednosti mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) pretpostavka = Counter (preds) pogodak = pogodak.most_common (1) [0] [0] reply_str = 'Pokušajte pogledati "if guess == 1: reply_str +=' spavaća soba" elif pogađanje == 2: reply_str += 'kupaonica' elif pogodak == 3: reply_str += 'kuhinja' elif pogodak == 4: reply_str += 'dnevna soba' povratak odgovor_str ako _ime_ == "_maj_": app.run (host = '127.0.0.1', port = '5000')

Napravili smo novu funkciju pod nazivom guess_locate () koja uzima datoteku s najnovijim zabilježenim jačinama rssi signala. Zatim će pokrenuti uzorke prema našem ukiseljenom modelu xgboost i vratiti najvjerojatniji niz lokacije. Ovo mjesto će biti vraćeno kada Alexa zatraži. Budući da uspostavljanje veze s beaconom može potrajati nekoliko sekundi, pokrećemo zaseban proces koji poziva tu funkciju u sound_alarm.py.

Preporučeni: