Creación de un detector de habitaciones para dispositivos IoT en Mac OS
En este tutorial, creará una aplicación de escritorio que predice en qué habitación se encuentra utilizando un algoritmo simple de aprendizaje automático: mínimos cuadrados. El código se aplica a cualquier plataforma, pero solo proporcionamos instrucciones de instalación de dependencias para Mac OSX.
Saber en qué habitación se encuentra habilita varias aplicaciones de IoT, desde encender la luz hasta cambiar los canales de televisión. Entonces, ¿cómo podemos detectar el momento en que usted y su teléfono están en la cocina, el dormitorio o la sala de estar? Con el hardware básico actual, existen innumerables posibilidades:
Una solución es equipar cada habitación con un dispositivo bluetooth . Una vez que su teléfono esté dentro del alcance de un dispositivo bluetooth, sabrá en qué habitación se encuentra, según el dispositivo bluetooth. Sin embargo, mantener una variedad de dispositivos Bluetooth supone una sobrecarga importante, desde reemplazar baterías hasta reemplazar dispositivos disfuncionales. Además, la proximidad al dispositivo Bluetooth no siempre es la respuesta: si estás en el salón, junto a la pared compartida con la cocina, los electrodomésticos de tu cocina no deberían empezar a producir comida.
Otra solución, aunque poco práctica, es utilizar el GPS . Sin embargo, tenga en cuenta que el GPS funciona mal en interiores, donde la multitud de paredes, otras señales y otros obstáculos causan estragos en la precisión del GPS.
Nuestro enfoque, en cambio, es aprovechar todas las redes WiFi dentro del alcance , incluso aquellas a las que su teléfono no está conectado. Así es como: considere la potencia del WiFi A en la cocina; digamos que es 5. Dado que hay una pared entre la cocina y el dormitorio, podemos esperar razonablemente que la potencia de WiFi A en el dormitorio sea diferente; digamos que es 2. Podemos aprovechar esta diferencia para predecir en qué habitación estamos. Es más: la red WiFi B de nuestro vecino solo se puede detectar desde la sala de estar, pero es efectivamente invisible desde la cocina. Eso hace que la predicción sea aún más fácil. En resumen, la lista de todos los WiFi dentro del alcance nos brinda abundante información.
Este método tiene las distintas ventajas de:
- no requerir más hardware;
- confiar en señales más estables como WiFi;
- Funciona bien donde otras técnicas como el GPS son débiles.
Cuantas más paredes, mejor, ya que cuanto más dispares sean las potencias de la red WiFi, más fácil será clasificar las habitaciones. Creará una aplicación de escritorio simple que recopila datos, aprende de ellos y predice en qué habitación se encuentra en un momento dado.
Lecturas adicionales sobre SmashingMag:
- El auge de la interfaz de usuario conversacional inteligente
- Aplicaciones del aprendizaje automático para diseñadores
- Cómo crear prototipos de experiencias de IoT: construcción del hardware
- Diseñando para el Internet de las cosas emocionales
Requisitos previos
Para este tutorial, necesitará una Mac OSX. Si bien el código puede aplicarse a cualquier plataforma, solo proporcionaremos instrucciones de instalación de dependencias para Mac.
- Mac OS X
- Homebrew, un administrador de paquetes para Mac OSX. Para instalar, copie y pegue el comando en brew.sh
- Instalación de NodeJS 10.8.0+ y npm
- Instalación de Python 3.6+ y pip. Consulte las primeras 3 secciones de "Cómo instalar virtualenv, instalar con pip y administrar paquetes"
Paso 0: configurar el entorno de trabajo
Su aplicación de escritorio se escribirá en NodeJS. Sin embargo, para aprovechar bibliotecas computacionales más eficientes como numpy
, el código de entrenamiento y predicción se escribirá en Python. Para comenzar, configuraremos sus entornos e instalaremos dependencias. Cree un nuevo directorio para albergar su proyecto.
mkdir ~/riot
Navegue hasta el directorio.
cd ~/riot
Utilice pip para instalar el administrador de entorno virtual predeterminado de Python.
sudo pip install virtualenv
Cree un entorno virtual Python3.6 denominado riot
.
virtualenv riot --python=python3.6
Activa el entorno virtual.
source riot/bin/activate
Su mensaje ahora está precedido por (riot)
. Esto indica que hemos ingresado exitosamente al entorno virtual. Instale los siguientes paquetes usando pip
:
numpy
: Una biblioteca de álgebra lineal eficientescipy
: Una biblioteca informática científica que implementa modelos populares de aprendizaje automático.
pip install numpy==1.14.3 scipy==1.1.0
Con la configuración del directorio de trabajo, comenzaremos con una aplicación de escritorio que registra todas las redes WiFi dentro del alcance. Estas grabaciones constituirán datos de entrenamiento para su modelo de aprendizaje automático. Una vez que tengamos los datos a mano, escribirá un clasificador de mínimos cuadrados, entrenado con las señales WiFi recopiladas anteriormente. Finalmente, usaremos el modelo de mínimos cuadrados para predecir la habitación en la que te encuentras, en función de las redes WiFi dentro del alcance.
Paso 1: Aplicación de escritorio inicial
En este paso, crearemos una nueva aplicación de escritorio usando Electron JS. Para comenzar, usaremos el administrador de paquetes de Node npm
y una utilidad de descarga wget
.
brew install npm wget
Para comenzar, crearemos un nuevo proyecto de Node.
npm init
Esto le solicitará el nombre del paquete y luego el número de versión. Presione ENTER
para aceptar el nombre predeterminado riot
y la versión predeterminada de 1.0.0
.
package name: (riot)version: (1.0.0)
Esto le solicita una descripción del proyecto. Agregue cualquier descripción que no esté vacía y que desee. A continuación, la descripción esroom detector
description: room detector
Esto le solicitará el punto de entrada o el archivo principal desde el que ejecutar el proyecto. Ingresar app.js
.
entry point: (index.js) app.js
Esto le solicita el test command
y git repository
. Presione ENTER
para omitir estos campos por ahora.
test command:git repository:
Esto le solicita keywords
y author
. Complete los valores que desee. A continuación, utilizamos iot
, wifi
para palabras clave y uso John Doe
para el autor.
keywords: iot,wifiauthor: John Doe
Esto le solicitará la licencia. Presione ENTER
para aceptar el valor predeterminado de ISC
.
license: (ISC)
En este punto, npm
le aparecerá un resumen de la información hasta el momento. Su resultado debería ser similar al siguiente.
{ "name": "riot", "version": "1.0.0", "description": "room detector", "main": "app.js", "scripts": { "test": "echo "Error: no test specified"" exit 1"" }
Deja un comentario