Съдържание:

Алекса, къде са ми ключовете?: 4 стъпки
Алекса, къде са ми ключовете?: 4 стъпки

Видео: Алекса, къде са ми ключовете?: 4 стъпки

Видео: Алекса, къде са ми ключовете?: 4 стъпки
Видео: Смотрите 4, 5, 6 серии, юмористического сериала для подростков - "Хочу в Париж". 2024, Юли
Anonim
Image
Image
Хакване на Bluetooth маяци
Хакване на Bluetooth маяци

Alexa е особено подходящ за задачи за извличане на информация и мониторинг на активи с помощта на безжични домашни мрежи. Естествено е да се обмисли поставянето на ценности в мрежата за бързо извличане. Хакваме евтини Bluetooth ниско енергийни маяци за обхвата на мрежата и дълголетието на батерията и изграждаме интелигентно приложение, така че Алекса да знае къде сме оставили ключовете.

Как да го направим…

Стъпка 1: Хакване на Bluetooth маяци

Комплект от 3 маяка може да бъде закупен за по -малко от $ 15 и се поддържа с приложения за Android/iOS, но ние ще се откажем за поверителност. Освен това намирането на ключовете ни не трябва да се превръща в намиране на телефона ни.

Този адаптационен урок за интелигентни светлини за обратно инженерство ни помогна да контролираме маяците. Започнете, като включите сканирането на маяка за адреса на устройството, като изпълните:

sudo hcitool lescan

Намерете и копирайте адреса, обозначен с името „iTag“, след което стартирайте:

sudo gatttool -I

Свържете се с устройството интерактивно, като изпълните:

свържете AA: BB: CC: DD: EE: FF

Опитайте да стартирате „помощ“, за да видите опциите, или „първична“, за да видите услугите:

Изпълнявайки „char-desc“, последвано от обслужващата дръжка, както по-горе, откриваме UUID, които търсим, като препращаме към спецификациите на характеристиките на gatt и спецификациите на услугата. За повече информация относно тези услуги, вижте това. При проверката на трафика с Wireshark откриваме, че 0100111000000001 задейства алармата и логично 0000111000000001 я изключва. Сега имаме простата функция на python:

импортиране на pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. формат (BD_ADDR)) child.expect ('Връзката е успешна', таймаут = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

След това се фокусираме върху създаването на умението Alexa да задейства маяка, когато търсим ключовете.

Стъпка 2: Създаване на Alexa умение и приложение

Създаване на Alexa умение и приложение
Създаване на Alexa умение и приложение
Създаване на Alexa умение и приложение
Създаване на Alexa умение и приложение

Ние създаваме умение, което ще бъде свързано с локален сървър. След това конфигурираме нашия сървър да предприема каквото и да е действие, в този случай предоставяме приблизителна информация за това къде могат да се намират ключовете и правим звуковия сигнал на маяка на Bluetooth. Flask предоставя проста и лесна за използване библиотека на python за обслужване на приложение. Използвайки flask-ask, можем да конфигурираме сървъра да комуникира с нашите умения Alexa, които ще изградим по-късно. Добре обслужвайте приложението с Ngrok, което ще ни даде https връзка, от която се нуждаем за уменията ни в Alexa. Първо създадохме приложението с най -простата функционалност: да накараме нашия BLE фар да издава звуков сигнал при задействане.

#!/usr/bin/env python от колба за импортиране Колба от flask_ask импортиране Питане, импортиране на изявление pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #Вашият идентификатор за маяк за bluetooth тук @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Ключовете ви са тук някъде." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. формат (BD_ADDR)) child.expect ('Връзката е успешна', таймаут = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Използвахме функцията sound_alarm (), която написахме по -рано, за да направим BLE звуков сигнал. За функцията, която ще се използва за намерението, ние добавяме декоратор ask с нашето намерение "findkeys". Когато направим умението Alexa на таблото за разработчици на Amazon, ще използваме това име за нашите намерения. Напишете този скрипт във файл с име app.py и го стартирайте

python app.py

Това ще обслужва вашето приложение на https:// localhost: 5000. Стартирайте ngrok сървър и копирайте генерираната https връзка. Ще ви е необходим, когато конфигурирате умението Alexa. За повече подробности вижте тази публикация. Успешно създадохме просто приложение, сега ще напишем умението Alexa. Отидете до таблото за разработчици на Amazon и влезте. Кликнете върху Alexa и започнете с комплекта Alexa Skill

Следвайте инструкциите, дадени от gui.

В раздела Модел на интерактивност ще искате да попълните полето Схема на намерение със следното:

В полето Sample Utterances искате да напишете някои примерни команди, които човек може да използва за извикване на умението. Написахме това:

Findkeys намери ключовете ми

  • В раздела Конфигурация не забравяйте да изберете крайната точка на услугата HTTPS. Копирайте вашата https връзка и я поставете в полето по подразбиране отдолу. Свързването на акаунт може да бъде оставено на Не.
  • В SSL сертификата изберете средната опция „Моята крайна точка за разработка е поддомейн на домейн, който има заместващ сертификат от сертифициращ орган“.
  • Разделът Тест ще ви позволи да тествате новото умение, като въведете една от примерните си команди.

Завършете попълването на последните два раздела, докато всички отметки станат зелени. След това стартирайте уменията си с функцията за бета тестване. Това ви позволява да хоствате уменията си на всяко ехо устройство, преди да го публикувате. Следвайте инструкциите на връзката по имейл, за да инсталирате умението на вашето ехо устройство.

Стъпка 3: Подобряване на уменията ни

Подобряване на уменията ни
Подобряване на уменията ни
Подобряване на уменията ни
Подобряване на уменията ни
Подобряване на уменията ни
Подобряване на уменията ни

Поставяме бездействащите компютри, разпръснати из цялата къща, да работят, за да попитат bluetooth маяка, за да докладват силата на RSSI сигнала.

Взимайки показания от множество машини, можем да използваме силата на сигнала като прокси за разстояние. Трябва да разберем как да използваме това, за да изчислим най -вероятната част от къщата, за да намерим маяка.

Обръщаме се към машинно обучение. Работа за crontab на всеки 2 минути изгражда набор от данни от RSSI кортежи. Поставяйки маяка на различни места като: „Спалня“, „Баня“, „Кухня“, „Жилищна площ“, ние обозначаваме RSSI дневниците. След като картографираме дома, можем да използваме базирани на дърво модели като XGBClassifier на xgboost.

Изпълнението на xgboost на градиентно усилване ще се справи с липсващите данни от изчерпаните показания, обучението за няколко секунди. Използвайте python pickle, за да запазите обучения модел и заредете в нашето приложение за извличане на alexa. Когато се извика умението, приложението търси четенето на RSSI на bluetooth и генерира прогнозирано местоположение, алекса може да отговори, като предложи „опитайте да погледнете в банята“.

Стъпка 4: Съберете всичко заедно

Като имаме модел за приближаване на последното местоположение на ключовете, можем да го добавим към приложението, за да подобрим декларацията, върната от Alexa. Променихме скрипта да чете:

внос osfrom колба импортиране колба от flask_ask импортиране Ask, изявление импортиране pexpect импортиране туршия импортиране на панди като pd импортиране numpy като np от колекции импорт defaultdict, брояч от reverse_read импорт 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 line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = докато len (res_lst)! = 20: ln = next (line_gen), ако ln.startswith ('Host'): _, ip, _, четене = ln.split () read_dict [ip] = четене res_lst.append (read_dict) ако ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Стойности mdl_ = pickle.load (отворен (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) предположение = Counter (preds) предположение = предположение.most_common (1) [0] [0] reply_str = 'Опитайте да потърсите в' if guess == 1: reply_str += 'bedroom' elif предположение == 2: reply_str += 'баня' elif предположение == 3: reply_str += 'кухня' elif предположение == 4: reply_str += 'хол' връщане reply_str ако _name_ == "_main_": app.run (хост = '127.0.0.1', порт = '5000')

Създадохме нова функция, наречена guess_locate (), която взема файл с най -новата записана сила на rssi сигнала. След това той ще изпълни пробите срещу нашия маринован модел xgboost и ще върне най -вероятния низ за местоположение. Това местоположение ще бъде върнато, когато Alexa бъде подканена. Тъй като установяването на връзка с маяк може да отнеме няколко секунди, изпълняваме отделен процес, извикващ тази функция в sound_alarm.py.

Препоръчано: