Innholdsfortegnelse:

Alexa, Where Are My Keys ?: 4 Steps
Alexa, Where Are My Keys ?: 4 Steps

Video: Alexa, Where Are My Keys ?: 4 Steps

Video: Alexa, Where Are My Keys ?: 4 Steps
Video: HOW TO FIND your "KEYS" with ALEXA - featuring PebbleBee Finder 2024, November
Anonim
Image
Image
Hacking av Bluetooth -beacons
Hacking av Bluetooth -beacons

Alexa er spesielt godt egnet for informasjonsinnhenting og overvåking av eiendeler ved bruk av trådløse hjemmenettverk. Det er naturlig å vurdere å sette verdisaker på nettet for rask henting. Vi hakker billige bluetooth lavenergi -beacons for nettverksområdet og batteriets levetid og bygger en smart applikasjon slik at Alexa vet hvor vi la nøklene.

Hvordan gjøre det…

Trinn 1: Hacking av Bluetooth -beacons

Et sett med 3 beacons kan kjøpes for mindre enn $ 15 og støttes med Android/iOS -applikasjoner, men vi velger bort personvern. Dessuten bør det å finne nøklene våre ikke bli til å finne telefonen vår.

Denne adafruit -opplæringen om omvendt konstruksjon av smarte lys hjalp oss med å kontrollere beacons. Start med å slå på beacon -skanningen etter enhetsadressen ved å kjøre:

sudo hcitool lescan

Finn og kopier adressen merket med navnet 'iTag', og kjør deretter:

sudo gatttool -I

Koble til enheten interaktivt ved å kjøre:

koble til AA: BB: CC: DD: EE: FF

Prøv å kjøre "hjelp" for å se alternativer eller "primær" for å se tjenester:

Ved å kjøre 'char-desc' etterfulgt av servicehåndtaket som ovenfor, finner vi UUID-er som vi ser opp ved å referere til de gatt-karakteristiske spesifikasjonene og tjenestespesifikasjonene. For mer informasjon om disse tjenestene, sjekk ut dette. Ved å inspisere trafikk med Wireshark finner vi at 0100111000000001 utløser alarmen og logisk sett slår 0000111000000001 den av. Nå har vi den enkle python -funksjonen:

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

Deretter fokuserer vi på å lage Alexa -ferdigheten for å utløse fyrtårnet når vi leter etter nøklene.

Trinn 2: Opprette en Alexa ferdighet og app

Opprette en Alexa ferdighet og app
Opprette en Alexa ferdighet og app
Opprette en Alexa ferdighet og app
Opprette en Alexa ferdighet og app

Vi lager en ferdighet som vil bli knyttet til en lokal server. Deretter konfigurerer vi serveren vår til å utføre alle handlinger vi ønsker, i dette tilfellet gir vi en tilnærming til hvor tastene kan være plassert og får Bluetooth -varselet til å pipe. Flask gir et enkelt og brukervennlig python -bibliotek for å betjene et program. Ved å bruke flask-ask kan vi konfigurere serveren til å kommunisere med vår Alexa-ferdighet vi skal bygge senere. Betjen godt programmet med Ngrok, som vil gi oss en https -lenke vi trenger for vår Alexa -ferdighet. Først bygde vi applikasjonen med den enkleste funksjonaliteten: for å få BLE -varsellyden til å pippe når den utløses.

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

Vi brukte funksjonen sound_alarm () vi skrev tidligere for å lage BLE -pipet. For funksjonen som skal brukes for intensjonen, legger vi til ask -dekoratøren med våre intensjoner "findkeys". Når vi gjør Alexa -ferdigheten på dashbordet for utviklere av Amazon, bruker vi dette navnet for vår hensikt. Skriv dette skriptet til en fil som heter app.py og kjør

python app.py

Dette vil vise søknaden din på https:// localhost: 5000. Kjør en ngrok -server og kopier den genererte https -lenken. Du trenger det når du konfigurerer Alexa -ferdigheten. For mer informasjon, sjekk ut dette innlegget. Vi har lykkes med å sette opp en enkel applikasjon, nå skriver vi Alexa -ferdigheten. Naviger til Amazon utvikler dashbord og logg inn. Klikk på Alexa og kom i gang med Alexa Skill kit

Følg instruksjonene gitt av gui.

Under kategorien Interasjonsmodell vil du fylle ut Intens Schema -boksen med følgende:

I boksen Eksempeluttalelser vil du skrive noen eksempelkommandoer en person kan bruke for å påkalle ferdigheten. Vi skrev disse:

findkeys find my keysfindkeys where my keys findkeys I mistet mine nøkler

  • I kategorien Konfigurasjon må du velge tjenestens sluttpunkt til HTTPS. Kopier https -lenken din og lim den inn i standardboksen under. Kontokobling kan overlates til nr.
  • I SSL-sertifikatet velger du det midterste alternativet, "Mitt utviklingsslutpunkt er et underdomene til et domene som har et jokertegn-sertifikat fra en sertifikatmyndighet".
  • Test -fanen lar deg teste den nye ferdigheten ved å skrive inn en av prøvekommandoene.

Fullfør fyllingen av de to siste fanene til alle merkene er grønne. Start deretter din ferdighet med Beta Testing -funksjonen. Dette lar deg være vert for ferdighetene dine på en hvilken som helst ekkoenhet før du publiserer den. Følg instruksjonene på e -postkoblingen for å installere ferdigheten på ekkoenheten.

Trinn 3: Gjør vår ferdighet smartere

Gjør vår ferdighet smartere
Gjør vår ferdighet smartere
Gjør vår ferdighet smartere
Gjør vår ferdighet smartere
Gjør vår ferdighet smartere
Gjør vår ferdighet smartere

Vi satte inaktive datamaskiner spredt over hele huset for å jobbe med å spørre Bluetooth -signalet for å rapportere RSSI -signalstyrken.

Ved å ta avlesninger fra flere maskiner, kan vi bruke signalstyrken til som en proxy for avstand. Vi må finne ut hvordan vi bruker dette til å beregne den mest sannsynlige delen av huset for å finne fyrtårnet.

Vi går til maskinlæring. En crontab -jobb hvert 2. minutt, bygger opp et datasett med RSSI -tupler. Når vi plasserer fyrtårnet på forskjellige steder som: "Soverom", "Bad", "Kjøkken", "Stue", merker vi RSSI -loggene. Når vi har kartlagt hjemmet, kan vi bruke trebaserte modeller som xgboosts XGBClassifier.

Xgboost -implementeringen av gradientforsterkning vil håndtere de manglende dataene fra tidsavbrudd, og trening i løpet av et par sekunder. Bruk python pickle for å vedlikeholde den opplærte modellen og laste den inn i vår alexa retrievr -applikasjon. Når ferdigheten kalles, søker applikasjonen opp Bluetooth RSSI -lesingen og genererer et forutsagt sted, alexa kan svare og foreslå å 'prøve å se på badet.'

Trinn 4: Sett alt sammen

Etter å ha en modell for å tilnærme den siste plasseringen av nøklene, kan vi legge den til i programmet for å forbedre uttalelsen returnert av Alexa. Vi har endret skriptet for å lese:

import osfrom kolbe import flaske fra 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] = lesing res_lst.append (read_dict) hvis ip == 'ip.of.one.computer': read_dict = {} annet: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Verdier mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) gjetning = gjetning.mest_vanlig (1) [0] [0] reply_str = 'Prøv å se i' if guess == 1: reply_str += 'bedroom' elif guess == 2: reply_str += 'bathroom' elif guess == 3: reply_str += 'kitchen' elif guess == 4: reply_str += 'living room' return reply_str if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Vi opprettet en ny funksjon kalt guess_locate () som tar en fil med de siste registrerte rssi -signalstyrkene. Den vil deretter kjøre prøvene mot vår syltede xgboost -modell og returnere den mest sannsynlige plasseringsstrengen. Denne plasseringen blir returnert når Alexa blir bedt om det. Siden det kan ta noen sekunder å etablere en forbindelse til et fyrtårn, kjører vi en egen prosess som kaller den funksjonen i sound_alarm.py.

Anbefalt: