Tabla de contenido:
- Paso 1: pirateo de balizas Bluetooth
- Paso 2: Creación de una aplicación y habilidades de Alexa
- Paso 3: hacer que nuestra habilidad sea más inteligente
- Paso 4: Poniéndolo todo junto
Video: Alexa, ¿dónde están mis llaves ?: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
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
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
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:
Vídeo Tutoriales De Tecnologías Creativas 03: Hoy Veremos Un Proyecto Donde Integramos Botones: 4 Pasos
Vídeo Tutoriales De Tecnologías Creativas 03: Hoy Veremos Un Proyecto Donde Integramos Botones: En este tutorial vamos a aprender como leer y controlar el estado de un botón sobre una placa Arduino Uno. Este ejercicio lo realizaremos mediante simulación y para ello utilizaremos Tinkercad Circuits (utilizando una cuenta gratuita)
Uso de Python para aprender diseños de teclado que no están en inglés: 8 pasos
Uso de Python para aprender diseños de teclado que no están en inglés: ¡Hola, soy Julien! Soy un estudiante de ciencias de la computación y hoy voy a mostrarte cómo puedes usar Python para enseñarte a ti mismo la distribución del teclado de un idioma que no es el inglés. Gran parte del aprendizaje de idiomas ocurre en línea hoy en día, y una cosa que la gente puede entender
Crear mis propios gráficos para mis datos de IOT en una Raspberry PI: 3 pasos
Crear mis propios gráficos para mis datos de IOT en una Raspberry PI: siga leyendo si desea poder crear sus propios gráficos de IOT utilizando 7 líneas de código. Quería crear gráficos para mostrar datos en un formato gráfico de mis sensores de IOT en una página web. Anteriormente, para esto, había utilizado servicios de terceros (algunos pa
Keyminder! ¡el dispositivo que te hace no perder tus llaves !: 3 pasos (con imágenes)
Keyminder! ¡El dispositivo que hace que no pierda sus llaves !: ¡Este dispositivo le ayuda a no perder sus llaves! Si eres como yo, cuando llegas a casa del trabajo, inmediatamente pierdes las llaves después de abrir la puerta y esperas hasta el día siguiente justo antes de tener que salir a buscarlas. Sí, puede que tengas
Todos los demás están haciendo un soporte para computadora portátil, entonces, ¿por qué yo no puedo ?: 8 pasos (con imágenes)
Todos los demás están fabricando un soporte para computadora portátil, entonces, ¿por qué no puedo ?: O cómo transformé una bandeja en un soporte para computadora portátil. No tenemos televisión, pero nos gusta acostarnos en una manta y ver DVD en la computadora portátil. Este soporte para computadora portátil asegurará una buena estabilidad y flujo de aire