Tabla de contenido:

Alexa, ¿dónde están mis llaves ?: 4 pasos
Alexa, ¿dónde están mis llaves ?: 4 pasos

Video: Alexa, ¿dónde están mis llaves ?: 4 pasos

Video: Alexa, ¿dónde están mis llaves ?: 4 pasos
Video: 20 TRUCOS AVANZADOS si tienes ALEXA (con Echo dot en 2022) 2024, Mes de julio
Anonim
Image
Image
Hackear balizas Bluetooth
Hackear balizas Bluetooth

Alexa es especialmente adecuada para tareas de recuperación de información y monitoreo de activos mediante redes domésticas inalámbricas. Es natural considerar poner objetos de valor en la red para recuperarlos rápidamente. Hackeamos balizas bluetooth baratas de baja energía para el alcance de la red y la longevidad de la batería y creamos una aplicación inteligente para que Alexa sepa dónde dejamos las llaves.

Cómo hacerlo…

Paso 1: pirateo de balizas Bluetooth

Se puede comprar un conjunto de 3 balizas por menos de $ 15 y son compatibles con aplicaciones de Android / iOS, pero optaremos por la privacidad. Además, encontrar nuestras llaves no debería convertirse en encontrar nuestro teléfono.

Este tutorial de adafruit sobre luces inteligentes de ingeniería inversa nos ayudó a controlar las balizas. Comience activando el escaneo de balizas para la dirección del dispositivo ejecutando:

sudo hcitool lescan

Busque y copie la dirección etiquetada con el nombre 'iTag', luego ejecute:

sudo gatttool -I

Conéctese al dispositivo de forma interactiva ejecutando:

conectar AA: BB: CC: DD: EE: FF

Intente ejecutar "ayuda" para ver las opciones o "principal" para ver los servicios:

Ejecutando 'char-desc' seguido del identificador de servicio como arriba, encontramos UUID que buscamos haciendo referencia a las especificaciones de características de gatt y especificaciones de servicio. Para obtener más información sobre estos servicios, consulte esto: Al inspeccionar el tráfico con Wireshark, encontramos que 0100111000000001 activa la alarma y, lógicamente, 0000111000000001 la apaga. Ahora tenemos la función Python simple:

import 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')

A continuación, nos enfocamos en crear la habilidad de Alexa para activar la baliza cuando buscamos las claves.

Paso 2: Creación de una aplicación y habilidades de Alexa

Creación de una aplicación y habilidad de Alexa
Creación de una aplicación y habilidad de Alexa
Creación de una aplicación y habilidad de Alexa
Creación de una aplicación y habilidad de Alexa

Creamos una habilidad que estará vinculada a un servidor local. Luego configuramos nuestro servidor para realizar cualquier acción que nos gustaría, en este caso, proporcionar una aproximación de dónde podrían estar ubicadas las claves y hacer que la baliza Bluetooth emita un pitido. Flask proporciona una biblioteca de Python simple y fácil de usar para servir una aplicación. Usando flask-ask, podemos configurar el servidor para que se comunique con nuestra habilidad de Alexa que crearemos más adelante. Bueno, sirva la aplicación con Ngrok, que nos dará un enlace https que necesitaremos para nuestra habilidad de Alexa. Primero creamos la aplicación con la funcionalidad más simple: hacer que nuestra baliza BLE emita un pitido cuando se activa.

#! / 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 '#Su ID de baliza bluetooth aquí @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Tus llaves están por aquí en alguna parte". declaración de retorno (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection Success', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Usamos la función sound_alarm () que escribimos anteriormente para hacer que el BLE emita un pitido. Para la función que se utilizará para la intención, agregamos el decorador ask con nuestra intención "findkeys". Cuando hagamos la habilidad de Alexa en el panel de desarrolladores de Amazon, usaremos este nombre para nuestra intención. Escriba este script en un archivo llamado app.py y ejecútelo

python app.py

Esto servirá a su aplicación en https:// localhost: 5000. Ejecute un servidor ngrok y copie el enlace https generado. Lo necesitará cuando configure la habilidad de Alexa. Para obtener más detalles, consulte esta publicación. Hemos configurado con éxito una aplicación simple, ahora escribiremos la habilidad de Alexa. Navegue hasta el panel de desarrolladores de Amazon e inicie sesión. Haga clic en Alexa y comience con el kit de habilidades de Alexa

Siga las instrucciones dadas por la interfaz gráfica de usuario.

En la pestaña Modelo de interacción, querrá completar el cuadro Esquema de intención con lo siguiente:

En el cuadro Expresiones de muestra, desea escribir algunos comandos de muestra que una persona podría usar para invocar la habilidad. Escribimos estos:

encontrar llaves encontrar mis llaves buscar llaves donde mis llaves encontrar llaves Perdí mis llaves

  • En la pestaña Configuración, asegúrese de elegir el punto final del servicio para HTTPS. Copie su enlace https y péguelo en el cuadro Predeterminado debajo. La vinculación de cuentas se puede dejar en No.
  • En el Certificado SSL, elija la opción del medio, "Mi punto final de desarrollo es un subdominio de un dominio que tiene un certificado comodín de una autoridad certificadora".
  • La pestaña Prueba te permitirá probar la nueva habilidad escribiendo uno de tus comandos de muestra.

Termine de llenar las dos últimas pestañas hasta que todas las marcas de verificación sean verdes. Luego, inicie su habilidad con la función Beta Testing. Esto le permite alojar su habilidad en cualquier dispositivo de eco antes de publicarla. Siga las instrucciones del enlace de correo electrónico para instalar la habilidad en su dispositivo de eco.

Paso 3: hacer que nuestra habilidad sea más inteligente

Haciendo nuestra habilidad más inteligente
Haciendo nuestra habilidad más inteligente
Haciendo nuestra habilidad más inteligente
Haciendo nuestra habilidad más inteligente
Haciendo nuestra habilidad más inteligente
Haciendo nuestra habilidad más inteligente

Ponemos las computadoras inactivas repartidas por toda la casa para que funcionen consultando la baliza bluetooth para informar la intensidad de la señal RSSI.

Tomando lecturas de múltiples máquinas, podemos utilizar la fuerza de la señal como un proxy para la distancia. Necesitamos descubrir cómo usar esto para calcular la parte más probable de la casa para encontrar la baliza.

Pasamos al aprendizaje automático. Un trabajo crontab cada 2 minutos crea un conjunto de datos de tuplas RSSI. Colocando la baliza en diferentes puntos como: 'Dormitorio', 'Baño', 'Cocina', 'Zona de estar' etiquetamos los registros RSSI. Una vez que hemos mapeado la casa, podemos usar modelos basados en árboles como XGBClassifier de xgboost.

La implementación de xgboost de aumento de gradiente manejará los datos faltantes de las lecturas agotadas, entrenando en un par de segundos. Use python pickle para conservar el modelo entrenado y cargarlo en nuestra aplicación alexa retrievr. Cuando se llama a la habilidad, la aplicación busca la lectura RSSI de bluetooth y genera una ubicación predicha, alexa puede responder sugiriendo que "intente buscar en el baño".

Paso 4: Poniéndolo todo junto

Teniendo un modelo para aproximar la última ubicación de las claves, podemos agregarlo a la aplicación para mejorar la declaración devuelta por Alexa. Hemos modificado la secuencia de comandos para que lea:

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 ("/ ruta / a / repo / sound_alarm.py &") speech_text = guess_locate () return statement (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] = leyendo 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}). Valores mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = adivinas.most_common (1) [0] [0] reply_str = 'Intenta buscar en el' if guess == 1: reply_str + = 'dormitorio' elif guess == 2: reply_str + = 'bathroom' elif guess == 3: reply_str + = 'cocina' elif guess == 4: reply_str + = 'sala de estar' return reply_str if _name_ == "_main_": app.run (host = '127.0.0.1', puerto = '5000')

Creamos una nueva función llamada guess_locate () que toma un archivo con las últimas intensidades de señal rssi registradas. Luego, ejecutará las muestras contra nuestro modelo xgboost en escabeche y devolverá la cadena de ubicación más probable. Esta ubicación se devolverá cuando se le solicite a Alexa. Dado que establecer una conexión a una baliza puede tomar unos segundos, ejecutamos un proceso separado llamando a esa función en sound_alarm.py.

Recomendado: