Isi kandungan:

Alexa, Di mana kunci saya ?: 4 Langkah
Alexa, Di mana kunci saya ?: 4 Langkah

Video: Alexa, Di mana kunci saya ?: 4 Langkah

Video: Alexa, Di mana kunci saya ?: 4 Langkah
Video: kenalan sama anak baru 🤭 #ngeshortsdulu #shorts 2024, Disember
Anonim
Image
Image
Meretas Beacon Bluetooth
Meretas Beacon Bluetooth

Alexa sangat sesuai untuk tugas pencarian maklumat dan memantau aset menggunakan rangkaian rumah tanpa wayar. Adalah wajar untuk mempertimbangkan meletakkan barang berharga di grid untuk pengambilan cepat. Kami meretas suar rendah tenaga bluetooth untuk jangkauan rangkaian dan jangka hayat bateri dan membina aplikasi pintar sehingga Alexa tahu di mana kami meninggalkan kunci.

Bagaimana hendak melakukannya…

Langkah 1: Meretas Beacon Bluetooth

Satu set 3 suar boleh dibeli dengan harga kurang dari $ 15 dan disokong dengan aplikasi Android / iOS tetapi kami akan memilih untuk privasi. Selain itu, mencari kunci kita tidak boleh berubah menjadi mencari telefon kita.

Tutorial iklan ini mengenai lampu pintar kejuruteraan terbalik membantu kami mengawal suar. Mulakan dengan mengaktifkan suar suar untuk alamat peranti dengan menjalankan:

sudo hcitool lescan

Cari & salin alamat yang berlabel dengan nama 'iTag,' kemudian jalankan:

sudo gatttool -I

Sambungkan ke peranti secara interaktif dengan menjalankan:

sambungkan AA: BB: CC: DD: EE: FF

Cuba jalankan 'help' untuk melihat pilihan atau 'utama' untuk melihat perkhidmatan:

Menjalankan 'char-desc' diikuti oleh pemegang perkhidmatan seperti di atas, kami menjumpai UUID yang kami cari dengan merujuk spesifikasi ciri gatt dan spesifikasi perkhidmatan. Untuk maklumat lanjut mengenai perkhidmatan ini, periksa ini. Memeriksa lalu lintas dengan Wireshark, kami mendapati bahawa 0100111000000001 mencetuskan penggera dan secara logik, 0000111000000001 mematikannya. Sekarang kita mempunyai fungsi python yang mudah:

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

Seterusnya, kami memberi tumpuan untuk mencipta kemahiran Alexa untuk mencetuskan suar ketika kami mencari kunci.

Langkah 2: Membuat Kemahiran dan Aplikasi Alexa

Membuat Kemahiran dan Aplikasi Alexa
Membuat Kemahiran dan Aplikasi Alexa
Membuat Kemahiran dan Aplikasi Alexa
Membuat Kemahiran dan Aplikasi Alexa

Kami membuat kemahiran yang akan dihubungkan ke pelayan tempatan. Kemudian kami mengkonfigurasi pelayan kami untuk mengambil tindakan yang kami mahukan, dalam hal ini, memberikan perkiraan di mana kunci mungkin berada dan membuat bip suar Bluetooth. Flask menyediakan perpustakaan python yang mudah dan senang digunakan untuk melayani aplikasi. Dengan menggunakan flask-ask, kami dapat mengkonfigurasi pelayan untuk berkomunikasi dengan kemahiran Alexa kami yang akan kami bina nanti. Layan aplikasi dengan baik dengan Ngrok, yang akan memberi kami pautan https yang kami perlukan untuk kemahiran Alexa kami. Mula-mula kami membina aplikasi dengan fungsi paling mudah: untuk menjadikan beep beacon BLE kami semasa dicetuskan.

#! / usr / bin / env pythonfrom flas import import Flask from flask_ask import Ask, statement import pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '# ID suar bluetooth anda di sini @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Kunci anda ada di sini di suatu tempat." penyataan kembali (ucapan_teks) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection berjaya', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') jika _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Kami menggunakan fungsi sound_alarm () yang kami tulis sebelumnya untuk membuat bunyi BLE. Untuk fungsi yang akan digunakan untuk maksud, kami menambahkan penghias tanya dengan maksud kami "findkeys". Apabila kita membuat kemahiran Alexa di papan pemuka Amazon, kita akan menggunakan nama ini untuk tujuan kita. Tulis skrip ini ke fail bernama app.py dan jalankan

python app.py

Ini akan melayani aplikasi anda di https:// localhost: 5000. Jalankan pelayan ngrok dan salin pautan https yang dihasilkan. Anda memerlukannya semasa anda mengkonfigurasi kemahiran Alexa. Untuk maklumat lebih lanjut, lihat siaran ini. Kami berjaya menyiapkan aplikasi sederhana, sekarang kami akan menulis kemahiran Alexa. Arahkan ke papan pemuka Amazon dan log masuk. Klik pada Alexa dan mulakan dengan Alexa Skill kit

Ikut arahan yang diberikan oleh gui.

Di bawah tab Model Perantaraan anda ingin mengisi kotak Skema Maksud dengan yang berikut:

Dalam kotak Sampel Ucapan, anda ingin menulis beberapa contoh arahan yang mungkin digunakan seseorang untuk menggunakan kemahiran. Kami menulis ini:

keykeys mencari kunci sayafindkeys di mana kunci saya mencari kunci saya kehilangan kunci saya

  • Di tab Konfigurasi, pastikan untuk memilih titik akhir perkhidmatan ke HTTPS. Salin pautan https anda dan tampal di kotak Lalai di bawahnya. Pautan akaun boleh ditinggalkan ke No.
  • Dalam Sijil SSL pilih pilihan tengah, "Titik akhir pengembangan saya adalah sub-domain domain yang mempunyai sijil wildcard dari pihak berkuasa sijil".
  • Tab Ujian akan membolehkan anda menguji kemahiran baru dengan memasukkan salah satu contoh arahan anda.

Selesaikan mengisi dua tab terakhir sehingga semua tanda semak berwarna hijau. Kemudian lancarkan kemahiran anda dengan ciri Pengujian Beta. Ini membolehkan anda mengehadkan kemahiran anda di mana-mana peranti gema sebelum menerbitkannya. Ikuti arahan pada pautan e-mel untuk memasang kemahiran pada alat gema anda.

Langkah 3: Menjadikan Kemahiran Kita Lebih Cerdas

Menjadikan Kemahiran Kita Lebih Pintar
Menjadikan Kemahiran Kita Lebih Pintar
Menjadikan Kemahiran Kita Lebih Pintar
Menjadikan Kemahiran Kita Lebih Pintar
Menjadikan Kemahiran Kita Lebih Pintar
Menjadikan Kemahiran Kita Lebih Pintar

Kami meletakkan komputer terbiar yang tersebar di seluruh rumah untuk bekerja dalam pertanyaan suar bluetooth untuk melaporkan kekuatan isyarat RSSI.

Mengambil bacaan dari beberapa mesin, kita dapat menggunakan kekuatan isyarat sebagai proksi untuk jarak. Kita perlu memikirkan cara menggunakan ini untuk mengira bahagian rumah yang paling mungkin untuk mencari suar.

Kami beralih kepada pembelajaran mesin. Pekerjaan crontab setiap 2 minit, membina kumpulan data tupel RSSI. Menempatkan suar di tempat yang berlainan seperti: 'Bilik Tidur', 'Bilik Mandi', 'Dapur', 'Kawasan Hidup' kami melabelkan log RSSI. Sebaik sahaja kami memetakan rumah, kami dapat menggunakan model berasaskan pokok seperti XgClost Xgboost.

Pelaksanaan xgboost peningkatan gradien akan menangani data yang hilang dari pembacaan masa, latihan dalam beberapa saat. Gunakan acar python untuk mengekalkan model terlatih dan muatkan ke aplikasi pengambilan alexa kami. Apabila kemahiran dipanggil, aplikasi mencari bacaan RSSI bluetooth dan menghasilkan lokasi yang diramalkan, alexa dapat membalas yang menyarankan untuk 'cuba melihat di bilik mandi.'

Langkah 4: Menggabungkan Semuanya

Memiliki model untuk menghampiri lokasi terakhir kunci, kita dapat menambahkannya ke aplikasi untuk memperbaiki pernyataan yang dikembalikan oleh Alexa. Kami telah mengubah suai skrip untuk membaca:

import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import pickle import panda as pd import numpy as np from collects 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 = kira_lokasi () penyataan kembali (ucapan_teks) def menebak_lokasi (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = sementara len (res_lst)! = 20: ln = seterusnya (line_gen) jika ln.startswith ('Host'): _, ip, _, membaca = ln.split () read_dict [ip] = read res_lst.append (read_dict) if ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N / A ': np.nan}).) [0] [0] reply_str = 'Cuba cari di' if teka == 1: reply_str + = 'bilik tidur' tekaan elif == 2: reply_str + = 'bilik mandi' elif tekaan == 3: balas_str + = 'dapur' elif meneka == 4: reply_str + = 'ruang tamu' balas balas_str jika _nama_ == "_main_": app.run (hos = '127.0.0.1', port = '5000')

Kami membuat fungsi baru yang disebut menebak_lokasi () yang mengambil fail dengan kekuatan isyarat rssi yang direkodkan terkini. Ia kemudian akan menjalankan sampel terhadap model xgboost acar kami dan mengembalikan rentetan lokasi yang paling mungkin. Lokasi ini akan dikembalikan apabila Alexa diminta. Sejak membuat sambungan ke suar dapat memakan waktu beberapa saat, kami menjalankan proses terpisah yang memanggil fungsi tersebut di sound_alarm.py.

Disyorkan: