Satura rādītājs:
- 1. darbība. Bluetooth bāku uzlaušana
- 2. darbība: izveidojiet Alexa prasmi un lietotni
- 3. darbība: padariet mūsu prasmes gudrākas
- 4. solis: salieciet to visu kopā
Video: Alexa, kur ir manas atslēgas?: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Alexa ir īpaši piemērots informācijas izguves uzdevumiem un līdzekļu uzraudzībai, izmantojot bezvadu mājas tīklus. Ir dabiski apsvērt vērtslietu ievietošanu tīklā, lai to varētu ātri izgūt. Mēs uzlaužam lētas Bluetooth zema enerģijas patēriņa bākas tīkla diapazonam un akumulatora ilgmūžībai un izveidojam viedu lietojumprogrammu, lai Alexa zinātu, kur mēs atstājām atslēgas.
Kā to izdarīt…
1. darbība. Bluetooth bāku uzlaušana
3 bāku komplektu var iegādāties par mazāk nekā 15 ASV dolāriem, un to atbalsta Android/iOS lietojumprogrammas, taču mēs atsakāmies no privātuma. Turklāt mūsu atslēgu atrašanai nevajadzētu pārvērsties par mūsu tālruņa atrašanu.
Šī adafruit apmācība par viedo gaismu reverso inženieriju palīdzēja mums kontrolēt bākas. Sāciet, ieslēdzot ierīces adreses signālugunis, palaižot:
sudo hcitool lescan
Atrodiet un nokopējiet adresi ar nosaukumu “iTag”, pēc tam palaidiet:
sudo gatttool -I
Interaktīvi izveidojiet savienojumu ar ierīci, palaižot:
savienot AA: BB: CC: DD: EE: FF
Mēģiniet palaist “palīdzību”, lai skatītu opcijas, vai “primāro”, lai skatītu pakalpojumus:
Palaižot “char-desc”, kam seko servisa rokturis, kā norādīts iepriekš, mēs atrodam UUID, kurus meklējam, atsaucoties uz gatt raksturīgajām specifikācijām un pakalpojumu specifikācijām. Lai uzzinātu vairāk par šiem pakalpojumiem, skatiet šo. Pārbaudot trafiku, izmantojot Wireshark, konstatējam, ka 0100111000000001 aktivizē trauksmi, un loģiski, ka 0000111000000001 to izslēdz. Tagad mums ir vienkārša python funkcija:
importēt pexpectdef sound_alarm (BD_ADDR): bērns = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Savienojums veiksmīgs', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')
Tālāk mēs koncentrējamies uz Alexa prasmes izveidi, lai iedarbinātu bāku, kad meklējam atslēgas.
2. darbība: izveidojiet Alexa prasmi un lietotni
Mēs izveidojam prasmi, kas tiks saistīta ar vietējo serveri. Pēc tam mēs konfigurējam savu serveri, lai tas veiktu visas vēlamās darbības, šajā gadījumā sniedzam aptuvenu informāciju par to, kur var atrasties atslēgas, un nospiežam Bluetooth signālu. Kolba nodrošina vienkāršu un ērti lietojamu pitona bibliotēku, lai kalpotu lietojumprogrammai. Izmantojot kolbu-ask, mēs varam konfigurēt serveri, lai sazinātos ar mūsu Alexa prasmi, kuru mēs vēlāk izveidosim. Labi kalpojiet lietojumprogrammai kopā ar Ngrok, kas dos mums https saiti, kas mums būs nepieciešama mūsu Alexa prasmei. Vispirms mēs izveidojām lietojumprogrammu ar visvienkāršāko funkcionalitāti: lai BLE signālugunis ieslēgtu signālu.
#!/usr/bin/env pythonfrom kolbas importēšana Kolba no flakona '#Jūsu bluetooth bākas ID šeit @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Jūsu atslēgas ir šeit kaut kur." atgriešanās paziņojums (runas_teksts) def sound_alarm (): bērns = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Savienojums veiksmīgs', taimauts = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001'), ja _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')
Mēs izmantojām funkciju sound_alarm (), ko rakstījām iepriekš, lai BLE pīkstētu. Funkcijai, kas tiks izmantota nolūkā, mēs pievienojam ask decorator ar mūsu nodomu "findkeys". Kad mēs izstrādāsim Alexa prasmes Amazon izstrādātāju informācijas panelī, mēs izmantosim šo nosaukumu mūsu nolūkā. Ierakstiet šo skriptu failā ar nosaukumu app.py un palaidiet
python app.py
Tas kalpos jūsu lietojumprogrammai vietnē https:// localhost: 5000. Palaidiet ngrok serveri un nokopējiet izveidoto https saiti. Tas jums būs nepieciešams, konfigurējot Alexa prasmi. Lai iegūtu sīkāku informāciju, skatiet šo ziņu. Mēs esam veiksmīgi izveidojuši vienkāršu lietojumprogrammu, tagad mēs uzrakstīsim Alexa prasmi. Dodieties uz Amazon izstrādātāju informācijas paneli un piesakieties. Noklikšķiniet uz Alexa un sāciet darbu ar Alexa Skill komplektu
Izpildiet gui sniegtos norādījumus.
Cilnē Mijiedarbības modelis vēlaties aizpildīt lodziņu Nodomu shēma ar:
Lodziņā Izlases paraugi vēlaties ierakstīt dažas izlases komandas, kuras persona varētu izmantot, lai izsauktu prasmi. Mēs rakstījām šos:
Findkeys atrod manas atslēgas
- Cilnē Konfigurācija noteikti izvēlieties pakalpojuma beigu punktu HTTPS. Kopējiet savu https saiti un ielīmējiet to zemāk esošajā lodziņā Noklusējums. Kontu saistīšanu var atstāt uz Nē.
- SSL sertifikātā izvēlieties vidējo opciju "Mans izstrādes galapunkts ir domēna apakšdomēns, kuram ir aizstājējzīmes sertifikāts no sertifikācijas iestādes".
- Cilne Pārbaude ļaus jums pārbaudīt jaunās prasmes, ierakstot kādu no izlases komandām.
Pabeidziet pēdējo divu cilņu aizpildīšanu, līdz visas atzīmes ir zaļas. Pēc tam sāciet savas prasmes, izmantojot beta testēšanas funkciju. Tas ļauj jums izvietot savas prasmes jebkurā atbalss ierīcē pirms tās publicēšanas. Izpildiet e -pasta saitē sniegtos norādījumus, lai instalētu prasmi savā atbalss ierīcē.
3. darbība: padariet mūsu prasmes gudrākas
Mēs ievietojām dīkstāves datorus, kas izplatīti visā mājā, lai veiktu vaicājumus par Bluetooth bāku, lai ziņotu par RSSI signāla stiprumu.
Ņemot rādījumus no vairākām mašīnām, mēs varam izmantot signāla stiprumu kā attāluma starpniekserveri. Mums ir jāizdomā, kā to izmantot, lai aprēķinātu visticamāko mājas daļu, lai atrastu bāku.
Mēs pievēršamies mašīnmācībai. Crontab darbs ik pēc 2 minūtēm izveido RSSI kartīšu datu kopu. Novietojot bāku dažādās vietās, piemēram: "Guļamistaba", "Vannas istaba", "Virtuve", "Dzīvojamā zona", mēs apzīmējam RSSI žurnālus. Kad esam kartējuši māju, mēs varam izmantot koku modeļus, piemēram, xgboost XGBClassifier.
Gradienta palielināšanas xgboost ieviešana apstrādās trūkstošos datus, kas iegūti noildzes laikā, un apmācīs pāris sekundes. Izmantojiet python marinējumu, lai saglabātu apmācīto modeli un ielādētu mūsu alexa retrievr lietojumprogrammā. Kad prasme tiek izsaukta, lietojumprogramma uzmeklē Bluetooth RSSI nolasījumu un ģenerē paredzamo atrašanās vietu, alexa var atbildēt, ierosinot “mēģināt ieskatīties vannas istabā”.
4. solis: salieciet to visu kopā
Ņemot modeli, lai tuvinātu atslēgu pēdējo atrašanās vietu, mēs varam to pievienot lietojumprogrammai, lai uzlabotu Alexa atgriezto paziņojumu. Mēs esam mainījuši skriptu, lai tas būtu šāds:
importēt osfrom kolbas importēšana Kolba no kolbas_ask importēšana Jautāt, paziņojums importēt pexpect importēt marinētu gurķi importēt pandas kā pd importēt numpy kā np no kolekcijām importēt noklusējuma vērtību, skaitītājs no reverse_read importa reverse_readline app = Kolba (_ name_) ask = Ask (lietotne, '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/path/to/repo/sound_alarm.py &") runas_teksts = guess_locate () atgriešanās paziņojums (runas_teksts) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = , kamēr len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = ln.split () read_dict [ip] = lasīšana res_lst.append (read_dict), ja ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Vērtības mdl_ = marinēta gulta (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] answer_str = 'Mēģiniet meklēt elfu, ja uzminat == 1: answer_str +=' guļamistaba ' == 2: answer_str += 'vannas istaba' elif guess == 3: answer_str += 'kitchen' elif guess == 4: answer_str += 'dzīvojamā istaba' return answer_str if _name_ == "_main_": app.run (host = '127.0.0.1', ports = '5000')
Mēs izveidojām jaunu funkciju ar nosaukumu guess_locate (), kas uzņem failu ar jaunākajiem reģistrētajiem rssi signāla stiprumiem. Pēc tam paraugi tiks salīdzināti ar mūsu marinēto xgboost modeli un atgriezīs visticamāko atrašanās vietas virkni. Šī vieta tiks atgriezta, kad tiks prasīts Alexa. Tā kā savienojuma izveide ar bāku var aizņemt dažas sekundes, mēs veicam atsevišķu procesu, izsaucot šo funkciju mapē sound_alarm.py.
Ieteicams:
Bezvadu versija Vai manas garāžas durvis ir atvērtas vai aizvērtas?: 7 soļi
Bezvadu versija … Vai manas garāžas durvis ir atvērtas vai aizvērtas ?: Mēs vēlējāmies vienkāršu, lētu un uzticamu indikācijas sistēmu, kas parādītu, vai mūsu garāžas durvis ir atvērtas vai aizvērtas. Ir daudz " Vai manas garāžas durvis ir atvērtas " projektiem. Lielākā daļa šo projektu ir cieši saistīti. Manā gadījumā skrien
Vienkārša manas automašīnas vadība AC: 3 soļi
Vienkārša manas automašīnas maiņstrāvas kontrole: Gatavojoties automašīnas datora automatizācijas projektam, man vajadzēja nomainīt OEM kontrolieri ar ieslēgšanas / izslēgšanas slēdzi. Galu galā dators automātiski pārslēdzas man, bet tagad man vajadzēja izolēt maiņstrāvas kompresora vadu un kondensēties
Ainava no manas valsts: 4 soļi
Ainava no manas valsts: Sveiki visiem! Šis ir mans pirmais projekts, un es patiešām vēlos to dalīties ar jums, puiši! Ideja radās no skaistas ainavas, no manas valsts
Cik viegli bija labot manas veļas mazgājamās mašīnas elektroniku: 5 soļi (ar attēliem)
Cik viegli bija salabot manas veļas mazgājamās mašīnas elektroniku: kāpēc? Tā kā es esmu veidotājs, man patīk labot savas lietas, kas dažkārt ir problēma, jo tās nedarbojas, kamēr es atrodu kādu laiku, lai izdomātu netīro stratēģiju problēma. Labot kaut ko parasti ir vienkārši un jautri, bet atrast risinājumu
Mana tastatūra Manas rokas: 8 soļi (ar attēliem)
Mana tastatūra Manas rokas: es izmantoju pavisam jauno Epilog lāzera griezēju, ko Instructables nesen ieguva, lai lāzera veidā iegravētu manu roku attēlu uz klēpjdatora tastatūras … pastāvīgi. Tagad tas anulē jūsu garantiju DIY stilā! Esmu lāzergravējis vairāk klēpjdatoru nekā vairums, jo es palīdzu