Sadržaj:
- Korak 1: Hakiranje Bluetooth Beacons -a
- Korak 2: Stvaranje Alexa vještine i aplikacije
- Korak 3: Učinimo našu vještinu pametnijom
- Korak 4: Sastavite sve zajedno
Video: Alexa, gdje su mi ključevi?: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Alexa je posebno pogodna za zadatke pronalaženja informacija i nadgledanje imovine pomoću bežičnih kućnih mreža. Prirodno je razmisliti o stavljanju dragocjenosti na mrežu radi brzog pronalaženja. Hakiramo jeftine bluetooth niskoenergetske svjetionike za raspon mreže i trajanje baterije te izrađujemo pametnu aplikaciju tako da Alexa zna gdje smo ostavili ključeve.
Kako uraditi…
Korak 1: Hakiranje Bluetooth Beacons -a
Set od 3 svjetionika može se kupiti za manje od 15 USD i podržani su Android/iOS aplikacijama, ali ćemo se isključiti zbog privatnosti. Osim toga, pronalaženje ključeva ne bi se trebalo pretvoriti u pronalaženje našeg telefona.
Ovaj adafruit vodič o pametnim svjetlima za obrnuti inženjering pomogao nam je u kontroli svjetionika. Počnite tako što ćete uključiti beacon scan za adresu uređaja pokretanjem:
sudo hcitool lescan
Pronađite i kopirajte adresu označenu imenom 'iTag', a zatim pokrenite:
sudo gatttool -I
Interaktivno se povežite s uređajem tako što ćete pokrenuti:
spojite AA: BB: CC: DD: EE: FF
Pokušajte pokrenuti „pomoć“za pregled opcija ili „primarnu“za pregled usluga:
Pokretanjem 'char-desc' nakon čega slijedi uslužni rukohvat kao gore, pronalazimo UUID-ove koje tražimo pozivanjem na specifikacije karakteristika gatt i specifikacije usluge. Za više informacija o ovim uslugama, provjerite ovo. Istražujući promet putem Wiresharka, otkrivamo da 0100111000000001 aktivira alarm i logički ga isključuje 0000111000000001. Sada imamo jednostavnu funkciju python:
import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Veza je uspješna', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')
Zatim se fokusiramo na stvaranje Alexa vještine za aktiviranje svjetionika kada tražimo ključeve.
Korak 2: Stvaranje Alexa vještine i aplikacije
Stvaramo vještinu koja će biti povezana s lokalnim serverom. Zatim konfiguriramo naš poslužitelj da poduzme bilo koju radnju koju želimo, u ovom slučaju dajemo približnu informaciju o tome gdje bi se ključevi mogli nalaziti i oglašava zvučni signal Bluetooth signala. Flask pruža jednostavnu i laku za korištenje python biblioteku za opsluživanje aplikacije. Pomoću flask-ask možemo konfigurirati poslužitelj da komunicira s našom Alexa vještinom koju ćemo izgraditi kasnije. Dobro poslužite aplikaciju s Ngrokom, koji će nam dati https vezu koja će nam trebati za našu Alexa vještinu. Prvo smo izgradili aplikaciju s najjednostavnijom funkcionalnošću: da naš BLE beacon signalizira kada se aktivira.
#!/usr/bin/env pythoniz uvoza flasice Flaša iz flask_ask uvoz Pitaj, uvoz izvoda pexpect app = Flask (_ name_) ask = Pitaj (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Vaš bluetooth beacon id ovdje @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Vaši ključevi su tu negdje." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Veza je uspješna', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')
Koristili smo funkciju sound_alarm () koju smo ranije napisali da bi BLE zvučni signal. Za funkciju koja će se koristiti za namjeru, dodajemo dekorater upita sa našom namjerom "findkeys". Kada steknemo Alexa vještinu na nadzornoj ploči za programere Amazona, koristit ćemo ovo ime za svoju namjeru. Napišite ovu skriptu u datoteku pod nazivom app.py i pokrenite je
python app.py
Ovo će poslužiti vašu aplikaciju na https:// localhost: 5000. Pokrenite ngrok server i kopirajte generiranu https vezu. Trebat će vam kada konfigurirate Alexa vještinu. Za više detalja pogledajte ovaj post. Uspješno smo postavili jednostavnu aplikaciju, sada ćemo napisati Alexa vještinu. Idite na nadzornu ploču za programere Amazona i prijavite se. Kliknite na Alexa i počnite s upotrebom Alexa Skill kompleta
Slijedite upute koje je dao gui.
Na kartici Model interakcije želite popuniti okvir Šema namjere sa sljedećim:
U okvir Sample Utterances želite napisati neke primjere naredbi koje bi osoba mogla upotrijebiti za dozivanje vještine. Napisali smo ovo:
findkeys find my keysfindkeys where my keys findkeys izgubio sam ključeve
- Na kartici Konfiguracija svakako odaberite krajnju točku usluge na HTTPS. Kopirajte svoju https vezu i zalijepite je u okvir Podrazumevano ispod. Povezivanje računa možete ostaviti na Ne.
- U SSL certifikatu odaberite srednju opciju, "Moja razvojna krajnja točka je poddomena domene koja ima zamjenski certifikat od tijela za izdavanje certifikata".
- Kartica Test će vam omogućiti da testirate novu vještinu upisivanjem jedne od vaših primjera naredbi.
Popunite posljednje dvije kartice dok sve kvačice ne postanu zelene. Zatim pokrenite svoju vještinu pomoću funkcije beta testiranja. To vam omogućuje da svoju vještinu smjestite na bilo koji eho uređaj prije objavljivanja. Slijedite upute na vezi za e -poštu da biste instalirali vještinu na svoj echo uređaj.
Korak 3: Učinimo našu vještinu pametnijom
Računare u stanju mirovanja raširili smo po cijeloj kući da rade na postavljanju upita bluetooth beacon -u radi izvještavanja o jačini RSSI signala.
Uzimajući očitanja s više strojeva, možemo upotrijebiti jačinu signala kao zamjenu za udaljenost. Moramo smisliti kako to iskoristiti za izračunavanje najverovatnijeg dijela kuće za pronalaženje svjetionika.
Prelazimo na mašinsko učenje. Crontab posao svake 2 minute stvara skup podataka RSSI tuplea. Postavljanjem svjetionika na različita mjesta, poput: 'Spavaća soba', 'Kupaonica', 'Kuhinja', 'Dnevni prostor' označavamo RSSI zapise. Nakon što mapiramo dom, možemo koristiti modele zasnovane na drvetu poput xgboostovog XGBClassifier-a.
Xgboost implementacija pojačavanja gradijenta će obraditi nedostajuće podatke iz vremenski ograničenih očitanja, obuke za nekoliko sekundi. Koristite python pickle da biste zadržali obučeni model i učitali ga u našu aplikaciju alexa retrievr. Kada se pozove vještina, aplikacija traži bluetooth RSSI čitanje i generira predviđenu lokaciju, alexa može odgovoriti sugerirajući da "pokušate pogledati u kupaonici."
Korak 4: Sastavite sve zajedno
Imajući model za približnu zadnju lokaciju ključeva, možemo ga dodati u aplikaciju kako bismo poboljšali izjavu koju je vratila Alexa. Skriptu smo izmijenili tako da glasi:
import osfrom flask import Flask from flask_ask import Ask, izjava import pexpect import pickle import pande kao pd import numpy kao np iz zbirki import defaultdict, brojač iz 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 = dok je len (res_lst)! = 20: ln = next (line_gen) ako je ln.startswith ('Host'): _, ip, _, čitanje = ln.split () read_dict [ip] = čitanje res_lst.append (read_dict) ako je ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Vrijednosti mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) pogađa = Counter (preds) pogodi = pogodi.most_common (1) [0] [0] reply_str = 'Pokušajte pogledati' if guess == 1: reply_str += 'spavaća soba' elif pogoditi == 2: reply_str += 'kupatilo' elif pogodak == 3: reply_str += 'kuhinja' elif pogodak == 4: reply_str += 'dnevna soba' vrati odgovor_str ako je _ime_ == "_maj_": app.run (host = '127.0.0.1', port = '5000')
Kreirali smo novu funkciju koja se zove guess_locate () koja uzima datoteku s najnovijim zabilježenim jačinama rssi signala. Zatim će pokrenuti uzorke prema našem ukiseljenom modelu xgboost i vratiti najvjerojatniji niz lokacije. Ova lokacija će se vratiti kada Alexa zatraži. Budući da uspostavljanje veze s beaconom može potrajati nekoliko sekundi, pokrećemo zaseban proces koji poziva tu funkciju u sound_alarm.py.
Preporučuje se:
Ključevi upravljača do stereo adaptera za automobil (CAN sabirnica -> ključ1): 6 koraka
Ključevi upravljača na stereo adapteru za automobil (CAN sabirnica -> Ključ 1): Nekoliko dana nakon kupovine polovnog automobila, otkrio sam da ne mogu reproducirati muziku sa svog telefona putem stereo uređaja u automobilu. Još je više frustriralo to što je automobil imao bluetooth, ali je dopuštao samo glasovne pozive, a ne i muziku. Takođe je imao USB port za Windows Phone, ali ja
ZEKA ZEKA GDJE SI ?: 3 koraka
ZEČAK ZEKO GDJE STE?: Ja sam iz Tajvana i imam 13 godina, a moje ime je Chia-Ying Wu. Naša porodica ima zeca, on se često igra sa nama u skrivača. Voli se skrivati u kutu pored sofe, ali budući da kauč zaklanja pogled, često ga ne možemo pronaći. S
Drveni Macbook ključevi (sa funkcijom pozadinskog osvjetljenja): 7 koraka
Drveni Macbook ključevi (sa funkcijom pozadinskog osvjetljenja): Uvod Mac računari su značajno modifikovani u posljednjih nekoliko godina. To može varirati u promjenama boja, naljepnicama, gravurama i još mnogo toga. Drveni ključevi na macbooku uvijek su me impresionirali. Možete ih kupiti na Internetu s raznih mjesta za oko 70 USD ili
Mali i jeftini džepni računar koji se može programirati bilo gdje: 5 koraka
Mali i jeftini džepni računar koji se može programirati bilo gdje: CardKB možete pretvoriti u džepni računar! Potpuni džepni računar za CardKB pomoću ArduinoBaisc, CardKB, I2C OLED ekrana. Budući da BASIC koristi ArduinoBasic (https://github.com/robinhedwards/ArduinoBASIC), podržava gotovo sve normalne funkcije, poput
Brzo punjenje bilo gdje: 5 koraka (sa slikama)
Brzo punjenje bilo gdje: Hej! svi Moje ime je Steve.Danas ću vam pokazati kako brzo napuniti telefon bilo gdje Ovo baš poput DIY projekta Kliknite ovdje da vidite VideoLet's Start