Indholdsfortegnelse:

Alexa, hvor er mine nøgler ?: 4 trin
Alexa, hvor er mine nøgler ?: 4 trin

Video: Alexa, hvor er mine nøgler ?: 4 trin

Video: Alexa, hvor er mine nøgler ?: 4 trin
Video: ВОЖАТАЯ ЗАПЕРЛА СКАУТОВ В ДВИЖУЩЕМСЯ ГРУЗОВИКЕ 24 часа! ПИГГИ РАССКАЖЕТ КТО СТАРШИЙ ОТРЯД! 2024, November
Anonim
Image
Image
Hacking af Bluetooth -beacons
Hacking af Bluetooth -beacons

Alexa er særligt velegnet til informationshentningsopgaver og overvågning af aktiver ved hjælp af trådløse hjemmenetværk. Det er naturligt at overveje at sætte værdigenstande på nettet for hurtig hentning. Vi hacker billige bluetooth lavenergibeacons til netværksområdet og batteriets levetid og bygger en smart applikation, så Alexa ved, hvor vi forlod tasterne.

Hvordan gør man det…

Trin 1: Hacking af Bluetooth -beacons

Et sæt med 3 beacons kan købes for mindre end $ 15 og understøttes med Android/iOS -applikationer, men vi fravælger privatlivets fred. Udover at finde vores nøgler bør det ikke blive til at finde vores telefon.

Denne adafruit -tutorial om reverse engineering smarte lys hjalp os med at kontrollere fyrene. Start med at tænde beacon -scanningen for enhedsadressen ved at køre:

sudo hcitool lescan

Find og kopier adressen mærket med navnet 'iTag', og kør derefter:

sudo gatttool -I

Opret forbindelse til enheden interaktivt ved at køre:

tilslut AA: BB: CC: DD: EE: FF

Prøv at køre 'hjælp' for at se muligheder eller 'primær' for at se tjenester:

Kører 'char-desc' efterfulgt af servicehåndtaget som ovenfor, finder vi UUID'er, som vi ser op ved at referere til de gatt karakteristiske specifikationer og servicespecifikationer. For mere om disse tjenester, tjek dette. Ved inspektion af trafik med Wireshark finder vi ud af, at 0100111000000001 udløser alarmen og logisk set slår 0000111000000001 den fra. Nu har vi den enkle python -funktion:

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

Dernæst fokuserer vi på at skabe Alexa -færdigheden til at udløse fyrtårnet, når vi leder efter tasterne.

Trin 2: Oprettelse af en Alexa Skill og app

Oprettelse af en Alexa Skill og app
Oprettelse af en Alexa Skill og app
Oprettelse af en Alexa Skill og app
Oprettelse af en Alexa Skill og app

Vi skaber en færdighed, der vil blive knyttet til en lokal server. Derefter konfigurerer vi vores server til at foretage enhver handling, vi gerne vil have, i dette tilfælde giver vi en tilnærmelse til, hvor nøglerne kan være placeret, og får Bluetooth -signalet til at bippe. Kolbe giver et enkelt og brugervenligt pythonbibliotek til at betjene et program. Ved hjælp af kolbe-ask kan vi konfigurere serveren til at kommunikere med vores Alexa-færdigheder, vi bygger senere. Betjen godt applikationen med Ngrok, som vil give os et https -link, vi skal bruge til vores Alexa -færdigheder. Først byggede vi applikationen med den enkleste funktionalitet: at få vores BLE beacon til at bippe, når den udløses.

#!/usr/bin/env python fra kolbeimport Flask from flask_ask import Ask, statement import pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Dit bluetooth beacon -id her @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Dine nøgler findes her et sted." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection failed', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') hvis _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Vi brugte funktionen sound_alarm (), vi skrev tidligere til at lave BLE -bip. For den funktion, der vil blive brugt til hensigten, tilføjer vi ask -dekoratøren med vores hensigt "findkeys". Når vi laver Alexa -færdighederne på Amazon -udviklerens dashboard, vil vi bruge dette navn til vores hensigt. Skriv dette script til en fil med navnet app.py og kør

python app.py

Dette tjener din ansøgning på https:// localhost: 5000. Kør en ngrok -server, og kopier det genererede https -link. Du får brug for det, når du konfigurerer Alexa -færdigheden. For flere detaljer, tjek dette indlæg. Vi har med succes oprettet en enkel applikation, nu skriver vi Alexa -færdigheden. Naviger til Amazon udvikler dashboard og log ind. Klik på Alexa og kom i gang med Alexa Skill kit

Følg instruktionerne fra gui.

Under fanen Interationsmodel vil du udfylde boksen Intent Schema med følgende:

I feltet Prøveudtalelser vil du skrive nogle prøvekommandoer, en person kan bruge til at påberåbe sig færdigheden. Vi skrev disse:

findkeys find my keysfindkeys hvor mine nøgler finderkeyke jeg mistede mine nøgler

  • På fanen Konfiguration skal du sørge for at vælge tjenestens slutpunkt til HTTPS. Kopiér dit https -link, og indsæt det i standardboksen nedenunder. Kontolinkning kan overlades til nr.
  • I SSL-certifikatet skal du vælge den midterste mulighed, "Mit udviklingsendepunkt er et underdomæne for et domæne, der har et jokertegncertifikat fra en certifikatmyndighed".
  • Fanen Test giver dig mulighed for at teste den nye færdighed ved at indtaste en af dine prøvekommandoer.

Udfyld de sidste to faner, indtil alle markeringer er grønne. Start derefter din færdighed med Beta Testing -funktionen. Dette giver dig mulighed for at være vært for dine evner på enhver ekko -enhed, før du udgiver den. Følg instruktionerne på e -mail -linket for at installere færdigheden på din ekko -enhed.

Trin 3: Gør vores dygtighed smartere

Gør vores evner klogere
Gør vores evner klogere
Gør vores evner klogere
Gør vores evner klogere
Gør vores evner klogere
Gør vores evner klogere

Vi satte tomgangscomputerne spredt ud over hele huset for at arbejde med at spørge bluetooth -fyrtårnet for at rapportere RSSI -signalstyrken.

Ved at tage aflæsninger fra flere maskiner kan vi udnytte signalstyrken til som en proxy for afstand. Vi er nødt til at finde ud af, hvordan vi kan bruge dette til at beregne den mest sandsynlige del af huset for at finde fyrtårnet.

Vi går over til maskinlæring. Et crontab -job hvert 2. minut opbygger et datasæt af RSSI -tupler. Placering af fyrtårnet forskellige steder som: 'Soveværelse', 'Badeværelse', 'Køkken', 'Opholdsområde' mærker vi RSSI -logfiler. Når vi har kortlagt hjemmet, kan vi bruge træbaserede modeller som xgboosts XGBClassifier.

Xgboost -implementeringen af gradientforstærkning vil håndtere de manglende data fra timeout -aflæsninger, træning om et par sekunder. Brug python pickle til at fastholde den uddannede model og indlæse i vores alexa retrievr -applikation. Når færdigheden kaldes, søger applikationen op på bluetooth RSSI -læsningen og genererer en forudsagt placering, alexa kan svare og foreslår at 'prøve at kigge på badeværelset'.

Trin 4: Sæt det hele sammen

Efter at have en model til at tilnærme den sidste placering af nøglerne, kan vi tilføje den til applikationen for at forbedre den erklæring, der returneres af Alexa. Vi har ændret scriptet til at læse:

import osfrom kolbe import kolbe fra flask_ask import Spørg, erklæring 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] = læsning res_lst.append (read_dict) hvis ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Værdier mdl_ = pickle.load (åben (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) gæt = gæt.most_sædvanlig (1) [0] [0] reply_str = 'Prøv at kigge i' if guess == 1: reply_str += 'bedroom' elif guess == 2: reply_str += 'badeværelse' elif gæt == 3: answer_str += 'køkken' elif gæt == 4: reply_str += 'stue' returner answer_str hvis _name_ == "_main_": app.run (vært = '127.0.0.1', port = '5000')

Vi oprettede en ny funktion kaldet guess_locate (), som tager en fil med de seneste registrerede rssi -signalstyrker. Det vil derefter køre prøverne mod vores syltede xgboost -model og returnere den mest sandsynlige placeringsstreng. Denne placering returneres, når Alexa bliver bedt om det. Da etablering af en forbindelse til et fyrtårn kan tage et par sekunder, kører vi en separat proces, der kalder den funktion i sound_alarm.py.

Anbefalede: