Daftar Isi:

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, November
Anonim
Image
Image
Meretas Beacon Bluetooth
Meretas Beacon Bluetooth

Alexa sangat cocok untuk tugas pencarian informasi dan aset pemantauan menggunakan jaringan rumah nirkabel. Itu wajar untuk mempertimbangkan menempatkan barang-barang berharga di grid untuk pengambilan cepat. Kami meretas suar bluetooth murah hemat energi untuk jangkauan jaringan dan daya tahan baterai dan membangun aplikasi pintar sehingga Alexa tahu di mana kami meninggalkan kunci.

Bagaimana cara melakukannya…

Langkah 1: Meretas Beacon Bluetooth

Satu set 3 beacon dapat dibeli dengan harga kurang dari $15 dan didukung dengan aplikasi Android/iOS tetapi kami akan memilih keluar untuk privasi. Selain itu, menemukan kunci kita seharusnya tidak berubah menjadi menemukan telepon kita.

Tutorial adafruit tentang lampu pintar reverse engineering ini membantu kami mengontrol beacon. Mulailah dengan menyalakan pemindaian suar untuk alamat perangkat dengan menjalankan:

sudo hcitool lescan

Cari & salin alamat berlabel 'iTag', lalu jalankan:

sudo gatttool -I

Hubungkan ke perangkat secara interaktif dengan menjalankan:

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

Coba jalankan 'bantuan' untuk melihat opsi atau 'utama' untuk melihat layanan:

Menjalankan 'char-desc' diikuti dengan pegangan layanan seperti di atas, kami menemukan UUID yang kami cari dengan merujuk pada spesifikasi karakteristik gatt dan spesifikasi layanan. Untuk lebih lanjut tentang layanan ini, lihat ini. Memeriksa lalu lintas dengan Wireshark, kami menemukan bahwa 0100111000000001 memicu alarm dan secara logis, 0000111000000001 mematikannya. Sekarang kita memiliki fungsi python sederhana:

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

Selanjutnya, kita fokus pada pembuatan skill Alexa untuk memicu beacon saat kita mencari kuncinya.

Langkah 2: Membuat Keterampilan dan Aplikasi Alexa

Membuat Keterampilan dan Aplikasi Alexa
Membuat Keterampilan dan Aplikasi Alexa
Membuat Keterampilan dan Aplikasi Alexa
Membuat Keterampilan dan Aplikasi Alexa

Kami membuat keterampilan yang akan ditautkan ke server lokal. Kemudian kami mengonfigurasi server kami untuk mengambil tindakan apa pun yang kami inginkan, dalam hal ini, memberikan perkiraan di mana kunci mungkin berada dan membuat beacon Bluetooth berbunyi. Flask menyediakan library python yang sederhana dan mudah digunakan untuk melayani suatu aplikasi. Dengan menggunakan flask-ask, kita dapat mengkonfigurasi server untuk berkomunikasi dengan skill Alexa yang akan kita buat nanti. Layani aplikasi dengan baik dengan Ngrok, yang akan memberi kita tautan https yang kita perlukan untuk keterampilan Alexa kita. Pertama, kami membangun aplikasi dengan fungsionalitas paling sederhana: membuat beacon BLE kami berbunyi saat dipicu.

#!/usr/bin/env pythonfrom flask import Flask from flask_ask import Ask, pernyataan import peexpect app=Flask(_name_) ask = Ask(app, '/') BD_ADDR = 'AA:BB:CC:DD:EE:FF ' #ID beacon bluetooth Anda di sini @ask.intent('findkeys') def retrievr(): sound_alarm() speech_text = "Kunci Anda ada di sekitar sini." return statement(speech_text) def sound_alarm(): child = peexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Connection berhasil', timeout=60) child.sendline('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run(host='127.0.0.1', port='5000')

Kami menggunakan fungsi sound_alarm() yang kami tulis sebelumnya untuk membuat bip BLE. Untuk fungsi yang akan digunakan untuk maksud, kami menambahkan dekorator ask dengan "findkeys" maksud kami. Saat kami membuat keterampilan Alexa di dasbor pengembang Amazon, kami akan menggunakan nama ini untuk tujuan kami. Tulis skrip ini ke file bernama app.py dan jalankan

python app.py

Ini akan melayani aplikasi Anda di https://localhost:5000. Jalankan server ngrok dan salin tautan https yang dihasilkan. Anda akan membutuhkannya saat mengonfigurasi keterampilan Alexa. Untuk lebih jelasnya, lihat posting ini. Kami telah berhasil menyiapkan aplikasi sederhana, sekarang kami akan menulis keterampilan Alexa. Arahkan ke dasbor pengembang Amazon dan masuk. Klik Alexa dan mulai dengan Alexa Skill kit

Ikuti instruksi yang diberikan oleh gui.

Di bawah tab Model Interaksi Anda ingin mengisi kotak Skema Intent dengan yang berikut ini:

{ "intent": [{ "intent": "findkeys" }, { "intent": "AMAZON. HelpIntent" }, { "intent": "AMAZON. StopIntent" }, { "intent": "AMAZON. CancelIntent" }] }

Di kotak Contoh Ucapan, Anda ingin menulis beberapa contoh perintah yang mungkin digunakan seseorang untuk meminta keterampilan. Kami menulis ini:

findkeys menemukan kunci saya menemukan kunci saya menemukan kunci saya menemukan kunci saya kehilangan kunci saya

  • Di tab Konfigurasi, pastikan untuk memilih titik akhir layanan ke HTTPS. Salin tautan https Anda dan tempel di kotak Default di bawahnya. Penautan akun dapat diserahkan ke No.
  • Di Sertifikat SSL, pilih opsi tengah, "Titik akhir pengembangan saya adalah sub-domain dari domain yang memiliki sertifikat wildcard dari otoritas sertifikat".
  • Tab Test akan memungkinkan Anda untuk menguji keterampilan baru dengan mengetikkan salah satu contoh perintah Anda.

Selesai mengisi dua tab terakhir sampai semua tanda centang berwarna hijau. Kemudian luncurkan keahlian Anda dengan fitur Pengujian Beta. Ini memungkinkan Anda untuk meng-host keahlian Anda di perangkat gema apa pun sebelum menerbitkannya. Ikuti instruksi pada tautan email untuk menginstal keterampilan di perangkat gema Anda.

Langkah 3: Membuat Keterampilan Kita Lebih Cerdas

Membuat Keterampilan Kita Lebih Cerdas
Membuat Keterampilan Kita Lebih Cerdas
Membuat Keterampilan Kita Lebih Cerdas
Membuat Keterampilan Kita Lebih Cerdas
Membuat Keterampilan Kita Lebih Cerdas
Membuat Keterampilan Kita Lebih Cerdas

Kami menempatkan komputer menganggur yang tersebar di seluruh rumah untuk bekerja dalam query beacon bluetooth untuk melaporkan kekuatan sinyal RSSI.

Mengambil pembacaan dari beberapa mesin, kita dapat memanfaatkan kekuatan sinyal sebagai proxy untuk jarak. Kita perlu mencari cara untuk menggunakan ini untuk menghitung bagian rumah yang paling mungkin untuk menemukan suar.

Kami beralih ke pembelajaran mesin. Pekerjaan crontab setiap 2 menit, membangun kumpulan data tupel RSSI. Menempatkan suar di tempat yang berbeda seperti: 'Kamar Tidur', 'Kamar Mandi', 'Dapur', 'Area Tamu' kami memberi label pada log RSSI. Setelah kita memetakan rumah, kita dapat menggunakan model berbasis pohon seperti XGBClassifier dari xgboost.

Implementasi xgboost dari peningkatan gradien akan menangani data yang hilang dari pembacaan waktu habis, pelatihan dalam beberapa detik. Gunakan acar python untuk mempertahankan model terlatih dan memuat ke dalam aplikasi retrievr alexa kami. Saat skill dipanggil, aplikasi mencari pembacaan RSSI bluetooth dan menghasilkan lokasi yang diprediksi, alexa dapat membalas menyarankan untuk 'coba cari di kamar mandi.'

Langkah 4: Menyatukan Semuanya

Memiliki model untuk memperkirakan lokasi terakhir kunci, kita dapat menambahkannya ke aplikasi untuk meningkatkan pernyataan yang dikembalikan oleh Alexa. Kami telah memodifikasi skrip untuk membaca:

import osfrom flask import Flask dari flask_ask import Ask, pernyataan import peexpect import acar import pandas as pd import numpy as np from collections 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() mengembalikan pernyataan(speech_text) def guess_locate(): read_dict = {} line_gen = reverse_readline('YOUR_DATA_FILE.txt') res_lst = while len(res_lst) != 20: ln = next(line_gen) if ln.startswith('Host'): _, ip, _, reading = ln.split () read_dict[ip] = membaca res_lst.append(read_dict) jika ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame(res_lst).replace({'N/ A': np.nan}).nilai mdl_ = pickle.load(open('location_model_file.dat', 'rb')) preds = mdl_.predict(val) guess = Counter(preds) guess = menebak.most_common(1)[0][0] reply_str = 'Coba cari di ' if guess == 1: reply_str += 'bedroom' elif guess == 2: reply_str += tebakan elif 'kamar mandi' == 3: reply_str += tebakan elif 'dapur' == 4: reply_str += 'ruang tamu' kembalikan reply_str if _name_ == "_main_": app.run(host ='127.0.0.1', port='5000')

Kami membuat fungsi baru yang disebut guess_locate() yang mengambil file dengan kekuatan sinyal rssi terbaru yang direkam. Ini kemudian akan menjalankan sampel terhadap model xgboost acar kami dan mengembalikan string lokasi yang paling mungkin. Lokasi ini akan dikembalikan ketika Alexa diminta. Karena membuat koneksi ke beacon dapat memakan waktu beberapa detik, kami menjalankan proses terpisah yang memanggil fungsi tersebut di sound_alarm.py.

Direkomendasikan: