สารบัญ:

Alexa กุญแจของฉันอยู่ที่ไหน: 4 ขั้นตอน
Alexa กุญแจของฉันอยู่ที่ไหน: 4 ขั้นตอน

วีดีโอ: Alexa กุญแจของฉันอยู่ที่ไหน: 4 ขั้นตอน

วีดีโอ: Alexa กุญแจของฉันอยู่ที่ไหน: 4 ขั้นตอน
วีดีโอ: ความลับในเมืองฟรี!!!|ToCa Boca|PiSu Channel 2024, พฤศจิกายน
Anonim
Image
Image
การแฮ็ก Bluetooth Beacons
การแฮ็ก Bluetooth Beacons

Alexa เหมาะอย่างยิ่งสำหรับงานดึงข้อมูลและตรวจสอบทรัพย์สินโดยใช้เครือข่ายไร้สายภายในบ้าน เป็นเรื่องปกติที่จะต้องพิจารณาวางของมีค่าไว้บนตะแกรงเพื่อให้ค้นคืนได้อย่างรวดเร็ว เราแฮ็กบีคอนบลูทูธพลังงานต่ำราคาถูกสำหรับช่วงเครือข่ายและอายุการใช้งานแบตเตอรี่ และสร้างแอปพลิเคชันอัจฉริยะเพื่อให้ Alexa รู้ว่าเราทิ้งกุญแจไว้ที่ไหน

ทำอย่างไร…

ขั้นตอนที่ 1: แฮ็ก Bluetooth Beacons

สามารถซื้อชุดบีคอน 3 ชุดได้ในราคาต่ำกว่า $15 และได้รับการสนับสนุนด้วยแอปพลิเคชัน Android/iOS แต่เราจะยกเลิกความเป็นส่วนตัว นอกจากนี้ การค้นหากุญแจของเราไม่ควรกลายเป็นการค้นหาโทรศัพท์ของเรา

บทแนะนำเกี่ยวกับ adafruit เกี่ยวกับไฟอัจฉริยะแบบวิศวกรรมย้อนกลับช่วยให้เราควบคุมบีคอนได้ เริ่มต้นด้วยการเปิดบีคอนสแกนหาที่อยู่อุปกรณ์โดยเรียกใช้:

sudo hcitool lescan

ค้นหาและคัดลอกที่อยู่ที่มีชื่อ "iTag" จากนั้นเรียกใช้:

sudo gatttool -I

เชื่อมต่อกับอุปกรณ์แบบโต้ตอบโดยเรียกใช้:

ต่อ AA:BB:CC:DD:EE:FF

ลองเรียกใช้ 'ความช่วยเหลือ' เพื่อดูตัวเลือกหรือ 'หลัก' เพื่อดูบริการ:

เรียกใช้ 'char-desc' ตามด้วยหมายเลขอ้างอิงของบริการด้านบน เราจะพบ UUID ที่เราค้นหาโดยอ้างอิงข้อกำหนดคุณลักษณะ gatt และข้อกำหนดบริการ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบริการเหล่านี้ ให้ตรวจสอบสิ่งนี้ การตรวจสอบการรับส่งข้อมูลด้วย Wireshark เราพบว่า 0100111000000001 ทริกเกอร์การเตือนและตามหลักเหตุผล 0000111000000001 จะปิดการทำงาน ตอนนี้เรามีฟังก์ชัน python อย่างง่าย:

นำเข้า pexpectdef sound_alarm(BD_ADDR): child = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Connection Success', timeout=30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

ต่อไป เรามุ่งเน้นที่การสร้างทักษะของ Alexa เพื่อเรียกใช้บีคอนเมื่อเรากำลังมองหาคีย์

ขั้นตอนที่ 2: การสร้างทักษะและแอปของ Alexa

การสร้างทักษะและแอปของ Alexa
การสร้างทักษะและแอปของ Alexa
การสร้างทักษะและแอปของ Alexa
การสร้างทักษะและแอปของ Alexa

เราสร้างทักษะที่จะเชื่อมโยงกับเซิร์ฟเวอร์ในพื้นที่ จากนั้นเรากำหนดค่าเซิร์ฟเวอร์ของเราให้ดำเนินการใดๆ ที่เราต้องการ ในกรณีนี้ ให้ค่าประมาณว่าคีย์อาจอยู่ที่ใด และส่งเสียงบี๊บของบลูทูธบีคอน Flask มีไลบรารี python ที่เรียบง่ายและใช้งานง่ายเพื่อให้บริการแอปพลิเคชัน การใช้ flask-ask ทำให้เราสามารถกำหนดค่าเซิร์ฟเวอร์ให้สื่อสารกับทักษะของ Alexa ที่เราจะสร้างขึ้นในภายหลัง ให้บริการแอปพลิเคชันด้วย Ngrok ซึ่งจะทำให้เรามีลิงก์ https ที่จำเป็นสำหรับทักษะ Alexa ของเรา ขั้นแรก เราสร้างแอปพลิเคชันด้วยฟังก์ชันที่ง่ายที่สุด: เพื่อให้บีคอน BLE ของเราส่งเสียงบี๊บเมื่อถูกเรียก

#!/usr/bin/env pythonfrom flask นำเข้า Flask จาก flask_ask นำเข้า Ask คำสั่งนำเข้า pexpect app=Flask(_name_) ask = Ask(app, '/') BD_ADDR = 'AA:BB:CC:DD:EE:FF ' #รหัสบีคอนบลูทูธของคุณที่นี่ @ask.intent('findkeys') def retrievr(): sound_alarm() speech_text = "กุญแจของคุณอยู่ที่ไหนสักแห่งที่นี่" คำสั่ง return (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'.format (BD_ADDR)) child.expect ('การเชื่อมต่อสำเร็จ' หมดเวลา = 60) child.sendline('char-write-cmd 0x000b 0100111000000001') ถ้า _name_ == "_main_": app.run(host='127.0.0.1', port='5000')

เราใช้ฟังก์ชัน sound_alarm() ที่เราเขียนไว้ก่อนหน้านี้เพื่อสร้างเสียงบี๊บ BLE สำหรับฟังก์ชันที่จะใช้สำหรับเจตนา เราเพิ่ม ask decorator ด้วยเจตนา "findkeys" ของเรา เมื่อเราสร้างทักษะของ Alexa บนแดชบอร์ดนักพัฒนาของ Amazon เราจะใช้ชื่อนี้ตามความตั้งใจของเรา เขียนสคริปต์นี้ลงในไฟล์ชื่อ app.py และเรียกใช้

หลาม app.py

สิ่งนี้จะให้บริการแอปพลิเคชันของคุณบน https://localhost:5000 เรียกใช้เซิร์ฟเวอร์ ngrok และคัดลอกลิงก์ https ที่สร้างขึ้น คุณจะต้องใช้เมื่อคุณกำหนดค่าทักษะของ Alexa สำหรับรายละเอียดเพิ่มเติม โปรดดูที่โพสต์นี้ เราตั้งค่าแอปพลิเคชั่นง่าย ๆ สำเร็จแล้ว ตอนนี้เราจะเขียนทักษะของ Alexa ไปที่แดชบอร์ดนักพัฒนา Amazon และเข้าสู่ระบบ คลิกที่ Alexa และเริ่มต้นใช้งาน Alexa Skill kit

ทำตามคำแนะนำที่กำหนดโดย gui

ภายใต้แท็บ Interation Model คุณจะต้องกรอกข้อมูลในกล่อง Intent Schema ดังต่อไปนี้:

{ "เจตนา": [{ "เจตนา": "findkeys" }, { "เจตนา": "AMAZON. HelpIntent" }, { "เจตนา": "AMAZON. StopIntent" } { "เจตนา": "AMAZON. CancelIntent" }] }

ในกล่อง Sample Utterances คุณต้องการเขียนคำสั่งตัวอย่างที่บุคคลอาจใช้เพื่อเรียกใช้ทักษะ เราเขียนสิ่งเหล่านี้:

findkeys ค้นหาคีย์ของฉันfindkeys ที่คีย์ของฉัน findkeys ฉันทำกุญแจหาย

  • ในแท็บการกำหนดค่า ตรวจสอบให้แน่ใจว่าได้เลือกจุดสิ้นสุดบริการเป็น HTTPS คัดลอกลิงก์ https ของคุณแล้ววางลงในช่องเริ่มต้นด้านล่าง การเชื่อมโยงบัญชีสามารถปล่อยให้หมายเลข
  • ในใบรับรอง SSL ให้เลือกตัวเลือกตรงกลาง "ปลายทางการพัฒนาของฉันคือโดเมนย่อยของโดเมนที่มีใบรับรองตัวแทนจากผู้ออกใบรับรอง"
  • แท็บทดสอบจะให้คุณทดสอบทักษะใหม่โดยพิมพ์หนึ่งในคำสั่งตัวอย่างของคุณ

กรอกข้อมูลในสองแท็บสุดท้ายให้เสร็จสิ้นจนกว่าเครื่องหมายถูกทั้งหมดจะเป็นสีเขียว จากนั้นเปิดทักษะของคุณด้วยคุณสมบัติการทดสอบเบต้า สิ่งนี้ช่วยให้คุณโฮสต์ทักษะของคุณบนอุปกรณ์สะท้อนเสียงก่อนเผยแพร่ ทำตามคำแนะนำบนลิงก์อีเมลเพื่อติดตั้งทักษะบนอุปกรณ์เสียงสะท้อนของคุณ

ขั้นตอนที่ 3: ทำให้ทักษะของเราฉลาดขึ้น

ทำให้ทักษะของเราฉลาดขึ้น
ทำให้ทักษะของเราฉลาดขึ้น
ทำให้ทักษะของเราฉลาดขึ้น
ทำให้ทักษะของเราฉลาดขึ้น
ทำให้ทักษะของเราฉลาดขึ้น
ทำให้ทักษะของเราฉลาดขึ้น

เราวางคอมพิวเตอร์ที่ไม่ได้ใช้งานไว้ทั่วทั้งบ้านเพื่อทำงานเพื่อค้นหาสัญญาณบลูทูธเพื่อรายงานความแรงของสัญญาณ RSSI

การอ่านค่าจากหลายเครื่อง เราสามารถใช้ความแรงของสัญญาณเป็นพร็อกซีสำหรับระยะทางได้ เราจำเป็นต้องหาวิธีใช้สิ่งนี้เพื่อคำนวณส่วนที่น่าจะเป็นไปได้มากที่สุดของบ้านเพื่อค้นหาบีคอน

เราหันไปใช้การเรียนรู้ของเครื่อง งาน crontab ทุกๆ 2 นาที สร้างชุดข้อมูลของ RSSI tuples การวางบีคอนในจุดต่างๆ เช่น 'ห้องนอน' 'ห้องน้ำ' 'ห้องครัว' 'พื้นที่นั่งเล่น' เราติดป้ายกำกับบันทึก RSSI เมื่อเราสร้างแผนที่บ้านแล้ว เราก็สามารถใช้โมเดลแบบต้นไม้ เช่น XGBClassifier ของ xgboost

การนำ xgboost มาใช้ของการเพิ่มเกรเดียนต์จะจัดการกับข้อมูลที่ขาดหายไปจากการอ่านหมดเวลา การฝึกอบรมในไม่กี่วินาที ใช้ python pickle เพื่อยืนยันโมเดลที่ผ่านการฝึกอบรมและโหลดลงในแอปพลิเคชัน alexa retrievr ของเรา เมื่อมีการเรียกทักษะ แอปพลิเคชันจะค้นหาการอ่าน Bluetooth RSSI และสร้างตำแหน่งที่คาดคะเน alexa สามารถตอบกลับโดยแนะนำให้ 'ลองดูในห้องน้ำ'

ขั้นตอนที่ 4: นำทุกอย่างมารวมกัน

การมีแบบจำลองเพื่อประมาณตำแหน่งสุดท้ายของคีย์ เราสามารถเพิ่มลงในแอปพลิเคชันเพื่อปรับปรุงคำสั่งที่ส่งคืนโดย Alexa เราได้แก้ไขสคริปต์ให้อ่าน:

นำเข้า osfrom flask นำเข้าขวดจาก flask_ask นำเข้าถาม คำสั่งนำเข้า pexpect นำเข้าดอง นำเข้าแพนด้าเป็น pd นำเข้าจำนวนเป็น 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() คำสั่งส่งคืน (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] = กำลังอ่าน res_lst.append(read_dict) ถ้า ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame(res_lst).replace({'N/ A': np.nan}).values 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 = 'ลองดูใน ' ถ้าเดา == 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')

เราได้สร้างฟังก์ชันใหม่ที่เรียกว่า Guess_locate() ซึ่งรับไฟล์ที่มีความแรงของสัญญาณ rssi ที่บันทึกไว้ล่าสุด จากนั้นจะเรียกใช้ตัวอย่างกับโมเดล xgboost ดองของเราและส่งคืนสตริงตำแหน่งที่น่าจะเป็นไปได้มากที่สุด ตำแหน่งนี้จะถูกส่งคืนเมื่อได้รับแจ้ง Alexa เนื่องจากการสร้างการเชื่อมต่อกับบีคอนอาจใช้เวลาสองสามวินาที เราจึงเรียกใช้กระบวนการแยกต่างหากที่เรียกฟังก์ชันนั้นใน sound_alarm.py

แนะนำ: