Мазмұны:

Alexa, менің кілттерім қайда?: 4 қадам
Alexa, менің кілттерім қайда?: 4 қадам

Бейне: Alexa, менің кілттерім қайда?: 4 қадам

Бейне: Alexa, менің кілттерім қайда?: 4 қадам
Бейне: 12V Bluetooth Relay to control AC or DC load using mobile Phone 2024, Желтоқсан
Anonim
Image
Image
Bluetooth маяктарын бұзу
Bluetooth маяктарын бұзу

Alexa сымсыз үй желілерін қолдана отырып, ақпаратты іздеуге және активтерді бақылауға өте ыңғайлы. Құндылықтарды жылдам алу үшін торға қоюды қарастыру заңды. Біз желінің ауқымы мен батареяның ұзақ қызмет ету мерзімі үшін арзан Bluetooth төмен энергия шамдарын бұзамыз және Alexa кілттерді қайда қалдырғанымызды білуі үшін ақылды қосымшаны құрамыз.

Мұны қалай…

1 -қадам: Bluetooth маяктарын бұзу

3 маяктар жиынтығын 15 доллардан төмен сатып алуға болады және оларды Android/iOS қосымшалары қолдайды, бірақ біз құпиялылықтан бас тартамыз. Сонымен қатар, кілттерді табу телефонды іздеуге айналмауы керек.

Кері инженерлік ақылды шамдарға арналған бұл адафрут оқулығы бізге маяктарды басқаруға көмектесті. Құрылғының мекенжайын маяк сканерлеуді қосудан бастаңыз:

sudo hcitool lescan

'ITag' атауымен белгіленген мекенжайды табыңыз және көшіріңіз, содан кейін іске қосыңыз:

sudo gatttool -Мен

Құрылғыны интерактивті түрде іске қосыңыз:

қосу AA: BB: CC: DD: EE: FF

Опцияларды қарау үшін «анықтаманы» немесе қызметтерді қарау үшін «негізгі» іске қосып көріңіз:

Жоғарыда көрсетілгендей «char-desc» қызмет көрсету тұтқасын іске қосқанда, біз GAT сипаттамалық сипаттамалары мен қызмет сипаттамаларына сілтеме жасай отырып іздейтін UUID-ті табамыз. Wireshark арқылы трафикті тексере отырып, біз 0100111000000001 дабылды іске қосатынын және логикалық түрде 0000111000000001 өшіретінін білеміз. Енді бізде қарапайым питон функциясы бар:

pexpectdef sound_alarm (BD_ADDR) импорттау: child = pexpect.spawn ('gatttool -I') child.sendline ('қосылыңыз {}'. форматы (BD_ADDR)) child.expect ('Байланыс сәтті', күту уақыты = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Әрі қарай, біз кілттерді іздеген кезде маякты іске қосу үшін Alexa дағдысын қалыптастыруға назар аударамыз.

2 -қадам: Alexa дағдылары мен қосымшаларын құру

Alexa дағдылары мен қосымшаларын құру
Alexa дағдылары мен қосымшаларын құру
Alexa дағдылары мен қосымшаларын құру
Alexa дағдылары мен қосымшаларын құру

Біз жергілікті сервермен байланыстырылатын дағды жасаймыз. Содан кейін біз серверді қалаған кез келген әрекетті жасауға конфигурациялаймыз, бұл жағдайда кілттер қай жерде орналасуы мүмкін екенін болжап, Bluetooth маяк сигналын береді. Flask қосымшаға қызмет көрсету үшін қарапайым және қолдануға оңай питон кітапханасын ұсынады. Flask-ask көмегімен біз серверді кейінірек құрастыратын Alexa шеберлігімізбен байланысу үшін конфигурациялай аламыз. Ngrok көмегімен қосымшаға жақсы қызмет көрсетіңіз, ол бізге Alexa дағдылары үшін бізге қажет https сілтемесін береді. Алдымен біз қосымшаны ең қарапайым функционалдылықпен құрдық: іске қосылған кезде BLE маяк сигналын беру.

#!/usr/bin/env pythonfrom колбадан импорттау колбасы 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 операторы (сөйлеу_мәтіні) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('қосылу {}'. форматы (BD_ADDR)) child.expect ('Байланыс сәтті', күту уақыты = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') егер _name_ == «_main_»: app.run (хост = '127.0.0.1', порт = '5000')

Біз BLE дыбыстық сигналын шығару үшін бұрын жазған sound_alarm () функциясын қолдандық. Ниет үшін қолданылатын функция үшін біз «іздеу кілттері» бар декораторды қосамыз. Біз Amazon әзірлеушілердің бақылау тақтасында Alexa шеберлігін жасағанда, біз бұл атауды өз мақсатымыз үшін қолданамыз. Бұл сценарийді app.py деп аталатын файлға жазыңыз және іске қосыңыз

python app.py

Бұл сіздің өтініміңізге https:// localhost: 5000 сайтында қызмет етеді. Ngrok серверін іске қосыңыз және жасалған https сілтемесін көшіріңіз. Сізге Alexa дағдыларын конфигурациялау кезінде қажет болады. Толық ақпарат алу үшін мына постты қараңыз. Біз қарапайым қосымшаны сәтті орнаттық, енді біз Alexa шеберлігін жазамыз. Amazon әзірлеушілер бақылау тақтасына өтіп, жүйеге кіріңіз. Alexa түймесін басып, Alexa Skill жиынтығын бастаңыз.

Гуи берген нұсқауларды орындаңыз.

Интерактивті модель қойындысының астында сіз «Ниет схемасы» жолағын толтырғыңыз келеді:

{«ниет»: [{«ниет»: «іздеу кілттері}}, {» ниет «:» AMAZON. HelpIntent «}, {» ниет «:» AMAZON. StopIntent «}, {» ниет «:» AMAZON. CancelIntent « }]}

Үлгі айтулар өрісінде сіз шеберлікті шақыру үшін адам қолданатын кейбір үлгі командаларды жазғыңыз келеді. Біз мыналарды жаздық:

табу пернелері менің кілттерімді табады

  • Конфигурация қойындысында HTTPS қызметінің соңғы нүктесін таңдағаныңызға көз жеткізіңіз. Https сілтемесін көшіріп, астындағы Әдепкі жолағына қойыңыз. Есептік жазбаны байланыстыруды No -ге қалдыруға болады.
  • SSL сертификатында «Менің әзірлеудің соңғы нүктесі-бұл сертификаттау орталығының қойылмалы таңбасы бар доменнің қосалқы домені» деген орташа нұсқаны таңдаңыз.

  • Сынақ қойындысы сізге жаңа команданы үлгі командаларының бірін теру арқылы тексеруге мүмкіндік береді.

Барлық құсбелгілер жасыл болғанша соңғы екі қойынды толтыруды аяқтаңыз. Содан кейін Beta Testing мүмкіндігімен өз дағдыларыңызды іске қосыңыз. Бұл сізге өз шеберлігіңізді жарияламас бұрын кез келген жаңғырық құрылғысында орналастыруға мүмкіндік береді. Дауысты жаңғырту құрылғысына орнату үшін электрондық пошта сілтемесіндегі нұсқауларды орындаңыз.

3 -қадам: Біздің дағдыларды ақылды ету

Біздің дағдыларды ақылды ету
Біздің дағдыларды ақылды ету
Біздің дағдыларды ақылды ету
Біздің дағдыларды ақылды ету
Біздің дағдыларды ақылды ету
Біздің дағдыларды ақылды ету

Біз RSSI сигналының күші туралы хабарлау үшін bluetooth -маякты сұрауға жұмыс жасаймыз.

Бірнеше машинадан көрсеткіштерді қабылдай отырып, біз сигналдың күшін қашықтыққа прокси ретінде пайдалана аламыз. Біз мұны маякты табу үшін үйдің ең ықтимал бөлігін қалай есептеу керектігін анықтауымыз керек.

Біз машиналық оқытуға жүгінеміз. Crontab тапсырмасы әр 2 минут сайын RSSI кортеждерінің жиынтығын құрады. Маякты «жатын бөлме», «ванна бөлмесі», «ас үй», «қонақ бөлмесі» сияқты әр түрлі жерлерге орналастыру арқылы біз RSSI журналдарын белгілейміз. Біз үйдің картасын жасағаннан кейін, xgboost XGBClassifier сияқты ағашқа негізделген модельдерді қолдана аламыз.

Градиентті күшейтудің xgboost енгізуі бірнеше секунд ішінде жаттығулардың уақытылы оқылуын жоғалтады. Оқытылған үлгіні сақтап қалу және біздің alexa retrievr қосымшасына жүктеу үшін питон тұздығын қолданыңыз. Дағды шақырылған кезде, қосымша bluetooth RSSI оқуын іздейді және болжамды орынды жасайды, алекса «ванна бөлмесінде қарап көріңіз» деп жауап бере алады.

4 -қадам: Барлығын біріктіру

Кілттердің соңғы орналасуын болжайтын үлгіге ие бола отырып, біз оны Alexa қайтарған мәлімдемені жақсарту үшін қосымшаға қоса аламыз. Біз сценарийді келесідей етіп өзгерттік:

flask_ask импорттау колбасынан колбаны импорттау Сұрау, импорт pexpect импорттау маринадталған импорт панда pd импорт numpy ретінде np ретінде коллекциялар импорттау defaultdict, reverse_read импортынан санауыш reverse_readline app = Flask (_ name_) ask = Сұрау (қолданба, '/') @ ask.intent ('findkeys') def retrievr (): os.system («/path/to/repo/sound_alarm.py &») speech_text = guess_locate () қайтару мәлімдемесі (сөйлеу_мәтін) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = len (res_lst)! = 20: ln = келесі (line_gen) егер ln.startswith ('Host'): _, ip, _, оқу = ln.split () read_dict [ip] = res_lst.append (read_dict) егер ip == 'ip.of.one.computer' болса: read_dict = {} басқа: pass val = pd. DataFrame (res_lst).replace ({'N/ A ': np.nan}). Мәндер mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) tahmin = tahmin.most_common (1)) [0] [0] reply_str = '' Егер болжам == 1: reply_str += 'жатын бөлме' elif болжамына қарап көріңіз == 2: reply_str += 'ванна' elif болжам == 3: reply_str += 'ас' elif болжам == 4: reply_str += 'қонақ бөлме' қайтару reply_str егер _name_ == «_main_»: app.run (хост = '127.0.0.1', порт = '5000')

Біз соңғы жазылған rssi сигнал күші бар файлды алатын guess_locate () атты жаңа функция жасадық. Содан кейін ол біздің xgboost маринадталған үлгісіне қатысты үлгілерді іске қосады және ықтимал орналасу жолын қайтарады. Бұл орын Alexa сұралған кезде қайтарылады. Маякқа қосылу бірнеше секундқа созылатындықтан, біз бұл функцияны sound_alarm.py ішінде шақыратын бөлек процесті жүргіземіз.

Ұсынылған: