Cuprins:

Alexa, Unde sunt cheile mele ?: 4 pași
Alexa, Unde sunt cheile mele ?: 4 pași

Video: Alexa, Unde sunt cheile mele ?: 4 pași

Video: Alexa, Unde sunt cheile mele ?: 4 pași
Video: TVneWs - O mama beata cade cu copilul în brate ! 2024, Iulie
Anonim
Image
Image
Hackarea semnalelor Bluetooth
Hackarea semnalelor Bluetooth

Alexa este deosebit de potrivit pentru sarcinile de recuperare a informațiilor și pentru monitorizarea activelor folosind rețelele wireless de acasă. Este firesc să luați în considerare punerea obiectelor de valoare pe grilă pentru recuperarea rapidă. Hackem balize ieftine cu consum redus de energie Bluetooth pentru gama de rețea și longevitatea bateriei și construim o aplicație inteligentă, astfel încât Alexa să știe unde am lăsat tastele.

Cum să o facă…

Pasul 1: piratarea semnalelor Bluetooth

Un set de 3 balize poate fi achiziționat pentru mai puțin de 15 USD și sunt acceptate cu aplicațiile Android / iOS, dar vom renunța la confidențialitate. În plus, găsirea cheilor noastre nu ar trebui să se transforme în găsirea telefonului nostru.

Acest tutorial adafruit despre luminile inteligente de inginerie inversă ne-a ajutat să controlăm balizele. Începeți prin activarea scanării balizei pentru adresa dispozitivului executând:

sudo hcitool lescan

Găsiți și copiați adresa etichetată cu numele „iTag”, apoi rulați:

sudo gatttool -I

Conectați-vă la dispozitiv interactiv executând:

conectați AA: BB: CC: DD: EE: FF

Încercați să rulați „ajutor” pentru a vizualiza opțiunile sau „principal” pentru a vizualiza serviciile:

Rulând „char-desc” urmat de mânerul de service ca mai sus, găsim UUID-uri pe care le căutăm făcând referire la specificațiile caracteristice gatt și specificațiile de service. Pentru mai multe informații despre aceste servicii, consultați acest lucru. Inspectând traficul cu Wireshark, constatăm că 0100111000000001 declanșează alarma și, logic, 0000111000000001 o oprește. Acum avem funcția python simplă:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Conexiune reușită', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Apoi, ne concentrăm pe crearea abilității Alexa pentru a declanșa baliza atunci când căutăm tastele.

Pasul 2: Crearea unei abilități și aplicații Alexa

Crearea unei abilități și aplicații Alexa
Crearea unei abilități și aplicații Alexa
Crearea unei abilități și aplicații Alexa
Crearea unei abilități și aplicații Alexa

Creăm o abilitate care va fi legată de un server local. Apoi ne configurăm serverul pentru a face orice acțiune dorim, în acest caz, oferim o aproximare a locului în care ar putea fi localizate cheile și vom face semnalul sonor Bluetooth. Flask oferă o bibliotecă Python simplă și ușor de utilizat pentru a servi o aplicație. Folosind flask-ask, putem configura serverul pentru a comunica cu abilitățile noastre Alexa pe care le vom construi mai târziu. Serviți bine aplicația cu Ngrok, care ne va oferi un link https de care vom avea nevoie pentru abilitatea noastră Alexa. Mai întâi am construit aplicația cu cea mai simplă funcționalitate: să facem semnalul sonor BLE atunci când este declanșat.

#! / usr / bin / env pythonfrask flask import Flask from flask_ask import Ask, statement statement pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Il dvs. id de baliză bluetooth aici @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Cheile dvs. sunt aici undeva." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Conexiune reușită', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Am folosit funcția sound_alarm () pe care am scris-o mai devreme pentru a face sonorul BLE. Pentru funcția care va fi utilizată pentru intenție, adăugăm decoratorul ask cu intenția noastră „findkeys”. Când vom crea abilitatea Alexa pe tabloul de bord al dezvoltatorului Amazon, vom folosi acest nume pentru intenția noastră. Scrieți acest script într-un fișier numit app.py și rulați

python app.py

Aceasta va servi aplicația dvs. pe https:// localhost: 5000. Rulați un server ngrok și copiați linkul https generat. Veți avea nevoie de ea atunci când configurați abilitatea Alexa. Pentru mai multe detalii, consultați această postare. Am configurat cu succes o aplicație simplă, acum vom scrie abilitatea Alexa. Navigați la tabloul de bord al dezvoltatorului Amazon și conectați-vă. Faceți clic pe Alexa și începeți cu kitul Alexa Skill

Urmați instrucțiunile date de gui.

În fila Model de interacțiune veți dori să completați caseta Schemă de intenție cu următoarele:

În caseta Exemple de probe, doriți să scrieți câteva exemple de comenzi pe care o persoană le-ar putea folosi pentru a invoca abilitatea. Am scris acestea:

findkeys find my keysfindkeys where my keys findkeys Mi-am pierdut cheile

  • În fila Configurare, asigurați-vă că alegeți punctul final al serviciului către HTTPS. Copiați linkul https și lipiți-l în caseta implicită dedesubt. Conectarea contului poate fi lăsată la nr.
  • În certificatul SSL alegeți opțiunea din mijloc, „Punctul meu final de dezvoltare este un subdomeniu al unui domeniu care are un certificat cu metacaracter de la o autoritate de certificare”.
  • Fila Test vă va permite să testați noua abilitate tastând una dintre comenzile dvs. de probă.

Finalizați completarea ultimelor două file până când toate bifele sunt verzi. Apoi lansați-vă abilitățile cu funcția de testare beta. Acest lucru vă permite să vă găzduiți abilitățile pe orice dispozitiv ecou înainte de ao publica. Urmați instrucțiunile de pe linkul de e-mail pentru a instala abilitățile pe dispozitivul dvs. ecou.

Pasul 3: Îmbunătățirea abilităților noastre

Îmbunătățirea abilităților noastre
Îmbunătățirea abilităților noastre
Îmbunătățirea abilităților noastre
Îmbunătățirea abilităților noastre
Îmbunătățirea abilităților noastre
Îmbunătățirea abilităților noastre

Am pus computerele inactive răspândite în toată casa să lucreze la interogarea semnalizatorului bluetooth pentru a raporta puterea semnalului RSSI.

Luând citiri de pe mai multe mașini, putem utiliza puterea semnalului ca proxy pentru distanță. Trebuie să ne dăm seama cum să folosim acest lucru pentru a calcula cea mai probabilă parte a casei pentru a găsi farul.

Trecem la învățarea automată. O lucrare crontab la fiecare 2 minute, creează un set de date de tupluri RSSI. Plasând baliza în diferite locuri, cum ar fi: „Dormitor”, „Baie”, „Bucătărie”, „Spațiu de locuit”, etichetăm jurnalele RSSI. Odată ce am cartografiat casa, putem folosi modele bazate pe copaci, cum ar fi XGBClassifier-ul xgboost.

Implementarea xgboost a creșterii gradientului va gestiona datele lipsă din citirile expirate, antrenându-se în câteva secunde. Utilizați murătura python pentru a persista modelul instruit și pentru a încărca în aplicația noastră Alexa Retrievr. Când este apelată abilitatea, aplicația caută citirea RSSI bluetooth și generează o locație prezisă, Alexa poate răspunde sugerând să „încercați să căutați în baie”.

Pasul 4: Puneți totul împreună

Având un model care să aproximeze ultima locație a tastelor, îl putem adăuga în aplicație pentru a îmbunătăți declarația returnată de Alexa. Am modificat scriptul pentru a citi:

import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import pickle import pandas as pd import numpy as np from collections 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 ('YOUR_DATA_FILE.txt') res_lst = while len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = ln.split () read_dict [ip] = reading res_lst.append (read_dict) if ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N / A ': np.nan}). Valori mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] reply_str = 'Încercați să căutați în' if guess == 1: reply_str + = 'bedroom' elif guess == 2: reply_str + = 'baie' elif guess == 3: reply_str + = 'bucătărie' elif guess == 4: reply_str + = 'living' return reply_str if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Am creat o nouă funcție numită guess_locate () care preia un fișier cu cele mai recente puteri ale semnalului rssi înregistrate. Apoi va rula mostrele pe modelul nostru xgboost murat și va returna șirul de locație cel mai probabil. Această locație va fi returnată când vi se solicită Alexa. Deoarece stabilirea unei conexiuni la un far poate dura câteva secunde, executăm un proces separat care apelează acea funcție în sound_alarm.py.

Recomandat: