Përmbajtje:

Alexa, Ku janë çelësat e mi?: 4 hapa
Alexa, Ku janë çelësat e mi?: 4 hapa

Video: Alexa, Ku janë çelësat e mi?: 4 hapa

Video: Alexa, Ku janë çelësat e mi?: 4 hapa
Video: КАК НАСТРОИТЬ L4D2 2024, Korrik
Anonim
Image
Image
Hacking fenerët Bluetooth
Hacking fenerët Bluetooth

Alexa është veçanërisht i përshtatshëm për detyrat e marrjes së informacionit dhe monitorimin e aseteve duke përdorur rrjetet shtëpiake pa tel. Naturalshtë e natyrshme të merret parasysh vendosja e sendeve me vlerë në rrjet për marrje të shpejtë. Ne hakojmë fenerë të lirë bluetooth me energji të ulët për gamën e rrjetit dhe jetëgjatësinë e baterisë dhe ndërtojmë një aplikacion të zgjuar në mënyrë që Alexa të dijë se ku i kemi lënë çelësat.

Si ta bëni…

Hapi 1: Hacking Bluetooth Beacons

Një grup prej 3 fenerësh mund të blihen për më pak se 15 dollarë dhe mbështeten me aplikacione Android/iOS, por ne do të zgjedhim privatësinë. Për më tepër, gjetja e çelësave tanë nuk duhet të kthehet në gjetjen e telefonit tonë.

Ky mësim adafruit mbi dritat inteligjente inxhinierike të kundërta na ndihmoi të kontrollonim fenerët. Filloni duke aktivizuar skanimin e fenerit për adresën e pajisjes duke ekzekutuar:

sudo hcitool lescan

Gjeni dhe kopjoni adresën e etiketuar me emrin 'iTag', pastaj ekzekutoni:

sudo gatttool -I

Lidhuni me pajisjen në mënyrë interaktive duke ekzekutuar:

lidhni AA: BB: CC: DD: EE: FF

Provoni të përdorni "ndihmë" për të parë opsionet ose "parësore" për të parë shërbimet:

Duke ekzekutuar 'char-desc' e ndjekur nga doreza e shërbimit si më sipër, gjejmë UUID të cilat i shikojmë duke iu referuar specifikimeve karakteristike të gatt dhe specifikimeve të shërbimit. Për më shumë mbi këto shërbime, shikoni këtë. Duke kontrolluar trafikun me Wireshark, zbulojmë se 0100111000000001 shkakton alarmin dhe logjikisht, 0000111000000001 e fik atë. Tani kemi funksionin e thjeshtë python:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('Connect {}'. format (BD_ADDR)) child.expect ('Lidhja e suksesshme', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Tjetra, ne përqëndrohemi në krijimin e aftësisë Alexa për të ndezur fenerin kur po kërkojmë çelësat.

Hapi 2: Krijimi i një Aftësie dhe Aplikacioni Alexa

Krijimi i një Aftësie dhe Aplikacioni Alexa
Krijimi i një Aftësie dhe Aplikacioni Alexa
Krijimi i një Aftësie dhe Aplikacioni Alexa
Krijimi i një Aftësie dhe Aplikacioni Alexa

Ne krijojmë një aftësi që do të lidhet me një server lokal. Pastaj ne konfigurojmë serverin tonë që të ndërmarrë çdo veprim që ne dëshirojmë, në këtë rast, të sigurojë një përafrim se ku mund të vendosen çelësat dhe të bëjë sinjalin e sinjalit Bluetooth. Flask siguron një bibliotekë python të thjeshtë dhe të lehtë për t'u përdorur për t'i shërbyer një aplikacioni. Duke përdorur flask-ask, ne mund të konfigurojmë serverin që të komunikojë me aftësinë tonë Alexa që do të ndërtojmë më vonë. Shërbejeni mirë aplikacionin me Ngrok, i cili do të na japë një lidhje https që do të na duhet për aftësinë tonë Alexa. Së pari ne ndërtuam aplikacionin me funksionalitetin më të thjeshtë: ta bëjmë sinjalin tonë sinjalizues BLE kur aktivizohet.

#!/usr/bin/env python nga importi i balonës Flaska nga importi i shisheve Pyetni, importoni deklaratën pexpect app = Flask (_ name_) pyet = Pyetni (aplikacion, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #Identifikuesi yt bluetooth këtu @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Çelësat e tu janë këtu diku." deklarata e kthimit (fjalimi_tekst) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('Connect {}'. format (BD_ADDR)) child.expect ('Lidhja e suksesshme', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') nëse _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Ne përdorëm funksionin sound_alarm () që kemi shkruar më herët për të bërë bip BLE. Për funksionin që do të përdoret për qëllimin, shtojmë dekoratorin e pyetjes me qëllimin tonë "findkeys". Kur krijojmë aftësinë Alexa në pultin e zhvilluesve të Amazon, ne do ta përdorim këtë emër për qëllimin tonë. Shkruani këtë skenar në një skedar të quajtur app.py dhe ekzekutoni

aplikacioni python.py

Kjo do t'i shërbejë aplikacionit tuaj në https:// localhost: 5000. Drejtoni një server ngrok dhe kopjoni lidhjen https të krijuar. Do t'ju duhet kur konfiguroni aftësinë Alexa. Për më shumë detaje, shikoni këtë postim. Ne kemi krijuar me sukses një aplikacion të thjeshtë, tani do të shkruajmë aftësinë Alexa. Shkoni te pulti i zhvilluesve të Amazon dhe regjistrohuni. Klikoni në Alexa dhe filloni me kompletin Alexa Skill

Ndiqni udhëzimet e dhëna nga gui.

Nën skedën Modeli i Integrimit do të dëshironi të plotësoni kutinë e Skemës së Qëllimit me sa vijon:

Në kutinë Sample Utterances, ju doni të shkruani disa komanda shembull që një person mund të përdorë për të thirrur aftësinë. Ne i kemi shkruar këto:

findkeys gjejnë tastet e mia keywords ku çelësat e mi findkeys kam humbur çelësat e mi

  • Në skedën Konfigurimi, sigurohuni që të zgjidhni pikën përfundimtare të shërbimit në HTTPS. Kopjoni lidhjen tuaj https dhe ngjiteni në kutinë e Parazgjedhur poshtë. Lidhja e llogarisë mund të lihet në Nr.
  • Në Certifikatën SSL zgjidhni opsionin e mesëm, "Pika përfundimtare e zhvillimit tim është një nën-domen i një domeni që ka një çertifikatë të egër nga një autoritet certifikate".
  • Skeda Test do t'ju lejojë të provoni aftësinë e re duke shtypur një nga komandat tuaja të mostrës.

Përfundoni plotësimin e dy skedave të fundit derisa të gjitha shenjat e kontrollit të jenë jeshile. Pastaj filloni aftësitë tuaja me veçorinë e Testimit Beta. Kjo ju lejon të mbani aftësinë tuaj në çdo pajisje jehonë para se ta publikoni. Ndiqni udhëzimet në lidhjen e postës elektronike për të instaluar aftësinë në pajisjen tuaj jehonë.

Hapi 3: Duke e bërë Aftësinë Tonë Më të Zgjuar

Duke e bërë Aftësinë Tonë Më të Zgjuar
Duke e bërë Aftësinë Tonë Më të Zgjuar
Duke e bërë Aftësinë Tonë Më të Zgjuar
Duke e bërë Aftësinë Tonë Më të Zgjuar
Duke e bërë Aftësinë Tonë Më të Zgjuar
Duke e bërë Aftësinë Tonë Më të Zgjuar

Ne i vendosëm kompjuterët boshe të shpërndarë në të gjithë shtëpinë për të punuar në kërkimin e fenerit bluetooth për të raportuar fuqinë e sinjalit RSSI.

Duke marrë lexime nga makina të shumta, ne mund të përdorim fuqinë e sinjalit si një përfaqësues për distancën. Ne duhet të kuptojmë se si ta përdorim këtë për të llogaritur pjesën më të mundshme të shtëpisë për të gjetur fenerin.

Ne i drejtohemi mësimit të makinerisë. Një punë crontab çdo 2 minuta, krijon një grup të dhënash të tupleve RSSI. Duke e vendosur fenerin në pika të ndryshme si: 'Dhoma gjumi', 'Banjo', 'Kuzhina', 'Zona e jetesës' i etiketojmë regjistrat RSSI. Pasi të kemi hartëzuar shtëpinë, mund të përdorim modele të bazuara në pemë si XGBClassifier i xgboost.

Zbatimi xgboost i rritjes së gradientit do të trajtojë të dhënat e munguara nga leximet e skaduara, duke u stërvitur në disa sekonda. Përdorni turshi python për të vazhduar modelin e stërvitur dhe ngarkuar në aplikacionin tonë të marrjes së alexa. Kur të thirret aftësia, aplikacioni shikon leximin e RSSI bluetooth dhe gjeneron një vendndodhje të parashikuar, alexa mund të përgjigjet duke sugjeruar që të "provoni të shikoni në banjo".

Hapi 4: Vendosja e të gjitha së bashku

Duke pasur një model për të përafruar vendndodhjen e fundit të çelësave, ne mund ta shtojmë atë në aplikacion për të përmirësuar deklaratën e kthyer nga Alexa. Ne kemi modifikuar skenarin për të lexuar:

import osfrom nga balona import Flask nga flask_ask import Pyet, deklaratë import pexpect import turshi turshi si pd import numpy si np nga koleksionet import defaultdict, Counter from reverse_read import reverse_readline app = Flask (_ name_) pyes = Pyet (aplikacion, '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/path/to/repo/sound_alarm.py &") speech_text = guess_locate () deklarata e kthimit (speech_text) def guess_locate (): read_dict = {} line_gen = linja e kundërt ('YOUR_DATA_FILE.txt') res_lst = ndërsa len (res_lst)! = 20: ln = tjetër (line_gen) nëse ln.startswith ('Host'): _, ip, _, leximi = ln.split () read_dict [ip] = leximi i res_lst.append (read_dict) nëse ip == 'ip.of.one.computer': read_dict = {} tjetër: kaloni val = pd. DataFrame (res_lst).zëvendësim ({'N/ A ': np.nan}). Vlerat mdl_ = pickle.load (hapur (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] answer_str = 'Provo të shikosh në' if guess == 1: answer_str += 'dhoma gjumi' elif guess == 2: answer_str += 'banjo' elif guess == 3: answer_str += 'kuzhinë' elif guess == 4: reply_str += 'dhoma e ndenjes' kthehu reply_str nëse _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Ne krijuam një funksion të ri të quajtur guess_locate () i cili merr një skedar me fuqitë më të fundit të regjistruara rssi të sinjalit. Pastaj do të ekzekutojë mostrat kundër modelit tonë turshi xgboost dhe do të kthejë vargun më të mundshëm të vendndodhjes. Ky vend do të kthehet kur të kërkohet nga Alexa. Meqenëse krijimi i një lidhjeje me një fener mund të zgjasë disa sekonda, ne kryejmë një proces të veçantë duke e thirrur atë funksion në sound_alarm.py.

Recommended: