Sisukord:

Alexa, kus on minu võtmed?: 4 sammu
Alexa, kus on minu võtmed?: 4 sammu

Video: Alexa, kus on minu võtmed?: 4 sammu

Video: Alexa, kus on minu võtmed?: 4 sammu
Video: The Gummy Bear Song - Long English Version 2024, Detsember
Anonim
Image
Image
Häkkimise Bluetoothi majakad
Häkkimise Bluetoothi majakad

Alexa sobib eriti hästi teabe otsimiseks ja juhtmevabade koduvõrkude abil varade jälgimiseks. On loomulik kaaluda väärisesemete kiireks hankimiseks võrku panemist. Häkkime odavaid Bluetoothi vähese energiatarbega majakaid võrgu ulatuse ja aku pikaealisuse jaoks ning loome nutika rakenduse, et Alexa teaks, kuhu me võtmed jätsime.

Kuidas seda teha…

Samm 1: Bluetoothi majakate häkkimine

Kolme majaka komplekti saab osta vähem kui 15 dollari eest ja neid toetavad Android/iOS -i rakendused, kuid me loobume privaatsusest. Pealegi ei tohiks meie võtmete leidmine muutuda meie telefoni leidmiseks.

See tarkade valgustite pöördtehnoloogia õpetus aitas meil majakaid juhtida. Alustuseks lülitage sisse seadme aadressi märgutuli, käivitades:

sudo hcitool lescan

Leidke ja kopeerige nimega „iTag” märgitud aadress, seejärel käivitage:

sudo gatttool -I

Ühendage seadmega interaktiivselt, käivitades:

ühendage AA: BB: CC: DD: EE: FF

Proovige valikute vaatamiseks käivitada „abi” või teenuste vaatamiseks „esmane”:

Käivitades 'char-desc', millele järgneb ülaltoodud teeninduskäepide, leiame UUID-d, mille otsime üles, viidates gatt-i iseloomulikele spetsifikatsioonidele ja teenuse spetsifikatsioonidele. Nende teenuste kohta lisateabe saamiseks vaadake seda. Wiresharkiga liiklust kontrollides leiame, et 0100111000000001 käivitab häire ja loogiliselt lülitab 0000111000000001 selle välja. Nüüd on meil lihtne python -funktsioon:

impordi pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Ühendus õnnestus', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Järgmisena keskendume Alexa oskuse loomisele, mis käivitab majakad, kui võtmeid otsime.

Samm: looge Alexa oskus ja rakendus

Alexa oskuse ja rakenduse loomine
Alexa oskuse ja rakenduse loomine
Alexa oskuse ja rakenduse loomine
Alexa oskuse ja rakenduse loomine

Loome oskuse, mis lingitakse kohaliku serveriga. Seejärel seadistame oma serveri mis tahes toimingute tegemiseks, sel juhul anname ligikaudse teabe võtmete asukoha kohta ja paneme Bluetoothi majaka piiksuma. Flask pakub rakenduse teenindamiseks lihtsat ja hõlpsasti kasutatavat pythoni kogu. Kasutades kolbi-küsimust, saame serveri konfigureerida suhtlema oma Alexa oskusega, mille me hiljem ehitame. Teenindage rakendust hästi Ngrokiga, mis annab meile https -lingi, mida vajame oma Alexa oskuste jaoks. Esiteks ehitasime rakenduse kõige lihtsama funktsionaalsusega: et meie BLE -märgutuli käivitamisel piiksuks teha.

#!/usr/bin/env pythonfrom kolbist importimine Kolb kolbist '#Sinu bluetooth -majaka ID siin @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Sinu võtmed on siin kusagil." tagastuslause (kõne_tekst) def sound_alarm (): laps = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Ühendus õnnestus', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001'), kui _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

BLE piiksu tegemiseks kasutasime varem kirjutatud funktsiooni sound_alarm (). Funktsiooni jaoks, mida kavatsuse jaoks kasutatakse, lisame päringu dekoreerija oma kavatsusega "võtmevõtmed". Kui teeme Alexa oskusi Amazoni arendaja armatuurlaual, kasutame seda nime oma kavatsuste jaoks. Kirjutage see skript faili nimega app.py ja käivitage

python app.py

See teenib teie rakendust aadressil https:// localhost: 5000. Käivitage ngrok -server ja kopeerige loodud https -link. Seda vajate Alexa oskuste seadistamisel. Lisateabe saamiseks vaadake seda postitust. Oleme lihtsa rakenduse edukalt seadistanud, nüüd kirjutame Alexa oskuse. Liikuge Amazoni arendaja armatuurlauale ja logige sisse. Klõpsake Alexa ja alustage Alexa Skill komplektiga

Järgige gui antud juhiseid.

Vahekaardil Interaktsioonimudel soovite täita kasti Kavatskeem järgmisega:

Lahtrisse Prooviväljendid soovite kirjutada mõned näidiskäsud, mida inimene võib kasutada oskuste kasutamiseks. Kirjutasime need:

Findkeys leiavad minu võtmed võtmed võtmed kus minu võtmed findkeys ma kaotasin oma võtmed

  • Valige vahekaardil Konfiguratsioon kindlasti teenuse lõpp -punkt HTTPS. Kopeerige oma https -link ja kleepige see allolevasse kasti. Konto linkimise võib jätta väärtusele Ei.
  • Valige SSL-sertifikaadis keskmine valik „Minu arendamise lõpp-punkt on domeeni alamdomeen, millel on sertifikaadi väljaandja metamärk”.
  • Vahekaart Test võimaldab teil uusi oskusi testida, sisestades ühe oma näidiskäskudest.

Lõpeta kahe viimase vahelehe täitmine, kuni kõik linnukesed on rohelised. Seejärel käivitage oma oskus beetatestimise funktsiooniga. See võimaldab teil oma oskusi enne avaldamist majutada mis tahes kajaseadmes. Järgige e -lingi juhiseid, et installida oskus oma kajaseadmesse.

3. samm: muutke oma oskused targemaks

Teeme oma oskusi targemaks
Teeme oma oskusi targemaks
Teeme oma oskusi targemaks
Teeme oma oskusi targemaks
Teeme oma oskusi targemaks
Teeme oma oskusi targemaks

Panime kogu majas levinud jõudeolevad arvutid tööle Bluetoothi majaka päringu tegemiseks, et teatada RSSI signaali tugevus.

Võttes lugemid mitmest masinast, saame signaali tugevust kasutada kauguse puhverserverina. Peame välja mõtlema, kuidas seda kasutada majaka leidmiseks kõige tõenäolisema majaosa arvutamiseks.

Pöördume masinõppe poole. Crontabi töö iga 2 minuti järel koostab RSSI numbrite andmestiku. Majaka paigutamine erinevatesse kohtadesse, nagu „Magamistuba”, „Vannituba”, „Köök”, „Elutuba”, tähistame RSSI logisid. Kui oleme kodu kaardistanud, saame kasutada puupõhiseid mudeleid, näiteks xgboosti XGBClassifier.

Gradiendi suurendamise xgboosti rakendamine hakkab puuduva ajaga aegunud näitude andmetega hakkama saama, treenides paari sekundiga. Kasutage koolitatud mudeli säilitamiseks pythoni hapukurki ja laadige see meie alexa retrievr rakendusse. Kui oskusi kutsutakse, otsib rakendus üles Bluetoothi RSSI -näidu ja loob prognoositud asukoha, alexa saab vastata, soovitades "proovida vannitoas otsida".

4. samm: pange see kõik kokku

Võttes mudeli võtmete viimase asukoha ligikaudseks muutmiseks, saame selle rakendusele lisada, et parandada Alexa tagastatud avaldust. Oleme skripti muutnud järgmiseks:

import osfrom kolbist import Kolb kolbist_ask import Küsi, avaldus import pexpect import hapukurk import panda kui pd import numpy kui np kogudest 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 () tagastuslause (kõne_tekst) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = samas len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = ln.split () read_dict [ip] = res_lst.append (read_dict) lugemine, kui ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Väärtused mdl_ = hapukurk.koormus (avatud (' asukoha_mudeli_fail.dat ',' rb ')) preds = mdl_.predict (val) guess = Loendur (preds) guess = guess.most_common (1) [0] [0] answer_str = 'Proovige otsida teavet' if guess == 1: answer_str += 'bedroom' elif guess == 2: answer_str += 'vannituba' elif vist == 3: answer_str += 'köök' elif vist == 4: answer_str += 'elutuba' return answer_str if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Lõime uue funktsiooni nimega guess_locate (), mis võtab faili, millel on viimased salvestatud rssi signaali tugevused. Seejärel käivitab see proovid meie marineeritud xgboosti mudeli vastu ja tagastab kõige tõenäolisema asukoha stringi. See asukoht tagastatakse, kui Alexalt küsitakse. Kuna majakaga ühenduse loomine võib võtta mõne sekundi, käivitame selle protsessi eraldi protsessi, helistades sellesse sound_alarm.py.

Soovitan: