Mục lục:

Alexa, phím của tôi ở đâu ?: 4 bước
Alexa, phím của tôi ở đâu ?: 4 bước

Video: Alexa, phím của tôi ở đâu ?: 4 bước

Video: Alexa, phím của tôi ở đâu ?: 4 bước
Video: 15 Phím Tắt Tuyệt Vời Mà Bạn Chưa Sử Dụng Đến 2024, Tháng mười một
Anonim
Image
Image
Hacking Bluetooth Beacons
Hacking Bluetooth Beacons

Alexa đặc biệt phù hợp với các nhiệm vụ truy xuất thông tin và giám sát tài sản bằng mạng gia đình không dây. Việc cân nhắc đưa các vật có giá trị lên lưới để thu hồi nhanh là điều đương nhiên. Chúng tôi hack các đèn hiệu năng lượng thấp của bluetooth giá rẻ cho phạm vi mạng và tuổi thọ pin, đồng thời xây dựng một ứng dụng thông minh để Alexa biết chúng tôi đã để chìa khóa ở đâu.

Làm thế nào để làm nó…

Bước 1: Lấy cắp dữ liệu báo hiệu Bluetooth

Bạn có thể mua bộ 3 báo hiệu với giá dưới 15 đô la và được hỗ trợ với các ứng dụng Android / iOS nhưng chúng tôi sẽ chọn không tham gia vì quyền riêng tư. Bên cạnh đó, việc tìm chìa khóa của chúng ta không nên biến thành việc tìm kiếm điện thoại của chúng ta.

Hướng dẫn đặc biệt này về đèn thông minh kỹ thuật đảo ngược đã giúp chúng tôi kiểm soát các đèn hiệu. Bắt đầu bằng cách bật tính năng quét báo hiệu cho địa chỉ thiết bị bằng cách chạy:

sudo hcitool lescan

Tìm và sao chép địa chỉ được gắn nhãn với tên 'iTag', sau đó chạy:

sudo gatttool -Tôi

Kết nối tương tác với thiết bị bằng cách chạy:

kết nối AA: BB: CC: DD: EE: FF

Thử chạy 'trợ giúp' để xem các tùy chọn hoặc 'chính' để xem các dịch vụ:

Chạy 'char-desc' theo sau bởi xử lý dịch vụ như trên, chúng tôi tìm thấy các UUID mà chúng tôi tra cứu bằng cách tham khảo các thông số kỹ thuật đặc tính gatt và thông số kỹ thuật dịch vụ. Để biết thêm về các dịch vụ này, hãy kiểm tra phần này. Kiểm tra lưu lượng bằng Wireshark, chúng tôi thấy rằng 0100111000000001 kích hoạt cảnh báo và về mặt logic, 0000111000000001 sẽ tắt nó đi. Bây giờ chúng ta có hàm python đơn giản:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Kết nối thành công', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Tiếp theo, chúng tôi tập trung vào việc tạo kỹ năng Alexa để kích hoạt đèn hiệu khi chúng tôi đang tìm kiếm các phím.

Bước 2: Tạo kỹ năng và ứng dụng Alexa

Tạo kỹ năng và ứng dụng Alexa
Tạo kỹ năng và ứng dụng Alexa
Tạo kỹ năng và ứng dụng Alexa
Tạo kỹ năng và ứng dụng Alexa

Chúng tôi tạo ra một kỹ năng sẽ được liên kết với một máy chủ cục bộ. Sau đó, chúng tôi định cấu hình máy chủ của mình để thực hiện bất kỳ hành động nào chúng tôi muốn, trong trường hợp này, cung cấp ước tính về vị trí các phím có thể được đặt và phát ra tiếng bíp Bluetooth. Flask cung cấp một thư viện python đơn giản và dễ sử dụng để phục vụ một ứng dụng. Sử dụng flask-ask, chúng tôi có thể định cấu hình máy chủ để giao tiếp với kỹ năng Alexa mà chúng tôi sẽ xây dựng sau này. Phục vụ tốt ứng dụng với Ngrok, nó sẽ cung cấp cho chúng tôi liên kết https mà chúng tôi cần cho kỹ năng Alexa của mình. Đầu tiên, chúng tôi xây dựng ứng dụng với chức năng đơn giản nhất: để phát ra tiếng bíp BLE của chúng tôi khi được kích hoạt.

#! / usr / bin / env pythonfrom flask 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 beacon bluetooth của bạn tại đây @ ask.intent (' findkeys ') def Retrievr (): sound_alarm () speech_text = "Các chìa khóa của bạn ở đâu đó ở đây." câu lệnh return (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Kết nối thành công', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Chúng tôi đã sử dụng hàm sound_alarm () mà chúng tôi đã viết trước đó để tạo ra tiếng bíp BLE. Đối với hàm sẽ được sử dụng cho ý định, chúng tôi thêm trình trang trí hỏi với ý định của chúng tôi là "các phím tìm kiếm". Khi tạo kỹ năng Alexa trên bảng điều khiển dành cho nhà phát triển Amazon, chúng tôi sẽ sử dụng tên này cho mục đích của mình. Viết tập lệnh này vào tệp có tên app.py và chạy

python app.py

Điều này sẽ phục vụ ứng dụng của bạn trên https:// localhost: 5000. Chạy máy chủ ngrok và sao chép liên kết https được tạo. Bạn sẽ cần nó khi định cấu hình kỹ năng Alexa. Để biết thêm chi tiết, hãy xem bài đăng này. Chúng tôi đã thiết lập thành công một ứng dụng đơn giản, bây giờ chúng tôi sẽ viết kỹ năng Alexa. Điều hướng đến bảng điều khiển dành cho nhà phát triển Amazon và đăng nhập. Nhấp vào Alexa và bắt đầu với bộ kỹ năng Alexa

Làm theo hướng dẫn của gui.

Trong tab Mô hình Tương tác, bạn sẽ muốn điền vào hộp Lược đồ Ý định với thông tin sau:

Trong hộp Lệnh mẫu, bạn muốn viết một số lệnh mẫu mà một người có thể sử dụng để gọi kỹ năng. Chúng tôi đã viết những điều này:

các phím tìm kiếm tìm các phím tìm phím của tôi, nơi tìm các phím của tôi, tôi đã đánh mất chìa khóa của mình

  • Trong tab Cấu hình, hãy đảm bảo chọn điểm kết thúc dịch vụ là HTTPS. Sao chép liên kết https của bạn và dán vào hộp Mặc định bên dưới. Liên kết tài khoản có thể được để không.
  • Trong Chứng chỉ SSL, hãy chọn tùy chọn giữa, "Điểm cuối phát triển của tôi là miền phụ của miền có chứng chỉ ký tự đại diện từ tổ chức phát hành chứng chỉ".
  • Tab Kiểm tra sẽ cho phép bạn kiểm tra kỹ năng mới bằng cách nhập một trong các lệnh mẫu của bạn.

Hoàn tất việc điền vào hai tab cuối cùng cho đến khi tất cả các dấu kiểm có màu xanh lá cây. Sau đó, khởi động kỹ năng của bạn với tính năng Thử nghiệm Beta. Điều này cho phép bạn lưu trữ kỹ năng của mình trên bất kỳ thiết bị echo trước khi xuất bản nó. Làm theo hướng dẫn trên liên kết email để cài đặt kỹ năng trên thiết bị echo của bạn.

Bước 3: Làm cho kỹ năng của chúng tôi trở nên thông minh hơn

Làm cho kỹ năng của chúng tôi thông minh hơn
Làm cho kỹ năng của chúng tôi thông minh hơn
Làm cho kỹ năng của chúng tôi thông minh hơn
Làm cho kỹ năng của chúng tôi thông minh hơn
Làm cho kỹ năng của chúng tôi thông minh hơn
Làm cho kỹ năng của chúng tôi thông minh hơn

Chúng tôi đặt các máy tính nhàn rỗi rải khắp nhà để truy vấn đèn hiệu bluetooth để báo cáo cường độ tín hiệu RSSI.

Lấy kết quả đọc từ nhiều máy, chúng tôi có thể sử dụng cường độ tín hiệu để làm đại diện cho khoảng cách. Chúng tôi cần tìm ra cách sử dụng điều này để tính toán phần có khả năng nhất của ngôi nhà để tìm ra đèn hiệu.

Chúng tôi chuyển sang học máy. Một công việc crontab cứ sau 2 phút, tạo ra một tập dữ liệu gồm các bộ RSSI. Đặt beacon ở các vị trí khác nhau như: 'Phòng ngủ', 'Phòng tắm', 'Nhà bếp', 'Khu vực sinh hoạt', chúng tôi gắn nhãn các bản ghi RSSI. Khi chúng tôi đã lập bản đồ ngôi nhà, chúng tôi có thể sử dụng các mô hình dựa trên cây như XGBClassifier của xgboost.

Việc triển khai xgboost của tăng cường độ dốc sẽ xử lý dữ liệu bị thiếu từ các lần đọc hết thời gian, đào tạo trong vài giây. Sử dụng python pickle để duy trì mô hình đã đào tạo và tải vào ứng dụng truy xuất alexa của chúng tôi. Khi kỹ năng được gọi, ứng dụng sẽ tra cứu kết quả đọc RSSI bluetooth và tạo vị trí dự đoán, alexa có thể trả lời đề xuất 'thử tìm kiếm trong phòng tắm.'

Bước 4: Kết hợp tất cả lại với nhau

Có một mô hình để ước tính vị trí cuối cùng của các phím, chúng tôi có thể thêm nó vào ứng dụng để cải thiện câu lệnh được trả về bởi Alexa. Chúng tôi đã sửa đổi tập lệnh để đọc:

import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import pickle import pandas as pd import numpy as np from collection import defaultdict, Counter from reverse_read import reverse_readline app = Flask (_ name_) ask = Ask (app, '/') @ ask.intent ('findkeys') def accessvr (): os.system ("/ path / to / repo / sound_alarm.py &") speech_text = đoán_locate () câu lệnh trả về (speech_text) def đoán_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] = 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}). Giá trị mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.posystem (val) đoán = Bộ đếm (preds) đoán = đoán.most_common (1) [0] [0] reply_str = 'Thử nhìn vào' nếu đoán == 1: reply_str + = 'phòng ngủ' nếu đoán == 2: reply_str + = 'toilet' elif đoán == 3: reply_str + = 'kitchen' elif đoán == 4: reply_str + = 'living room' return reply_str if _name_ == "_main_": app.run (host = '127.0.0.1', cổng = '5000')

Chúng tôi đã tạo một hàm mới được gọi là hàm đoán_locate () để lấy một tệp có cường độ tín hiệu rssi mới nhất được ghi lại. Sau đó, nó sẽ chạy các mẫu dựa trên mô hình xgboost đã ngâm của chúng tôi và trả về chuỗi vị trí có khả năng xảy ra nhất. Vị trí này sẽ được trả lại khi Alexa được nhắc. Vì việc thiết lập kết nối với beacon có thể mất vài giây, chúng tôi chạy một quy trình riêng biệt gọi hàm đó trong sound_alarm.py.

Đề xuất: