Talaan ng mga Nilalaman:

Alexa, Nasaan ang Aking Mga Susi ?: 4 Mga Hakbang
Alexa, Nasaan ang Aking Mga Susi ?: 4 Mga Hakbang

Video: Alexa, Nasaan ang Aking Mga Susi ?: 4 Mga Hakbang

Video: Alexa, Nasaan ang Aking Mga Susi ?: 4 Mga Hakbang
Video: ANG GANDA NG MISIS NI RIGOR!๐Ÿ˜#johnestrada #prescillameirelles 2024, Nobyembre
Anonim
Image
Image
Pag-hack ng mga Bluetooth Beacon
Pag-hack ng mga Bluetooth Beacon

Lalo na angkop ang Alexa sa mga gawain sa pagkuha ng impormasyon at pagsubaybay sa mga assets gamit ang mga wireless home network. Likas na isaalang-alang ang paglalagay ng mga mahahalagang bagay sa grid para sa mabilis na pagkuha. Nag-hack kami ng murang Bluetooth na mababang mga beacon ng enerhiya para sa saklaw ng network at mahabang buhay ng baterya at bumuo ng isang matalinong aplikasyon upang malaman ng Alexa kung saan namin iniwan ang mga susi.

Paano ito gawin โ€ฆ

Hakbang 1: Pag-hack ng Mga Bluetooth Beacon

Ang isang hanay ng 3 mga beacon ay maaaring mabili nang mas mababa sa $ 15 at sinusuportahan ng mga application ng Android / iOS ngunit pipiliin namin para sa privacy. Bukod, ang paghahanap ng aming mga susi ay hindi dapat maging paghahanap ng aming telepono.

Ang tutorial ng adafruit na ito sa reverse engineering smart lights ay nakatulong sa amin na makontrol ang mga beacon. Magsimula sa pamamagitan ng pag-on sa beacon scan para sa address ng aparato sa pamamagitan ng pagpapatakbo:

sudo hcitool lescan

Hanapin at kopyahin ang address na may label na may pangalang 'iTag,' pagkatapos ay patakbuhin:

sudo gatttool -ako

Nakakonekta sa aparato nang interactive sa pamamagitan ng pagpapatakbo:

ikonekta ang AA: BB: CC: DD: EE: FF

Subukang patakbuhin ang 'tulong' upang matingnan ang mga pagpipilian o 'pangunahin' upang matingnan ang mga serbisyo:

Ang pagpapatakbo ng 'char-desc' na sinusundan ng hawakan ng serbisyo tulad ng nasa itaas, nakita namin ang mga UUID na tinitingnan namin sa pamamagitan ng pagsangguni sa gatt katangian na mga pagtutukoy at mga pagtutukoy sa serbisyo. Para sa higit pa sa mga serbisyong ito, suriin ito. Naghahanap ng trapiko sa Wireshark, nalaman namin na ang 0100111000000001 ay nagpapalitaw ng alarma at lohikal, 0000111000000001 pinapatay ito. Ngayon mayroon kaming simpleng pagpapaandar ng sawa:

i-import ang pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('ikonekta {}'. format (BD_ADDR)) child.expect ('Matagumpay ang koneksyon', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Susunod, nakatuon kami sa paglikha ng kasanayan sa Alexa upang ma-trigger ang beacon kapag hinahanap namin ang mga susi.

Hakbang 2: Lumilikha ng isang Kasanayan sa Alexa at App

Lumilikha ng isang Kasanayan sa Alexa at App
Lumilikha ng isang Kasanayan sa Alexa at App
Lumilikha ng isang Kasanayan sa Alexa at App
Lumilikha ng isang Kasanayan sa Alexa at App

Lumilikha kami ng kasanayang maiuugnay sa isang lokal na server. Pagkatapos ay ise-configure namin ang aming server upang gumawa ng anumang aksyon na nais naming, sa kasong ito, magbigay ng isang approximation para sa kung saan maaaring matatagpuan ang mga key at gawin ang beep ng beacon ng Bluetooth. Nagbibigay ang Flask ng isang simple at madaling gamitin na python library upang maghatid ng isang application. Gamit ang flask-ask, maaari naming mai-configure ang server upang makipag-usap sa aming kasanayan sa Alexa na bubuo kami sa paglaon. Ihatid nang maayos ang application sa Ngrok, na magbibigay sa amin ng isang link sa https na kakailanganin namin para sa aming kasanayan sa Alexa. Una naming binuo ang application na may pinakasimpleng pag-andar: upang gawin ang aming BLE beacon beep kapag na-trigger.

#! / usr / bin / env pythonfrom flask import Flask from flask_ask import Ask, statement import pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Your bluetooth beacon id here @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Ang iyong mga susi ay nasa paligid dito sa kung saan." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Matagumpay ang koneksyon', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') kung _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Ginamit namin ang pagpapaandar ng tunog_alarm () isinulat namin nang mas maaga upang gawin ang BLE beep. Para sa pagpapaandar na gagamitin para sa hangarin, idinagdag namin ang nagtanong sa dekorasyon kasama ang aming hangarin na "mga findkey". Kapag ginawa namin ang kasanayan sa Alexa sa dashboard ng developer ng Amazon gagamitin namin ang pangalang ito para sa aming hangarin. Isulat ang script na ito sa isang file na pinangalanang app.py at patakbuhin

sawa app.py

Ihahatid nito ang iyong aplikasyon sa https:// localhost: 5000. Patakbuhin ang isang ngrok server at kopyahin ang nabuong link sa https. Kakailanganin mo ito kapag na-configure mo ang kasanayan sa Alexa. Para sa karagdagang detalye, tingnan ang post na ito. Matagumpay kaming nag-set up ng isang simpleng application, ngayon ay susulat kami ng kasanayan sa Alexa. Mag-navigate sa dashboard ng developer ng Amazon at mag-log in. Mag-click sa Alexa at magsimula sa Alexa Skill kit

Sundin ang mga tagubiling ibinigay ng gui.

Sa ilalim ng tab na Modelo ng Pakikipag-ugnay nais mong punan ang kahon ng Intent Schema na may mga sumusunod:

Sa kahon ng Mga Sample Utterances, nais mong magsulat ng ilang mga sample na utos na maaaring gamitin ng isang tao upang makuha ang kasanayan. Sinulat namin ito:

hanapin ng mga findkey ang aking mga keyfindkey kung saan ang aking mga key findkey ay nawala sa akin ang aking mga susi

  • Sa tab na Pag-configure, tiyaking pipiliin ang punto ng pagtatapos ng serbisyo sa HTTPS. Kopyahin ang iyong link sa https at i-paste ito sa Default na kahon sa ilalim. Ang pagli-link ng account ay maaaring iwanang sa No.
  • Sa SSL Certificate pumili ng gitnang pagpipilian, "Ang aking endpoint sa pag-unlad ay isang sub-domain ng isang domain na mayroong isang wildcard na sertipiko mula sa isang awtoridad sa sertipiko".
  • Papayagan ka ng tab na Pagsubok na subukan ang bagong kasanayan sa pamamagitan ng pagta-type sa isa sa iyong mga sample na utos.

Tapusin ang pagpuno sa huling dalawang mga tab hanggang ang lahat ng mga marka ng tseke ay berde. Pagkatapos ay ilunsad ang iyong kasanayan sa tampok na Pagsubok ng Beta. Pinapayagan kang i-host ang iyong kasanayan sa anumang aparato ng echo bago i-publish ito. Sundin ang mga tagubilin sa link ng email upang mai-install ang kasanayan sa iyong echo device.

Hakbang 3: Paggawa ng Mas Matalinong Kasanayan

Paggawa ng Mas Matalinong Kasanayan
Paggawa ng Mas Matalinong Kasanayan
Paggawa ng Mas Matalinong Kasanayan
Paggawa ng Mas Matalinong Kasanayan
Paggawa ng Mas Matalinong Kasanayan
Paggawa ng Mas Matalinong Kasanayan

Inilagay namin ang mga idle computer na kumalat sa buong bahay upang magtrabaho sa pagtatanong sa bluetooth beacon upang iulat ang lakas ng signal ng RSSI.

Ang pagkuha ng mga pagbabasa mula sa maraming mga machine, maaari naming magamit ang lakas ng signal bilang isang proxy para sa distansya. Kailangan nating malaman kung paano ito magagamit upang makalkula ang malamang na bahagi ng bahay upang mahanap ang beacon.

Bumabaling kami sa pag-aaral ng makina. Isang trabaho sa crontab bawat 2 minuto, bumubuo ng isang dataset ng RSSI na mga tuple. Ang paglalagay ng beacon sa iba't ibang mga lugar tulad ng: 'Silid-tulugan', 'Banyo', 'Kusina', 'Buhay na Lugar' na nilagyan namin ng label ang mga RSSI log. Kapag na-map na namin ang bahay, maaari kaming gumamit ng mga modelo na nakabatay sa puno tulad ng XgClost's XGBClassifier.

Ang xgboost pagpapatupad ng gradient boosting ay hahawak sa nawawalang data mula sa mga pag-time na pagbasa, pagsasanay sa loob ng ilang segundo. Gumamit ng python pickle upang magpatuloy sa sinanay na modelo at i-load sa aming aplikasyon ng retrievr na Alexa. Kapag tinawag ang kasanayan, hahanapin ng application ang pagbabasa ng Bluetooth na RSSI at bumubuo ng isang hinulaang lokasyon, maaaring tumugon si Alexa na nagmumungkahi na 'subukan ang pagtingin sa banyo.'

Hakbang 4: Pagsasama-sama sa Lahat ng Ito

Ang pagkakaroon ng isang modelo upang tantyahin ang huling lokasyon ng mga key, maaari namin itong idagdag sa application upang mapabuti ang pahayag na ibinalik ng Alexa. Binago namin ang script upang mabasa:

import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import pickle pandas as pd import numpy as np from koleksyon 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 ('HIS_DATA_FILE.txt') res_lst = habang len (res_lst)! = 20: ln = susunod (line_gen) kung ln.startswith ('Host'): _, ip, _, nagbasa = ln.split () read_dict [ip] = pagbabasa res_lst.append (read_dict) kung ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N / A ': np.nan}). Nagkakahalaga ng mdl_ = pickle.load (buksan (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) hulaan = Counter (preds) hulaan = hula.most_common (1) [0] [0] reply_str = 'Subukang tingnan ang' kung hulaan == 1: reply_str + = 'kwarto' elif hula == 2: reply_str + = 'banyo' elif hulaan == 3: reply_str + = 'kusina' elif hulaan == 4: reply_str + = 'sala' ibalik ang reply_str kung _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Lumikha kami ng isang bagong pag-andar na tinatawag na guess_locate () na tumatagal ng isang file na may pinakabagong naitala na lakas ng signal ng rssi. Pagkatapos ay tatakbo ang mga sample laban sa aming naka-pickle na xgboost na modelo at ibabalik ang malamang na string ng lokasyon. Ibabalik ang lokasyon na ito kapag na-prompt ang Alexa. Dahil ang pagtaguyod ng isang koneksyon sa isang beacon ay maaaring tumagal ng ilang segundo, nagpapatakbo kami ng isang hiwalay na proseso ng pagtawag sa pagpapaandar na iyon sa sound_alarm.py.

Inirerekumendang: