Orodha ya maudhui:

Alexa, Funguo Zangu Ziko Wapi?: 4 Hatua
Alexa, Funguo Zangu Ziko Wapi?: 4 Hatua

Video: Alexa, Funguo Zangu Ziko Wapi?: 4 Hatua

Video: Alexa, Funguo Zangu Ziko Wapi?: 4 Hatua
Video: Bien x Aaron Rimbui - Mbwe Mbwe (Official Music Video) 2024, Julai
Anonim
Image
Image
Kudanganya Beacons za Bluetooth
Kudanganya Beacons za Bluetooth

Alexa inafaa sana kwa kazi za kurudisha habari na ufuatiliaji wa mali kwa kutumia mitandao ya nyumbani isiyo na waya. Ni kawaida kuzingatia kuweka vitu vya thamani kwenye gridi ya taifa kwa kurudisha haraka. Tunabebeka beacons za bei rahisi za bluetooth kwa anuwai ya mtandao na maisha marefu ya betri na tunaunda programu nzuri ili Alexa ijue mahali ambapo tuliacha funguo.

Jinsi ya kufanya hivyo…

Hatua ya 1: Kudanganya miwani ya Bluetooth

Seti ya beacons 3 zinaweza kununuliwa kwa chini ya $ 15 na zinaungwa mkono na programu za Android / iOS lakini tutachagua faragha. Kwa kuongezea, kupata funguo zetu haipaswi kugeukia kutafuta simu yetu.

Mafunzo haya ya adafruit juu ya taa za uhandisi za nyuma za uhandisi ilitusaidia kudhibiti beacons. Anza kwa kuwasha scan ya beacon kwa anwani ya kifaa kwa kuendesha:

Sudo hcitool lescan

Pata na unakili anwani iliyo na jina 'iTag,' kisha ukimbie:

sudo gatttool -I

Unganisha kwenye kifaa kwa kuingiliana kwa kuendesha:

unganisha AA: BB: CC: DD: EE: FF

Jaribu kutumia 'msaada' kuona chaguo au 'msingi' ili uone huduma:

Kuendesha "char-desc" ikifuatiwa na huduma ya huduma kama ilivyo hapo juu, tunapata UUID ambazo tunatafuta kwa kutaja maelezo ya tabia ya gatt na maelezo ya huduma. Kwa zaidi juu ya huduma hizi, angalia hii. Kuchunguza trafiki na Wireshark, tunaona kuwa 0100111000000001 husababisha kengele na kwa mantiki, 0000111000000001 inazima. Sasa tuna kazi rahisi ya chatu:

kuagiza pexpectdef sound_alarm (BD_ADDR): mtoto = pexpect.spawn ('gatttool -I') child.sendline ('unganisha {}'. fomati (BD_ADDR)) mtoto.tarajia ('Uunganisho umefanikiwa', muda wa kuisha = 30) mtoto. ('char-andika-cmd 0x000b 0100111000000001')

Ifuatayo, tunazingatia kuunda ustadi wa Alexa kuchochea taa wakati tunatafuta funguo.

Hatua ya 2: Kuunda Ujuzi wa Alexa na App

Kuunda Ujuzi wa Alexa na App
Kuunda Ujuzi wa Alexa na App
Kuunda Ujuzi wa Alexa na App
Kuunda Ujuzi wa Alexa na App

Tunaunda ustadi ambao utaunganishwa na seva ya karibu. Kisha tunasanidi seva yetu kuchukua hatua yoyote ambayo tungependa, katika kesi hii, toa takriban mahali funguo zinaweza kupatikana na tengeneza beep ya beep ya Bluetooth. Flask hutoa maktaba rahisi na rahisi kutumia chatu kutumikia programu. Kutumia uliza-kuuliza, tunaweza kusanidi seva kuwasiliana na ustadi wetu wa Alexa ambao tutaunda baadaye. Tumikia maombi na Ngrok, ambayo itatupa kiunga cha https tutakachohitaji kwa ustadi wetu wa Alexa. Kwanza tuliunda programu na utendaji rahisi: kufanya beepon yetu ya BLE iliposababishwa.

#! / usr / bin / env pythonfrom flask import Flask from flask_ask import Ask, statement import pexpect app = Flask (_ name_) uliza = Uliza (programu, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '# Kitambulisho chako cha beacon ya Bluetooth hapa @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Funguo zako ziko hapa mahali pengine." taarifa ya kurudi (speech_text) def sound_alarm (): mtoto = pexpect.spawn ('gatttool -I') child.sendline ('unganisha {}'. fomati (BD_ADDR)) mtoto. Tarajia ('Uunganisho umefanikiwa', muda wa kuisha = 60) mtoto.sendline ('char-write-cmd 0x000b 0100111000000001') ikiwa _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Tulitumia kazi sauti_alarm () tuliandika mapema kufanya BLE beep. Kwa kazi ambayo itatumika kwa kusudi, tunaongeza mpambaji wa kuuliza na dhamira yetu "findkeys". Tunapofanya ustadi wa Alexa kwenye dashibodi ya msanidi programu wa Amazon tutatumia jina hili kwa dhamira yetu. Andika hati hii kwa faili iliyoitwa app.py na ukimbie

chatu app.py

Hii itatumikia programu yako kwenye https:// localhost: 5000. Endesha seva ya ngrok na nakili kiunga cha https kilichozalishwa. Utahitaji wakati unasanidi ustadi wa Alexa. Kwa maelezo zaidi, angalia chapisho hili. Tumefanikiwa kusanikisha programu rahisi, sasa tutaandika ustadi wa Alexa. Nenda kwenye dashibodi ya msanidi programu wa Amazon na uingie. Bonyeza kwenye Alexa na uanze na kit cha Ujuzi cha Alexa

Fuata maagizo yaliyotolewa na gui.

Chini ya kichupo cha Mfano wa Interation utataka kujaza sanduku la Sherehe ya Kusudi na yafuatayo:

Katika sanduku la Matamshi ya Sampuli, unataka kuandika amri kadhaa za mfano ambazo mtu anaweza kutumia kutumia ustadi. Tuliandika haya:

tafuta funguo tafuta funguo zangu ambapo funguo zangu zinapata funguo nimepoteza funguo zangu

  • Katika kichupo cha Usanidi, hakikisha kuchagua sehemu ya mwisho ya huduma kwa HTTPS. Nakili kiunga chako cha https na ubandike kwenye kisanduku Cha chaguo-msingi chini. Kuunganisha akaunti kunaweza kushoto hadi No.
  • Katika Cheti cha SSL chagua chaguo la kati, "Mwisho wa maendeleo yangu ni kikoa kidogo cha kikoa kilicho na cheti cha kadi ya mwitu kutoka kwa mamlaka ya cheti".
  • Kichupo cha Mtihani kitakuruhusu kujaribu ustadi mpya kwa kuandika katika moja ya maagizo yako ya sampuli.

Maliza kujaza tabo mbili za mwisho hadi alama zote za kukagua ziwe kijani. Kisha uzindua ustadi wako na huduma ya Jaribio la Beta. Hii hukuruhusu kupangisha ustadi wako kwenye kifaa chochote cha mwangwi kabla ya kukichapisha. Fuata maagizo kwenye kiunga cha barua pepe kusanikisha ustadi kwenye kifaa chako cha mwangwi.

Hatua ya 3: Kufanya Ujuzi Wetu Uwe Nadhifu

Kufanya Ujuzi Wetu Uwe Nadhifu
Kufanya Ujuzi Wetu Uwe Nadhifu
Kufanya Ujuzi Wetu Uwe Nadhifu
Kufanya Ujuzi Wetu Uwe Nadhifu
Kufanya Ujuzi Wetu Uwe Nadhifu
Kufanya Ujuzi Wetu Uwe Nadhifu

Sisi kuweka kompyuta wavivu kuenea katika nyumba kufanya kazi katika querying beacon Bluetooth kuripoti nguvu RSSI ishara.

Kuchukua usomaji kutoka kwa mashine nyingi, tunaweza kutumia nguvu ya ishara kama wakala kwa umbali. Tunahitaji kujua jinsi ya kutumia hii kuhesabu sehemu inayowezekana ya nyumba kupata taa.

Tunageuka kwa ujifunzaji wa mashine. Kazi ya crontab kila dakika 2, huunda mkusanyiko wa data ya RSSI tuples. Kuweka taa katika maeneo tofauti kama: 'Chumba cha kulala', 'Bafuni', 'Jikoni', 'Eneo la Kuishi' tunaandika magogo ya RSSI. Mara tu tunapopiga ramani ya nyumba, tunaweza kutumia mifano ya miti kama Xgboost's XGBClassifier.

Utekelezaji wa xgboost wa kukuza gradient utashughulikia data iliyokosekana kutoka kwa usomaji wa wakati uliowekwa, mafunzo katika sekunde kadhaa. Tumia kachumbari ya chatu kuendelea na modeli iliyofunzwa na kupakia kwenye programu yetu ya alexa retrievr. Ustadi unapoitwa, programu inatafuta usomaji wa RSSI ya Bluetooth na inazalisha eneo lililotabiriwa, alexa anaweza kujibu akipendekeza 'kujaribu kutazama bafuni.'

Hatua ya 4: Kuiweka Pamoja

Kuwa na mfano wa kukadiria eneo la mwisho la funguo, tunaweza kuiongeza kwenye programu ili kuboresha taarifa iliyorudishwa na Alexa. Tumebadilisha hati kusoma:

ingiza chupa ya kuingiza chupa kutoka kwa chupa_kuleta Kuuliza, taarifa kuagiza pexpect kuagiza pickle kuagiza pandas kama pd kuagiza numpy kama np kutoka kwa makusanyo kuagiza defaultdict, Counter kutoka reverse_read kuagiza reverse_readline app = Flask (_ name_) uliza = Uliza (programu, '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/ path / to / repo / sound_alarm.py &") speech_text = guess_locate () taarifa ya kurudi (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = wakati len (res_lst)! = 20: ln = next (line_gen) ikiwa ln.startswith ('Host'): _, ip, _, reading = ln.split () kusoma_dict [ip] = kusoma res_lst.append (read_dict) ikiwa ip == 'ip.of.one.computer': read_dict = {} mwingine: pass val = pd. DataFrame (res_lst). mahali ({'N / Maadili '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 = 'Jaribu kuangalia kwenye' if guess == 1: reply_str + = 'bedroom' elif guess == 2: reply_str + = 'bafuni' elif guess == 3: reply_str + = 'jikoni' elif guess == 4: reply_str + = 'sebule' kurudi reply_str ikiwa _name_ == "_main_": app.run (mwenyeji = '127.0.0.1', bandari = '5000')

Tuliunda kazi mpya inayoitwa guess_locate () ambayo inachukua faili na nguvu za ishara za rssi zilizorekodiwa hivi karibuni. Halafu itaendesha sampuli dhidi ya modeli yetu ya xgboost iliyochaguliwa na kurudisha kamba ya eneo inayowezekana. Eneo hili litarudishwa wakati Alexa itahamasishwa. Kwa kuwa kuanzisha unganisho kwa beacon inaweza kuchukua sekunde chache, tunaendesha mchakato tofauti wa kuita kazi hiyo kwa sound_alarm.py.

Ilipendekeza: