Innholdsfortegnelse:
- Trinn 1: Hacking av Bluetooth -beacons
- Trinn 2: Opprette en Alexa ferdighet og app
- Trinn 3: Gjør vår ferdighet smartere
- Trinn 4: Sett alt sammen
Video: Alexa, Where Are My Keys ?: 4 Steps
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
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
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
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:
Alexa Based Voice Controlled Rocket Launcher: 9 trinn (med bilder)
Alexa Based Voice Controlled Rocket Launcher: Når vintersesongen nærmer seg; kommer den tiden av året når lysfestivalen feires. Ja, vi snakker om Diwali som er en ekte indisk festival feiret over hele verden. I år er Diwali allerede over, og ser folk
Kontroller stue med Alexa og Raspberry Pi: 12 trinn
Kontroller stuen med Alexa og Raspberry Pi: Kontroller stuen din TV, lys og vifte med Alexa (Amazon Echo eller Dot) og Raspberry Pi GPIO
Alexa IoT TV-kontroller ESP8266: 10 trinn (med bilder)
Alexa IoT TV-kontroller ESP8266: Nylig kjøpte jeg en Amazon Echo Dot under Amazon Prime-dagen for ~ 20 €. Disse små stemmeassistentene er billige og flotte for DIY Home Automation hvis du vet hva som er mulig og hvordan du bygger smarte enheter. Jeg har en Samsung Smart TV, men jeg ville
IoT Cat Feeder Using Particle Photon Integrated With Alexa, SmartThings, IFTTT, Google Sheets: 7 Steps (with Pictures)
IoT Cat Feeder Using Particle Photon Integrated With Alexa, SmartThings, IFTTT, Google Sheets: Behovet for en automatisk kattemater er selvforklarende. Katter (katten vår heter Bella) kan være ubehagelige når de er sultne, og hvis katten din er som min, vil han spise bollen tørr hver gang. Jeg trengte en måte å dosere en kontrollert mengde mat på automatisk
Who's at the Door, a Alexa Actuated Camera System: 3 Steps
Who's at the Door, a Alexa Actuated Camera System: Noen ganger mens du ser på TV, vil du ikke svare på døren med mindre det er viktig. Dette prosjektet lar deg se personen ved døren ved å bare fortelle Amazons Echo -enhet " Alexa, slå på dørmonitoren ". Du sjekker hvem som dukker opp