Taula de continguts:

Alexa, on són les meves claus ?: 4 passos
Alexa, on són les meves claus ?: 4 passos

Vídeo: Alexa, on són les meves claus ?: 4 passos

Vídeo: Alexa, on són les meves claus ?: 4 passos
Vídeo: Broken to Beautiful - A MAKEOVERGUY Power of Pretty Transformation 2024, Juliol
Anonim
Image
Image
Hacking de balises Bluetooth
Hacking de balises Bluetooth

Alexa és especialment adequat per a tasques de recuperació d’informació i supervisió d’actius mitjançant xarxes domèstiques sense fils. És natural plantejar-se posar objectes de valor a la graella per a una recuperació ràpida. Pirategem balises Bluetooth de baix consum econòmiques per al rang de xarxa i la longevitat de la bateria i construïm una aplicació intel·ligent perquè Alexa sàpiga on hem deixat les tecles.

Com fer-ho…

Pas 1: piratejar les balises Bluetooth

Es pot comprar un conjunt de 3 balises per menys de 15 € i s’admeten amb les aplicacions Android / iOS, però optem per la privadesa. A més, trobar les nostres claus no s’hauria de convertir en el nostre telèfon.

Aquest tutorial d’adafruit sobre llums intel·ligents d’enginyeria inversa ens va ajudar a controlar les balises. Comenceu activant l'escaneig de balises de l'adreça del dispositiu executant:

sudo hcitool lescan

Cerqueu i copieu l'adreça etiquetada amb el nom "iTag" i, a continuació, executeu:

sudo gatttool -I

Connecteu-vos al dispositiu de manera interactiva executant:

connectar AA: BB: CC: DD: EE: FF

Proveu d'executar "ajuda" per veure les opcions o "principal" per veure els serveis:

Executant 'char-desc' seguit del controlador de servei tal com es mostra anteriorment, trobem UUID que busquem fent referència a les especificacions de característiques gatt i a les especificacions de servei. Per obtenir més informació sobre aquests serveis, consulteu això. Inspeccionant el trànsit amb Wireshark, trobem que 0100111000000001 activa l'alarma i, lògicament, 0000111000000001 la desactiva. Ara tenim la funció python simple:

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

A continuació, ens centrem a crear l'habilitat Alexa per activar la balisa quan busquem les claus.

Pas 2: crear una habilitat i una aplicació Alexa

Creant una habilitat i una aplicació Alexa
Creant una habilitat i una aplicació Alexa
Creant una habilitat i una aplicació Alexa
Creant una habilitat i una aplicació Alexa

Creem una habilitat que estarà enllaçada amb un servidor local. A continuació, configurem el nostre servidor perquè faci qualsevol acció que vulguem, en aquest cas, proporcionem una aproximació de la ubicació de les claus i fem sonar la balisa Bluetooth. Flask proporciona una biblioteca de python senzilla i fàcil d'utilitzar per servir una aplicació. Mitjançant flask-ask, podem configurar el servidor per comunicar-se amb la nostra habilitat Alexa que crearem més endavant. Ben serviu l'aplicació amb Ngrok, que ens proporcionarà un enllaç https que necessitarem per a la nostra habilitat d'Alexa. Primer hem creat l’aplicació amb la funcionalitat més senzilla: fer sonar la nostra balisa BLE quan s’activa.

#! / usr / bin / env pythonfrask 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 '#Your Bluetooth Balcon id here @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Les vostres claus són aquí en algun lloc." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection Successed', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') si _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Hem utilitzat la funció sound_alarm () que hem escrit anteriorment per fer sonar el BLE. Per a la funció que s'utilitzarà per a la intenció, afegim el decorador Ask amb la nostra intenció de "findkeys". Quan fem l’habilitat d’Alexa al tauler de desenvolupadors d’Amazon, utilitzarem aquest nom per a la nostra intenció. Escriviu aquest script en un fitxer anomenat app.py i executeu-lo

python app.py

Això servirà la vostra aplicació a https:// localhost: 5000. Executeu un servidor ngrok i copieu l’enllaç https generat. El necessitareu quan configureu l'habilitat d'Alexa. Per obtenir més informació, consulteu aquesta publicació. Hem configurat amb èxit una aplicació senzilla, ara escriurem l’habilitat d’Alexa. Aneu al tauler de desenvolupadors d'Amazon i inicieu la sessió. Feu clic a Alexa i comenceu a utilitzar el kit Alexa Skill

Seguiu les instruccions donades per la guia.

A la pestanya Model d’interacció voldreu omplir el quadre Esquema d’intencions amb el següent:

Al quadre Enunciats de mostra, voleu escriure algunes ordres de mostra que una persona pot utilitzar per invocar l'habilitat. Vam escriure aquestes:

findkeys find my keysfindkeys on my keys findkeys he perdut les claus

  • A la pestanya Configuració, assegureu-vos de triar el punt final del servei a HTTPS. Copieu l'enllaç https i enganxeu-lo al quadre predeterminat que hi ha a sota. L’enllaç de comptes es pot deixar al núm.
  • Al certificat SSL, seleccioneu l'opció central, "El meu punt final de desenvolupament és un subdomini d'un domini que té un certificat comodí d'una autoritat de certificació".
  • La pestanya Prova us permetrà provar la nova habilitat escrivint una de les vostres ordres de mostra.

Acabeu d'emplenar les dues darreres pestanyes fins que totes les marques de selecció siguin verdes. A continuació, inicieu la vostra habilitat amb la funció Prova beta. Això us permet allotjar la vostra habilitat en qualsevol dispositiu de ressò abans de publicar-lo. Seguiu les instruccions de l’enllaç de correu electrònic per instal·lar l’habilitat al vostre dispositiu eco.

Pas 3: fer més intel·ligents les nostres habilitats

Fent la nostra habilitat més intel·ligent
Fent la nostra habilitat més intel·ligent
Fent la nostra habilitat més intel·ligent
Fent la nostra habilitat més intel·ligent
Fent la nostra habilitat més intel·ligent
Fent la nostra habilitat més intel·ligent

Posem els ordinadors inactius repartits per tota la casa per treballar en la consulta de la balisa bluetooth per informar de la intensitat del senyal RSSI.

Prenent lectures de diverses màquines, podem utilitzar la intensitat del senyal com a proxy de distància. Hem d’esbrinar com utilitzar-lo per calcular la part més probable de la casa per trobar el far.

Passem a l’aprenentatge automàtic. Un treball crontab cada 2 minuts crea un conjunt de dades de tuples RSSI. Col·locant la balisa en diferents llocs com: "Dormitori", "Bany", "Cuina", "Zona d'estar", etiquetem els registres RSSI. Un cop hàgim mapat la casa, podem utilitzar models basats en arbres com XGBClassifier de xgboost.

La implementació xgboost de l’augment de gradient gestionarà les dades que falten de les lectures esgotades, entrenant-se en un parell de segons. Utilitzeu l'escabetx python per persistir el model entrenat i carregar-lo a la nostra aplicació alexa retrievr. Quan es crida l’habilitat, l’aplicació busca la lectura de l’SSI Bluetooth i genera una ubicació prevista, Alexa pot respondre suggerint que “intenteu mirar al bany”.

Pas 4: ajuntar-ho tot

Tenint un model per aproximar-se a la darrera ubicació de les claus, podem afegir-lo a l’aplicació per millorar la declaració retornada per Alexa. Hem modificat l'script per llegir-lo:

import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import pickle 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 () declaració de retorn (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = mentre len (res_lst)! = 20: ln = next (line_gen) si 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}). Valors 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 = 'Proveu de buscar el' if guess == 1: reply_str + = 'bedroom' elif guess == 2: reply_str + = 'bany' elif guess == 3: reply_str + = 'cuina' elif guess == 4: reply_str + = 'sala d'estar' retorna reply_str if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Vam crear una nova funció anomenada guess_locate () que pren un fitxer amb les últimes intensitats de senyal rssi enregistrades. A continuació, executarà les mostres contra el nostre model xgboost en escabetx i retornarà la cadena d'ubicació més probable. Aquesta ubicació es retornarà quan se li demani a Alexa. Com que establir una connexió a una balisa pot trigar uns quants segons, executem un procés separat anomenant aquesta funció a sound_alarm.py.

Recomanat: