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, Novembar
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 pronalaženja. 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 uraditi…

Korak 1: Hakiranje Bluetooth Beacons -a

Set 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 što ćete uključiti beacon scan za adresu uređaja pokretanjem:

sudo hcitool lescan

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

sudo gatttool -I

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 čega slijedi uslužni rukohvat kao gore, pronalazimo UUID-ove koje tražimo pozivanjem na specifikacije karakteristika 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čki 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 fokusiramo 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 serverom. 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 biblioteku za opsluživanje aplikacije. Pomoću flask-ask možemo konfigurirati poslužitelj da komunicira 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. Prvo smo izgradili aplikaciju s najjednostavnijom funkcionalnošću: da naš BLE beacon signalizira kada se aktivira.

#!/usr/bin/env pythoniz uvoza flasice Flaša 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')

Koristili smo funkciju sound_alarm () koju smo ranije napisali da bi BLE zvučni signal. Za funkciju koja će se koristiti za namjeru, dodajemo dekorater upita sa našom namjerom "findkeys". Kada 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 aplikaciju na https:// localhost: 5000. Pokrenite ngrok server 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 upotrebom Alexa Skill kompleta

Slijedite upute koje je dao gui.

Na kartici Model interakcije želite popuniti okvir Šema namjere sa sljedećim:

U okvir Sample Utterances želite napisati neke primjere 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 Podrazumevano ispod. Povezivanje računa možete ostaviti na Ne.
  • 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 će vam omogućiti da testirate novu vještinu upisivanjem jedne od vaših primjera naredbi.

Popunite posljednje dvije kartice dok sve kvačice ne postanu zelene. Zatim pokrenite svoju vještinu pomoću funkcije beta testiranja. To vam omogućuje da svoju vještinu smjestite na bilo koji eho uređaj prije objavljivanja. Slijedite upute na vezi za e -poštu 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čunare u stanju mirovanja raširili smo po cijeloj kući da rade na postavljanju upita bluetooth beacon -u radi izvještavanja 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 najverovatnijeg dijela kuće za pronalaženje svjetionika.

Prelazimo na mašinsko učenje. Crontab posao 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 mapiramo dom, možemo koristiti modele zasnovane na drvetu poput xgboostovog XGBClassifier-a.

Xgboost implementacija pojačavanja gradijenta će obraditi nedostajuće podatke iz vremenski ograničenih očitanja, obuke za nekoliko sekundi. Koristite python pickle da biste zadržali obučeni model i učitali ga u našu aplikaciju alexa retrievr. Kada se pozove vještina, aplikacija traži bluetooth RSSI čitanje i generira predviđenu lokaciju, alexa može odgovoriti sugerirajući da "pokušate pogledati u kupaonici."

Korak 4: Sastavite sve zajedno

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 = 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 = dok je len (res_lst)! = 20: ln = next (line_gen) ako je ln.startswith ('Host'): _, ip, _, č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) pogađa = Counter (preds) pogodi = pogodi.most_common (1) [0] [0] reply_str = 'Pokušajte pogledati' if guess == 1: reply_str += 'spavaća soba' elif pogoditi == 2: reply_str += 'kupatilo' elif pogodak == 3: reply_str += 'kuhinja' elif pogodak == 4: reply_str += 'dnevna soba' vrati odgovor_str ako je _ime_ == "_maj_": app.run (host = '127.0.0.1', port = '5000')

Kreirali smo novu funkciju koja se zove 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. Ova lokacija će se vratiti 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čuje se: