Мазмуну:

Alexa, Менин ачкычтарым кайда?: 4 кадам
Alexa, Менин ачкычтарым кайда?: 4 кадам

Video: Alexa, Менин ачкычтарым кайда?: 4 кадам

Video: Alexa, Менин ачкычтарым кайда?: 4 кадам
Video: Элдерди тан калтырган ж инди математик бала #ха-ха 2024, Июль
Anonim
Image
Image
Bluetooth маяктарын бузуу
Bluetooth маяктарын бузуу

Alexa зымсыз үй түйүндөрүн колдонуу менен маалымат издөө тапшырмаларына жана активдерди көзөмөлдөөгө өзгөчө ылайыктуу. Тез алуу үчүн баалуу нерселерди торго коюуну ойлонуу табигый нерсе. Биз тармактын диапазону жана батареянын узактыгы үчүн арзан bluetooth аз энергия маяктарын бузуп, Alexa ачкычтарды кайда калтырганыбызды билүү үчүн акылдуу тиркеме курабыз.

Муну кандай жасаш керек…

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

3 маяктын топтомун 15 доллардан арзан баада сатып алууга болот жана Android/iOS тиркемелери менен колдоого алынат, бирок биз купуялуулуктан баш тартабыз. Мындан тышкары, ачкычтарыбызды табуу телефонуңузду табууга айланып кетпеши керек.

Бул adafruit үйрөткүчү тескери инженердик акылдуу чырактар боюнча бизге маяктарды башкарууга жардам берди. Түзмөктүн дарегин издөө үчүн маякты күйгүзүү менен баштаңыз:

sudo hcitool lescan

"ITag" деген ат менен жазылган даректи таап, көчүрүп, анан чуркаңыз:

sudo gatttool -I

Түзмөктү иштетүү менен интерактивдүү туташыңыз:

туташуу 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 тиркемени тейлөө үчүн жөнөкөй жана колдонууга оңой python китепканасын камсыздайт. Flask-askты колдонуп, биз серверди кийинчерээк кура турган Alexa жөндөмүбүз менен байланышуу үчүн конфигурациялай алабыз. Ngrok менен тиркемени тейлеңиз, ал бизге Alexa жөндөмүбүз үчүн керектүү https шилтемесин берет. Биринчиден, биз тиркемени эң жөнөкөй функциясы менен курдук: иштетилгенде BLE маягыбыздын сигналын берүү.

#!/usr/bin/env pythonfrom колбадан импорттук колбадан flask_ask import суроо, билдирүүнү импорттоо pexpect app = Flask (_ name_) ask = ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #Сиздин bluetooth маяк id бул жерде @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Сиздин ачкычтар бул жерде бир жерде". кайтаруу билдирүүсү (сүйлөө_текст) def sound_alarm (): бала = pexpect.spawn ('gatttool -I') child.sendline ('туташуу {}'. формат (BD_ADDR)) child.expect ('Байланыш ийгиликтүү', тайм -аут = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Биз BLE сигналын берүү үчүн мурда жазган sound_alarm () функциясын колдондук. Максат үчүн колдонула турган функция үчүн, биз "findkeys" ниети менен декораторду кошобуз. Биз Amazonдун иштеп чыгуучулар тактасында Alexa чеберчилигин түзгөндө, биз бул ысымды ниетибиз үчүн колдонобуз. Бул скриптти app.py аттуу файлга жазыңыз жана иштетиңиз

python app.py

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

Гуи берген көрсөтмөлөрдү аткарыңыз.

Interation Model өтмөгүнүн астында Intent Schema кутучасын төмөнкүлөр менен толтургуңуз келет:

Үлгү айтуу кутусунда, сиз жөндөмүңүздү колдонуу үчүн адам колдоно турган кээ бир буйруктарды жазгыңыз келет. Биз буларды жаздык:

тапкычтар менин ачкычтарымды табышат

  • Конфигурация өтмөгүндө, HTTPSке кызматтын акыркы чекитин тандап алыңыз. Https шилтемесиңизди көчүрүп, астындагы Демейки кутусуна чаптаңыз. Аккаунтту байланыштырууну Жокко калтырса болот.
  • SSL Тастыктамасында "Менин иштеп чыгуу чекитим-бул сертификат органынын жапайы белгиси бар домендин суб-домени" деген орто жолду тандаңыз.
  • Test өтмөгү сизге үлгүдөгү буйруктарыңыздын бирин терүү менен жаңы жөндөмдү сынап көрүүгө мүмкүнчүлүк берет.

Бардык белгилер жашыл болгонго чейин акыркы эки өтмөктү толтурууну бүтүрүңүз. Андан кийин Бета тестирлөө мүмкүнчүлүгү менен жөндөмүңүздү баштаңыз. Бул аны чыгарардан мурун кандайдыр бир жаңырык түзмөгүндө жөндөмүңүздү жайгаштырууга мүмкүндүк берет. Эко түзмөгүңүзгө жөндөмдү орнотуу үчүн электрондук почта шилтемесиндеги көрсөтмөлөрдү аткарыңыз.

3 -кадам: Биздин жөндөмдү акылдуу кылуу

Биздин жөндөмдү акылдуу кылуу
Биздин жөндөмдү акылдуу кылуу
Биздин жөндөмдү акылдуу кылуу
Биздин жөндөмдү акылдуу кылуу
Биздин жөндөмдү акылдуу кылуу
Биздин жөндөмдү акылдуу кылуу

Биз RSSI сигналынын күчүн билдирүү үчүн Bluetooth маягы менен иштөө үчүн үйгө жайылган бош турган компьютерлерди койдук.

Бир нече машинадан окууларды алып, биз сигналдын күчүн дистанциянын прокси катары колдоно алабыз. Муну маякты табуу үчүн үйдүн эң ыктымалдуу бөлүгүн эсептөө үчүн муну кантип колдонууну ойлонушубуз керек.

Биз машина үйрөнүүгө кайрылабыз. Crontab тапшырмасы ар 2 мүнөт сайын RSSI туплеринин маалымат базасын түзөт. Маякты ар кандай жерлерге жайгаштыруу: 'уктоочу бөлмө', 'ванна', 'ашкана', 'жашоо аянты', биз RSSI журналдарын белгилейбиз. Биз үйдүн картасын түзгөндөн кийин, xgboostтун XGBClassifier сыяктуу даракка негизделген моделдерин колдоно алабыз.

Градиенттин күчөтүлүшүнүн xgboost ишке ашуусу бир нече секунддун ичинде убакыттын өтүшү менен окуудан алынган дайындарды башкарат. Үйрөнүлгөн моделди сактап калуу үчүн python туздалганын колдонуңуз жана биздин alexa retrievr тиркемесине жүктөңүз. Чеберчилик чакырылганда, колдонмо bluetooth RSSI окуусун издейт жана болжолдонгон жерди түзөт, алекса "ваннада карап көрүңүз" деп жооп бере алат.

4 -кадам: Бардыгын бириктирүү

Ачкычтардын акыркы жайгашкан жерин болжолдуу моделге ээ болуп, биз аны Alexa кайтарган билдирүүнү жакшыртуу үчүн колдонмого кошо алабыз. Биз сценарийди өзгөртүү үчүн өзгөрттүк:

колбадан импорттоо Колбаны flask_ask импортунан суроо, билдирүүнү импорттоо pexpect импорттук туздалган импорттук панда катары pd импорт numpy катары np коллекцияларды импорттоо defaultdict, reverse_read импорттон Counter 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 tahmin_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = 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) guess = guess.most_common (1) [0] [0] reply_str = '' If guess == 1: reply_str += 'уктоочу' элифтин божомолун карап көрүңүз == 2: reply_str += 'ванна' elif болжолу == 3: reply_str += 'ашкана' elif guess == 4: reply_str += 'конок бөлмөсү' кайтаруу reply_str if _name_ == "_main_": app.run (хост = '127.0.0.1', порт = '5000')

Guess_locate () деп аталган жаңы функцияны түздүк, ал акыркы катталган rssi сигналынын күчтүү файлын алат. Ал үлгүлөрдү биздин туздалган xgboost моделибизге каршы иштетет жана мүмкүн болгон жайгашуу сапын кайтарат. Бул жер Alexa суралганда кайтарылат. Маякка туташуу бир нече секундага созулушу мүмкүн болгондуктан, биз sound_alarm.py ичинде бул функцияны чакырган өзүнчө процессти жүргүзөбүз.

Сунушталууда: