INHOUDSOPGAWE:

Alexa, waar is my sleutels ?: 4 stappe
Alexa, waar is my sleutels ?: 4 stappe

Video: Alexa, waar is my sleutels ?: 4 stappe

Video: Alexa, waar is my sleutels ?: 4 stappe
Video: Dit ging niet zoals ik had verwacht..😳 2024, November
Anonim
Image
Image
Aflaai van Bluetooth -bakens
Aflaai van Bluetooth -bakens

Alexa is veral geskik vir inligtingherwinningstake en om bates te monitor met behulp van draadlose tuisnetwerke. Dit is natuurlik om te oorweeg om waardevolle besittings op die rooster te plaas vir 'n vinnige herwinning. Ons kap goedkoop bluetooth lae energie bakens vir die netwerkreeks en batterylewe en bou 'n slim toepassing sodat Alexa weet waar ons die sleutels gelos het.

Hoe om dit te doen…

Stap 1: Inbraak op Bluetooth -bakens

'N Stel van drie bakens kan vir minder as $ 15 gekoop word en word ondersteun met Android/iOS -toepassings, maar ons kies uit vir privaatheid. Boonop moet die vind van ons sleutels nie 'n telefoonopsporing wees nie.

Hierdie adafruit -tutoriaal oor omgekeerde tegniese slimligte het ons gehelp om die bakens te beheer. Begin deur die baken -skandering vir die toesteladres aan te skakel deur die volgende te doen:

sudo hcitool lescan

Soek en kopieer die adres met die naam 'iTag', en voer dan uit:

sudo gatttool -I

Koppel interaktief aan die toestel deur die volgende te gebruik:

verbind AA: BB: CC: DD: EE: FF

Probeer 'hulp' om opsies te sien of 'primêr' om dienste te sien:

Met 'char-desc' gevolg deur die dienshandvatsel soos hierbo, vind ons UUID's wat ons soek deur na die Gatt-kenmerkende spesifikasies en diensspesifikasies te verwys. Vir meer inligting oor hierdie dienste, kyk na hierdie. As u verkeer met Wireshark opspoor, vind ons dat 0100111000000001 die alarm aktiveer en logies, 0000111000000001 skakel dit uit. Nou het ons die eenvoudige luislangfunksie:

invoer pexpectdef sound_alarm (BD_ADDR): kind = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. formaat (BD_ADDR)) child.expect ('verbinding suksesvol', time -out = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Vervolgens fokus ons op die skep van die Alexa -vaardigheid om die baken te aktiveer as ons na die sleutels soek.

Stap 2: Skep 'n Alexa -vaardigheid en -program

Skep 'n Alexa -vaardigheid en -program
Skep 'n Alexa -vaardigheid en -program
Skep 'n Alexa -vaardigheid en -program
Skep 'n Alexa -vaardigheid en -program

Ons skep 'n vaardigheid wat aan 'n plaaslike bediener gekoppel sal word. Dan konfigureer ons ons bediener om die aksie te onderneem wat ons wil, in hierdie geval kan u 'n benadering gee van waar die sleutels geleë is en die Bluetooth -baken laat hoor. Flask bied 'n eenvoudige en maklik om te gebruik python -biblioteek om 'n toepassing te bedien. Met behulp van flask-ask kan ons die bediener instel om te kommunikeer met ons Alexa-vaardigheid wat ons later sal bou. Bedien die aansoek goed met Ngrok, wat ons 'n https -skakel sal gee wat ons nodig het vir ons Alexa -vaardigheid. Eerstens het ons die toepassing met die eenvoudigste funksie gebou: om ons BLE -baken te laat piep wanneer dit geaktiveer word.

#!/usr/bin/env python van fles invoerfles van flask_ask import Vra, verklaring invoer pexpect app = Flask (_ naam_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #U Bluetooth -baken -ID hier @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "U sleutels is hier iewers." opgaweverklaring (spraak_teks) def sound_alarm (): kind = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. formaat (BD_ADDR)) child.expect ('verbinding suksesvol', time -out = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') as _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Ons het die funksie sound_alarm () wat ons vroeër geskryf het, gebruik om die BLE -piep te maak. Vir die funksie wat vir die bedoeling gebruik sal word, voeg ons die ask -versierder by met ons bedoeling "vindsleutels". As ons die Alexa -vaardigheid op die Amazon -ontwikkelaarspaneelbord maak, gebruik ons hierdie naam vir ons bedoeling. Skryf hierdie skrif na 'n lêer met die naam app.py en voer dit uit

python app.py

Dit dien u aansoek op https:// localhost: 5000. Begin 'n ngrok -bediener en kopieer die gegenereerde https -skakel. U benodig dit as u die Alexa -vaardigheid instel. Vir meer besonderhede, kyk na hierdie pos. Ons het 'n eenvoudige toepassing suksesvol opgestel, en nou skryf ons die Alexa -vaardigheid. Navigeer na die Amazon ontwikkelaar dashboard en meld aan. Klik op Alexa en begin met Alexa Skill kit

Volg die instruksies van die gui.

Onder die Interation Model -oortjie wil u die veld Intent Schema invul met die volgende:

In die Voorbeelduitsprake -boks wil u 'n paar voorbeeldopdragte skryf wat 'n persoon kan gebruik om die vaardigheid aan te roep. Ons het hierdie geskryf:

findkeys find my keysfindkeys waar my sleutels sleutels gevind het ek het my sleutels verloor

  • Maak op die oortjie Konfigurasie seker dat u die eindpunt van die diens na HTTPS kies. Kopieer u https -skakel en plak dit in die standaardkassie hieronder. Rekeningskakeling kan op nr.
  • Kies in die SSL-sertifikaat die middelste opsie, "My ontwikkelingseindpunt is 'n subdomein van 'n domein met 'n wildcard-sertifikaat van 'n sertifikaatowerheid".
  • Met die toets -oortjie kan u die nuwe vaardigheid toets deur een van u voorbeeldopdragte in te tik.

Voltooi die laaste twee oortjies totdat al die regmerkies groen is. Begin dan u vaardigheid met die beta -toetsfunksie. Hiermee kan u u vaardigheid op enige echo -toestel huisves voordat u dit publiseer. Volg die instruksies op die e -posskakel om die vaardigheid op u echo -toestel te installeer.

Stap 3: Maak ons vaardigheid slimmer

Maak ons vaardigheid slimmer
Maak ons vaardigheid slimmer
Maak ons vaardigheid slimmer
Maak ons vaardigheid slimmer
Maak ons vaardigheid slimmer
Maak ons vaardigheid slimmer

Ons het die ledige rekenaars wat deur die huis versprei is, aan die werk gesit om die Bluetooth -baken te ondersoek om die sterkte van die RSSI -sein aan te meld.

As ons metings van verskeie masjiene meet, kan ons die seinsterkte gebruik as 'n instaanbediener vir afstand. Ons moet uitvind hoe ons dit kan gebruik om die mees waarskynlike deel van die huis te bereken om die baken te vind.

Ons gaan oor masjienleer. Elke 2 minute bou 'n crontab -werk 'n datastel RSSI -tipes op. As ons die baken op verskillende plekke plaas, soos: 'Slaapkamer', 'Badkamer', 'Kombuis', 'Woonarea', word die RSSI -logs benoem. Sodra ons die huis gekarteer het, kan ons boomgebaseerde modelle soos xgboost se XGBClassifier gebruik.

Die xgboost -implementering van gradient boosting sal die ontbrekende data van afgetrede lesings, opleiding binne 'n paar sekondes, hanteer. Gebruik python -piekel om die opgeleide model aan te hou en laai dit in ons alexa retrievr -toepassing in. As die vaardigheid genoem word, soek die toepassing die Bluetooth RSSI -lesing op en genereer 'n voorspelde ligging, alexa kan antwoord deur voor te stel dat 'probeer om in die badkamer te kyk'.

Stap 4: Alles saamvoeg

Met 'n model om die laaste ligging van die sleutels te benader, kan ons dit by die toepassing voeg om die verklaring van Alexa te verbeter. Ons het die skrif aangepas om te lees:

invoer osfrom kolf invoer kolf uit flask_ask invoer Vra, verklaring invoer verwag invoer piekels invoer as pd invoer numpy as np uit versamelings invoer standaard, teller van omgekeerde_lees invoer reverse_readline app = fles (_ naam_) vra = vra (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] = lees res_lst.append (read_dict) as ip == 'ip.of.one.computer': read_dict = {} anders: pass val = pd. DataFrame (res_lst).vervang ({'N/ A ': np.nan}). Waardes mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] reply_str = 'Probeer in die' if guess == 1: reply_str += 'bedroom' elif guess kyk == 2: reply_str += 'badkamer' elif guess == 3: reply_str += 'kombuis' elif guess == 4: reply_str += 'woonkamer' terug antwoord_str as _name_ == "_main_": app.run (gasheer = '127.0.0.1', poort = '5000')

Ons het 'n nuwe funksie genaamd guess_locate () geskep wat 'n lêer met die nuutste aangetekende rssi -seinsterkte neem. Dit sal dan die monsters teen ons ingelegde xgboost -model uitvoer en die mees waarskynlike liggingstring teruggee. Hierdie ligging sal teruggestuur word wanneer Alexa gevra word. Aangesien 'n paar sekondes 'n verbinding met 'n baken tot stand kan kom, voer ons 'n aparte proses uit wat die funksie in sound_alarm.py noem.

Aanbeveel: