Tartalomjegyzék:

Alexa, Hol vannak a kulcsaim?: 4 lépés
Alexa, Hol vannak a kulcsaim?: 4 lépés

Videó: Alexa, Hol vannak a kulcsaim?: 4 lépés

Videó: Alexa, Hol vannak a kulcsaim?: 4 lépés
Videó: Prüfungsvorbereitung - A2 - Deutsch lernen 2024, Július
Anonim
Image
Image
Bluetooth -jelzőfények feltörése
Bluetooth -jelzőfények feltörése

Az Alexa különösen alkalmas információ-visszakeresési feladatokra és eszközök figyelésére vezeték nélküli otthoni hálózatok használatával. Természetes, hogy fontolóra veszi az értékek rácsra helyezését a gyors visszakeresés érdekében. Feltörjük az olcsó, alacsony energiafogyasztású Bluetooth -jelzőfényeket a hálózati tartomány és az akkumulátor élettartama érdekében, és intelligens alkalmazást építünk, hogy Alexa tudja, hol hagytuk a kulcsokat.

Hogyan kell csinálni…

1. lépés: A Bluetooth -jelzők feltörése

3 jelzőkészlet 15 dollárnál alacsonyabb áron vásárolható meg, és az Android/iOS alkalmazások támogatják őket, de lemondunk az adatvédelemről. Ezenkívül a kulcsok megtalálása nem válhat a telefonunk megtalálásává.

Ez az adafruit oktatóanyag a fordított mérnöki intelligens fényekről segített nekünk a jelzők irányításában. Kezdje azzal, hogy bekapcsolja a jelzőfény -keresést az eszköz címére a következő futtatással:

sudo hcitool lescan

Keresse meg és másolja az „iTag” névvel ellátott címet, majd futtassa:

sudo gatttool -I

Csatlakozzon az eszközhöz interaktív módon a következő módon:

csatlakoztassa AA: BB: CC: DD: EE: FF

Próbálja meg futtatni a „súgót” a lehetőségek megtekintéséhez, vagy az „elsődlegeset” a szolgáltatások megtekintéséhez:

Futtatva a „char-desc” parancsot, majd a szerviz fogantyút a fentiek szerint, megtaláljuk az UUID-ket, amelyeket a gatt jellemző specifikációira és a szolgáltatás specifikációira hivatkozva keresünk meg. Ha többet szeretne megtudni ezekről a szolgáltatásokról, nézze meg ezt. Ha a Wireshark segítségével ellenőrzi a forgalmat, azt találjuk, hogy a 0100111000000001 aktiválja a riasztást, és logikusan a 0000111000000001 kikapcsolja. Most megkapjuk az egyszerű python függvényt:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('A kapcsolat sikeres', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Ezután az Alexa készség létrehozására összpontosítunk, amely elindítja a jelzőfényt, amikor a kulcsokat keressük.

2. lépés: Alexa készség és alkalmazás létrehozása

Alexa készség és alkalmazás létrehozása
Alexa készség és alkalmazás létrehozása
Alexa készség és alkalmazás létrehozása
Alexa készség és alkalmazás létrehozása

Létrehozunk egy készséget, amelyet összekapcsolunk egy helyi szerverrel. Ezután konfiguráljuk szerverünket, hogy végrehajtsa a kívánt műveletet, ebben az esetben közelítést adunk a kulcsok elhelyezkedéséről, és hangjelzést adunk a Bluetooth -jelzőfénynek. A Lombik egyszerű és könnyen használható python könyvtárat biztosít egy alkalmazás kiszolgálásához. A flask-ask használatával konfigurálhatjuk a szervert, hogy kommunikáljon a később felépített Alexa-készségeinkkel. Jól szolgálja ki az alkalmazást az Ngrokkal, amely megad egy https linket, amelyre szükségünk lesz Alexa készségeinkhez. Először a legegyszerűbb funkcióval rendelkező alkalmazást építettük fel: hogy a BLE jelzőfényünk sípoljon, amikor aktiválódik.

#!/usr/bin/env pythonfrom lombik import Lombik lombikból ' #A bluetooth jelzőfényed azonosítója itt @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "A kulcsaid itt vannak valahol." return utasítás (beszéd_szöveg) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('A kapcsolat sikeres', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001'), ha _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

A BLE hangjelzéshez a korábban írt sound_alarm () függvényt használtuk. A szándékhoz használni kívánt függvényhez hozzáadjuk az ask dekorátort a „findkeys” szándékkal. Amikor elkészítjük az Alexa készséget az Amazon fejlesztői irányítópulton, ezt a nevet használjuk szándékunkhoz. Írja be ezt a szkriptet egy app.py nevű fájlba, és futtassa

python app.py

Ez kiszolgálja az alkalmazást a https:// localhost: 5000 címen. Futtasson egy ngrok szervert, és másolja a létrehozott https linket. Szüksége lesz rá az Alexa készség konfigurálásakor. További részletekért tekintse meg ezt a bejegyzést. Sikeresen beállítottunk egy egyszerű alkalmazást, most megírjuk az Alexa készséget. Keresse meg az Amazon fejlesztői irányítópultját, és jelentkezzen be. Kattintson az Alexára, és kezdje el az Alexa Skill készletet

Kövesse a gui utasításait.

Az Interakciómodell lapon töltse ki az Intent Schema mezőt a következőkkel:

A Minta kijelentések mezőbe néhány mintaparancsot szeretne írni, amelyeket egy személy használhat a készség meghívásához. Ezeket írtuk:

a findkeys megtalálja a kulcsomat

  • A Konfiguráció lapon válassza ki a HTTPS szolgáltatás végpontját. Másolja ki a https linket, és illessze be az alapértelmezett mezőbe. A fiókok összekapcsolását nemre lehet hagyni.
  • Az SSL-tanúsítványban válassza a középső opciót: "A fejlesztési végpontom egy tartomány altartománya, amely rendelkezik egy tanúsító hatóság helyettesítő tanúsítványával".
  • A Teszt fül lehetővé teszi az új készség kipróbálását, ha beír egy mintaparancsot.

Fejezze be az utolsó két fül kitöltését, amíg az összes pipa zöld lesz. Ezután indítsa el készségét a bétatesztelés funkcióval. Ez lehetővé teszi, hogy a készségeit bármilyen visszhangosító eszközön tárolja, mielőtt közzéteszi. Kövesse az e -mail linken található utasításokat a készség telepítéséhez echo eszközére.

3. lépés: Készségünk okosabbá tétele

Készségeink okosabbá tétele
Készségeink okosabbá tétele
Készségeink okosabbá tétele
Készségeink okosabbá tétele
Készségeink okosabbá tétele
Készségeink okosabbá tétele

Az egész házban elterjedt üresjáratú számítógépeket elkezdtük lekérdezni a Bluetooth jelzőfénytől, hogy jelezze az RSSI jelerősségét.

Több gépről leolvasva a jel erősségét a távolság proxyként használhatjuk fel. Ki kell találnunk, hogyan használhatjuk ezt a ház valószínű részének kiszámításához, hogy megtaláljuk a jelzőt.

Rátérünk a gépi tanulásra. Egy crontab feladat 2 percenként RSSI sorok adathalmazát építi fel. A jelzőfényt különböző helyekre helyezve, például: „Hálószoba”, „Fürdőszoba”, „Konyha”, „Nappali”, megjelöljük az RSSI naplókat. Miután feltérképeztük az otthont, használhatunk fa alapú modelleket, mint például az xgboost XGBClassifier.

A gradiens növelés xgboost megvalósítása az időzített leolvasásokból hiányzó adatokat kezeli, néhány másodperc alatt. Használja a python savanyúságot a betanított modell megőrzéséhez, és töltse be az alexa retrievr alkalmazásunkba. Amikor a készséget meghívják, az alkalmazás megkeresi a Bluetooth RSSI -leolvasást, és előállít egy előre jelzett helyet, az alexa válaszolhat, és azt javasolja, hogy „próbálkozzon a fürdőszobában”.

4. lépés: Összerakni

Miután rendelkeztünk a kulcsok utolsó helyének megközelítő modelljével, hozzáadhatjuk az alkalmazáshoz, hogy javítsuk az Alexa által visszaadott nyilatkozatot. A szkriptet a következőre módosítottuk:

import osfrom lombik import Lombik a flask_ask importból Kérdés, utasítás import pexpect import savanyúság import panda mint pd import numpy as np from gyűjtemények 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 utasítás (beszéd_szöveg) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = míg len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = ln.split () read_dict [ip] = olvasás res_lst.append (read_dict), ha ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Értékek mdl_ = savanyúság.load (nyitott (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] answer_str = 'Próbálja meg keresni a' if guess == 1: answer_str += 'bedroom' elif találgatást == 2: answer_str += 'bathroom' elif guess == 3: answer_str += 'kitchen' elif guess == 4: answer_str += 'nappali' return answer_str if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Létrehoztunk egy új, guess_locate () nevű függvényt, amely a legújabb rögzített rssi jelerősségű fájlt veszi fel. Ezután lefuttatja a mintákat a pácolt xgboost modellünkkel szemben, és visszaadja a legvalószínűbb helyszínt. Ezt a helyet visszaadjuk, amikor Alexa megkéri. Mivel a kapcsolat létrehozása egy jelzőfényhez néhány másodpercet vehet igénybe, ezért külön folyamatot futtatunk a sound_alarm.py fájlban.

Ajánlott: