Uno de mis sueños tecnológicos recientes es poder usar los productos del Xiaomi Security Kit con Apple Home Kit (vía homebridge) y poderlos controlar con Siri. Ahora este sueño se hace realidad y por eso quiero plasmarlo en forma de (extenso) tutorial.
Voy a aprovechar para convertir mi Raspberry Pi 3 en un puente entre Xiaomi y Apple para poder aprovechar lo mejor de dos mundos. Aprovecharé el proyecto Homebridge para tal fin, el cual permite añadir a Apple Home Kit dispositivos que no son compatibles.
Ingredientes para la receta
Para poder seguir este tutorial necesitamos los siguientes requisitos:
- Raspberry Pi 3 completa con tarjeta microSD de clase 10, con un mínimo de 16GB de almacenamiento y con el sistema operativo Raspbian instalado. Compra aquí
- Xiaomi Security Kit 5 en 1 que incluye los sensores y centralita necesarios. [Compra aquí]
- Bombilla Xiaomi Philips Bulb con las que podremos jugar a regular la intensidad, encenderlas, apagarlas, etc. Compra aquí
- Lámpara Xiaomi Philips Smart Lamp 2, la que para mi es la mejor lámpara de escritorio que hay. Compra aquí
- Aplicación Mi Home para iOS y los dispositivos de Xiaomi Security Kit configurados y funcionando correctamente. Descarga aquí.
- Software iBackup Viewer (versión gratuita) que permitirá explorar una copia de seguridad de nuestro iPhone hecha con iTunes. Descarga aquí
- Web Symmetric Ciphers que permitirá desencriptar los TOKENS de los elementos del Xiaomi Security Kit de forma fácil y rápida. Accede aquí
- Software para la visualización de ficheros de SQLite. Podéis descargar DB Browser for SQLite si usáis el sistema operativo macOS o DSQLite Database Browser si por el contrario soy usuarios de Windows.
Paso 1. Configuración de la Raspberry pi e instalación de Homebridge
Como os adelanté al principio del tutorial, usaré mi querida Raspberry Pi 3 para convertirla en un puente entre Apple y Xiaomi que permitirá controlar el Security Kit de forma muy cómoda. A continuación os muestro paso a paso que hemos de hacer:
- Nos aseguraremos que tenemos instalado y operativo el servicio SSH. Si no sabéis cómo hacerlo, podéis leer este tutorial de Domótica Doméstica donde os lo cuentan con detalle. Una vez hecho esto, accederemos a nuestra Rasberry Pi desde un terminal de macOS como muestro a continuación. Si usáis Windows, os recomiendo el software cliente Putty que permite acceder por SSH de la misma manera.$ ssh pi@192.168.1.2
$ password: raspberry - Una vez que estamos dentro tenemos que instalar node.js para poder instalar después los paquetes necesarios en nuestra Raspberry Pi. Tendremos que ejecutar los siguientes comandos:$ sudo apt-get update
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash
$ sudo apt-get install -y nodejs
$ sudo apt-get install -y build-essential Nota: Si curl no está instalado tenemos que ejecutar el siguiente comando.
$ sudo apt-get install curl - Ahora hemos de instalar la librería avahi ejecutando el siguiente comando:$ sudo apt-get install libavahi-compat-libdnssd-dev
- Ahora es el turno de instalar el gestor de módulos npm. Antes, os recomiendo que leáis mi artículo NPM, un gestor de módulos para Node.js donde os cuento más sobre esta herramienta.$ sudo apt-get install npm
- Si la tenéis instalada os va a dar el error de la pantalla siguiente. Entonces podéis omitir la instalación de npm porque ya estará instalado (ejecutar $ npm para comprobarlo). No es necesario instalar npm porque se instaló junto a nodejs
- Turno de instalar el módulo Homebridge, que nos permitirá establecer un puente con Home Kit de Apple. Para hacerlo, ejecutaremos este comando:$ sudo npm install -g —unsafe-perm homebridge
Paso 2. Instalación y configuración del Security Kit en Homebridge
Una vez que tenemos instalado el módulo Homebridge vamos a proceder a la integración del Xiaomi Security Kit con dicho módulo. Para ello realizaremos las siguientes tareas.
- Instalaremos el módulo homebridge-aqara que nos permitirá el control del Xiaomi Gateway junto con los sensores de presencia, temperatura/humedad, puerta y enchufe inteligente. Para ello ejecutaremos el siguiente comando:$ sudo npm install -g homebridge-aqara
- En la aplicación Mi Home abrimos el plugin del Gateway como vemos en la siguiente imagen. Hacemos click en el circulo con 3 puntos de la parte superior derecha de la pantalla.
- En la ventana que se nos abre, pulsaremos sobre la opción de menú titulada About. Es la primera que nos encontramos y la podéis ver en la siguiente imagen.
- Se abrirá una nueva ventana con una gran superficie blanca en la parte inferior tal y como apreciáis a continuación. Tenéis que hacer click con el dedo en la superficie blanca 5 veces.
- Al hacer lo que os comento en el paso anterior, lo que conseguimos es activar una serie de opciones de menú ocultas que nos van a ayudar a configurar el Gateway para usarlo con HomeKit
- Siii, están en chino pero que no cunda en pánico que para eso estoy yo aquí, para ayudares. La primera linea que aparece es la versión del Software del kit (en mi caso 3.6.8). Nosotros haremos click en la linea siguiente. Dice algo como «局域网通信协议» que traducido indica «Información del Gateway». Activamos el primer botón que nos encontramos y copiamos en un documento de texto el número hexadecimal que vemos en pantalla (en mi caso 1C2F1B3F12A54A6C). Después pulsamos el botón Confirm y volvemos al menú anterior.
- Hacemos click en la segunda linea del menú (que también está en chino) y veremos una pantalla como la que se muestra a continuación. Hemos de localizar la dirección MAC del Gateway (cadena de caracteres que empieza por mac=…). Copiamos el valor en hexadecimal quitando los dos puntos y poniendo todo en minúsculas (en mi caso 286c0785b887)
- Crearemos un fichero para Homebridge llamado config.json que incluirá toda la configuración necesaria para que Homekit sepa de la existencia de todos los elementos domóticos y de seguridad de Xiaomi.$ cd ~
$ mkdir .homebridge
$ nano .homebridge/config.json - Ahora hemos de incluir la información de configuración que hemos obtenido con anterioridad editando el fichero config.json respetando el formato y estructura (llaves, corchetes, etc.) que os indico a continuación. No os preocupéis puesto que no es nada del otro mundo.{
«bridge»: {
«name»: «RaspBridge»,
«username»: «BB:20:50:A0:00:0E»,
«port»: 51826,
«pin»: «031-45-154»,
«manufacturer»: «@nfarina»,
«model»: «Homebridge»,
«serialNumber»: «0.4.20»
},
«platforms»: [
{
«platform»: «AqaraPlatform»,
«sid»: [«286c0785b887»],
«password»: [«1C2F1B3F12A54A6C»]
}]
}
Importante: A continuación os indico alguno de los valores que tenéis que tener en cuenta en el fichero config.json
-
- name: Podeis indicar el valor que queráis.
- username: Al igual que en name, podéis poner el valor hexadecimal deseado respetando el formato que os he puesto en el ejemplo.
- port: Usad el que viene en el ejemplo.
- pin: Recomiendo que uséis un valor distinto de 000-00-000. A mi ese me dio problemas y me volví loco para ver que ese era el error por el que no me conectaba. Ese número es el usado cuando añadamos el Xiaomi Security Kit a Homekit
- manufacturer, model y serialNumber: Os recomiendo que pongáis los valores que se ven en el ejemplo.
- Una vez que tenemos configurado el fichero tendremos que iniciar la herramienta Homebridge en nuestra Raspberry Pi. Mi recomendación es que la instalemos como un servicio de forma que se arranque automáticamente cada vez que reiniciemos. Nos apoyamos en la utilidad cron de linux.
- Para instalar cron hemos de ejecutar la siguiente linea en el terminal de la Raspberry Pi.$ sudo apt-get install gnome-schedule
- Una vez instalada necesitamos cambiar la configuración de la misma. Teclearemos entonces el comando siguientes:$ crontab -e
- Elegimos el editor de texto que mas nos guste (yo uso nano por sencillez) y añadimos la siguiente línea al final del fichero.@reboot homebridge
- Después, para probar que todo lo que hemos hecho hasta ahora, tenemos que ejecutar la utilidad homebridge.$ homebridge
- Al ejecutarla deberíamos ver algo parecido a lo que os muestro en la siguiente imagen. Si todo está bien, lo ultimo es el código para enlazar con Homekit y el mensaje «Homebridge is running on por 51826»
- Ahora nos vamos a la aplicación Casa de nuestro iPhone. Si no la tenéis instalada podéis hacerlo desde la App Store de forma gratuita. Crearemos una nueva casa y añadiremos el dispositivo RaspBridge que ha de ser detectado automáticamente. Cuando nos pida el código del mismo introducimos el de nuestro fichero config.json (en mi caso 031-45-154) y al final quedará configurado como podéis ver en la siguiente imagen:
Yo lo que he hecho es cambiar el nombre de mis dispositivos (Sensor de temperatura y humedad, sensor de presencia, sensor de puertas y enchufe inteligente) y también la ubicación de los mismos en función de la habitación en la que se encuentran ubicados. Si tenéis alguna duda hasta aquí podéis parar, tomar un respiro y comentármela por el formulario de contacto de la web.
Veamos ahora como integrar la bombilla Phillips Bulb (de tal solo 8€) en Homebridge para que podamos usarla con Homekit.
Paso 3. Integración de la bombilla Phillips Bulb en Homebridge
La dificultad de hacer este paso de la receta en realizar estriba en obtener el token desencriptdo de la bombilla. Esto es así, debido a que hay que acceder a una copia de seguridad de la app, desencriptarla, etc. Pero tranquilos, vayamos por partes.
- Lo primer es instalar el plugin homebridge-mi-philips-light que va a permitir a homebridge conectar con la bombilla Xiaomi Phillips Bulb y también a la lampara de escritorio Xiaomi Phillips Smart Lamp 2.$ sudo npm install -g homebridge-mi-philips-light
- Acto seguido, tendremos que crear una copia de seguridad de nuestro iPhone en el Mac (o Windows) a través de la herramienta iTunes conectando por cable. Doy por hecho que es una tarea que sabéis hacer por lo que no voy a explicar como se hace.
- Después hemos de usar una herramienta que nos permita navegar por los ficheros de copia de seguridad que tenemos. Yo he usado iBackup Viewer en su versión gratuita. Nos sobra y nos basta con esa versión. Al iniciarla detecta nuestra copia de seguridad como podéis ver en la siguiente imagen.
Al acceder a la copia (haciendo click en la imagen del iPhone) tendremos acceso también al fichero que necesitamos. Teneis que buscar la carpeta AppDomain-com.xiaomi.home > Documents y dentro de ella copiar el fichero XXXXXX_mihome.sqlite a vuestro ordenador.
- El fichero que hemos copiado es en formato base de datos SQLite por lo que necesitamos una aplicación para poderlo abrir. En mi caso he usado la aplicación DB Browser for SQLite. Como veis en la siguiente imagen abrimos el fichero XXXXXX_mihome.sqlite y en la pestaña Navegar Datos buscamos la tabla ZDEVICE. En la columna ZNAME tenemos todos nuestros dispositivos de Xiaomi añadidos a la app Mi Home. Localizamos la Philips Bulb y copiamos el valor (en hexadecimal) de la columna ZTOKEN.
- ¿Hemos acabado? Lamentablemente no ya que ese token está cifrado y no lo podemos usar directamente en el fichero config.json. Pero tranquilos, se puede desencriptar con entrando en esta url. En la siguiente imagen tenéis todas las opciones necesarias para desencriptar el token que hemos obtenido. Es importante que las pongáis como yo con la única diferencia del campo Input text en el que tendréis que colocar vuestro token cifrado.
- Una vez rellenos los datos en la pantalla anterior, pulsáis en el botón Decrypt y copiáis (sin espacios en blanco) el token descifrado como veis en la imagen anterior. En mi caso, el token para la Xiaomi Philips Bulb sería f8f8c3e69d13a85d6981a5eb0ee665e2. Ese es el que necesitamos para añadir al fichero config.json.
- Antes de añadir la bombilla al fichero necesitamos conocer la dirección IP de la misma dentro de nuestra red. Existen numerosas aplicaciones que nos pueden dar esa información pero a mi la que mas me gusta es Fing que es gratuita y que la podéis descargar desde este link para iOS y de este otro link para Android.
- Pararemos la ejecución de Homebridge mediante la ejecución del siguiente comando en la Raspberry.$ sudo killall homebridge
- Una vez que conocemos el token y la dirección IP de nuestra bombilla Phillips Bulb nuevamente editamos el fichero config.json (tal y como hicimos al principio del tutorial) y añadimos las siguientes lineas dentro de «platforms». No os preocupéis porque al final del tutorial os añadiré un link hacia mi fichero de config.json para que no os equivoquéis con el orden del mismo.{
«platform»: «MiPhilipsLightPlatform»,
«deviceCfgs»: [{
«type»: «SmartBulb»,
«ip»: «192.168.1.147»,
«token»: «f8f8c3e69d13a85d6981a5eb0ee665e2»,
«lightName»: «Bombilla del salon»,
«lightDisable»: false
} - Después, para probar que la bombilla ha sido configurada correctamente, tenemos que ejecutar nuevamente la utilidad homebridge.$ homebridge
Si vamos ahora a la aplicación Casa de Apple ya deberíamos verla y lo que es mejor, controlarla de forma automática con Siri. Podremos cambiar el nombre y la ubicación de la misma.
Paso 4. Integración de la lampara Xiaomi Phillips Smart Lamp 2 en Homebridge
Seguramente estéis pensando que la lámpara de Xiaomi se añade de forma sencilla siguiendo las mismas indicaciones que para la bombilla pero lamentablemente no es así. ¿Por qué? porque la web de desencripta el token no lo hace correctamente y el valor que nos da es erróneo.
Este es el paso que más me ha costado del tutorial puesto que tenemos que extraer el fichero de copia de seguridad de Mi Home desde Android y no desde iOS. Esto es así ya que Android (de momento) no encripta los tokens de los dispositivos de Xiaomi y se pueden copiar sin problema. Veamos entonces los pasos que he tenido que dar para solucionar este problema.
- PRE-REQUISTOS: Necesitamos un móvil con Android con el bootloader desbloqueado y con la utilidad superuser instalada. Como los pasos son muy extensos no os los pongo aquí por no extender demasiado el tutorial. Yo he usado un Xiaomi Mi5X con Android ONE. También necesitamos instalar los drivers ADB y la utilidad de consola de SQLITE 3.
- Conectamos nuestro Android al ordenador, abrimos una consola y ejecutamos el siguiente comando. Si todo está bien, podremos ver nuestro teléfono conectado.$ adb devices
- Teclearemos el siguiente comando que nos permitirá navegar directamente en las «entrañas» de móvil Android.$ adb shell
- Cambiamos el usuario con el que nos conectamos al terminal Android por el usuario administrador mediante la ejecución del comando siguiente:$ su
- Copiaremos el fichero de base de datos miio2.db en una carpeta de nuestro móvil Android. Yo por ejemplo he usado una situada en la tarjeta SD. Para ello ejecutamos los siguientes comandos:
- cd /data/data/
- com.xiaomi.smarthome/databases/
- cp miio2.db ??
- exit
- Una vez que tenemos el fichero miio2.db en la carpeta que queremos lo copiamos a nuestro ordenador. Este fichero contiene la base de datos de SQLite con el registro de todos los dispositivos que tenemos en la aplicación Xiaomi Home. Buscaremos los datos mediante la ejecución de los siguientes comandos:sqlite3 miio2.db
.tables
android_metadata devicerecord
select * from devicerecord;
.quit - En este punto tendremos en consola un fichero de texto con un montón de lineas. Os recomiendo copiar todo y pegarlo en un fichero de texto a parte. Localizaremos la lampara y veremos algo como lo que os muestro a continuación (todo en una linea):
|philips.light.sread1|Philips EyeCare|||||16|0|{«power»:»off»}|0|-58|1
|JMRAMIREZ_2G|7069734fd6f1684f
cfffa3e694b4ff49|1640545165|
70:4D:7B:94:2B:F0|1|0|off |
- Copiamos la cadena del token que en mi caso es 7069734fd6f1684fcfffa3e694b4ff49 para posteriormente añadir la lampara al fichero config.json.
- Modificamos el fichero config.json para añadir la lámpara de igual forma que hicimos para la bombilla. Hemos de añadir al fichero lo siguiente dentro de «platform»: «MiPhilipsLightPlatform»:{
«type»: «TableLamp2»,
«ip»: «192.168.1.31»,
«token»: «7069734fd6f1684fcfffa3e694b4ff49»,
«mainLightName»: «living room table lamp»,
«secondLightName»: «living room table lamp amb»,
«secondLightDisable»: false,
«eyecareSwitchName»: «living room table lamp eyecare model»,
«eyecareSwitchDisable»: false
} - Reseteamos nuevamente homebridge mediante la ejecución de los siguientes comandos en el terminal de la Raspberry Pi.$ sudo killall homebridge
$ homebridge
Si nuevamente abrimos la aplicación Casa en iOS ya deberíamos ver la Phillips Smart Lamp 2 y lo que es mejor, controlarla de forma automática con Siri. Como siempre podremos cambiar el nombre y la ubicación de la misma.
Para que os resulte más fácil este enlace podeis descargar mi fichero config.json completo (quitad la extensión .txt antes de usarlo) para modificarlo con vuestros valores y no meter la pata a la hora de crear la estructura. Habéis de tener en cuenta que cualquier coma, llave, corchete mal colocado os dará un error a la hora de ejecutar homebridge.
Conclusiones y referencias
Aunque sea un proceso complicado a la hora de integración de los elementos del Kit de Seguridad de Xiaomi y la bombilla y lámpara Phillips creo que al final merece la pena el esfuerzo realizado vs la comodidad y resultado obtenidos.
Lampara Escritorio Phillips Smart Lamp 2
Sigo trabajando e investigando sobre nuevas integraciones de Xiaomi en HomeKit como la Vacuum, dispositivos Aqara, etc. las cuales os iré contando a medida que vaya consiguiendo avances.
A continuación os dejo una lista con enlaces de las reviews a los productos y también a las webs en las que me he basado para construir todo este extenso tutorial.
- Review del Kit Domótico de Xiaomi
- Review de la lámpara de escritorio Phillips Smart Lamp 2
- Integración de Xiaomi en HomeKit (inlgés)
- Paquete NPM de las bombillas Phillips
- Instalación en una segunda vía más completa del Kit domótico de Xiaomi (estoy investigado ahora)
- Foro donde hablan de cómo obtener y desencriptar el token de los dispositivos de Xiaomi
- Foro donde cuentan cómo acceder a la base de datos SQLite desde Android vía ADB
- Integración de la cámara de seguridad de Xiaomi (estoy investigando actualmente)
- Paquete NPM de la Xiaomi Vacuum
- Integración del Gateway para reproducir FM (actualmente no funciona muy bien)
Espero que os haya gustado y como no, en ese caso que lo compartáis con vuestros familiares y amigos para que ellos también puedan disfrutar de una vida 1.0 más cómoda.