Indholdsfortegnelse:
- Trin 1: Hacking af Bluetooth -beacons
- Trin 2: Oprettelse af en Alexa Skill og app
- Trin 3: Gør vores dygtighed smartere
- Trin 4: Sæt det hele sammen
Video: Alexa, hvor er mine nøgler ?: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
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
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
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:
Otto Bot (jeg navngav Mine Spike): 5 trin
Otto Bot (jeg navngav Mine Spike): Dette er et simpelt projekt, som næsten alle kan gøre for at oprette en simpel gårobot
Opret mine egne grafer til mine IOT -data på en Raspberry PI: 3 trin
Opret mine egne grafer til mine IOT -data på en Raspberry PI: Læs venligst videre, hvis du vil være i stand til at oprette dine egne IOT -grafer ved hjælp af 7 linjer med kode.Jeg ville oprette diagrammer til visning af data i et grafisk format fra mine IOT -sensorer på en webside. Tidligere til dette havde jeg brugt tredjepartstjenester (nogle pa
MACGYVER -NØGLER: 8 trin
MACGYVER NØGLEKÆDE: Denne instruks er til hvordan man laver en meget praktisk, men alligevel nyttig nøglering kombineret med en bærbar oplader. Dette produkt er designet til at tænke på en målgruppe, da de fleste mennesker har nøgler og har smartphones. Vi har alle været i inco
Keyminder! den enhed, der får dig til ikke at miste dine nøgler !: 3 trin (med billeder)
Keyminder! den enhed, der får dig til ikke at miste dine nøgler !: Denne enhed hjælper dig med ikke at miste dine nøgler! Hvis du er ligesom mig, mister du straks dine nøgler, når du kommer hjem fra arbejde, efter at du har låst din dør op, og du venter til den næste dag lige før du skal af sted for at lede efter dem. Ja du har måske
Mini USB -drev Mod: Nøgler: 9 trin
Mini USB Drive Mod: Nøgler: Dette er en mod, der giver dig et sødt lille USB -drev op til 4 gigabyte! Dette er også virkelig lille. God fornøjelse og håber du kan lide det! EDIT: USB -drevet fungerer stadig og holder hukommelse, når du er færdig. Der er ingen grund til at afbryde kredsløbet